def _on_task_state_change(self, task_ex, wf_ex, task_state=states.SUCCESS): task_spec = spec_parser.get_task_spec(task_ex.spec) wf_spec = spec_parser.get_workflow_spec(wf_ex.spec) # We must be sure that if task is completed, # it was also completed in previous transaction. if (task_handler.is_task_completed(task_ex, task_spec) and states.is_completed(task_state)): task_handler.after_task_complete(task_ex, task_spec, wf_spec) # Ignore DELAYED state. if task_ex.state == states.RUNNING_DELAYED: return wf_ctrl = wf_base.WorkflowController.get_controller(wf_ex, wf_spec) # Calculate commands to process next. cmds = wf_ctrl.continue_workflow() task_ex.processed = True self._dispatch_workflow_commands(wf_ex, cmds) self._check_workflow_completion(wf_ex, wf_ctrl) elif task_handler.need_to_continue(task_ex, task_spec): # Re-run existing task. cmds = [commands.RunExistingTask(task_ex, reset=False)] self._dispatch_workflow_commands(wf_ex, cmds)
def _on_task_state_change(self, task_ex, wf_ex): task_spec = spec_parser.get_task_spec(task_ex.spec) wf_spec = spec_parser.get_workflow_spec(wf_ex.spec) if task_handler.is_task_completed(task_ex, task_spec): task_handler.after_task_complete(task_ex, task_spec, wf_spec) # Ignore DELAYED state. if task_ex.state == states.DELAYED: return wf_ctrl = wf_base.WorkflowController.get_controller(wf_ex) # Calculate commands to process next. cmds = wf_ctrl.continue_workflow() task_ex.processed = True self._dispatch_workflow_commands(wf_ex, cmds) self._check_workflow_completion(wf_ex, wf_ctrl) elif task_handler.need_to_continue(task_ex, task_spec): # Re-run existing task. cmds = [commands.RunExistingTask(task_ex, reset=False)] self._dispatch_workflow_commands(wf_ex, cmds)
def _on_task_state_change(self, task_ex, wf_ex, action_ex=None): task_spec = spec_parser.get_task_spec(task_ex.spec) wf_spec = spec_parser.get_workflow_spec(wf_ex.spec) if states.is_completed(task_ex.state): task_handler.after_task_complete(task_ex, task_spec, wf_spec) # Ignore DELAYED state. if task_ex.state == states.DELAYED: return wf_ctrl = wf_base.WorkflowController.get_controller(wf_ex) # Calculate commands to process next. cmds = wf_ctrl.continue_workflow() task_ex.processed = True self._dispatch_workflow_commands(wf_ex, cmds) self._check_workflow_completion(wf_ex, action_ex, wf_ctrl)
def _on_task_state_change(self, task_ex, wf_ex, action_ex=None): task_spec = spec_parser.get_task_spec(task_ex.spec) wf_spec = spec_parser.get_workflow_spec(wf_ex.spec) if states.is_completed(task_ex.state): task_handler.after_task_complete(task_ex, task_spec, wf_spec) # Ignore DELAYED state. if task_ex.state == states.DELAYED: return wf_ctrl = wf_base.WorkflowController.get_controller(wf_ex) # Calculate commands to process next. cmds = wf_ctrl.continue_workflow() task_ex.processed = True self._dispatch_workflow_commands(wf_ex, cmds) self._check_workflow_completion(wf_ex, action_ex, wf_ctrl)
def _on_task_state_change(self, task_ex, wf_ex, wf_spec): task_spec = wf_spec.get_tasks()[task_ex.name] if task_handler.is_task_completed(task_ex, task_spec): task_handler.after_task_complete(task_ex, task_spec, wf_spec) # Ignore DELAYED state. if task_ex.state == states.RUNNING_DELAYED: return wf_ctrl = wf_base.get_controller(wf_ex, wf_spec) # Calculate commands to process next. try: cmds = wf_ctrl.continue_workflow() except exc.YaqlEvaluationException as e: LOG.error( 'YAQL error occurred while calculating next workflow ' 'commands [wf_ex_id=%s, task_ex_id=%s]: %s', wf_ex.id, task_ex.id, e ) wf_handler.fail_workflow(wf_ex, str(e)) return # Mark task as processed after all decisions have been made # upon its completion. task_ex.processed = True self._dispatch_workflow_commands(wf_ex, cmds, wf_spec) self._check_workflow_completion(wf_ex, wf_ctrl, wf_spec) elif task_handler.need_to_continue(task_ex, task_spec): # Re-run existing task. cmds = [commands.RunExistingTask(task_ex, reset=False)] self._dispatch_workflow_commands(wf_ex, cmds, wf_spec)