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:
parent
d88b662365
commit
c2b52c6efc
1 changed files with 8 additions and 1 deletions
|
@ -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
|
||||
|
|
Reference in a new issue