Files
orbit/docs/reports/phase-3-task-source.md

5.6 KiB
Raw Permalink Blame History

P3 任务直接来源回归

验证日期:2026-09-17。服务端、SDK和三类现有场景已接入直接来源查询;定向MySQL、基础检查及全量隔离回归均已通过,完整脚本正常退出,状态码0。业务事务Outbox仍是P3待交付项,Weave按P4–P5继续。

1. 实现范围

  • 服务模型与存储查询:DIRECT、MANUAL_RETRY、SCHEDULE三类来源;计划ID、触发记录、冻结版本及合并范围;人工重试仅一跳父任务。
  • HTTP路由提供GET /v1/tasks/{task_id}/source,沿用tasks:read和队列范围,拒绝查询参数。
  • 独立SDK验证响应ID、类型组合、版本和时间,保留uint64精度;没有数据库依赖或自动重试。
  • 接口手册、普通提交、计划及人工恢复同步提供调用与输出。

来源独立读取,不改变Task/TaskSummary及Worker协议,不在派发路径增加关联查询。复用现有(namespace_id,task_id)触发唯一索引及计划版本键,不新增迁移、索引或持久化字段;平台仍为35个实体、289个中文注释字段。新只读结构的字段也均有中文说明。

2. 真实MySQL与HTTP

TaskSource集成已验证:

  1. 普通受理和人工派生返回正确类型及直接父任务,读取前后任务快照不变。
  2. 跨命名空间、未授权队列返回NOT_FOUND,撤销凭据后拒绝继续查询;缺失或跨命名空间父任务返回UNAVAILABLE。
  3. 计划发布v2后,已生成任务仍指向v1和原触发记录,任务内容不变。
  4. 只有tasks:read的凭据能查询有限来源引用,但读取完整计划仍被PERMISSION_DENIED拒绝。
  5. 实际HTTP拒绝非法ID、参数与编码,隐藏无权限任务;响应不包含模板、payload或租约秘密。
  6. COALESCED来源保留原触发时间和排除上界。
  7. 模拟无外键数据库中的悬空所有者、缺失版本、错误计划队列、反向关联残留、未知所有者及门控,均拒绝且返回零值而非部分来源;恢复正确关联后查询成功。

定向回归总计24.058秒(含包及升级开销),TaskSource四组9.46秒通过。v7旧库升级验证外键70→0、323个未替换索引组件保留、已有任务内容不变;应用资源升级夹具还原历史真实utf8mb4_0900_as_cs后重放后续迁移。该调整仅修正测试夹具,生产迁移000016的精确utf8mb4_0900_bin保持不变。

3. SDK与完整场景

SDK单元覆盖三类有效响应、FIRED/COALESCED、9007199254740993版本精度、错误task_id、未知种类、字段矛盾、非法版本/时间/ID以及本地拒绝不安全路径。

计划真实HTTP集成在发布新版本后核对旧任务固定来源;恢复真实HTTP集成在回执丢失后以原身份恢复,再查询直接来源与人工重试关联。

已有三个可运行程序新增输出,原输出继续保留:

source_kind=DIRECT
source_kind=SCHEDULE fixed_version=1
source_kind=MANUAL_RETRY parent=<原任务ID>

这些行来自不同程序,不是同一条任务同时具有三种来源。完整启动命令分别见SDK入门、计划场景及恢复场景。

4. 复现与结果

macOS、Go1.27.1、Docker单实例MySQL8.4.10,随机测试凭据、回环端口和一次性数据库。脚本完成后清理隔离资源。

make fmt test vet build
make integration

普通未配置数据库的go test会跳过Integration,不能替代真实数据库回归。本轮全量脚本完成后的实际结果:

验证组 本轮结果
fmt / race / vet / build PASS
全量MySQL / TaskSource四组 PASS,108.438 / 9.98秒
SDK Worker完整组 PASS,87.120秒
SDK计划 / 队列 / 批量 / 查询 PASS,5.815 / 4.419 / 1.391 / 1.461秒
SDK订阅管理 / 事件消费 PASS,33.366 / 52.813秒
SDK人工恢复与来源 PASS,3.398秒
Inbox数据库与消费者故障 PASS,34.591秒
SDK应用额度 PASS,1.370秒
九项节点/Worker进程故障 PASS,60.842秒;加上Inbox消费者,共十项进程故障
可运行程序 17个核心SDK示例 + 1个独立Inbox示例通过,三个新增来源输出符合预期

零外键和历史迁移校验继续通过;文档链接、JSON块及核心SDK无服务端/数据库依赖检查通过。上述耗时为这次正确性回归记录,不是吞吐或容量结论。没有使用中途PASS日志推断脚本完成。

5. 交付边界

  • 此接口只读直接来源,没有链式递归、来源全文或逆向全量任务搜索;状态和执行历史使用对应查询接口。
  • tasks:read只授予当前任务的有限来源引用,完整计划/版本仍独立鉴权。来源查询不产生执行权或恢复权限。
  • 关联损坏返回503,需要排查;不自动猜测或修复归属。所有者与来源由写入事务固定,读取不依赖数据库外键。
  • Weave流程来源随流程引擎实现,当前未知所有者明确拒绝;旧节点缺少新路由时404不能作为DIRECT使用。
  • 本轮不新增执行/持久化协议,也不提供生产吞吐、数据清理或数据库故障切换保证;这些仍按P6验证。