persistence-semantics と pod-persistent-state を実装可能な粒度に分割。 Storage 層 (Phase 1) を entry-hash-abolish / segment-rename / session-grouping-introduce / live-fork-marker に、Pod 単位永続化 (Phase 2) を pod-state-backend / pod-state-write-points / pod-name-resume / spawned-registry-persist に切り出した。
2.2 KiB
2.2 KiB
Pod state: lifecycle 各点での write 配線
背景
pod-state-backend で Pod metadata の永続 backend が用意された。本チケットでは Pod の lifecycle 各点で active (SessionId, SegmentId) の更新を Pod state に write-through する ことを実装する。
要件
- Pod state の write point を以下に配置:
- Pod 作成時: pod name と allocated
SessionIdを初期化。SegmentIdは firstSessionStartmaterialize で確定するので未確定 marker を許容する。 - first run で
SessionStartが materialize された後: active(SessionId, SegmentId)を確定。 - compaction: 新
SegmentIdに切り替わる (SessionIdは据え置き)。 - fork (live auto / 過去): 新
SegmentIdに切り替わる。 - resume: 起動時に Pod state から
(SessionId, SegmentId)を解決し、session log をrestore_from_manifest相当の経路で復元する。
- Pod 作成時: pod name と allocated
- session log の
SessionOriginを Pod state 側に重複保持しないこと。compaction / fork の構造的 lineage は session-store 側に正本。 - live writer の二重起動は既存の pod-registry / session lock と同等以上に防止する(Pod state にも lock 役割を持たせるかは実装時に判断、ただし pod-registry の責務を歪めない)。
完了条件
- 上記 write point で Pod state が更新され、Pod プロセスを再起動しても Pod 名から active session に復元できる。
- compaction / fork により active segment が変わった場合、Pod state と pod-registry の session id が整合する。
- 既存の
--session <UUID>resume を壊さない。 cargo check --workspaceおよびcargo test -p podが通る。
範囲外
- Pod 名単位 resume の CLI 引数導線(別チケット
pod-name-resume)。 - spawned children の永続化(別チケット
spawned-registry-persist)。 - ordered session history の audit(Pod state 側に持たせるか、session log だけで足りるかは本チケットで判断。持つ必要が無いなら持たないことを優先する)。
関連
tickets/pod-state-backend.md(前提)tickets/pod-name-resume.md(後続)crates/pod/src/pod.rscrates/pod-registry/