概要
digdagでワークフローを作成する場合に、
親ワークフローから子ワークフローを呼び出すようなケースはよくあると思います。
普通に実装すると、以下のようにcallオペレータを使うと思います。
parent.dig
+task1:
call>: child1
+task2:
call>: child2
+task3:
call>: child3
ただ、この場合途中でエラーが起こった場合に最後まで実行されないことになる。
task間の依存関係が無い場合にどこかで失敗した場合も最後まで実行したい、
そんなケースの場合はrequireオペレータを使うと良い。
requireオペレータを使う
requireオペレータだとignore_failureというオプションがあり、
呼び出したワークフローが失敗しても親ワークフロー内ではエラーにならない。
parent.dig
+task1:
require>: child1
ignore_failure: true
+task2:
require>: child2
ignore_failure: true
+task3:
require>: child3
ignore_failure: true
上記のようにしておくと例えばtask2で呼び出すchild2が失敗した場合もtask3まで実行され、
親ワークフローとしては全タスクがSuccessのステータスで完了します。
エラー検知したい場合は子タスクの中で_errorとかで検知する必要があるので注意が必要ですが、
リカバリは子タスクのみ再実行すればよいので保守性が高まる気がします。