feat: deliver authenticated task APIs, SDK and P1 regression
This commit is contained in:
65
docs/reports/phase-1.md
Normal file
65
docs/reports/phase-1.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# P1 任务受理与 SDK 回归记录
|
||||
|
||||
日期:2026-09-17。结论:任务受理阶段已实现并通过本地真实 MySQL 回归;执行引擎和生产高可用验收仍未完成。
|
||||
|
||||
## 实现范围
|
||||
|
||||
- 凭据摘要校验、有效期/撤销、应用与命名空间启停、动作和队列范围。
|
||||
- 受控 bootstrap 命令:创建应用、命名空间、初始队列与凭据,0600 新文件交付,初始化审计。
|
||||
- 队列创建/查询,任务提交/单条查询/游标分页/WAITING 普通任务取消。
|
||||
- 同一事务中的幂等预留、语义摘要、资源状态、持久化事件、管理审计和回执。
|
||||
- 独立 Go SDK 的对应方法、类型化错误、请求身份和精确 JSON 数据。
|
||||
- Markdown 接口字段、失败行为、SDK 接入、任务受理场景源码。
|
||||
|
||||
新增迁移 000002_task_api:业务 JSON 改为 MEDIUMTEXT + JSON_VALID,避免 MySQL 原生 JSON 对业务数字的重新编码;元数据仍使用原生 JSON。增加队列内任务创建时间及状态分页索引。初始迁移校验和保持不变。
|
||||
|
||||
## 环境与执行入口
|
||||
|
||||
本机 macOS / arm64,Go 1.27.1;Docker 隔离容器 MySQL 8.4.10,回环随机端口、随机密码、用后清理。没有连接已有业务数据库。
|
||||
|
||||
```sh
|
||||
make test
|
||||
make vet
|
||||
make build
|
||||
make integration
|
||||
go test ./internal/jsonvalue -fuzz FuzzCanonical -fuzztime=5s
|
||||
cd sdk/go
|
||||
GOWORK=off go test -race ./...
|
||||
GOWORK=off go vet ./...
|
||||
```
|
||||
|
||||
Go 未全局安装时,通过 make GO=/absolute/path/to/go 指定。集成脚本支持 GO、DOCKER、ORBIT_TEST_MYSQL_IMAGE。
|
||||
|
||||
## 实际验证
|
||||
|
||||
| 场景 | 结果 |
|
||||
| --- | --- |
|
||||
| 初始迁移 + 前向迁移,模型字段、隔离、预算、不可变历史、dirty/checksum 防护 | 通过 |
|
||||
| 16 个并发请求共用一个提交键 | 1 次创建、其余复用;同一任务,受理事件和提交审计各 1 条 |
|
||||
| 首次响应未被调用方确认后的原样重报 | 返回原任务与原回执;deduplicated=true |
|
||||
| 字段顺序、1 与 1.00 等价;同键不同内容 | 等价请求复用;不同内容 409 |
|
||||
| 9007199254740993、大整数和多位小数 | 提交、GET、缓存回执不损失数字精度 |
|
||||
| 错误秘密、过期、撤销、应用/命名空间禁用 | 拒绝 |
|
||||
| 跨命名空间、只读动作、队列范围 | 拒绝对应越权访问 |
|
||||
| 未知/重复/别名字段、非法 Unicode、超大 body、过期时间、分页上限 | 拒绝且不留下成功幂等预留 |
|
||||
| 游标分页 | 无重复项;不带业务 payload;更换过滤条件后游标无效 |
|
||||
| 两个不同取消键竞争同一版本 | 1 个成功、1 个 409;取消审计 1 条,终结事件 1 条 |
|
||||
| 同一取消键重复确认 | 原版本仍能取回原取消回执,不重复追加历史 |
|
||||
| 注入审计 INSERT 失败 | 503;任务仍 WAITING/revision=1;事件和预留整体回滚;HTTP 不泄露 SQL 错误 |
|
||||
| 初始化交付失败 | 应用、队列、凭据全部回滚 |
|
||||
| 已取消 context 提交 | 不提交 |
|
||||
| SDK 重定向、错误解析、精确 revision/JSON、写操作不静默重试 | 通过 |
|
||||
| 真实 CLI → 服务进程 → 独立 SDK 示例 | alive/ready;duplicate=true;最终 CANCELLED/revision=2 |
|
||||
| JSON 规范化模糊测试 | 一次约 20 万输入执行,未发现规范化不稳定;不等同于完整形式化证明 |
|
||||
|
||||
集成测试会主动制造一条 UNAVAILABLE 日志以验证审计失败回滚,该日志是预期结果。实际回归曾发现可空 SQL 结果直接扫描到 json.RawMessage 的兼容问题,已改为先扫描 []byte,再赋给响应 DTO,并由受理与查询测试覆盖。
|
||||
|
||||
## 尚未验证或未实现
|
||||
|
||||
- P1 没有 Worker、WebSocket、自动执行、延时扫描、重试扫描或定时计划;任务不会自行完成。
|
||||
- 取消仅覆盖 WAITING 且非流程所属任务;运行中取消、未知结果核查按 P2/P5 完成。
|
||||
- 队列并发/速率配置已保存,尚未启动执行限流;整体 API 配额与背压在后续阶段。
|
||||
- 凭据轮换/管理 API、数据清理、完整监控、备份恢复在后续阶段。
|
||||
- “响应未确认重报”当前验证为重复发送已经提交的请求;未注入真实网络断路或数据库提交 ACK 丢失。
|
||||
- 未运行生产拓扑、复制切换、跨故障域恢复或容量压测。测试耗时不作为吞吐/延迟指标。
|
||||
- SDK 尚未发布版本,代码保存在本地开发分支,当前报告不代表远端发布或生产上线。
|
||||
Reference in New Issue
Block a user