设计审查: WAL segment 大小未定义,最大 batch 可能无法写入空 segment #15

Closed
opened 2026-06-12 08:28:03 +08:00 by dailz · 0 comments
Owner

来源: docs/design.md §3.2 WAL Oracle 架构审查

问题描述

WAL Batch entriesSize 上限为 4MB,但设计中没有定义 WAL segment 文件的大小上限。如果 segment 剩余空间不足以容纳编码后的完整 batch(包含 Physical Record 头部、Block 对齐 padding),且 WAL Batch 不得跨 segment,那么某些合法的 batch 将无法写入任何 segment。

需要明确

  1. WAL segment 文件的大小上限是多少?
  2. 是否保证 maxSegmentPayload >= maxEncodedBatch(含 Physical Record 头部 + Block padding 的最坏情况)?
  3. segment 大小是固定值还是可配置?

建议约束

maxSegmentSize >= maxEncodedBatchSize + worstCasePhysicalRecordOverhead + worstCaseBlockPadding

否则某些合法 batch 会触发 write-stopped。

影响范围

  • WAL 写入路径步骤 ⑤/⑦ 的 segment 容量判断
  • Segment rotation 触发条件
来源: docs/design.md §3.2 WAL Oracle 架构审查 ## 问题描述 WAL Batch `entriesSize` 上限为 4MB,但设计中没有定义 WAL segment 文件的大小上限。如果 segment 剩余空间不足以容纳编码后的完整 batch(包含 Physical Record 头部、Block 对齐 padding),且 WAL Batch 不得跨 segment,那么某些合法的 batch 将无法写入任何 segment。 ## 需要明确 1. WAL segment 文件的大小上限是多少? 2. 是否保证 `maxSegmentPayload >= maxEncodedBatch`(含 Physical Record 头部 + Block padding 的最坏情况)? 3. segment 大小是固定值还是可配置? ## 建议约束 ```text maxSegmentSize >= maxEncodedBatchSize + worstCasePhysicalRecordOverhead + worstCaseBlockPadding ``` 否则某些合法 batch 会触发 write-stopped。 ## 影响范围 - WAL 写入路径步骤 ⑤/⑦ 的 segment 容量判断 - Segment rotation 触发条件
dailz added the design-reviewquestionWAL labels 2026-06-12 08:28:03 +08:00
dailz closed this issue 2026-06-12 08:39:26 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dailz/go-kv#15