Oracle 审核 docs/design.md Section 3.2 WAL
docs/design.md
Section 3.2 "可见性语义"(~line 148)
publishedSequence 作为普通变量描述其语义,但未说明其在 Go 内存模型中的操作类型。多 goroutine 并发读写需要明确的 happens-before 关系。
publishedSequence
当前文档只描述了逻辑语义("普通读只返回 sequence <= publishedSequence 的 entry"),但缺少实现层面的内存序约束。这与 C5(Go 内存模型)相关但更聚焦于 publishedSequence 变量本身。
sequence <= publishedSequence
在 "可见性语义" 小节补充内存序约束:
atomic.Uint64
Store
Load
WAL fsync 完成 → MemTable 节点原子发布 → publishedSequence.Store → 读者 publishedSequence.Load → 遍历 MemTable 筛选可见 entry
No dependencies set.
The note is not visible to the blocked user.
来源
Oracle 审核
docs/design.mdSection 3.2 WAL位置
Section 3.2 "可见性语义"(~line 148)
问题描述
publishedSequence作为普通变量描述其语义,但未说明其在 Go 内存模型中的操作类型。多 goroutine 并发读写需要明确的 happens-before 关系。当前文档只描述了逻辑语义("普通读只返回
sequence <= publishedSequence的 entry"),但缺少实现层面的内存序约束。这与 C5(Go 内存模型)相关但更聚焦于publishedSequence变量本身。建议修复
在 "可见性语义" 小节补充内存序约束:
atomic.Uint64(或等效原子变量)Store只在 WAL durability 和所有 MemTable 节点原子发布都完成后执行Load在遍历 MemTable 前执行,获得可见性 high-water mark