「中断と推定」sys_flow_context状態とは何ですか?最新情報については、「 https://docs.servicenow.com/csh?topicname=flow-execution-details&version=latest」を参照してください。 ユースケース 以前は、フローの実行が予期せず中断されても、フローコンテキストのステータスは「処理中」のままになっていました。これはユーザーに誤解を招くものです。予期しない中断の例としては、トランザクションの終了やノードの再起動などがあります。これらの中断されたフロー実行の特定を支援するために、新しいsys_flow_context状態「中断と推定」が導入されました。 この状態は、フローがキャンセルされたことを意味するものではありません。まだ実行中であるか、後で再開される可能性があります。 中断と推定される状態は、フローが長時間実行されており、何らかの形でスタックしているように見えることをユーザーに通知するためのものです。考えられる原因には、フロー内、またはフローによってトリガーされた別の BR またはフローでのノードの再起動や無限ループなどがあります。 Utah 以降では、ノードがシャットダウン/再起動しているときに グレースフルシャットダウン 機能を使用してフローを一時停止/再開できます この機能は、MID サーバーでの実行中に中断されたフロー実行には適用されませんこの機能はフローエラー処理をトリガーしません。可能であれば、フローを再開できるようにする必要があります。 どのように機能しますか? トランザクションとclaimed_byの 2 つの新しい列がsys_flow_contextに追加されました。フローエンジンがフローコンテキストで作業を開始すると、フィールド sys_flow_context.claimed_by がノード ID に設定され、フィールド sys_flow_context.transaction が現在のトランザクションのsys_idに設定されます。 フロー実行が mid に送信される場合、claimed_byは「mid」に設定され、トランザクションは空になります。 中断が疑われるフローコンテキストの状態は [中断と推定] に変更されます。また、エラーメッセージもログに記録されます。エラーメッセージは「非アクティブのため、フロー状態がIN_PROGRESSからPRESUMED_INTERRUPTEDに変更されました..."設定された間隔で、sys_flow_contextテーブルで、中断されているように見えるフロー実行がないかチェックされます。チェックには、「このノード」(ハッピーパスの場合)と「他のノード」(ノードがシャットダウンされ、そのノードが再起動されないときにフローの実行が中断された場合)の2種類があります。 「このノード」チェックは 15 分ごとに実行され、現在のノードによって要求されているフローコンテキスト、ステータスが IN_PROGRESS またはCONTINUE_SYNC、最終更新が 15 分以上前で、現在のノードでは無効になったトランザクション ID を持つフローコンテキストを検索します。「他のノード」チェックは、フローの実行を行っていたノードが再起動されないケースを対象としています。このチェックは 1 時間ごとに実行され、別のノードによって要求され、ステータスが IN_PROGRESS または CONTINUE_SYNC で、最後に更新されてから 8 時間を超えているフローコンテキストを検索します。有効なトランザクション ID は実行中のノードでのみ使用できるため、トランザクション ID を確認できません。 フローにスクリプトなど、8 時間以上実行されるステップがある場合、この機能によってステータスが誤って PRESUMED_INTERRUPTED に更新される可能性があります。その場合、ステップが終了し、フローコンテキストが休止すると、ステータスは想定される値に戻されます。 修復手順 トランザクション (sys_flow_context.transaction) がノード (sys_flow_context.claimed_by) でまだアクティブかどうかを確認します。 「はい」の場合(通常、これは別のノードによって中断されたと推定されるマークが付けられていることを意味します)、フローは無限ループ(不正なスクリプトまたは不正なループ状態)である可能性が高く、キャンセルする必要があります。フローをリファクタリングして再実行します。いいえの場合(通常、これは現在のノードが再起動されたか、適切にキャッチ/処理されなかった不明なエラーがあったことを意味します)、次のいずれかを行う必要があります。 フロー実行が中断または中止された残りのフローを手動で完了します。フローの実行が中断または中止された時点からのフローに基づいてサブフローを作成します。 (たとえば、フローには 10 個のステップがあり、ステップ 5 でエラーが発生しました - エラー条件を解決し、アクション 5 〜 10 を含むサブフローを実行します) ノードがシャットダウンされたか再起動されたかを確認するには、ローカルホストログをgrepします。 egrep “glide Loading platform|Initiating normal shutdown” localhost_log.2019-0*.txt 構成可能なシステムプロパティ 機能が有効 (デフォルトは true):com.glide.hub.flow.interrupted_flow_marker.enabled「このノード」チェックの最終更新日からの最小時間 (デフォルトは 900、15 分):com.glide.hub.flow.interrupted_flow_marker.this_node.updated_sec_ago「他のノード」チェックの最終更新日からの最小時間 (デフォルトは 28800、8 時間):com.glide.hub.flow.interrupted_flow_marker.other_nodes.updated_sec_ago