- 特定の条件下で、 digdag reschedule で変更したスケジュールがdigdag push時に元に戻る。
- backfillを実行するためにrescheduleが必要になる場合があるが、これにより突然backfillが出来なくなるという問題が発生する。
- スケジュール付きのワークフローに対して、スケジュールをdisableする
digdag reschedule
でスケジュールを未来日に変更するdigdag backfill
で保留していたスケジュールセッションを実行するdigdag push
でワークフローを更新する -> 2.で変更したスケジュールが変更前の状態に戻る
- dailyスケジュールを持つワークフローに対して、数回スケジュールセッションを実行した後、4/1にスケジュールをdisableした
digdag disable 1
- 4/10になり、保留していたセッションを実行したくなったのでdigdag rescheduleでスケジュールを 2017-04-10 に変更
digdag reschedule 1 -t '2017-04-10 01:00:00 +0900'
- 4/1分のセッションをbackfillで実行
digdag backfill <project> <wokflow> -f '2017-04-01 01:00:00' --count 1
- ワークフローの修正が必要であることが判明したため、ワークフローをpush。
digdag push <project>
- 再度4/1分のセッションをbackfillで実行しようとすると、以下のエラーメッセージが出力され失敗する。
digdag backfill <project> <wofflow> -f '2017-04-01 01:00:00' --count 1
error: Status code 400: {"message":"count is set to 1 but there are only 0 attempts until the next schedule time","status":400}
- digdag push時にワークフローに対するスケジュールセッションが存在した場合、next_schedule_time は last_session_time を基準に設定される。
- digdag reschedule や digdag backfill によるセッション実行時には、 last_session_time は更新されない(スケジュール実行ではないため)。
- 発生条件や原因がわかっていないと、突然backfillが実行できなくなったかのように思い、かつエラーメッセージを見ても原因がわかりにくい
- その1: digdag push 時に、必要な時以外は next_schedule_time を更新しない
- ワークフローの定義が変わった場合などは更新が必要なはずだが、更新する/しないの条件判定が複雑?
- その2: digdag backfill 実行時に last_session_time を更新する
- これだけだと、無効にしたスケジュールを再度有効化してスケジュールセッションが作られた後にbackfillを実行すると、last_session_time が過去日で更新されてしまう
- latestであれば更新する、などの条件が必要?