75 lines
11 KiB
Markdown
75 lines
11 KiB
Markdown
# P4/P5 原范围核对与剩余验收
|
||
|
||
日期:2026-09-18。本报告按[原流程功能](../06-workflow-spec.md)、[开发计划](../08-development-plan.md)及[生产故障矩阵W01–W17](../05-production-acceptance.md)核对,保留未完成项。功能实现、单个场景通过与整个阶段验收分开记录;P4/P5尚不标为整体完成,P6/P7及持续目标保持进行中。
|
||
|
||
新增补强:[版本、暂停竞争与全停恢复回归](phase-4-5-races.md)提供W06/W09/W14/W15的实际事务及公共SDK进程证据。下表随该批更新,原轮询/恢复示例的验证记录保留。
|
||
|
||
## 本批交付
|
||
|
||
新增两个独立可运行SDK示例,均只导入公开SDK及示例内部辅助包,不访问Orbit数据库或服务端模型:
|
||
|
||
- [有界轮询](../examples/workflow-poll.md):先提交一次,实际HTTP查询503→PENDING→DONE,2轮3次尝试;另一流程两轮PENDING后转核查,2轮2次尝试。历史分页、任务来源、实际HTTP次数、原截止和Worker排空逐项断言。
|
||
- [带证据恢复](../examples/workflow-recovery.md):本地渠道保存提交结果后直接关闭HTTP连接,Worker报UNKNOWN;暂停、查询原操作证据、执行核查、步骤结论、解除核查、显式恢复暂停,再完成后继任务。断线实际发生,外部提交只发生1次,精确序号9007199254740993、旧UNKNOWN尝试、同键审计及暂停标记均保留。
|
||
|
||
外部系统为进程内受控HTTP夹具,不是持久业务渠道。恢复示例能证明唯一提交已经结束,并据此模拟管理员的明确决定;不能据此把真实业务核查自动化。平台事务与外部业务副作用的责任边界没有改变。
|
||
|
||
没有新增模型字段、数据库迁移、外键或级联。平台仍为36个模型、312个直接持久化字段;中文注释保持。标准回归加入这两个命令,目前共23个可运行SDK示例和2个独立业务模块;examples/internal/flowdemo是共享辅助包,不计为可运行示例。
|
||
|
||
## 原功能逐项对应
|
||
|
||
| 已确认能力 | 实现与可运行入口 | 已有直接验证证据 |
|
||
| --- | --- | --- |
|
||
| 研发定义发布、类型和资源约束 | [定义API](../api/workflow-definitions.md)、[结构格式](../api/workflow-definition-format.md)、workflow-definition例子 | [定义存储回归](../../internal/storage/mysql/workflow_definitions_integration_test.go):并发同键/同版本、精确数字、非法/损坏定义、权限撤销、事务失败;[SDK](../../sdk/go/workflow_definitions_integration_test.go)提交后丢回执原键恢复 |
|
||
| 顺序、条件分支、有限并行汇合 | weave/engine与持久运行器;[workflow例子](../examples/workflow.md)实际并行后汇合 | [决策器测试](../../weave/engine/plan_test.go)精确条件、分支选择冻结与预算;[实例](../../internal/storage/mysql/workflow_instances_integration_test.go)覆盖六种初始节点;[推进](../../internal/storage/mysql/workflow_runtime_integration_test.go)重复消费、并行结果只建一个后继、满额回滚和根待续 |
|
||
| 固定版本及输入 | StartWorkflow显式version;GetWorkflowVersion及实例来源 | 实例并发受理固定版本、发布v2后原键回执保留;[实例查询](../../internal/storage/mysql/workflow_query_integration_test.go)继续按v1全部队列授权。新增版本回归实际完成v1后继和v2新实例,验证不同处理器/输入、原版本与原截止 |
|
||
| SIGNAL等待、早到和旧代次隔离 | [信号约定](../14-workflow-signals.md)、SendWorkflowSignal及workflow例子 | [受理](../../internal/storage/mysql/workflow_signals_integration_test.go)身份/契约/范围/事务;[消费](../../internal/storage/mysql/workflow_signal_runtime_integration_test.go)并发赢家、真实到期、及时受理晚消费、篡改及最终查询结清 |
|
||
| TIMER持久等待、原截止 | [时钟约定](../13-workflow-clock.md)、workflow例子 | [时钟存储](../../internal/storage/mysql/workflow_clock_integration_test.go)自然到期、重复消费、实例截止截断;[真实进程](../../internal/storage/mysql/workflow_runtime_process_integration_test.go)全停、两新节点接续 |
|
||
| 有界查询与独立尝试预算 | [workflow-poll例子](../examples/workflow-poll.md)、POLL定义与历史轮次API | 时钟存储验证同轮重试、下一轮、满额/暂停不耗轮次、截止与在途结果;新例子分别验证成功和耗尽后的实际请求次数 |
|
||
| 暂停/继续、取消、分支失败结清 | [公共控制](../api/workflows.md)、[停止规则](../15-workflow-controls.md) | [控制回归](../../internal/storage/mysql/workflow_controls_integration_test.go)原control_revision、原键/并发/撤权、开始与取消竞争、并行FAIL_AFTER_SETTLED、UNKNOWN不终结、超过32步待续;新增真实锁等待重叠的PAUSE/开始/领取/后继/重试竞争 |
|
||
| 人工核查、TASK/POLL重试及等待恢复 | [六类恢复API](../api/workflow-recovery.md)、workflow-recovery例子 | [TASK恢复](../../internal/storage/mysql/workflow_recovery_integration_test.go)、[POLL恢复](../../internal/storage/mysql/workflow_poll_recovery_integration_test.go)、[等待恢复](../../internal/storage/mysql/workflow_wait_recovery_integration_test.go):旧激活、尝试/轮次/原截止、证据、失败回滚、当前版本和停止意图 |
|
||
| 完整查询与审计入口 | 当前详情、[历史](../api/workflow-history.md)、[实例筛选](../api/workflow-queries.md)、[状态事件](../api/workflow-events.md)、[任务来源](../api/task-source.md) | 对应存储回归验证当前与历史激活区分、分页、归属损坏、全部固定队列权限;[独立SDK](../../sdk/go/workflow_instances_integration_test.go)覆盖六类恢复和读取,时间线另有SDK与批量事件回滚验证 |
|
||
| 不依赖内存的接续 | MySQL检查点、内部Inbox、额度、门控与同事务事件 | 真实流程进程测试先确认原进程SIGKILL退出,再启动两个新节点;结果、TIMER/POLL、早到/最终信号、停止意图、TASK/POLL人工恢复及等待换代均保留 |
|
||
|
||
上述“已有证据”是相应断言的范围,不等于任意并发交错、数据库故障拓扑或业务渠道已验收。API字段与限制以当前接口手册为准;旧阶段报告保留当时状态,不回写成后来全部完成。
|
||
|
||
## W01–W17 故障矩阵核对
|
||
|
||
| 编号 | 当前证据 | 仍需补强的具体边界 |
|
||
| --- | --- | --- |
|
||
| W01 | 受理/推进/后继创建的SQL失败与SAVEPOINT回滚,原结果和额度保持 | COMMIT回执不明与特定步骤写入切点的进程中断需要统一故障工具覆盖 |
|
||
| W02 | 结果持久化后全控制节点退出,两新节点消费,后继不重复 | 生产数据库切换另按P6,不与应用进程强杀等同 |
|
||
| W03 | 早到、重复、迟到、错误关联及代次的实际存储与SDK回归 | 仍须纳入容量模型中的大量信号积压 |
|
||
| W04 | TIMER、早到SIGNAL、独立等待恢复均有全停后接续 | 生产长时间等待、保留与清理策略按P6验收 |
|
||
| W05 | 并行已知失败结清、未知效果保留核查,成功步骤保持 | 业务补偿不属于已确认首版,不冒充平台回滚外部效果 |
|
||
| W06 | v1等待时发布不同处理器/输入/时限的v2,实际完成旧实例后继及v2新实例,精确输出、固定版本和原截止保持 | 服务端/SDK滚动兼容仍按P7,不能用定义版本隔离替代 |
|
||
| W07 | 已授权任务取消后收集SUCCEEDED/FAILED/CANCELLED/UNKNOWN,含进程全停 | 大量在途取消、外部系统执行失联仍需生产负载和接入方证明 |
|
||
| W08 | 同一实例并行结果竞争,后继与汇合仅一次 | 高负载热点实例锁等待在P6测量 |
|
||
| W09 | 信号受理/原截止消费者/CANCEL三个事务均进入MySQL锁等待后放行,六种顺序分别覆盖有/无及时信号;迟到信号不胜出,及时信号保留 | 热点负载、长时间消费积压及数据库切换仍按P6 |
|
||
| W10 | 同恢复键竞争、旧激活结果、旧信号代次及恢复后全停 | 滚动版本兼容、长期历史保留另按P6/P7 |
|
||
| W11 | 同轮重试与PENDING新轮次的存储、SDK及实际HTTP例子 | 渠道峰值与大批量同刻唤醒按P6 |
|
||
| W12 | 最大轮次、截止、原轮尝试耗尽拒绝绕过;新例子保留NEEDS_REVIEW | 不把本地时间预算测试换算成生产延迟指标 |
|
||
| W13 | 轮次创建失败回滚、PENDING落库及检查点全停恢复 | 精确COMMIT不确定窗口仍按W01/P6补强 |
|
||
| W14 | PAUSE与开始/后继/领取/安全重试的真实事务竞争,双向入队、数据库授权时间、暂停收集结果、恢复任务/尝试数及原截止断言 | 不声称穷尽全部线程交错;高负载锁等待及故障切点继续P6 |
|
||
| W15 | 公共SDK暂停后提交任务结果/信号,两原节点全部SIGKILL并Wait退出;TIMER/下一查询轮就绪时间过去后两新节点接管,显式RESUME完成四任务/两轮查询 | 单机数据库进程故障证据;生产数据库高可用和长停机恢复另按P6 |
|
||
| W16 | 最终信号与查询结果按原受理时间裁决,在途PENDING结清、冲突核查、全停保留 | 普通SIGNAL三方竞争见W09;最终查询/回执/下一轮同时到达的故障切点及热点负载继续P6,不能拿W09替代 |
|
||
| W17 | 同版本同内容/不同内容、非法定义、SDK丢发布回执恢复 | 旧SDK/服务版本滚动兼容矩阵按P7发布候选核对 |
|
||
|
||
## 本批验证记录
|
||
|
||
环境:macOS arm64、Go 1.27.1、Docker MySQL 8.4.10,一次性隔离数据库和真实Orbit进程。新例子先用`go run -race`运行,两个命令均退出0;恢复例子的网络断线由本机HTTP服务器真实注入。
|
||
|
||
标准命令为`make fmt test vet build`及`make integration`。完整标准脚本退出0,23个SDK示例、2个独立业务模块和原进程故障链路均通过。存储组239.651秒、流程进程组48.687秒、Inbox35.613秒、Outbox34.499秒,最后Worker/订阅进程组95.453秒;这些是测试耗时,不是性能指标。
|
||
|
||
收尾按原计划给轮询例子补入首次提交TASK,该修改晚于上述全量脚本的示例执行。最终两个例子另在新隔离数据库、真实Orbit及`go run -race`下完整重跑,退出0,两个轮询场景均验证submissions=1;随后取得基础fmt/race单元/vet/build退出0。平台服务端和迁移未改动;不将较早的全量日志冒充包含最后这项示例修改。
|
||
|
||
最终文档检查1162个本地链接、68个JSON块,错误0。数据库升级回归继续确认70个历史外键移除、323个原索引组成部分和任务保留,最终结构外键0。
|
||
|
||
首次定向脚本省去存储测试后忘记单独执行迁移,bootstrap在发放凭据前拒绝,已修正为先运行orbit-migrate。编译时也纠正了示例误用的来源字段名,正式SDK字段为PollRound。这些修正没有改变平台执行或恢复规则。
|
||
|
||
## 下一步按顺序完成
|
||
|
||
1. W06/W09/W14/W15已补真实数据库与公共SDK进程断言,并完成标准全量回归,见[专项回归](phase-4-5-races.md)。原四项缺口已关闭,后续按剩余生产故障推进。
|
||
2. 据这些结果再决定P4/P5功能阶段是否可验收,不能把本报告中的部分验证改成全项完成。
|
||
3. 进入P6统一观测、凭据轮换、历史保留/归档、故障切点工具、容量负载、备份恢复与滚动升级;继续保留A04精确未派达、MySQL切换、跨故障域等原门槛。
|
||
4. P7补实际文件转换等仍缺的原场景、SDK版本发布与新接入者全量核对。百万企业支持能力只能根据实际工作负载和目标拓扑验证,当前不作容量承诺。
|