exastro-suite / exastro-it-automation

Apache License 2.0
3 stars 19 forks source link

【Conductor定期作業実行】システム(ITA)とDBのタイムゾーンがズレていると、定期作業実行が動かずに完了してしまう #2626

Closed t-uekawa-n closed 1 week ago

t-uekawa-n commented 1 week ago

事象

原因

現在時刻の取得で、SQLのNOW()関数を使用していたことが原因。

現在時刻 + インターバルと次回実行日付を比較するロジックで、前者はDBのタイムゾーン、後者はシステムのタイムゾーンを使用しているため、整合性が取れなくなる。

例:対象レコードが以下の場合

  1. DBの時間が[UTC 9:00 / JST18:00]からインターバルを引いた時間になるまでレコードが拾われない
  2. システムで9:00になってもConductorが登録/実行されない。
  3. 18:00になると、次回実行日時が現在時刻より小さくなるので、次回実行日時がnullリセットされ、ステータスが準備中になる
  4. 18:00を越える次回実行日時が再計算される
  5. (終了日時が18:00より小さい場合)ステータスが完了かつ終了時刻を越えた次回実行日時レコードに残る

対応

現在時刻の取得は、SQLのNOW()関数を使用せずに、システムの時刻を使うように統一