设计审查: MANIFEST 职责边界 — checkpoint vs WAL 恢复终点 #17
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
来源: docs/design.md §3.2 WAL Oracle 架构审查
问题描述
设计中 MANIFEST 有两个看似矛盾的角色:
如果 MANIFEST 只在 checkpoint 时推进,那尾部截断不应该更新它。如果 MANIFEST 也负责记录 WAL 恢复终点,则需要单独定义其 crash-consistency 协议。
需要明确
recoveryEndSequence字段,但仅在 recovery repair 时更新建议
推荐选项 C(最简洁):尾部截断持久化只需
ftruncate + fsync + 清理空 segment,不需要更新 MANIFEST。Recovery 完成后,publishedSequence和nextSequence是内存状态,下次启动重新从 MANIFEST recovery 点扫描 WAL 即可。