Skip to content

Instantly share code, notes, and snippets.

@akirakw
Last active August 16, 2017 09:23
Show Gist options
  • Save akirakw/a1283b2797bfa275c9f55c79f21a4435 to your computer and use it in GitHub Desktop.
Save akirakw/a1283b2797bfa275c9f55c79f21a4435 to your computer and use it in GitHub Desktop.

digdag rescheduleで変更したスケジュールがdigdag push時に元に戻る

概要

  • 特定の条件下で、 digdag reschedule で変更したスケジュールがdigdag push時に元に戻る。
  • backfillを実行するためにrescheduleが必要になる場合があるが、これにより突然backfillが出来なくなるという問題が発生する。

再現手順

  1. スケジュール付きのワークフローに対して、スケジュールをdisableする
  2. digdag reschedule でスケジュールを未来日に変更する
  3. digdag backfill で保留していたスケジュールセッションを実行する
  4. digdag push でワークフローを更新する -> 2.で変更したスケジュールが変更前の状態に戻る

具体例

  1. dailyスケジュールを持つワークフローに対して、数回スケジュールセッションを実行した後、4/1にスケジュールをdisableした
  • digdag disable 1
  1. 4/10になり、保留していたセッションを実行したくなったのでdigdag rescheduleでスケジュールを 2017-04-10 に変更
  • digdag reschedule 1 -t '2017-04-10 01:00:00 +0900'
  1. 4/1分のセッションをbackfillで実行
  • digdag backfill <project> <wokflow> -f '2017-04-01 01:00:00' --count 1
  1. ワークフローの修正が必要であることが判明したため、ワークフローをpush。
  • digdag push <project>
  1. 再度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 は更新されない(スケジュール実行ではないため)。

https://github.com/treasure-data/digdag/blob/v0.9.14/digdag-core/src/main/java/io/digdag/core/repository/ProjectControl.java#L116

問題

  • 発生条件や原因がわかっていないと、突然backfillが実行できなくなったかのように思い、かつエラーメッセージを見ても原因がわかりにくい

改善案

  • その1: digdag push 時に、必要な時以外は next_schedule_time を更新しない
    • ワークフローの定義が変わった場合などは更新が必要なはずだが、更新する/しないの条件判定が複雑?
  • その2: digdag backfill 実行時に last_session_time を更新する
    • これだけだと、無効にしたスケジュールを再度有効化してスケジュールセッションが作られた後にbackfillを実行すると、last_session_time が過去日で更新されてしまう
    • latestであれば更新する、などの条件が必要?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment