test: verify workflow version isolation and pause recovery races

This commit is contained in:
2026-09-18 10:23:56 +08:00
parent 9f333b5003
commit 19cb70368e
9 changed files with 698 additions and 16 deletions

View File

@@ -1,6 +1,6 @@
# Orbit 生产验收与发布门槛
> 版本 0.2 · 2026-09-17。本文是全平台生产发布门槛。P0–P2 已积累阶段证据,见 [开发计划](08-development-plan.md) 与 [P2 验收](reports/phase-2.md);P3的逐项功能及故障证据边界见[阶段核对](reports/phase-3.md),新增[相对延迟与重试全停恢复](reports/phase-3-delay-recovery.md)。未覆盖的场景继续实施,尚无全平台生产验收或容量结论。
> 版本 0.2 · 2026-09-17。本文是全平台生产发布门槛。P0–P2 已积累阶段证据,见 [开发计划](08-development-plan.md) 与 [P2 验收](reports/phase-2.md);P3的逐项功能及故障证据边界见[阶段核对](reports/phase-3.md),新增[相对延迟与重试全停恢复](reports/phase-3-delay-recovery.md)。新增[流程版本、暂停竞争与全停恢复](reports/phase-4-5-races.md)覆盖W06/W09/W14/W15。未覆盖的场景继续实施,尚无全平台生产验收或容量结论。
## 1. 验收对象与证据

View File

