编号:D-04 严重级:medium 工作线:存储、配置、命令行与部署(internal/store、internal/config、cmd/nixmsg 命令、deploy) 来源:审查 P-18、P-19 依赖:无 被依赖:无
采用审查 P-18、P-19 的方案:
<data_dir>/nixmsg.db
data_dir
nixmsg.db
nixmsg.db-wal
nixmsg.db-shm
nixmsg restore --from <文件>
cmd/nixmsg/backup.go、docs/OPS.md(可选 cmd/nixmsg/restore.go)。
cmd/nixmsg/backup.go
docs/OPS.md
cmd/nixmsg/restore.go
无。
PRAGMA integrity_check
以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。解决方案以本 issue 上方的"结论与统一方案"为准;原文里的方案与之不一致时,按上方执行。
store.OpenWriter
data_dir: "./data"
backup.go:31-40
store/db.go:73-92
deploy/config.example.yaml:8
store/db.go:120-124
复审基线:main 4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。
4059a15
已合入 origin/main 0c9b459。落地提交 57c2f70 fix: 修复写队列 busy 恢复、关闭安全、备份与配置构建问题 (#30)。
0c9b459
57c2f70
No dependencies set.
The note is not visible to the blocked user.
编号:D-04 严重级:medium 工作线:存储、配置、命令行与部署(internal/store、internal/config、cmd/nixmsg 命令、deploy) 来源:审查 P-18、P-19
依赖:无 被依赖:无
结论与统一方案
采用审查 P-18、P-19 的方案:
<data_dir>/nixmsg.db是否存在,不存在就报错并打印解析后的绝对路径;不再创建数据目录;成功时打印源库的绝对路径;输出文件用 0600 权限(备份里有尚未送达的正文)。data_dir写成绝对路径(cron 的工作目录通常是家目录,相对路径会指到错误位置)。nixmsg.db、nixmsg.db-wal、nixmsg.db-shm三个文件一起移走 → 把备份复制成nixmsg.db→ 启动。可选新增nixmsg restore --from <文件>,确认服务没在运行后执行上述步骤。改动文件
cmd/nixmsg/backup.go、docs/OPS.md(可选cmd/nixmsg/restore.go)。与其他问题的交互 / 冲突说明
无。
验收与测试
nixmsg.db。PRAGMA integrity_check为 ok。问题明细(各区审查原文,证据含文件与行号)
[P-18] backup 在库文件不存在时,静默新建空库并报告成功
store.OpenWriter会先建数据目录,再以可创建的方式打开nixmsg.db。data_dir: "./data"是相对路径。按 OPS 第 3 节用 cron 执行备份时,工作目录通常是家目录,于是:backup.go:31-40;store/db.go:73-92;deploy/config.example.yaml:8。<data_dir>/nixmsg.db是否存在,不存在就报错,并打印解析后的绝对路径;cmd/nixmsg/backup.go、docs/OPS.mdnixmsg.db。[P-19] OPS 的恢复步骤只替换 nixmsg.db,没要求清理 -wal/-shm
nixmsg.db-wal还在(非正常退出时一定在,而 P-6 的停机挂起最终靠 SIGKILL 结束),SQLite 打开时只校验 WAL 文件自身,不校验它是否属于这个库文件。docs/OPS.md第 3 节"恢复"一段;store/db.go:120-124(WAL 模式)。nixmsg.db、nixmsg.db-wal、nixmsg.db-shm三个文件一起移走 → 把备份文件复制成nixmsg.db→ 启动。可选:增加nixmsg restore --from <文件>命令,确认服务没在运行后执行上述步骤。docs/OPS.md(可选新增cmd/nixmsg/restore.go)PRAGMA integrity_check结果为 ok。复审基线:main
4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。已合入 origin/main
0c9b459。落地提交57c2f70fix: 修复写队列 busy 恢复、关闭安全、备份与配置构建问题 (#30)。