検索

6.7. タイムアウト

download PDF

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 プロパティーで定義されます。stringobject の 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"
}

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.