Oracle 审核 docs/design.md Section 3.2 WAL
docs/design.md
Section 3.2 "写入流程" 步骤 ⑥(~line 109)
写入流程步骤 ⑤(WAL encode/write)成功后,步骤 ⑥ 写入 MemTable 可能因为 Arena 满而失败。此时 WAL bytes 已持久化(或已在 page cache),但 MemTable 中没有对应 entry。设计文档未覆盖此场景。
方案 A(推荐):在 WAL write 之前保证 MemTable 有足够容量。
写入前检查 Arena 剩余空间,不足时先冻结 MemTable 并创建新 MemTable。 Arena 预留必须考虑最大可能的 batch size。
方案 B:MemTable 写入失败后按 ErrCommitUnknown + write-stopped 处理。
ErrCommitUnknown
因为 WAL bytes 可能已持久化,不能按普通错误处理。
No dependencies set.
The note is not visible to the blocked user.
来源
Oracle 审核
docs/design.mdSection 3.2 WAL位置
Section 3.2 "写入流程" 步骤 ⑥(~line 109)
问题描述
写入流程步骤 ⑤(WAL encode/write)成功后,步骤 ⑥ 写入 MemTable 可能因为 Arena 满而失败。此时 WAL bytes 已持久化(或已在 page cache),但 MemTable 中没有对应 entry。设计文档未覆盖此场景。
建议修复
方案 A(推荐):在 WAL write 之前保证 MemTable 有足够容量。
方案 B:MemTable 写入失败后按
ErrCommitUnknown+ write-stopped 处理。