Skip to content

[Bug][数据一致性] delete_database 跨 MinIO/PostgreSQL(及 Milvus)多步删除非原子,中途失败留下脏数据 #876

Description

@Alex-Fleet

标题: [Bug][数据一致性] delete_database 跨 MinIO/PostgreSQL(及 Milvus)多步删除非原子,中途失败留下脏数据

正文:

问题

backend/package/yuxi/knowledge/base.pydelete_database(约 978 行)删除一个知识库的流程是:

  1. 删除 MinIO 对象(按前缀清 bucket);
  2. 删除 PG 的 knowledge_filesknowledge_bases 记录;
  3. (MilvusKB 变体还会先 drop Milvus 集合。)

步骤之间没有事务或补偿机制。任一步失败抛异常后后续步骤不再执行,留下不一致:

  • MinIO 对象已删、PG 记录还在 → 引用失效对象;
  • PG 已删、MinIO 对象残留 → 孤儿文件;
  • 跨到第三个存储(Milvus)时不一致面更大。

无重试/对账逻辑,只能靠 manual_consistency_check 事后发现。

建议

  1. 先记录待删清单,删除以幂等顺序执行,每步失败可安全重试(删除操作本身幂等,重试不会放大破坏);
  2. 删除完成前不更新"已删除"状态,失败则整体重试/补偿;
  3. 增加对账任务定期清理跨存储孤儿(MinIO 对象无 PG 引用、Milvus 向量无 PG chunk)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions