docs/design.md 第 3.2 节的 WAL 写入流程是:commit queue -> WAL writer 组 batch -> 分配 sequence -> 编码并写 WAL -> 写入 MemTable pending -> fsync -> publish。
docs/design.md
但后续失败处理描述中说:如果 WAL write 失败或 WAL bytes 未完整写入,pending entries 保留在 MemTable 中并保持 unpublished / aborted。
这和当前流程存在时序矛盾:如果 WAL write 在写入 MemTable 之前失败,理论上 pending entry 还没有进入 MemTable。
实现时可能出现两种互相冲突的解释:
如果不明确,WAL、MemTable flush、recovery 的失败路径会分叉。
在 3.2 中明确区分:
docs/design.md:101
docs/design.md:117
docs/design.md:119
No dependencies set.
The note is not visible to the blocked user.
背景
docs/design.md第 3.2 节的 WAL 写入流程是:commit queue -> WAL writer 组 batch -> 分配 sequence -> 编码并写 WAL -> 写入 MemTable pending -> fsync -> publish。但后续失败处理描述中说:如果 WAL write 失败或 WAL bytes 未完整写入,pending entries 保留在 MemTable 中并保持 unpublished / aborted。
问题
这和当前流程存在时序矛盾:如果 WAL write 在写入 MemTable 之前失败,理论上 pending entry 还没有进入 MemTable。
风险
实现时可能出现两种互相冲突的解释:
如果不明确,WAL、MemTable flush、recovery 的失败路径会分叉。
建议
在 3.2 中明确区分:
参考
docs/design.md:101写入流程docs/design.md:117WAL write failure 处理docs/design.md:119fsync unknown 处理