6.7. タイムアウト
OpenShift Serverless Logic では、さまざまなシナリオでワークフロー実行の最大時間を設定するために使用できるタイムアウト設定が複数定義されています。ワークフローが特定の状態にあるときにイベントの到達を待機できる時間、またはワークフローの最大実行時間を設定できます。
定義場所に関係なく、タイムアウトは、参照されたワークフロー要素がアクティブになったときに開始される時間または期間として設定する必要があります。タイムアウトは ISO 8601 data and time standard
を使用して期間を指定し、PnDTnHnMn.nS
形式を使用します。1 日は厳密に 24 時間と見なされます。たとえば、PT15M
は 15 分を設定し、P2DT3H4M
は 2 日、3 時間、および 4 分を定義します。
P2M
のような月ベースのタイムアウト、つまり 2 カ月間の期間は、月の長さが変化する可能性があるため、有効ではありません。その場合は、代わりに PT60D
を使用します。
6.7.1. ワークフローのタイムアウト
ワークフローがキャンセルされるまでに実行できる最大時間を設定するには、ワークフロータイムアウトを使用します。キャンセルされると、ワークフローは終了したとみなされ、GET リクエストを通じてアクセスできなくなります。したがって、デフォルトでは割り込みが true
であるかのように動作します。
ワークフローのタイムアウトは、トップレベルの timeouts
プロパティーで定義されます。string
と object
の 2 つのタイプを使用できます。string
型は、ワークフローのタイムアウト定義を含む JSON または YAML ファイルを指す URI を定義します。object
型は、タイムアウト定義をインラインで定義するために使用されます。
たとえば、ワークフローを 1 時間実行した後にキャンセルするには、次の設定を使用します。
ワークフロータイムアウトの例
{ "id": "workflow_timeouts", "version": "1.0", "name": "Workflow Timeouts", "description": "Simple workflow to show the workflowExecTimeout working", "start": "PrintStartMessage", "timeouts": { "workflowExecTimeout": "PT1H" } ... }
6.7.2. イベントのタイムアウト
ワークフローで状態を定義するときに、timeouts
プロパティーを使用して、この状態を完了するまでの最大時間を設定できます。その時間が過ぎると、状態はタイムアウトしたとみなされ、エンジンはこの状態から実行を続行します。実行フローは状態の種類によって異なります。たとえば、次の状態への遷移が実行される場合があります。
イベントベースの状態では、eventTimeout
サブプロパティーを使用して、イベントの到達を待機するまでの最大時間を設定できます。これは現在の実装でサポートされている唯一のプロパティーです。
イベントタイムアウトは、callback 状態タイムアウト、switch 状態タイムアウト、および even 状態タイムアウトをサポートします。
6.7.2.1. Callback 状態のタイムアウト
Callback
状態は、一般に外部サービスを呼び出すアクションを実行し、イベントの形式で非同期応答を待機する必要がある場合に使用できます。
応答イベントが消費されると、ワークフローは実行を継続し、通常は遷移プロパティーで定義された次の状態に移動します。
Callback
状態では、イベントが消費されるまで実行が停止されるため、これに対して eventTimeout を設定できます。設定された時間内にイベントが到達しない場合、ワークフローは実行を継続し、遷移で定義された次の状態に移動します。
タイムアウトのある Callback
状態の例
{ "name": "CallbackState", "type": "callback", "action": { "name": "callbackAction", "functionRef": { "refName": "callbackFunction", "arguments": { "input": "${\"callback-state-timeouts: \" + $WORKFLOW.instanceId + \" has executed the callbackFunction.\"}" } } }, "eventRef": "callbackEvent", "transition": "CheckEventArrival", "onErrors": [ { "errorRef": "callbackError", "transition": "FinalizeWithError" } ], "timeouts": { "eventTimeout": "PT30S" } }
6.7.2.2. Switch 状態のタイムアウト
特定の条件に応じてアクションを実行する必要がある場合は、Switch
の状態を使用できます。これらの条件は、ワークフローデータ (dataConditions
) またはイベント (eventConditions
) をベースにできます。
eventConditions
を使用すると、ワークフロー実行は、設定されたイベントのいずれかが到達して条件に一致するまで待ってから決定を下します。このような状況では、イベントが条件に一致するまで最大待機する時間を制御するイベントタイムアウトを設定できます。
この時間が経過すると、ワークフローは defaultCondition
プロパティーに定義された状態に移行します。
タイムアウトのある Switch 状態の例
{ "name": "ChooseOnEvent", "type": "switch", "eventConditions": [ { "eventRef": "visaApprovedEvent", "transition": "ApprovedVisa" }, { "eventRef": "visaDeniedEvent", "transition": "DeniedVisa" } ], "defaultCondition": { "transition": "HandleNoVisaDecision" }, "timeouts": { "eventTimeout": "PT5S" } }
6.7.2.3. Event 状態のタイムアウト
Event
状態は、ワークフローで 1 つ以上のイベントが受信されるまで待機し、一連のアクションを実行してから実行を継続するために使用されます。Event 状態が開始状態の場合は、新しいワークフローインスタンスが作成されます。
この状態では、timeouts
プロパティーを使用して、設定されたイベントが到達するまでワークフローが最大待機する時間を設定します。
この時間が経過してもイベントが受信されない場合、ワークフローは遷移プロパティーで定義された状態に移行するか、終了状態の場合はアクションを実行せずにワークフローインスタンスを終了します。
timeout のある Event 状態の例
{ "name": "WaitForEvent", "type": "event", "onEvents": [ { "eventRefs": [ "event1" ], "eventDataFilter": { "data": "${ \"The event1 was received.\" }", "toStateData": "${ .exitMessage }" }, "actions": [ { "name": "printAfterEvent1", "functionRef": { "refName": "systemOut", "arguments": { "message": "${\"event-state-timeouts: \" + $WORKFLOW.instanceId + \" executing actions for event1.\"}" } } } ] }, { "eventRefs": [ "event2" ], "eventDataFilter": { "data": "${ \"The event2 was received.\" }", "toStateData": "${ .exitMessage }" }, "actions": [ { "name": "printAfterEvent2", "functionRef": { "refName": "systemOut", "arguments": { "message": "${\"event-state-timeouts: \" + $WORKFLOW.instanceId + \" executing actions for event2.\"}" } } } ] } ], "timeouts": { "eventTimeout": "PT30S" }, "transition": "PrintExitMessage" }