Digdagを使っているときに、ワークフローの実行時間が想定よりも長い場合に何かしらの処理をしたくなる時はよくあります。
そのようなときにはsla機能を使うと良いです。
https://docs.digdag.io/scheduling_workflow.html#setting-an-alert-if-a-workflow-doesn-t-finish-within-expected-time
例えば以下のように書いておけば、ワークフローが開始されてから10分経過時点でnotice.shが実行されます。
sla:
duration: 00:10:00
+notice:
sh>: notice.sh
しかし、ワークフローの定期実行を遅らせた場合には注意が必要です。
schedule:
daily>: 07:00:00
sla:
duration: 00:10:00
+notice:
sh>: notice.sh
上記のワークフローを用意し、7時になる前に digdag disable
コマンドでこのワークフローを定期実行を無効化します。
そして、07:05に digdag endble
でワークフローを再度有効化します。
このとき digdag enable
を実行した瞬間(07:05)にワークフローが動き出します。
そしてその5分後である 07:10にsla違反によってnotice.shが実行されます。
ワークフロー開始から10分後である07:15に実行される訳ではないです。
これはsla違反の判定に使用されるワークフローの開始時刻は、実際にワークフローが開始された時刻ではなく、本来ワークフローが開始される予定だった時刻であるためです。
そのため、backfillをするときにslaを有効にしたままにすると大量のsla違反が発生することになるので注意が必要です。