54 lines
5.0 KiB
Markdown
54 lines
5.0 KiB
Markdown
# 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个,无外键。
|
||
|
||
详细约定见[控制与结清文档](../15-workflow-controls.md)。每次事务最多一个任务取消,其余步骤收尾最多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检查通过 |
|
||
|
||
定向入口:
|
||
|
||
```sh
|
||
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`。跳过不代表通过。[全量脚本](../../scripts/test-mysql.sh)负责隔离数据库、构建实际二进制并显式运行流程进程回归。
|
||
|
||
首轮控制专项验证暂停时继续接收结果、使用原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进程恢复行为,不能据此宣称整个平台生产验收完成。
|