コンテンツにスキップ
BlackOps1.xは試験的なバージョンです。Production Readyは2.xを予定しています。Releases
BlackOps
Esc
navigateopen⌘Jpreview
このページの内容

Lifecycle

Operationの受付から完了、拒否、再試行、失敗までのLifecycleを理解する。

BlackOpsはInlineとDeferredを同じLifecycle Modelで記録します。ApplicationはOperation IDを相関Keyとして受付からTerminal Stateまで追跡できます。Outcome RecordはDeferred完了時だけ保存し、Inline OutcomeはHTTP Responseだけへ返します。

共通Lifecycle

正常完了するOperationはReceived、Running、Finalizing、Completedの順に進みます。DeferredだけはDurable受付後にAcceptedを経由します。

経路 状態遷移
Inline成功 Received → Running → Finalizing → Completed
Deferred成功 Received → Accepted → Running → Finalizing → Completed
業務拒否 ReceivedまたはRunning → Rejected
Retry Running → Supervising → Retry Scheduled → Running
最終失敗 Running → Supervising → Failed
Deferred隔離 Running → Supervising → Dead Letter

InlineはAcceptedを通らず、Request内でAttemptを開始します。DeferredだけがDurable受付後にAcceptedとなり、別ProcessのWorkerがClaimしてAttemptを開始します。Completed、Rejected、Failed、Dead LetterはTerminalであり、新しいLifecycle EventやHandler実行へ進みません。

Rejected

OperationRejectedExceptionは予期された業務拒否です。FrameworkはRejected ResultとTerminal Lifecycleへ変換します。Validation、Authorization、Not Found、Conflict、Business Ruleを安定したCategory/Codeで表現します。

RetryとFailure

Retryable ExceptionはSupervision Policyに従いattempt.failedattempt.retry_scheduledを記録します。次のWorker Attemptが同じOperationを再Claimします。Retry上限を超えた処理はFailed/Dead Letterへ進みます。

通常のException、Worker Interrupt、Claim Lossは業務拒否として扱いません。LeaseHeartbeatFencing Tokenにより、古いWorkerが成功を確定しないようにします。

Outcome

DeferredのCompletedだけがTyped Outcomeを保存します。Inline completedはHTTP ResponseだけへOutcomeを返し、Outcome Recordを作成しません。Rejected、Failed、Retry Scheduled、Dead Letter、Claim LostはOutcome Recordを作成しません。詳細はOutcomeを参照してください。

JournalとOutcomeは別々の保持期間を設定できます。Operation単位のHoldと安全なPurgeについてはRetentionを参照してください。

Lifecycle EventのObserved JSONL、Canonical/Observedの境界、Observer ReplayはJournalで確認できます。

仕組みを理解したらInstallからApplicationを作成します。