Publish/output in case of task/workflow failure¶
https://blueprints.launchpad.net/mistral/+spec/mistral-publish-on-error
Currently it is not possible to provide any reasonable output in case of a task or workflow failure. Implementing this would greatly simplify error handling in workflows.
Problem description¶
This blueprint is a proposal to introduce two new attributes, publish-on-error for tasks and output-on-error for workflows for this purpose.
Use Cases¶
As a user, I would like to define a workflow with a generic error handler task.
As a user, I would like to simplify error handling in my complex workflow system.
Proposed change¶
To solve the problem I would like to introduce the following new task and workflow attributes:
- Task - publish-on-error: Any data structure arbitrarily containing YAQL
expressions that defines output of a task to be published into workflow context if it goes into error state.
- Workflow - output-on-error: Any data structure arbitrarily containing YAQL
expressions that defines output of a workflow to be returned if it goes into error state.
Example workbook:
workflows:
main:
tasks:
task_1:
workflow: sub-workflow
publish-on-error:
failure_cause: <% task(task_1).result.failure_cause %>
detailed_cause: <% task(task_1).result.detailed_cause %>
on-error:
- error-handler
task_2:
...
publish-on-error:
failure_cause: <% task(task_2).result.failure_cause %>
detailed_cause: <% task(task_2).result.detailed_cause %>
on-error:
- error-handler
error-handler:
action: send_email
input:
body: |
<% $.failure_cause %>
Details:
<% $.detailed_cause %>
sub-workflow:
output:
result: <% $.result %>
output-on-error:
failure_cause: <% $.failure_cause %>
detailed_cause: <% $.detailed_cause %>
tasks:
task1:
...
publish-on-error:
failure_cause: "Failure in sub-workflow.task1!"
detailed_cause: <% task(task1).result %>
on-success:
- task2
task2:
...
publish-on-error:
failure_cause: "Failure in sub-workflow.task2!"
detailed_cause: <% task(task2).result %>
Alternatives¶
N/A
Data model impact¶
Two new fields introduced: * Task spec - publish-on-error * Workflow spec - output-on-error
REST API impact¶
None
End user impact¶
Workflow language additions that allow to handle errors in a more flexible way. Existing workflows will work without any change.
Performance Impact¶
None
Deployer impact¶
None
Implementation¶
Assignee(s)¶
- Primary assignee:
István Imre <istvan.imre@nokia.com>
- Other contributors:
Endre János Kovács <endre.kovacs@nokia.com>
Work Items¶
add publish-on-error to task spec
add output-on-error to workflow spec
documentation
Dependencies¶
None
Testing¶
new engine test for the two new attributes
References¶
None