Files
orbit/docs/reports/phase-6-stability-p1.md

5.0 KiB
Raw Permalink Blame History

P1 稳定性与历史归档定向回归

这份报告定义当前代码的可复现入口,命令成功才算目标环境完成验证。它不把本机测试结果当作生产容量承诺。

ORBIT_TEST_MYSQL_DSN='root:...@tcp(127.0.0.1:3306)/orbit_test' \
ORBIT_TEST_SERVER_BINARY="$PWD/bin/orbit" \
ORBIT_TEST_WORKER_URL='http://127.0.0.1:8080' \
ORBIT_TEST_WORKER_CREDENTIALS_FILE="$PWD/.local/worker.credentials.json" \
make stability-check

入口覆盖:

  • TestIntegrationEventProcessCrossNodeReconnectStorm:在两个独立 Orbit 进程之间反复切换 WebSocket 上游,验证重连风暴期间一次处理、一次确认和一次持久交付尝试。
  • TestIntegrationEventProcessSlowConsumerPeerProgress:节点 A 的容量 1 处理器阻塞时,节点 B 仍可推进自己的交付,确认慢消费者隔离。
  • TestIntegrationWithTxRetriesPreCommitDeadlock:两个真实 MySQL 事务反向加锁,使用数据库锁竞争和事务重试指标确认提交前死锁被有界恢复。
  • TestIntegrationFairDispatchApplicationIsolation 与 TestIntegrationWorkflowVersionAndRaces:真实锁等待和多节点竞争路径,不使用固定 sleep 推断锁结果。
  • TestIntegrationRetentionDiskGrowthAndPreview:写入带终态时间的有界任务样本,读取 information_schema.TABLES 的数据/索引字节增长,并核对保留策略预览只返回安全候选。

保留策略由数据库按命名空间保存,默认关闭归档。控制台单管理员通过“保留策略”页面修改窗口,要求版本、幂等键和原因;审计记录保留前后快照。导出是固定表目录的只读 JSON 快照,带 SHA-256 和策略版本,源数据仍保留。未确认交付、未知效果、未结束任务/流程、未处理 Inbox 和有效幂等记录不会成为普通归档候选。最终删除执行器、归档介质和目标拓扑 RPO/RTO 需要单独验收。

本地实测记录(2026-09-23)

环境为 macOS / arm64、Go 1.27.1、Docker MySQL 8.4.10。以下是隔离测试结果,不是百万企业容量或跨故障域高可用承诺。

上一批实现 2f95d9c 完成 make test、make vet、make build、make docs-check 与完整 make integration,包括独立 SDK 示例、真实进程故障及升级检查:

场景 观察结果
跨节点重连 两个独立进程间发生 4 次重连,业务处理 1 次,持久交付尝试 1 次
慢消费者 节点 A 消费阻塞期间,节点 B 仍完成独立交付
提交前死锁 真实反向加锁产生死锁,观察到 1 次有界重试后恢复
锁等待隔离 12 个阻塞连接参与应用公平派发验证,其他应用继续推进
新装与历史升级 Schema 30;外键数量 0;v7 升级保留原 323 个索引组成项
有界磁盘增长 256 × 32 KiB 样本,表和索引统计从 1,818,624 增至 17,661,952 字节;候选预览 100 条、more=true

本次继续补齐控制台归档分页和失败边界,在一次性数据库上运行 go test -race -count=1 -run TestIntegrationRetention -v ./internal/storage/mysql:

  • TestIntegrationRetentionPolicyIsSharedAuditedAndIdempotent:不同 store 读取相同策略;相同幂等操作重放不增加修订号或重复写审计;旧版本修改被拒绝。
  • TestIntegrationRetentionDiskGrowthAndPreview:256 条样本中 254 条终态,另 2 条保留为未知效果/运行中租约;终态记录采用相同完成时间验证复合游标。第一批 1 条,后续每批最多 37 条,共 8 批得到 254 条唯一根记录,源表仍为 256 条。
  • 每批校验 SHA-256、策略版本及相同截止时间;跨类别/命名空间游标、无效游标、越界批量、业务 Bearer、旧策略和关闭策略均被拒绝。
  • 此次物理统计增量为 12,238,848 字节(28,459,008 → 40,697,856)。该一次性数据库包含前面修正测试夹具时留下的样本,不能与上一轮绝对值直接比较;这里只验证有界写入增长及预览/导出的行为,不推导长期容量。

make console-e2e 在另一个空库从迁移与管理员初始化开始,验证:6 个已成功任务可见、WS Worker 排空、失败任务第 2 次成功、定时任务来源固定;保留策略保存/原键重放、旧版本 409、7 类预览、空快照摘要、退出后任务及策略接口 401 均通过。

本次 make test、make vet、make build、make docs-check 通过。服务端归档实现和迁移本次未修改,新增用例使用真实 MySQL 补充已有完整集成结果。

浏览器使用同一批隔离样本验证真实页面:关闭导出时仍可预览;存在未保存修改时禁用预览和导出;开启并保存后版本从 3 升至 4;首批 20 条、第二批累计 40 条且均通过浏览器 SHA-256 校验;切换类别重置进度并清除旧下载链接;空流程快照显示 0 条/已到末批且禁用继续导出。页面错误日志为空。开关点击区域和焦点提示已修正,截止时间带年份和 UTC,源数据不会被页面操作删除。