Files
orbit/docs/reports/phase-2-worker-runtime.md

51 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P2 自动 Worker 运行器回归
日期:2026-09-17。自动运行器已实现并通过本轮回归;P2 仍需补齐尝试/证据查询、协议 Schema 及完整阶段验收。没有修改已有迁移或持久化模型。
## 本轮实现
独立 SDK 新增 NewWorker / Run / Stats / Events,支持能力注册、容量限制、独立处理器执行、自动会话心跳、自动任务续租、稳定身份重连、结果重报及有界排空。业务明确失败与未知效果分开;panic、Goexit 和不可接受的结果都有稳定分类。配置及数据结构提供中文注释。
网络控制和处理器执行分离;租约监视器独立工作,不能因控制请求阻塞而延长权限。过期取消不可逆,新的较短会话期限也会缩短本地授权。当前控制请求按连接串行,吞吐取决于数据库/网络与配置容量,需要 P6 负载验证。
## 验证环境与入口
macOS arm64、Go 1.27.1、Docker MySQL 8.4.10、锁定 coder/websocket v1.8.15。真实 Orbit 命令运行在随机回环端口,SDK WSS 故障网关使用受信任测试证书,不跳过 TLS 验证。
```sh
make test
make vet
make build
make integration
cd sdk/go
GOWORK=off go test -race ./...
GOWORK=off go vet ./...
```
隔离集成脚本先运行既有模型/迁移/任务/Worker/WSS 回归,再启动真实服务器与 Worker 专用凭据,执行底层 SDK 和自动运行器测试及全部示例。凭据不进入 URL、命令行参数或输出,结束后移除隔离测试容器。
## 通过的场景
| 场景 | 实际断言 |
| --- | --- |
| 自动重连与双重 ACK 丢失 | 网关分别在实际服务提交 start / finish 后丢 ACK;运行器自动重连核对,处理器只调用一次,服务端仅一次尝试,结果保持精确数值 |
| 跨越初始租约的执行 | 处理器执行 32 秒,跨越服务端首次 30 秒租约,至少两次自动续租确认后仍取得权威 SUCCEEDED |
| 收尾期间保持执行 | 处理器开始后立即取消 Run context,运行器持久化排空并在 45 秒 grace 内继续续租/收集结果,正常返回且 Running=0 |
| 业务失败与未知效果 | 明确 WorkerFailure → FAILED;普通 error 和 panic → NEEDS_REVIEW;SDK 不泄露异常正文 |
| 不协作的处理器 | 函数忽略 context 时,250 毫秒收尾期限后 Run 有界返回,错误记录 1 个未确认尝试和仍运行的处理器,没有声称杀死 goroutine |
| 自动租约到期取消 | 达到单次尝试时限后处理器观察到 ErrExecutionLeaseLost,只调用一次,任务进入 NEEDS_REVIEW |
| 持续断网与证据重报 | 断开活跃 WSS 并让网关拒绝重连,处理器仍按本地期限取消;恢复服务后自动上报待确认结果,收到 EVIDENCE_ONLY,权威状态和尝试数不变 |
| 实际业务并发上限 | 6 个任务、容量 2,处理器实际峰值恰为 2,所有任务一次尝试完成并排空 |
| 租约监视器 | 续期后旧期限不取消处理器;新会话缩短期限被采用;到期后更新不能复活 |
| 卡住的握手与认证失败 | HTTP 握手不返回时,50 毫秒 grace 仍能中断并收尾;HTTP 401 立即终止且不执行处理器,不输出上游原始正文 |
| 处理器异常保护 | panic、runtime.Goexit、重复 JSON 键、超范围数字与超深结果均产生受控 UNKNOWN 报告;执行计数正确释放 |
| 实际命令行示例 | 自动 Worker 执行三条文本规范化任务;started=3、confirmed=3、running=0,结果按预期转换 |
以上为正确性和受控故障证据,不是性能基准。实际自动恢复测试运行在同一真实服务进程后面的 WSS 故障网关;已有服务端测试覆盖不同 node ID 的租约迁移,但本轮未把这两层合并描述成 SDK 多主机宕机验收。
## 限制与下一步
未确认结果只在 Worker 进程内保留,强杀进程后由服务端租约恢复与业务核查衔接。业务副作用幂等、资源端代次隔离、宿主机/数据库故障与部署拓扑仍需对应验证。运行器不提供业务自动重试;策略性重试在 P3。
继续补齐 P2 尝试/证据查询和协议 Schema;再进入 P3 的重试、计划、配额、可靠事件订阅。不会以本轮 SDK 回归代替全平台生产验收。