编号:D-02 严重级:medium 工作线:存储、配置、命令行与部署(internal/store、internal/config、cmd/nixmsg 命令、deploy) 来源:总审查人核实 依赖:无 被依赖:L-03 (#22)、C-03 (#34)
本条为 L-03(停机)与 C-03(清理后 checkpoint)提供存储层能力,由存储线统一实现,避免两条线同时改 internal/store/queue.go:
internal/store/queue.go
db.Close()
Queue.Do
Do
ErrQueueClosed
PRAGMA wal_checkpoint(TRUNCATE)
Checkpoint(ctx)
PRAGMA optimize
internal/store/queue.go、db.go。
db.go
L-03、C-03 依赖本条;与 D-01 同文件,存储线内顺序合入。
Close
Checkpoint
复审基线:main 4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。
4059a15
已合入 origin/main 0c9b459。落地提交 57c2f70 fix: 修复写队列 busy 恢复、关闭安全、备份与配置构建问题 (#28)。
0c9b459
57c2f70
No dependencies set.
The note is not visible to the blocked user.
编号:D-02 严重级:medium 工作线:存储、配置、命令行与部署(internal/store、internal/config、cmd/nixmsg 命令、deploy) 来源:总审查人核实
依赖:无 被依赖:L-03 (#22)、C-03 (#34)
结论与统一方案
本条为 L-03(停机)与 C-03(清理后 checkpoint)提供存储层能力,由存储线统一实现,避免两条线同时改
internal/store/queue.go:db.Close()现在会关闭写队列的数据通道,而 WakePush、重推计时器、未等待退出的消息循环可能还在Queue.Do里向它发送,导致 panic。改为不关闭数据通道,只关闭 stop 通道(或用读写锁保护);关闭之后Do返回新的ErrQueueClosed。PRAGMA wal_checkpoint(TRUNCATE),它不能在事务里执行,而写入只能走写队列的事务。新增在写 goroutine 上执行非事务语句的接口,例如Checkpoint(ctx),可顺带支持PRAGMA optimize。改动文件
internal/store/queue.go、db.go。与其他问题的交互 / 冲突说明
L-03、C-03 依赖本条;与 D-01 同文件,存储线内顺序合入。
验收与测试
Do与Close1000 次无 panic,关闭后Do返回ErrQueueClosed。Checkpoint后 WAL 文件大小回落。复审基线:main
4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。已合入 origin/main
0c9b459。落地提交57c2f70fix: 修复写队列 busy 恢复、关闭安全、备份与配置构建问题 (#28)。