Support sync/async execution
Invoke a function in sync way means the command will wait until the execution finish. On the contrary, 'sync=false' means user will get a response before the function is actually invoked. User could get execution status using execution ID in the response. Change-Id: I605ea8414f49d44899e0bc8c36b89e48e335d284
This commit is contained in:
parent
14789ab0c8
commit
d80f3acf35
|
@ -45,6 +45,7 @@ class ExecutionsController(rest.RestController):
|
|||
LOG.info("Creating execution. [execution=%s]", params)
|
||||
|
||||
function_id = params['function_id']
|
||||
is_sync = params.get('sync', True)
|
||||
|
||||
# Check if the service url is existing.
|
||||
try:
|
||||
|
@ -71,12 +72,14 @@ class ExecutionsController(rest.RestController):
|
|||
db_model = db_api.create_execution(params)
|
||||
|
||||
self.engine_client.create_execution(
|
||||
db_model.id, function_id, runtime_id, input=params.get('input')
|
||||
db_model.id, function_id, runtime_id, input=params.get('input'),
|
||||
is_sync=is_sync
|
||||
)
|
||||
|
||||
updated_db = db_api.get_execution(db_model.id)
|
||||
if is_sync:
|
||||
db_model = db_api.get_execution(db_model.id)
|
||||
|
||||
return resources.Execution.from_dict(updated_db.to_dict())
|
||||
return resources.Execution.from_dict(db_model.to_dict())
|
||||
|
||||
@rest_utils.wrap_wsme_controller_exception
|
||||
@wsme_pecan.wsexpose(resources.Executions)
|
||||
|
|
|
@ -147,8 +147,20 @@ class EngineClient(object):
|
|||
|
||||
@wrap_messaging_exception
|
||||
def create_execution(self, execution_id, function_id, runtime_id,
|
||||
input=None):
|
||||
return self._client.prepare(topic=self.topic, server=None).call(
|
||||
input=None, is_sync=True):
|
||||
method_client = self._client.prepare(topic=self.topic, server=None)
|
||||
|
||||
if is_sync:
|
||||
return method_client.call(
|
||||
ctx.get_ctx(),
|
||||
'create_execution',
|
||||
execution_id=execution_id,
|
||||
function_id=function_id,
|
||||
runtime_id=runtime_id,
|
||||
input=input
|
||||
)
|
||||
else:
|
||||
method_client.cast(
|
||||
ctx.get_ctx(),
|
||||
'create_execution',
|
||||
execution_id=execution_id,
|
||||
|
|
Loading…
Reference in New Issue