43 lines
5.2 KiB
Markdown
43 lines
5.2 KiB
Markdown
# P4/P5 流程公共 HTTP 与独立 SDK 接入回归
|
||
|
||
日期:2026-09-18。范围为15条实例/控制/信号/恢复/操作审计路由、当前步骤详情、独立Go SDK和一个实际并行执行场景。本报告不表示P4/P5全部范围或生产平台已完成。
|
||
|
||
## 实现
|
||
|
||
- StartWorkflow固定版本和输入;GetWorkflow读取当前实例,GetWorkflowSteps返回最多128项元数据,GetWorkflowStep只读取单个当前激活的输入/输出、查询预算及等待。当前代次进入新步骤视图和恢复回执;旧冻结回执不改写。
|
||
- ControlWorkflow使用control_revision;信号固定步骤和激活代次。六类人工恢复复用现有事务服务,版本、证据、明确声明、原预算和停止意图全部保留。
|
||
- 流程资源操作审计支持独立权限、摘要分页和单条正文,游标绑定命名空间、实例及查询种类。信号资源审计及完整激活历史尚待补齐。
|
||
- 严格JSON支持匿名公共字段的扁平组合,仍拒绝大小写别名、未知/重复字段和缺少必填确认,保留显式null和精确整数。
|
||
- 初始化分别授予执行、控制、信号、恢复和审计权限,原workflow-access仍只定义读/发布。联调发现新审计动作漏登记导致凭据被拒绝,已补齐认证白名单,并在凭据交付前验证权限集合。
|
||
- SDK保持独立module,协议类型有中文注释,不导入服务端模型或存储。新增运行例子为并行处理→汇合→定时等待→模拟外部回执→后继任务,验证恰好三个任务和有界排空。
|
||
|
||
本批不新增迁移、数据表或持久化字段;仍为35个实体、305个直接持久化字段声明,无数据库外键和级联。
|
||
|
||
## 回归证据
|
||
|
||
环境为本机darwin/arm64、Go 1.27.1、Docker MySQL 8.4.10;专项及完整脚本使用一次性隔离数据库和真实Orbit二进制。
|
||
|
||
| 检查 | 结果 |
|
||
| --- | --- |
|
||
| 既有执行/恢复与元数据读专项 | `-race`通过,39.627秒,覆盖实例受理、TASK/POLL/等待恢复与新增当前详情读取 |
|
||
| 初始化权限与详情专项 | `-race`通过,5.892秒;六种独立流程授权及无外键归属拒绝 |
|
||
| 独立SDK专项 | 定义SDK与四组实例场景通过,包21.154秒;实例场景19.76秒 |
|
||
| 可运行示例 | 原定义发布例子与新workflow例子通过;新例子SUCCEEDED、start_deduplicated=true、signal_deduplicated=true、started=3、confirmed=3 |
|
||
| 基础回归 | 最终make fmt/test/vet/build全部通过,包含主模块、独立SDK和两个业务示例模块的竞态检查、静态检查及构建 |
|
||
| 完整隔离回归 | `scripts/test-mysql.sh`退出0;存储219.229秒、实际流程进程恢复48.336秒、流程SDK21.342秒(四组实例20.01秒)、最终Worker/订阅进程故障组95.200秒;20个SDK示例及2个独立业务模块全部通过,一次性环境由脚本清理 |
|
||
| 无外键升级 | 历史v7至当前版本回归通过,4.58秒;70个外键全部移除,已有数据、未替换索引及唯一约束保留,运行时拒绝意外新增外键 |
|
||
| 模型、SQL及文档 | Go AST核对305个直接持久化字段,缺中文注释0;实际MySQL已应用至v22,外键0、业务表字段缺COMMENT为0;991个本地文档链接及61个JSON示例检查通过 |
|
||
|
||
四组真实HTTP/SDK场景:
|
||
|
||
1. 服务端实际提交启动事务后代理丢弃响应,原键找回同一实例和原截止;暂停/原键恢复/旧控制版本拒绝/继续,Worker完成首任务后经过TIMER与SIGNAL,再执行后继;信号旧回执与当前消费结果分别查询。审计分页及跨实例游标拒绝、取消等待实例也一并覆盖。
|
||
2. Worker报告UNKNOWN → ReviewWorkflowTask确认成功 → 后台消费新结果 → ResolveWorkflowStep确认逻辑成功 → ContinueWorkflow;旧UNKNOWN尝试保留,管理原因和证据可读取。
|
||
3. 已知失败步骤与并行信号等待 → RearmWorkflowWait第二代,原截止不变 → 旧代次信号被拒绝 → RetryWorkflowStep只保留一次剩余尝试 → 解除核查 → 新任务和新代次信号完成流程。
|
||
4. 查询UNKNOWN → 核查为SUCCEEDED/PENDING → 原结果消费 → ContinueWorkflowPoll → ContinueWorkflow → 只创建第二业务轮并最终DONE;查询总截止不变。
|
||
|
||
实现和证据:[公共路由](../../internal/transport/httpserver/workflows.go)、[严格JSON测试](../../internal/transport/httpserver/workflows_test.go)、[初始化范围测试](../../internal/storage/mysql/workflow_bootstrap_integration_test.go)、[当前详情及审计范围测试](../../internal/storage/mysql/workflow_details_integration_test.go)、[独立SDK场景](../../sdk/go/workflow_instances_integration_test.go)、[示例源码](../../sdk/go/examples/workflow/main.go)。完整复现入口是[隔离MySQL脚本](../../scripts/test-mysql.sh),跳过的环境依赖测试不算通过。
|
||
|
||
## 剩余交付
|
||
|
||
继续提供实例筛选分页、完整激活/轮次/信号历史、信号资源审计、Pulse任务流程来源和更多独立恢复示例,再逐项核对P4/P5原功能范围。P6/P7仍包括生产监控、凭据轮换、故障及容量工具、备份恢复/切换与发布验收。本机多进程和单数据库回归不能替代生产复制、跨故障域部署或RPO/RTO验证。
|