feat(dispatcher): clean confirmed rejected originals before their receipts

This commit is contained in:
2026-10-11 19:51:34 +08:00
parent 04f7e915cf
commit 0fa50ad9c5
8 changed files with 587 additions and 23 deletions
+10 -1
View File
@@ -38,6 +38,15 @@
- 既有恢复扫描能续处理 delivered 中间状态,避免清理后同次遍历把已删除音频误报成孤立文件;单条坏目录不妨碍其他合法记录。没有新增十秒全目录清理任务,既有恢复调度保持原用途。
- 信息/目录删除失败后重启、未完成引用、无音频的坏回执、未知文件、跨实例并发及互斥清退测试通过;`go test -race ./internal/agent ./internal/rpc ./cmd/sip-go-agent` 通过。
### 已确认拒绝原始文件
- 新增资格/事务/文件失败反例后实现。call.execute、task.control、sip.config 结构拒绝须有对应 typed publisher confirm;无回执、未确认、非拒绝及已接纳执行的冲突不会删原始文件。
- 按接收 Dispatcher、原类型/ID、租户及完整回执字节关联,验证原消息身份、记录结构、私有普通文件和完整记录 SHA-256。关联或内容冲突保留本组原件及完成依据。
- 新文件名仅增加回执正文 SHA-256 前缀,保证即使本条记录无法解析也能保留正确回执、而不阻止独立组;这是内部磁盘索引,不新增业务编号或协议字段。现有仅记录 SHA-256 命名的文件仍以完整内容验证,不改写或迁移;旧文件若连关联身份也无法读取,保留文件及潜在完成依据,日志明确要求人工核验,不猜测删除。
- 一回执多原件先逐条删除并同步目录,全部完成后才删回执;文件删除半途失败和原件删完后回执事务失败都能补收尾。未生成回执的孤立原件、未确认组、未知名称和既存 .pending 临时文件不删。
- RejectData 写入和清理共享生命周期排除;清理结束后同源再来的新拒绝保留新原件和未确认回执,不误删为旧记录。移除了此前 admitted rejected 的“只要整个拒绝目录非空就保留”保护,改为精确本组资格。
- MQ 确认后的真实控制器入口已验证三类拒绝,未产生执行或伪造最终结果;多原件、两阶段失败、损坏组与独立组、既有文件、未知临时文件和并发写入回归通过。`go test -race ./internal/store ./internal/dispatcher ./internal/rpc` 通过。
## 尚待完成
拒绝原始文件的准确关联与续处理、午夜补扫,以及全量检查、隔离 MQ/HTTPS/mTLS、覆盖率和增长验收。上述局部验证不代表首期全部完成,不代表真实 SaaS、通话或生产验收。
午夜补扫,以及全量检查、隔离 MQ/HTTPS/mTLS、覆盖率和增长验收。上述局部验证不代表首期全部完成,不代表真实 SaaS、通话或生产验收。