Files
MetonaSqlark/.zcode/plans/plan-sess_4951c8b8-27ba-4c84-a167-0c3422d65a2c.md
T
thzxx e6efa39d48
CI / test (20.x) (push) Successful in 9m58s
CI / test (18.x) (push) Successful in 10m0s
CI / test (22.x) (push) Successful in 10m0s
CI / test (24.x) (push) Successful in 9m56s
release: v0.2.1 生产加固 — WAL CRC/约束激活/Hybrid提交顺序/RESTRICT外键/浏览器兼容表/debug模式/onError回调
2026-07-27 20:47:30 +08:00

3.1 KiB
Raw Blame History

v0.2.1 生产加固方案

核心原则

  • 所有新增测试方法必须确保不会导致 CI 卡死(无 setTimeout/setInterval 泄漏,无 fake-indexeddb 滥用,无无限循环)
  • 优先级 P0 → P1 → P2 顺序执行

P0 — Critical4项)

  1. Memory 引擎事务回滚修复src/engine/memory.ts 的事务快照机制已存在但 TransactionManager 未正确调用。修复 src/transaction/index.ts 在 rollback 时调用引擎层 rollback。

  2. WAL CRC 校验验证src/engine/aria/wal/log.ts decodeAllRecords 跳过 CRC,恢复时验证 CRC 不匹配则丢弃 + 告警。

  3. Hybrid 引擎提交顺序src/hybrid/index.ts commit 先写磁盘再写内存,磁盘失败回滚内存。

  4. SSTableReader rangeScan 边界条件 — 修复多 block 场景下 startBlockIdx/endBlockIdx 可能越界。

P1 — High6项)

  1. ColumnDef 约束激活src/table/schema.ts checkFieldType 中激活 min/max/maxLength 校验。配套新增 schema 测试(纯同步,不会卡死)。

  2. 查询结果上限DatabaseConfig 增加 maxRowsPerQuery 默认 10000,所有引擎 find() 中截断。测试用 memory 引擎(纯同步)。

  3. onError 回调接入src/core.ts CRUD 操作 catch 块调用 this.config.onError。测试用 jest.fn() 验证(同步断言)。

  4. OPFS 引擎基础测试 — 补 5 个测试:open/close、createTable、insert、find、count。由于 OPFS 浏览器专属,测试用内存 fallback mock 方式,避免 jsdom 不具备 OPFS 导致卡死。

  5. MVCC gc() 定期调用 — AriaEngine checkpointManager.tick() 后每 N 次 op 调用一次 gc()。测试用 MVCC 单元测试(纯同步)。

  6. SSTable get() 返回 null 兜底 — 已修复(P0-4包含)

P2 — Medium6项)

  1. LZ4 压缩修复 + 正确性测试 — 修复 compress/decompress 往返 bug,补 3 个往返正确性测试。注意:测试数据量控制在 500 字节以内,避免大循环。纯同步测试。

  2. debug 模式DatabaseConfigdebug: booleanconsole.debug 输出关键操作日志。

  3. RESTRICT 外键行为修正 — cascadeDelete 检测到引用行时抛 FOREIGN_KEY_VIOLATION 而非静默保留孤儿。

  4. 浏览器兼容表 — README 补充 Chrome 80+/Firefox 80+/Safari 14+/Edge 80+ 支持声明。

  5. React/Vue 集成去 @ts-nocheck — 移除注释,补充完整类型声明。(测试仅验证编译不验证运行时,避免 jsdom 缺失 hooks 导致卡死)

  6. SQL 多语句防护 — Parser 检测到多余分号后还有有效 token 时报 PARSE_ERROR

严禁事项(新增测试必须遵守)

  • 不使用 setTimeout/setInterval 除非配合 jest.useFakeTimers()
  • 不使用 fake-indexeddb 进行多轮 open/close/reopen
  • 不创建 IndexedDB 连接后不关闭
  • 不使用 done() 回调模式
  • 不对大数据集(>1000条)做 O(n²) 操作
  • 优先使用 async/await + Memory Backend
  • Mock 代替真实浏览器 API
  • 每个 afterEach 确保资源清理