4.4 KiB
4.4 KiB
MQ 上传调整:本地阶段证据
本记录仅覆盖本地代码和隔离测试,不代表完整目标通过,不代表真实 OSS、供应商或生产验收。
已实现
- Dispatcher 使用已绑定身份,持久保存
recording.uploaded上传事实和原通知。上传完成只在 outbox 发布成功后记录;R13 在通知尚未交付时返回 Unavailable,可重试原事实通知。 - 上传路径不再执行对象 HEAD、不等待 SaaS、不生成 OSS ID,也不发送
recording.ready。内部完成响应的旧oss_id字段已移除并保留字段编号;旧不可变外部契约包未因此修改。 - Agent 在 PUT 前独占并持久记录上传尝试。失败或结果未知不会自动再次 PUT;成功结果和原 binding/asset 保存到文件,Agent 启动恢复仅发送通知,不申请 TOKEN、不读取或发送录音。
- TOKEN 固定 15 分钟,非法文件大小明确拒绝;普通 HTTP transport 错误不再携带外层签名 URL。签名 URL 不是 OSS 原生一次性凭据。
- 授权按 upload_id/operation_id/请求摘要持久绑定;重放旧操作只返回原授权,即使它已经过期。
agent upload-retry要求调用方显式提供新的 UUID v4 请求ID;各次请求分别持久占用,不能复用旧请求执行另一轮PUT。 - 原始上传及通知恢复、显式再申请共用跨进程文件锁。源文件变化时按实际发送字节核验大小/SHA-256,不能把预读摘要当作实际上传事实。
- 授权时的bucket/object_key持久绑定。后续配置更换bucket不能改写原上传通知的位置,也不能把原上传身份重新授权到另一个bucket。
- OSS参数仅来自严格JSON文件及其明确引用的凭据环境变量;旧OSS环境配置、HEAD核验和OSS ID生成辅助路径已移除。部署样例及systemd入口使用必需的JSON配置。
- MQ 发送保留原
event_id/message_id到 AMQPMessageId。使用 persistent 消息、durable 队列及精确绑定、mandatory 和 publisher confirm。 - outbox 每次仅领取即将发送的一条消息。原批量领取方式在第一条发送失败时,会使余下消息滞留 dispatching,现有回归测试证明无需重启即可恢复整批;恢复状态写入错误不再被吞掉。
- MQ 独占身份连接断开会停止共享准入上下文,新 Dispatcher RPC 被拒绝;不能由此推断 Agent 已有许可全部撤销。
已执行检查
- Go 1.27.1。
- 修改相关包的 race 测试,以及全仓 vet、格式和 diff 检查通过;这些不是最终全仓覆盖率验收。
TestRecordingNotificationRecoveryDoesNotPUTAgain:本地 TLS 测试端,重启文件状态后一次 PUT、一次授权请求、两次事实通知,保留源文件。TestLocalUploadNoticeSurvivesUnroutableAndRestart:独立本地 RabbitMQ vhost,无绑定返回失败;SQLite 重启后保留原通知;恢复绑定后入队。- 同一测试注入“RabbitMQ 实际发布成功,但应用丢失发布结果”:交付未被提前标记完成,再次发送保留原 MessageId 和正文。队列收到两份同身份持久消息,符合至少一次交付;未新建资产或触发 PUT。这是应用边界故障注入,不冒称网络层 confirm 抓包实测。
- 上传完成判定发生在读取队列前,不需要 SaaS 消费者或业务处理回复。
- 本地 D1/D2 隔离、查询/补传与上传分别使用隔离测试队列环境;相关 RPC、MQ、Dispatcher race 测试通过。
- 本地MQ专项race日志:
/tmp/go-sip-local-acceptance.cpYTru/test.log,退出码0,覆盖store/RPC/MQ/Dispatcher/CLI;Agent/OSS race检查另见/tmp/go-sip-upload-race-latest.log。 - 新增授权旧请求不续期、显式新请求一次PUT、跨Spool互斥、实际上传字节变化拒绝、原bucket跨配置变更保留等测试。旧路径清理后相关普通回归通过:
/tmp/go-sip-oss-cleanup-tests.log。 deploys/config/dispatcher.json.example已通过当前严格Schema验证。
未关闭事项
- 执行、控制、AI 配置/授权的完整 v2 MQ 运行链路及持久恢复尚未全部完成。
- 旧运行文档和部分非上传事件仍待统一;不得以本记录关闭整个 W 任务。
- 最终全仓 race、构建、至少 65% 覆盖率、契约和统一部署诊断验收尚未完成。最新全仓普通测试覆盖率 39.9%(未启用本地 MQ 集成环境),仍低于 65%;不能用局部测试通过代替。
- 未执行任何真实 OSS、云资源、付费供应商或外呼验证。