Files
orbit/docs/reports/phase-5-wait-recovery.md

4.3 KiB
Raw Blame History

P5 等待核查与恢复回归

日期:2026-09-18。范围为内部 ContinuePoll 和 RearmWait,以及它们与原时钟、最终信号、人工核查和节点接管的衔接。实例公共 HTTP/SDK、完整接入场景与 P6–P7 生产验收继续实施,本报告不作为整个平台交付结论。

实现与边界

等待恢复约定区分两类操作:查询已被核实为成功 PENDING 时,保留当前激活,按权威结果事件时间和原间隔接续;独立 SIGNAL/TIMER 重建等待时,创建新代次并保留首次输入、契约、关联和截止。

继续查询需要当前权威任务、已处理 Inbox、原事件和固定结果契约相符,并写入来源事件、版本、轮次、步骤版本和时限的不可变审计证明。运行器核验证明后才能继续,原 Inbox 处置不被改写。等待换代最多32个激活,包含首次等待;TIMER 的自动运行和人工成功核查均使用首次激活时间。所有操作均需明确权限、原因、证据和当前版本;原键返回冻结回执。已到期、停止意图、信号赢家及未消费信号不能通过恢复绕过。

新等待、旧等待结清、步骤、检查点、审计及回执同事务;两类恢复均不自动解除实例核查,也不自行取得执行许可。复用已有结构,无新增迁移或持久化字段,保持35个实体、305个直接持久化字段声明、无数据库外键。

环境与证据

本机 darwin/arm64、Go 1.27.1、Docker MySQL 8.4.10。MySQL 均由脚本创建为隔离的一次性测试库。

检查 结果
存储专项 等待恢复10组及既有查询恢复、人工核查、时钟和信号回归通过,-race,62.023秒
实际进程专项 新增等待恢复与实际 Orbit 进程用例通过,-race,64.299秒;其中实际进程48.61秒、等待恢复14.39秒
基础回归 make fmt test vet build通过,退出0,包含独立SDK和两个业务示例模块
完整隔离回归 整条脚本通过,退出0;存储全量214.576秒,实际流程进程包48.875秒(进程用例47.51秒),Worker SDK 92.595秒,最终SDK进程故障组93.095秒;19个SDK示例及2个独立业务示例全部通过
模型注释 Go AST核对305个带db标签的直接字段声明,缺中文注释0
实际数据库结构 v22测试库外键0、业务表无COMMENT字段0;迁移工具自身的5个元数据列单独计数,不包含在模型字段数中
文档静态检查 最终957个本地链接、53段JSON通过;git diff --check通过

10组专项覆盖:权威 PENDING 来源与原间隔、最终信号优先完成、接续审计失败全部回滚、假 PENDING 和轮次耗尽拒绝、时钟与审计证明不符拒绝、信号换代保留原截止及隔离旧信号、TIMER 使用首次计时、八路同键并发与旧目标拒绝及32代上限、未消费信号不得丢弃、等待重建审计回滚与截止耗尽。

实际进程用例确认所有旧控制进程退出后:

  1. UNKNOWN 查询经人工核查确认为成功 PENDING,由两个新节点处理结果;再次全部退出后,显式接续原等待,再由两个全新节点按原间隔只创建下一业务轮。
  2. 独立 SIGNAL 重建为第二代等待,旧截止不变;节点重新启动后接收第二代信号并推进后继任务。
  3. 独立 TIMER 重建为第二代等待,节点重新启动后按第一次的绝对时间到期,后继任务最终完成。

该进程用例同时覆盖此前 TASK、POLL 同轮重试、停止结清、早到信号和查询竞争场景,累计22个任务,最终执行许可为0。

证据实现见等待恢复专项、实际进程专项及服务输入校验。完整复现入口为隔离 MySQL 脚本。缺少一次性 DSN 或实际二进制而跳过的用例不计作通过;本机单数据库和多进程验证不替代生产复制、切换、备份恢复、容量或 RPO/RTO 验收。

完整回归开始后没有继续修改执行代码,仅补充阶段状态、接口交付顺序及验证记录。回归结束后脚本已清理本轮一次性测试容器。