Parent research epic: #39
背景
当前 refresh-plan 只做前置检查,不会切换真实 lower。系统论文需要给出明确的版本切换语义,并证明在失败或 crash 下不会出现控制面与实际文件树不一致。
目标
新增实际 mutation API:
POST /mounts/{mount_id}/worktree/refresh
建议请求:
{
"expected_generation": 7,
"expected_snapshot": "...",
"target_revision": "...",
"require_clean": true
}
State Machine
Ready
-> Quiescing
-> Refreshing
-> Ready(new generation)
Refreshing
-> Ready(old generation) // rollback
-> FailedRecoverable
-> Conflict // VCS owner must resolve
Switch Protocol
- 解析并准备 target SnapshotId;
- pin target snapshot/CAS objects;
- 验证 expected generation 和 upper cleanliness;
- 阻止新的控制面 mutation;
- quiesce workspace;
- 写 prepare WAL/state;
- 原子切换 active lower generation;
- 失效相关 kernel entry/inode cache,或使用安全 remount fallback;
- 持久化 committed generation;
- 恢复 workload;
- 异步回收旧 generation。
Open-Handle Semantics
必须明确:
- refresh 前已打开的 handle 继续绑定旧 generation,直到 close;
- refresh commit 后的新 lookup/open 只能看到新 generation;
- refresh 不修改 private upper;
- 如果实现无法提供 generation-pinned handle,必须在 quiesce 阶段拒绝存在打开 handle 的切换,并在 API 中明确返回原因。
不得留下未定义行为。
Tasks
Acceptance Criteria
Paper Measurements
- refresh latency;
- quiesce duration;
- open-handle retention cost;
- invalidation/remount cost;
- crash recovery time;
- fault matrix。
Relevant Files
src/daemon/antares.rs
src/antares/fuse.rs
src/dicfuse/
docs/worktree-state-transitions.md
docs/worktree-api.md
Dependencies
Issue 3、Issue 4。
Parent research epic: #39
背景
当前
refresh-plan只做前置检查,不会切换真实 lower。系统论文需要给出明确的版本切换语义,并证明在失败或 crash 下不会出现控制面与实际文件树不一致。目标
新增实际 mutation API:
建议请求:
{ "expected_generation": 7, "expected_snapshot": "...", "target_revision": "...", "require_clean": true }State Machine
Switch Protocol
Open-Handle Semantics
必须明确:
不得留下未定义行为。
Tasks
Refreshing/FailedRecoverable/Conflict生命周期;refresh.v1;Acceptance Criteria
Paper Measurements
Relevant Files
Dependencies
Issue 3、Issue 4。