标题: [Bug][数据一致性] delete_database 跨 MinIO/PostgreSQL(及 Milvus)多步删除非原子,中途失败留下脏数据
正文:
问题
backend/package/yuxi/knowledge/base.py 的 delete_database(约 978 行)删除一个知识库的流程是:
- 删除 MinIO 对象(按前缀清 bucket);
- 删除 PG 的
knowledge_files 与 knowledge_bases 记录;
- (MilvusKB 变体还会先 drop Milvus 集合。)
步骤之间没有事务或补偿机制。任一步失败抛异常后后续步骤不再执行,留下不一致:
- MinIO 对象已删、PG 记录还在 → 引用失效对象;
- PG 已删、MinIO 对象残留 → 孤儿文件;
- 跨到第三个存储(Milvus)时不一致面更大。
无重试/对账逻辑,只能靠 manual_consistency_check 事后发现。
建议
- 先记录待删清单,删除以幂等顺序执行,每步失败可安全重试(删除操作本身幂等,重试不会放大破坏);
- 删除完成前不更新"已删除"状态,失败则整体重试/补偿;
- 增加对账任务定期清理跨存储孤儿(MinIO 对象无 PG 引用、Milvus 向量无 PG chunk)。
标题: [Bug][数据一致性] delete_database 跨 MinIO/PostgreSQL(及 Milvus)多步删除非原子,中途失败留下脏数据
正文:
问题
backend/package/yuxi/knowledge/base.py的delete_database(约 978 行)删除一个知识库的流程是:knowledge_files与knowledge_bases记录;步骤之间没有事务或补偿机制。任一步失败抛异常后后续步骤不再执行,留下不一致:
无重试/对账逻辑,只能靠
manual_consistency_check事后发现。建议