はじめに
CronWorkflowのスケジュール実行で前回Workflowが次の実行予定時刻までに完了しなかった場合の動作に関して検証する。
検証では、複数のマニフェストの設定について検証する。
なお、Cronworkflowはspec.workflowSpecでWorkflowTemplateを利用する事を前提とする。
検証方法
以下4つの設定で動作検証する。
項目 | 設定方法 |
---|---|
設定① | CronworkflowのconcurrencyPolicyを"Forbid"で指定 |
設定② | CronworkflowのconcurrencyPolicyを"Forbid"で指定し、StartingDeadLineSecondsの秒数を指定 |
設定③ | CronworkflowのconcurrencyPolicyを"Allow"で指定 |
設定④ | CronworkflowのconcurrencyPolicyを"Allow"で指定する。また、参照するWorkflowTemplateでsynchronizationのmutexを設定する事で同一WorkflowTemlateを同時実行する事を防ぐ |
CronWorkflowは、1分周期でスケジュール実行する設定とする。参照するWorkflowTemplateは1分間sleepするようプログラムする。このように設定する事で前回Workflowが次の実行予定時刻まで動作し続ける状況を作る。
検証結果
設定ごとの動作検証結果を下表に示す。
項目 | 動作検証結果 |
---|---|
設定① | 今回実行予定のworkflowをスキップする |
設定② | 前回workflowが完了した後に、今回実行予定のworkflowを数秒遅れで開始する |
設定③ | 前回workflowの完了を待たずに、今回workflowを開始する |
設定④ | 前回workflowが完了した後に、今回実行予定のworkflowを数秒遅れで開始する |
設定②と設定④の結果は同一であるが、startingDeadLineSecondsは指定する秒数内の遅延のみ許容する。このため、前回workflowの完了タイミングによらず必ずスケジュールしていたworkflowを実行したい場合は設定④を採用する必要がある。