wrap build_complete coroutine in callback

Coroutines cannot be called as callbacks for Futures like the one
returned by our RPC call. We work around this by creating a normal
function that schedules the coroutine.
This commit is contained in:
Jimmy Zelinskie 2016-11-22 16:43:32 -05:00
parent d88b662365
commit c2b52c6efc

View file

@ -157,7 +157,14 @@ class BuildComponent(BaseComponent):
logger.debug('Invoking build: %s', self.builder_realm)
logger.debug('With Arguments: %s', build_arguments)
self.call("io.quay.builder.build", **build_arguments).add_done_callback(self._build_complete)
def build_complete_callback(result):
""" This function is used to execute a coroutine as the callback. """
@trollius.coroutine
def closure():
yield From(self._build_complete(result))
trollius.ensure_future(closure())
self.call("io.quay.builder.build", **build_arguments).add_done_callback(build_complete_callback)
# Set the heartbeat for the future. If the builder never receives the build call,
# then this will cause a timeout after 30 seconds. We know the builder has registered