[Important] CURRENT 文件权威性与实际恢复模型不一致 #11

Closed
opened 2026-06-09 13:08:38 +08:00 by dailz · 0 comments
Owner

来源

Oracle 审核 docs/design.md Section 3.2 WAL

位置

Section 3.2 "CURRENT / MANIFEST 权威性"(~line 420)与 "WAL 元数据持久化协议"(~line 181)

问题描述

设计明确声明 CURRENT 只是写入侧辅助文件,recovery 权威源是 MANIFEST + 目录扫描。但 durable-ready 协议要求在 segment 可承载写入前更新 CURRENT 并 fsync(步骤 6-7)。这意味着 CURRENT 更新是 batch 确认成功的前提之一,但 recovery 又不依赖它。

两个路径对 CURRENT 的依赖程度不一致:

  • 写入侧:CURRENT 更新成功 = segment 可用
  • 恢复侧:CURRENT 只是辅助,缺失不阻塞恢复

建议修复

方案 A(推荐):简化 durable-ready 协议,移除 CURRENT 更新作为 batch 确认前提。

Recovery 通过 MANIFEST + 目录扫描发现 segment,CURRENT 仅作为写入侧快速定位优化。
新 segment 只需 rename + WAL directory fsync 即可进入 durable-ready。

方案 B:让 CURRENT 成为 recovery 的必要组件。

这样需要处理 CURRENT 损坏/缺失的 fallback,增加恢复复杂度。不推荐。

## 来源 Oracle 审核 `docs/design.md` Section 3.2 WAL ## 位置 Section 3.2 "CURRENT / MANIFEST 权威性"(~line 420)与 "WAL 元数据持久化协议"(~line 181) ## 问题描述 设计明确声明 `CURRENT` 只是写入侧辅助文件,recovery 权威源是 `MANIFEST + 目录扫描`。但 durable-ready 协议要求在 segment 可承载写入前更新 `CURRENT` 并 fsync(步骤 6-7)。这意味着 `CURRENT` 更新是 batch 确认成功的前提之一,但 recovery 又不依赖它。 两个路径对 CURRENT 的依赖程度不一致: - 写入侧:CURRENT 更新成功 = segment 可用 - 恢复侧:CURRENT 只是辅助,缺失不阻塞恢复 ## 建议修复 **方案 A(推荐)**:简化 durable-ready 协议,移除 CURRENT 更新作为 batch 确认前提。 > Recovery 通过 MANIFEST + 目录扫描发现 segment,CURRENT 仅作为写入侧快速定位优化。 > 新 segment 只需 rename + WAL directory fsync 即可进入 durable-ready。 **方案 B**:让 CURRENT 成为 recovery 的必要组件。 > 这样需要处理 CURRENT 损坏/缺失的 fallback,增加恢复复杂度。不推荐。
dailz closed this issue 2026-06-11 20:09:55 +08:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dailz/go-kv#11