@@ -28,8 +28,8 @@
| P1 任务受理闭环 | 应用凭据与作用域权限、队列、幂等提交、查询、待执行取消、受理事件;SDK 客户端 | API/SDK 创建查询闭环;重复键与内容冲突、响应未确认重报、跨命名空间拒绝、参数边界 | 已完成并通过阶段回归(见 P1 报告;真实断路/提交 ACK 丢失注入留后续故障阶段) |
| P2 Worker 执行闭环 | WSS 接入、能力/容量、领取与开始、租约、续租、结果确认、排空与恢复;Worker SDK | 真 Worker 执行;失联/重连/重复确认/旧尝试拒绝;业务效果未知转核查;节点故障接管 | 已完成并通过阶段回归:服务端、自动 SDK、历史查询、完整 Schema 与真实进程强杀恢复;测试拓扑和剩余生产故障矩阵见 P2 验收报告 |
| P3 Pulse 完整能力 | 安全重试、延时、Cron/固定间隔、漏跑策略、计划版本、运行中取消、并发许可、配额/背压、可靠结果订阅、批量受理、独立任务核查/人工重试、查询筛选与事务Outbox接入 | 多实例领取/触发竞争、重试上限、取消竞争、队列隔离、积压恢复、事件重复交付 | 已完成平台功能阶段验收:[原范围逐项核对](reports/phase-3.md)、[本轮完整回归](reports/phase-3-delay-recovery.md)。补齐相对延迟、改参数关联示例和四种重试全停恢复场景;20个可运行示例全部通过。全平台生产门槛及SDK首版交付剩余项仍按P6–P7推进 |
| P4 Weave 主流程 | SDK 定义构建与发布校验、实例、顺序/分支/结构化并行汇合、信号/定时等待、版本绑定 | 重启接续、早到/重复信号、并行竞争、内部事件重放、发布版本兼容;端到端通用流程 | 定义格式/词法类型校验、不可变发布、独立SDK及六类节点定义例子已实现,已通过[子项验收](reports/phase-4-definitions.md);已补[有限决策器及内部结果交付](reports/phase-4-engine-core.md);[实例受理及首批事务](reports/phase-4-admission.md)已实现;[结果消费和根接续](reports/phase-4-runtime.md)已接入后台,顺序/分支/并行及真实进程恢复已验证;[TIMER与后续POLL轮次](13-workflow-clock.md)已接入;[信号消费和最终查询竞争](14-workflow-signals.md)已接入内部运行器;[内部控制与停止结清](15-workflow-controls.md)已接入;[内部核查与TASK新激活](16-workflow-recovery.md)已接入;等待恢复已接入内部服务;实例公共API/SDK与基础可运行场景已接入;流程任务来源已接入;历史激活/轮次/信号与信号审计已接入;实例筛选分页已接入;[状态事件时间线](api/workflow-events.md)已接入;独立轮询/恢复示例已接入;[精确故障验收](reports/phase-4-5.md)继续开发 |
| P5 Weave 恢复与查询 | 有界查询、暂停继续、取消、人工核查恢复、控制门控与审计 | 轮次与尝试独立预算;暂停/开始/回执/超时竞争;恢复保留预算;未知结果不盲目重复 | 有界查询轮次/尝试独立预算及原截止恢复已接入内部运行器;最终信号竞争及在途查询结清已接入;内部暂停/继续/取消与失败结清已接入;执行核查、步骤结论、解除核查及TASK新激活已接入;[POLL跨激活恢复](17-workflow-poll-recovery.md)已接入;等待恢复已接入内部服务;公共API/SDK已接入;流程任务来源已接入;历史激活/轮次/信号与信号审计已接入;实例筛选分页已接入;[状态事件时间线](api/workflow-events.md)已接入;独立轮询/恢复示例已接入;[精确故障验收](reports/phase-4-5.md)继续开发 |
| P4 Weave 主流程 | SDK 定义构建与发布校验、实例、顺序/分支/结构化并行汇合、信号/定时等待、版本绑定 | 重启接续、早到/重复信号、并行竞争、内部事件重放、发布版本兼容;端到端通用流程 | 定义格式/词法类型校验、不可变发布、独立SDK及六类节点定义例子已实现,已通过[子项验收](reports/phase-4-definitions.md);已补[有限决策器及内部结果交付](reports/phase-4-engine-core.md);[实例受理及首批事务](reports/phase-4-admission.md)已实现;[结果消费和根接续](reports/phase-4-runtime.md)已接入后台,顺序/分支/并行及真实进程恢复已验证;[TIMER与后续POLL轮次](13-workflow-clock.md)已接入;[信号消费和最终查询竞争](14-workflow-signals.md)已接入内部运行器;[内部控制与停止结清](15-workflow-controls.md)已接入;[内部核查与TASK新激活](16-workflow-recovery.md)已接入;等待恢复已接入内部服务;实例公共API/SDK与基础可运行场景已接入;流程任务来源已接入;历史激活/轮次/信号与信号审计已接入;实例筛选分页已接入;[状态事件时间线](api/workflow-events.md)已接入;独立轮询/恢复示例已接入;[版本/暂停竞争/全停回归](reports/phase-4-5-races.md)已补;[剩余故障验收](reports/phase-4-5.md)继续推进 |
| P5 Weave 恢复与查询 | 有界查询、暂停继续、取消、人工核查恢复、控制门控与审计 | 轮次与尝试独立预算;暂停/开始/回执/超时竞争;恢复保留预算;未知结果不盲目重复 | 有界查询轮次/尝试独立预算及原截止恢复已接入内部运行器;最终信号竞争及在途查询结清已接入;内部暂停/继续/取消与失败结清已接入;执行核查、步骤结论、解除核查及TASK新激活已接入;[POLL跨激活恢复](17-workflow-poll-recovery.md)已接入;等待恢复已接入内部服务;公共API/SDK已接入;流程任务来源已接入;历史激活/轮次/信号与信号审计已接入;实例筛选分页已接入;[状态事件时间线](api/workflow-events.md)已接入;独立轮询/恢复示例已接入;[版本/暂停竞争/全停回归](reports/phase-4-5-races.md)已补;[剩余故障验收](reports/phase-4-5.md)继续推进 |
| P6 生产验证与运维 | 完整监控、凭据轮换、备份恢复、滚动升级、运行手册、可复现负载和故障工具 | 对照生产验收清单执行,报告环境/指标/遗留项;容量、RPO/RTO 按真实拓扑验证 | 待开发 |
| P7 首版交付核对 | SDK 兼容与发布准备、完整 API 手册、场景示例、全量回归及交付清单 | 新接入者按文档跑通全部示例;所有首版能力可追溯到实现与测试;报告实际生产边界 | 待开发 |
@@ -42,7 +42,7 @@ P4/P5定时等待与后续查询轮次的实现及回归记录见[时钟报告](
1. 已实现FAIL_AFTER_SETTLED与显式取消的内部分支结清,见[控制报告](reports/phase-5-controls.md):持久取消意图、复用Pulse取消、收集已发出查询/任务结果、等待全部已激活工作结清后才进入失败或取消终态。效果未知仍保留核查。
2. 已实现实例暂停/继续/取消内部操作,以control_revision、操作幂等身份、明确原因及审计保护控制决定;暂停不延长原截止,继续不覆盖核查或取消状态。
3. 已实现内部执行核查、步骤结论、解除核查及TASK新激活和旧激活隔离,见[核查报告](reports/phase-5-recovery.md)。POLL跨激活恢复已实现(见[查询恢复](17-workflow-poll-recovery.md));[核查后PENDING接续和独立等待重建](18-workflow-wait-recovery.md)也已接入内部服务,保留原预算、轮次、结果和证据。
4. 实例/当前步骤/信号/控制/六类恢复及流程操作审计HTTP和独立SDK已接入,步骤查询返回实际激活代次;并行执行与信号回执场景已有可运行示例。激活/轮次/信号历史及信号资源审计已接入;实例筛选分页已接入;状态事件时间线已接入;独立轮询及恢复示例已接入,继续补W06/W09/W14/W15精确回归;[Pulse任务流程来源](api/task-source.md#5-流程固定来源)已交付。逐项验证原键恢复、权限、版本冲突、竞争与进程全停。
4. 实例/当前步骤/信号/控制/六类恢复及流程操作审计HTTP和独立SDK已接入,步骤查询返回实际激活代次;并行执行与信号回执场景已有可运行示例。激活/轮次/信号历史及信号资源审计已接入;实例筛选分页已接入;状态事件时间线已接入;独立轮询及恢复示例已接入,已补[W06/W09/W14/W15专项回归](reports/phase-4-5-races.md);[Pulse任务流程来源](api/task-source.md#5-流程固定来源)已交付。逐项验证原键恢复、权限、版本冲突、竞争与进程全停。
5. 转入P6/P7的生产故障、容量、运维、发布与全部文档核对。内部存储阶段通过不会提前勾选公共接口或生产验收。
公共接入按以下调用链推进;本批已接入启动/当前详情、控制、信号、六类恢复和流程操作审计,并提供独立SDK及基础示例。任务流程来源和有界历史查询也已接入。实例分页和独立查询示例已接入;状态事件时间线已接入;剩余精确故障场景按[P4/P5核对](reports/phase-4-5.md)继续交付:
@@ -56,6 +56,13 @@ P4/P5定时等待与后续查询轮次的实现及回归记录见[时钟报告](
接口只使用已经落地的内部事务规则;SDK保持独立module,不能引用服务端模型或数据库实现。生产故障及容量结论仍由P6专门验收。
### P6 首批实施顺序
1. 统一可复现故障工具:补A04“派发已提交但消息尚未送达”、W01/W13事务提交结果不明,以及W16最终查询结果/回执/下一轮竞争。每个切点必须有实际数据库或进程证据,不能用响应错误推断事务是否已提交,也不能用普通SIGNAL竞争替代最终查询场景。
2. 实现运行观测:受理/授权/完成及流程推进延迟、重试/核查/恢复、待处理与到期积压、连接/发送队列和数据库连接池。明确采集范围与开销;任务、流程、业务键和凭据不得作为无界指标标签。
3. 补齐凭据签发、轮换、撤销及Worker/订阅安全重绑,保持最小权限、管理审计与未知回执可恢复。
4. 实现保留/归档与受保护记录核对,再执行备份恢复、兼容升级和六类容量负载。未确认交付、有效幂等身份、当前/历史执行证据和未终结流程不能被普通清理破坏。生产HA及RPO/RTO继续按实际拓扑验证,不缩减为本机多进程检查。
### P3 功能范围核对
可靠订阅链路完成后,重新对照 [原功能范围](01-functional-spec.md) 和 [事务衔接设计](04-reliability-and-data.md),以下原定首版能力已按核对结果补齐;进一步发现的相对延迟与改参数关联示例也已交付。[P3验收](reports/phase-3.md)逐项保留实现证据及尚待P4–P7完成的原范围,不按已有模块反推全平台完成。

View File

@@ -0,0 +1,74 @@
# P4/P5 版本、暂停竞争与全停恢复回归
日期:2026-09-18。对应[原故障矩阵](../05-production-acceptance.md)中的W06、W09、W14和W15。本批新增可复现的数据库竞争和公共SDK进程故障测试,没有修改服务端执行规则、接口、模型或迁移。无外键约束及中文模型注释保持。
## 验证方式
[真实MySQL测试](../../internal/storage/mysql/workflow_races_integration_test.go)使用一次性数据库,创建独立应用和命名空间。竞争驱动先锁定应用额度行,启动实际服务事务,并通过`performance_schema.data_lock_waits`确认每个参与者都已经进入InnoDB锁等待,再释放锁。测试账户需要读取这些诊断表;生产运行账户无需新增该权限。
这种方式证明事务实际重叠,不以goroutine启动、请求发出或固定sleep代替。测试不声称穷尽所有线程调度;两个参与者交换入队次序,三个参与者遍历六种入队次序。合法结果以持久状态、控制回执和数据库时间为准。
[公共SDK进程测试](../../sdk/go/workflow_process_integration_test.go)不导入服务端模块或数据库驱动,所有发布、启动、控制、信号、执行和查询走HTTP/WSS。启动两个真实Orbit进程;对两个进程分别发送SIGKILL并Wait确认退出;原TIMER唤醒和POLL下一轮就绪时间均过去后,才启动两个新进程。新节点ID必须彼此不同,也不能复用旧节点ID。
## W06:发布新版本后继续执行旧版本
v1实例先进入SIGNAL等待,此时没有后继任务。随后给同一定义发布v2,改变任务处理器版本、实际输入和流程总时限。旧实例收到信号后实际领取、开始、完成后继任务,验证仍使用v1处理器、精确数字9007199254740993、原定义版本ID与原截止。
再显式启动v2、发送信号并实际完成任务,验证使用v2处理器和新输入7。Worker能力集合属于进程身份,因此为v2能力注册新Worker身份;不能改写旧身份的能力集合。两个实例共两个任务,最终许可释放。验证覆盖后继执行及输出,不只检查启动回执。
## W09:信号、自然截止与取消三方竞争
SIGNAL等待设置1秒原时限。信号受理、截止消费者和CANCEL三个事务都进入锁等待后,测试查询数据库时间,等其自然到达原截止再放行;不提前修改等待截止。
六种入队顺序各有两组:没有及时信号,以及此前已经持久受理一个及时信号。本次竞争的新信号必须在原截止后受理,只能保留为过期或拒绝,不能成为赢家。此前按时受理的信号仍必须被消费并成为唯一等待赢家,不能因为消费延迟或取消结清而丢失。
断言包括原截止不变、CANCEL意图保留、无悬挂PENDING信号、无任务执行尝试、无许可遗留、后继至多一个、同键重报返回原信号回执。截止先完成时可能保留NEEDS_REVIEW;取消先完成时可进入CANCELLED。测试保留这两种合法结果,不把取消当作解除已有核查的权限。
## W14:暂停与四种实际操作竞争
分别让PAUSE与Start、Claim、已确认结果的后继创建、已知失败的安全重试上报竞争,每组交换入队次序。以PAUSE回执的数据库时间核对任务创建、尝试创建和开始授权,禁止暂停后发生这些新工作。
- 已领取但未授权的尝试在暂停时Start必须拒绝;解除暂停后使用原尝试,不能再扣一次预算。
- 已授权的工作保留许可,暂停后仍能上报并收集结果,但不能创建后继;结果结清后释放许可。
- 重试上报可保留失败事实和原退避,暂停期间即使退避到期也不能领取下一次尝试。
- 解除暂停后从持久进度完成两个任务,普通场景恰好两个尝试,安全重试场景恰好三个尝试;原流程截止与原任务预算保持。
存储测试通过显式调用内部消费者推进。根待续采用已有集成测试辅助函数将扫描就绪时间置为当前时间,业务截止和重试退避不因此改变;完整后台扫描行为由下述真实进程场景验证。
## W15:暂停跨全部控制节点退出后恢复
并行分支包括一个已开始TASK、一个SIGNAL、一个TIMER和一个两轮POLL,汇合后还有一个TASK。第一轮查询取得PENDING后暂停实例;暂停期间发送信号并完成已授权任务,确认任务结果已提交,然后使两个原节点全部退出。
新节点接管后,公共SDK检查:
- 原任务结果、原信号受理时间/赢家和TIMER到期事实保留;等待ID、激活ID/代次及原截止保持。
- paused和control_revision保留,汇合后的TASK仍BLOCKED,未创建任务。
- POLL仍只使用第一轮,保留原下一轮时间、查询截止和2轮/每轮2次预算;停机不补发轮次。
- 在另一新节点重报原START、PAUSE、SIGNAL,仍返回首次冻结回执。
- 通过另一新节点RESUME后,第二轮查询DONE,再完成汇合后的TASK。最终按业务键查到恰好四个任务,每个恰好一次尝试;轮次历史恰好两轮,原版本、输出、截止及首任务策略不变。
- 成功后重报原RESUME仍返回控制版本3,不创建第二次恢复。
## 命令及验证记录
标准入口:
```sh
make fmt test vet build
make integration
```
`scripts/test-mysql.sh`会创建并清理隔离MySQL;存储组自动执行新的21个子场景。原HTTP服务退出、原Worker/订阅进程测试完成清理后,脚本用独立流程权限凭据单独执行`TestIntegrationWorkflowProcessPauseRecovery`,避免其他控制节点代为推进。
环境:macOS arm64、Go 1.27.1、Docker MySQL 8.4.10。初次定向回归发现测试夹具两处调用错误:修改旧Worker身份的能力集合,以及失败上报遗漏必填非null结果;平台按已有契约拒绝,夹具已改为新身份和合法失败结果。修正后存储定向测试退出0(24.062秒),公共SDK全停测试退出0(10.968秒)。基础fmt、race单元、vet、build退出0。
随后补强数据库授权时间、精确输入数字、全部任务数和完整轮次历史断言,并纳入标准全量回归。完整`scripts/test-mysql.sh`退出0:存储组249.189秒、原流程进程组48.751秒、Inbox34.678秒、Outbox34.688秒、Worker/订阅进程组95.466秒、新暂停全停组13.797秒;23个SDK示例和2个独立业务模块全部通过。这些数字是测试耗时,不是吞吐或延迟指标。
收尾给测试中的“尝试创建或授权时间”SQL条件补上括号,使两个条件都受命名空间限制;该测试修改晚于全量脚本的存储组执行。最终21个存储子场景另在新隔离MySQL、`-race -count=1`下完整重跑,退出0(24.732秒)。服务端、SDK运行代码及迁移均未变化;没有改变生产契约来迎合测试。
最终Markdown检查1173个本地链接、68个JSON块,错误0;格式和差异检查通过。全量升级回归继续确认70个历史外键移除、323个原索引组成部分和原任务保留,最终结构外键0。
## 阶段边界与后续
这四项补强不能代替全平台生产验收。原范围继续保留:W01/W13精确COMMIT结果不明切点、A04派发落库但消息尚未送达、MySQL失联/主从切换、跨故障域容量、热点锁等待、慢消费者及重连风暴、凭据轮换、保留归档、备份恢复和滚动兼容。
下一步按[P4/P5原范围核对](phase-4-5.md)汇总阶段证据,再推进P6统一故障注入和运行观测、P7 SDK发布及实际文件转换示例。当前进程强杀验证使用单机数据库,不提供生产HA、RPO/RTO或百万企业容量结论。

View File

@@ -2,6 +2,8 @@
日期: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数据库或服务端模型:
@@ -19,11 +21,11 @@
| --- | --- | --- |
| 研发定义发布、类型和资源约束 | [定义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全部队列授权。运行中发布v2后继续执行后继步骤的专门场景仍需补强 |
| 固定版本及输入 | 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步待续;精确暂停同时竞争仍有下面列出的缺口 |
| 暂停/继续、取消、分支失败结清 | [公共控制](../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人工恢复及等待换代均保留 |
@@ -39,17 +41,17 @@
| W03 | 早到、重复、迟到、错误关联及代次的实际存储与SDK回归 | 仍须纳入容量模型中的大量信号积压 |
| W04 | TIMER、早到SIGNAL、独立等待恢复均有全停后接续 | 生产长时间等待、保留与清理策略按P6验收 |
| W05 | 并行已知失败结清、未知效果保留核查,成功步骤保持 | 业务补偿不属于已确认首版,不冒充平台回滚外部效果 |
| W06 | 不可变版本、原键固定实例、v1范围授权已验证 | 补“v1等待中发布语义不同v2,再由旧实例继续后继”的完整执行断言 |
| W06 | v1等待时发布不同处理器/输入/时限的v2,实际完成旧实例后继及v2新实例,精确输出、固定版本和原截止保持 | 服务端/SDK滚动兼容仍按P7,不能用定义版本隔离替代 |
| W07 | 已授权任务取消后收集SUCCEEDED/FAILED/CANCELLED/UNKNOWN,含进程全停 | 大量在途取消、外部系统执行失联仍需生产负载和接入方证明 |
| W08 | 同一实例并行结果竞争,后继与汇合仅一次 | 高负载热点实例锁等待在P6测量 |
| W09 | 及时受理后过截止再消费、等待取消、停止前后信号及并发赢家已验证 | 补信号受理、真实截止唤醒、CANCEL三方同时执行的专项回归;顺序用例不能替代 |
| W09 | 信号受理/原截止消费者/CANCEL三个事务均进入MySQL锁等待后放行,六种顺序分别覆盖有/无及时信号;迟到信号不胜出,及时信号保留 | 热点负载、长时间消费积压及数据库切换仍按P6 |
| W10 | 同恢复键竞争、旧激活结果、旧信号代次及恢复后全停 | 滚动版本兼容、长期历史保留另按P6/P7 |
| W11 | 同轮重试与PENDING新轮次的存储、SDK及实际HTTP例子 | 渠道峰值与大批量同刻唤醒按P6 |
| W12 | 最大轮次、截止、原轮尝试耗尽拒绝绕过;新例子保留NEEDS_REVIEW | 不把本地时间预算测试换算成生产延迟指标 |
| W13 | 轮次创建失败回滚、PENDING落库及检查点全停恢复 | 精确COMMIT不确定窗口仍按W01/P6补强 |
| W14 | 已暂停拒绝LEASED开始、开始/取消竞争、暂停期间结果收集及原预算 | 补PAUSE与开始/后继创建/领取/重试的实际并发交错;CANCEL竞争不能代替PAUSE竞争 |
| W15 | 暂停期间任务/信号/到期处理,Continue保留paused,原时限不增加 | 补暂停状态跨全节点退出后解除暂停的公共API完整场景 |
| W16 | 最终信号与查询结果按原受理时间裁决,在途PENDING结清、冲突核查、全停保留 | 三方同时触发及热点负载按W09和P6补强 |
| W14 | PAUSE与开始/后继/领取/安全重试的真实事务竞争,双向入队、数据库授权时间、暂停收集结果、恢复任务/尝试数及原截止断言 | 不声称穷尽全部线程交错;高负载锁等待及故障切点继续P6 |
| W15 | 公共SDK暂停后提交任务结果/信号,两原节点全部SIGKILL并Wait退出;TIMER/下一查询轮就绪时间过去后两新节点接管,显式RESUME完成四任务/两轮查询 | 单机数据库进程故障证据;生产数据库高可用和长停机恢复另按P6 |
| W16 | 最终信号与查询结果按原受理时间裁决,在途PENDING结清、冲突核查、全停保留 | 普通SIGNAL三方竞争见W09;最终查询/回执/下一轮同时到达的故障切点及热点负载继续P6,不能拿W09替代 |
| W17 | 同版本同内容/不同内容、非法定义、SDK丢发布回执恢复 | 旧SDK/服务版本滚动兼容矩阵按P7发布候选核对 |
## 本批验证记录
@@ -66,7 +68,7 @@
## 下一步按顺序完成
1. 补W06的版本变更后实际后继执行、W09三方竞争、W14暂停竞争与W15暂停全停接续,保留可复现的真实数据库/进程断言。
1. W06/W09/W14/W15已补真实数据库与公共SDK进程断言,并完成标准全量回归,见[专项回归](phase-4-5-races.md)。原四项缺口已关闭,后续按剩余生产故障推进。
2. 据这些结果再决定P4/P5功能阶段是否可验收,不能把本报告中的部分验证改成全项完成。
3. 进入P6统一观测、凭据轮换、历史保留/归档、故障切点工具、容量负载、备份恢复与滚动升级;继续保留A04精确未派达、MySQL切换、跨故障域等原门槛。
4. P7补实际文件转换等仍缺的原场景、SDK版本发布与新接入者全量核对。百万企业支持能力只能根据实际工作负载和目标拓扑验证,当前不作容量承诺。