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

Retention

Payload、Journal、Outcome、Dead Letterの保持期間、Hold、Purgeを運用する。

BlackOpsは基本4期間 — Transport Payload、Canonical JournalOutcomeDead Letter — と任意のidempotency_record_days(省略時は4期間の最長値)を独立した保持対象として管理します。Public Console Kernelはconfig/retention.phpのこれらとpolicy_refactorをPlan/PurgeとSchedulerで共有し、Command Option省略時のAccepted Policyとして使います。

候補を確認するときは、副作用のないPlan Commandを使います。

retention:plan
  --transport-payload-days=7
  --journal-days=30
  --outcome-days=14
  --dead-letter-days=90
  --idempotency-record-days=90

Purge Commandは--dry-runまたは--confirmのどちらかを要求します。Confirm時は監査用のPolicy ReferenceとActorも指定します。

retention:purge
  --confirm
  --transport-payload-days=7
  --journal-days=30
  --outcome-days=14
  --dead-letter-days=90
  --idempotency-record-days=90
  --policy-ref=production-retention-v1
  --actor=system:retention

Kernel構成、listhelpではRetention ConnectionやPurge Serviceを構成せず、Purgeも実行しません。retention:purge --confirmまたは明示的なScheduler Commandだけが変更を開始します。

Journal Retention

PlannerはOperation IDごとの最新Record時刻からJournalの期限を計算します。期限切れになると、そのOperation IDに属するJournal Recordをまとめて削除します。Inline OperationとDeferred Operationを同じ規則で扱い、Operations行は削除しません。

Plan後にJournalが追加された場合やActive Holdを設定した場合、PurgeはそのOperationを安全側にSkipします。次回のPlanで最新状態から再評価してください。

Retention Hold

RetentionはOperation IDを指定して保持期間による削除を止めます。Inline OperationにもOperations行を追加せずHoldを設定できます。HoldがActiveな間、PlannerとPurgeはPayload、Journal、Outcome、Dead Letter、Idempotency Recordを対象外にし、明示解除後に再び候補へ含めます。

Purge Audit

Purgeは実際に変更または削除した件数を、対象とは独立したPurge Auditへ保存します。AuditはOperation ID、対象、件数、Policy、実行時刻、Actorだけを持ち、Journal Payload、Outcome、Error本文を含みません。PurgeはJournal削除とAudit保存を同じDatabase Transactionで行い、Audit保存に失敗すると削除もRollbackします。

ApplicationはDatabase Audit StoreをPrimaryとし、System Logを付加するfail-closed Audit PortをPurge Serviceへ渡します。Database AuditまたはSystem Logのどちらかが失敗すると、PurgeはDatabase変更をRollbackします。SchedulerやCLIは障害を成功扱いせず、Log Backendの復旧後にPlanから再実行してください。

System Log書き込み後にDatabase Commitが失敗すると、Logだけが残る可能性があります。Audit IDで過剰Logを識別し、データ削除が成功したと推測しないでください。