test: add mysql outage recovery rehearsal

This commit is contained in:
2026-09-20 00:21:20 +08:00
parent 77abc0e2d9
commit 2c8d13a523
5 changed files with 214 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
# P6:MySQL 短暂不可用恢复基线
验证日期:2026-09-20。本批针对生产验收项 A18,验证 Orbit 在 MySQL 容器短暂停止并以同一数据卷恢复后,readiness 和任务受理行为保持可核对。
## 实际环境与命令
环境为 macOS arm64、当前 `bin/orbit`/`bin/orbit-migrate`/`bin/orbit-admin`、Docker MySQL 8.4。脚本创建随机本地卷和端口,迁移 28 个版本,初始化一个通用命名空间和队列:
``@@BT@sh
DOCKER=/usr/local/bin/docker \
ORBIT_TEST_MYSQL_IMAGE=mysql:8.4 \
sh scripts/test-db-recovery.sh
``@@BT@
数据库容器停止并移除后,脚本在相同端口和卷上创建恢复容器;Orbit 进程保持运行。
## 实际结果
``@@BT@json
{"initial_readiness":200,"during_database_outage":503,"after_database_recovery":200,"task_accepted_after_recovery":true}
``@@BT@
恢复后的任务受理使用原命名空间凭据和固定 `Idempotency-Key`,说明新数据库连接能重新通过鉴权、结构检查、权限和受理事务。脚本没有启动 Worker,因此没有把任务受理误报为业务处理完成。
脚本语法检查和文档链接检查通过;实际数据库结构继续由 `orbit-admin verify` 核对零外键。标准全量回归仍需在资源充足环境执行,不能用本次短暂中断演练替代。
## 边界
本证据只覆盖单节点数据库连接中断和同卷恢复。它不证明 MySQL 主节点切换、复制确认、跨故障域、磁盘损坏、备份介质持久性、进行中租约接管、外部副作用核对、生产容量或 RPO/RTO。生产上线仍需按目标拓扑独立演练。