Files
orbit/docs/reports/phase-4-runtime.md

46 lines
3.9 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.
# P4 结果消费与自动推进回归
日期:2026-09-18。范围为内部运行器,不是完整Weave或生产高可用验收。
## 已实现
- Orbit后台按数据库到期索引消费内部结果和根检查点;同一事务校验固定实例图、接受结果、更新步骤、创建后继或保存待续,并写确认、事件和审计。
- 顺序、分支、有限并行汇合及32步预算接续;重复消费者不重复创建后继。
- 满额SAVEPOINT回滚本轮后继,保留已确认结果;暂停/停用收集在途结果并保留检查点;失败或超期关闭新执行门控。
- 来源/激活/任务版本校验,非法来源隔离,旧激活或旧结果留痕;数据库故障不被误认成业务失败。
- POLL当前轮次的成功/等待/失败/核查分类,独立保留轮次与尝试预算、绝对截止和下一查询时间。
- 系统审计保存节点、来源记录与实例版本;真实进程强杀、全停时保存结果和双节点接管。
实现说明及明确边界见[运行器文档](../12-workflow-runtime.md)。本轮未增加实体、持久化字段、迁移或外键。
## 环境与执行记录
本机darwin/arm64,Go 1.27.1,独立Docker MySQL 8.4.10;隔离一次性数据库。未使用业务数据库或远端生产环境。
| 检查 | 结果 |
| --- | --- |
| `make fmt test vet build` | 已通过;服务端、独立SDK及两个业务示例module |
| 运行器真实MySQL定向回归 | 14个一级场景,含任务失败/未知/取消/非法输出4种分类及5个POLL分类;最终修订连续3轮通过,20.018秒 |
| 真实Orbit进程故障 | 已通过:确认唯一控制进程SIGKILL退出后保存结果,两个新进程只生成一个后继,最终3个任务、3条消费确认及3条推进审计 |
| 全量`make integration`等价脚本 | 已通过,退出码0;全存储132.893秒、流程进程8.506秒、Worker SDK 91.172秒、SDK进程故障93.679秒;19个SDK示例及2个独立业务示例全部通过 |
定向命令为`go test -race -count=3 -run '^TestIntegrationWorkflowRuntime$' -v ./internal/storage/mysql`,依赖`ORBIT_TEST_MYSQL_DSN`指向隔离测试库。进程用例额外需要构建后的`ORBIT_TEST_SERVER_BINARY`;全量入口[脚本](../../scripts/test-mysql.sh)负责创建隔离库、构建并执行该用例。
文档复核834个本地链接与53个JSON代码块,错误0;差异空白检查通过。
数据库复核MySQL 8.4.10、外键0、缺少COMMENT的业务列0。完整迁移升级回归与现有索引/数据保留检查通过。
开发中真实回归发现并修复了:未完成步骤NULL输出的SQL读取不兼容、分批复用检查点引发审计操作身份冲突;随后增加迟到结果历史版本回归,确保新确认不与先前实例事件冲突。后继额度中途失败和审计失败分别注入验证了事务回滚。
全量回归启动后,代码审阅补充了TASK确认取消保留CANCELLED状态,并新增对应真实Worker回归。最终修订另跑全部运行器场景三轮(20.018秒)、真实进程故障(9.183秒)及基础检查;全量记录与最后定向记录分别保留,不能把较早的全量结果声称为包含后续修改。
## 尚未完成的原定范围
1. SIGNAL/TIMER等待消费及到期扫描;早到、重复、超时和回执竞态。
2. POLL下一轮派发、完整定时扫描、信号与在途查询结清;已有next_poll_at不代表下一轮已自动运行。
3. FAIL_AFTER_SETTLED分支取消和失败终态收敛、暂停/继续/取消公共管理API、带证据人工恢复。
4. 实例/步骤/来源公共HTTP和独立SDK、全节点可运行接入例子。
5. 全量监控、负载与故障矩阵、MySQL高可用拓扑和备份恢复、P6–P7交付审计。
本地进程回归使用内部Start和Pulse执行存储驱动业务结果;这验证真实控制进程接管,不能替代公共HTTP/SDK端到端验收,也不证明生产数据库RPO/RTO或容量。