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

40 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P5 等待核查与恢复回归
日期:2026-09-18。范围为内部 ContinuePoll 和 RearmWait,以及它们与原时钟、最终信号、人工核查和节点接管的衔接。实例公共 HTTP/SDK、完整接入场景与 P6–P7 生产验收继续实施,本报告不作为整个平台交付结论。
## 实现与边界
[等待恢复约定](../18-workflow-wait-recovery.md)区分两类操作:查询已被核实为成功 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。
证据实现见[等待恢复专项](../../internal/storage/mysql/workflow_wait_recovery_integration_test.go)、[实际进程专项](../../internal/storage/mysql/workflow_runtime_process_integration_test.go)及[服务输入校验](../../weave/recovery/service_test.go)。完整复现入口为[隔离 MySQL 脚本](../../scripts/test-mysql.sh)。缺少一次性 DSN 或实际二进制而跳过的用例不计作通过;本机单数据库和多进程验证不替代生产复制、切换、备份恢复、容量或 RPO/RTO 验收。
完整回归开始后没有继续修改执行代码,仅补充阶段状态、接口交付顺序及验证记录。回归结束后脚本已清理本轮一次性测试容器。