Smail/docs/SQLite复制中断恢复补充验收.md
smail d8b5a5fb23
Some checks are pending
Security Checks / security (push) Waiting to run
补齐SQLite复制中断恢复及云端部署验收
2026-09-21 06:27:57 +08:00

5.0 KiB
Raw Blame History

SQLite 复制中断恢复补充验收

结论和范围

北京时间 2026 年 9 月 21 日,云端隔离实例完成 SQLite 未提交复制事务中的真实进程中断恢复。随后在同一实例完成正常迁移、内部重启、系统级进程重启和目标权限故障恢复。本项复审通过,但不代表整个项目达到生产放行条件。

  • [✓] 复制事务未提交时发送 SIGKILL,源库和活动配置保持不变。
  • [✓] 恢复后登录、历史邮件正文及附件、新邮件 SMTP 收取及 IMAP/POP3 读取通过。
  • [✓] 再使用中断目标返回 HTTP 409 和结构化错误码,失败目标及日志文件未被覆盖。
  • [✓] 后续正常迁移只保留一个活动业务库,配置历史与业务同库。
  • [✓] 扩充部署套件实际执行 131 项,零跳过、零失败。
  • [ ] 提交临界点、配置切换临界点、MySQL/PostgreSQL 复制中断及跨引擎迁移矩阵。

实例、候选和取证

成功实例:/var/tmp/smail-review-runtime-20260921-061711/。 本地归档:test-log/production-remediation-20260921/interruption-runtime-evidence/smail-review-runtime-20260921-061711/。 驱动汇总:interruption-runtime-result-20260921-061701.json。

候选程序沿用此前重新编译的 smail-sql-migration,SHA-256 为 6b700120e8bc0b6ca1ce723d0319852259d4aa983646bbc69c4c2fe73e88309d,源码标识为 375ffcabfea607690ea89e31b72cc346cfc122f3。本轮只修改验收工具和测试,不宣称重新构建应用或前端。

interruption-recheck-20260921-062557.json 再次核对 610 个后端 Go 源文件、四个本地与远端工具以及 20 份下载证据的摘要。工具清单对应本轮中断支持版本,不套用旧 SQL 验收工具摘要。

中断点与恢复断言

以非特权应用身份在隔离源库写入 1,024 条夹具邮件,每条正文 16 KiB;源库大小 17,645,568 字节。通过正式迁移 API 发起复制,检测目标文件和回滚日志后冻结本轮应用进程,确认活动配置仍指向源库且事务未提交,再保存快照并终止进程。

取证项 实际值
中断进程 PID 779623
目标文件大小 2,650,112 字节
回滚日志大小 38,400 字节
目标读取被锁定 是
源库写锁仍被持有 是
已提交目标邮件行数 未能查询,结果为 null,不是查询得到零行
终止结果 MainPID 为零,退出信号 9
恢复后 PID 779737
后续系统重启 PID 779864
目标权限故障恢复 PID 779902

中断前后源库完整逻辑摘要及活动配置文件摘要一致。恢复后拒绝复用失败目标,要求 data.code=DATABASE_MIGRATION_TARGET_EXISTS,不能把任意 HTTP 409 当作通过。失败目标及 journal 的字节摘要在恢复探针前后保持一致。

权限为 0700 的中断快照目录保留原始证据:

  • interrupted.db:3bb4c0c1571b9c28a38ce02f6a4dd59982a0f036765f404e8123284790d30369。
  • interrupted.db-journal:4dda08e81d6a036d7f3e4f09040809f4e057845e3276e1472d921f1861fe2c05。

最终活动库仅 migrated.db。smail.db、occupied.db、interrupted.db 是保留的离线源库和失败目标,不是额外活动库。配置历史源、目标各一条,完整行一致。应用内存峰值 76,910,592 字节、交换为零,OOM、资源采集错误、收尾错误均为零。

保留的失败记录

  1. 060953:夹具先停止瞬时服务,导致单元被回收,无法再次启动。改为通过非特权探针在独占事务中准备隔离源库,不停止瞬时服务。
  2. 061252:已完成真实中断和源库不变验证,但恢复探针错误地把响应 data 当作字符串。修正为检查结构化错误码,并增加错误形状反例;没有降低 HTTP 状态和错误码要求。
  3. 061711:完整中断恢复及后续正常迁移全部通过。前两次失败证据仍保留,不计作完整通过。

扩充部署套件和保护检查

本轮新增六项中断工具测试。2026 年 9 月 21 日 06:23 的完整云端套件在 /var/tmp/smail-review-python-20260921-062339/ 执行,实际 131 项、零跳过、退出零,测试耗时 6.501 秒,单元运行约 7.367 秒,内存峰值 46.3 MiB,交换为零。

本地日志 python-linux-tests-20260921-062339.log 的 SHA-256:5ede614792bb83bb260992295720f5d1423a57cf13f87b7d715d9b1352a734d5。隔离策略保持不变,仅沿用已经验证的边界内 CAP_SETUID 显式传递。

06:25 再次确认六个保护服务的 PID、InvocationID 和重启计数与实机验收前一致,无运行中的验收单元。正式程序 SHA-256 仍为 c14ef1c5ba1dc2096c312c8357039a7330c985cbeac90765aed01d8151e05e1f。未改动用户原有全项目报告,未删除数据库、快照或其他项目文件。

本记录不覆盖真实浏览器、历史凭据撤销、全部静态告警、真实 DNS 自动续期与全协议换证、外部邮件最终收件、长时容量和异机灾备。上述门禁不得随本次提交自动改为通过。