[Important] MemTable 写入失败(Arena 满)在 WAL 写入后未覆盖 #10
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?
来源
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 处理。