Files
orbit/docs/reports/phase-5-controls.md

5.0 KiB
Raw Permalink Blame History

P5 控制与停止结清回归

日期:2026-09-18。范围为内部Go控制服务、停止模型和后台结清运行器。公共HTTP/独立SDK、人工核查恢复及P6–P7仍未完成,持续目标继续。

已实现范围

  • PAUSE/RESUME/CANCEL显式授权,稳定操作身份与独立control_revision;后台结果不使原控制版本失效。
  • 门控、控制标记、停止意图、事件、审计、冻结回执及必要根接续同事务。
  • 首次stop_kind和stop_requested_at保存CANCEL或FAILURE目标;进入核查不丢失,后来的用户取消不改写原失败目标。
  • FAIL_AFTER_SETTLED与用户取消收集并行分支及已有任务结果;运行中执行保留许可,未知保持核查。
  • 停止前信号保留、停止后信号拒绝;POLL停止后PENDING不消耗新业务轮次;停止与晚到超时由原意图隔离。
  • 超过32个步骤继续通过根检查点恢复;终态前检查所有历史任务归属、未结束尝试与许可。
  • 迁移000021增加两个中文注释字段和一个查询索引,实体仍35个,直接持久化字段303个,无外键。

详细约定见控制与结清文档。每次事务最多一个任务取消,其余步骤收尾最多32项;P6仍须验证真实负载和积压下的吞吐与延迟。

环境与结果

本机darwin/arm64、Go 1.27.1、Docker MySQL 8.4.10,临时隔离数据库,未接入业务或生产数据库。

检查 结果
首轮真实MySQL专项 控制18组及原信号/TIMER/POLL/结果运行器/Pulse取消/新建结构/v7/v9升级通过,-race,56.012秒
基础回归 最终修订后再次运行make fmt test vet build通过,退出0
修订后专项与实际进程 23组控制场景、真实v20升级及完整流程进程测试通过,-race,46.556秒;流程进程27.09秒、升级4.14秒
全量隔离MySQL、流程进程、SDK与示例 修订后完整脚本通过,退出0;存储191.691秒,实际流程进程27.731秒,Worker SDK 94.897秒,最终SDK进程故障组94.033秒;19个SDK示例和2个独立业务示例全部通过
数据结构与文档 当前MySQL外键0、无COMMENT字段0;303个直接持久化字段声明均有中文注释;891个本地文档链接、53段JSON检查通过

定向入口:

go test -race -count=1 -run '^TestIntegration(WorkflowControls|WorkflowStopUpgrade|WorkflowRuntime|WorkflowClock|WorkflowSignalRuntime|WorkerCancellation|SchemaAndConstraints|NoForeignKeysUpgrade|ApplicationResourcesUpgrade)$' -v ./internal/storage/mysql
go build -o /tmp/orbit-control-test-server ./cmd/orbit
ORBIT_TEST_SERVER_BINARY=/tmp/orbit-control-test-server go test -race -count=1 -run '^TestIntegrationWorkflowRuntimeProcess$' -v ./internal/storage/mysql

命令必须配合一次性ORBIT_TEST_MYSQL_DSN。跳过不代表通过。全量脚本负责隔离数据库、构建实际二进制并显式运行流程进程回归。

首轮控制专项验证暂停时继续接收结果、使用原control_revision恢复、12个同键控制只形成一条审计、旧控制版本及撤销权限后的原键拒绝、控制/结清审计失败完全回滚,及运行中任务分别成功/失败/取消/未知时的最终事实。并行FAIL_AFTER_SETTLED在兄弟分支真实结清后才失败,UNKNOWN始终NEEDS_REVIEW;纯等待、停止前信号、业务PENDING查询不启动后继;60步骤的剩余59项通过有限批次收尾。

修订后专项及全量已验证开始与取消的8轮并发竞争、已领取未开始的暂停/继续、无合法反向归属的额外门控任务不能被取消、取消后原截止到达不改写意图,以及真实v20升级。v20用例只证明真实旧结构的数据迁移,实际执行恢复由独立进程测试验证。全量流程进程用例本体26.43秒:并行失败意图和在途兄弟任务经历全停后,仅在收集真实结果后进入FAILED;用户取消后的UNKNOWN由两个新进程恢复为NEEDS_REVIEW,不发出后继,也不产生错误终态。

完整脚本还通过旧v7外键移除、新建结构、结果订阅、Inbox/Outbox和SDK节点强杀恢复,临时MySQL容器已由脚本清理。移除外键后的000009–000021迁移没有重新引入外键;当前结构实查为0。

首次全量存储回归中两个新增测试使用内部错误名GATE_CLOSED作为协议码而失败,服务端实际按既有契约返回EXECUTION_PAUSED。已修正测试断言,生产门控规则未放宽;该次失败不计为全量通过,最终结果以修订后重跑为准。

剩余范围

  1. 人工核查恢复及旧激活/原预算保护,不能将解除paused当成解除核查。
  2. 公共实例/步骤/控制/信号/来源/审计接口、独立SDK和端到端通用示例。
  3. 完整监控与故障矩阵、性能容量、MySQL高可用/备份恢复、运维与发布核对。

通过本阶段只能证明相应内部状态与单MySQL进程恢复行为,不能据此宣称整个平台生产验收完成。