Skip to content

fix: avoid stale knowledge on upload failure#1110

Open
Aphroq wants to merge 1 commit into
Tencent:mainfrom
Aphroq:fix/issue-1099
Open

fix: avoid stale knowledge on upload failure#1110
Aphroq wants to merge 1 commit into
Tencent:mainfrom
Aphroq:fix/issue-1099

Conversation

@Aphroq
Copy link
Copy Markdown
Contributor

@Aphroq Aphroq commented May 1, 2026

Pull Request

描述 (Description)

修复 CreateKnowledgeFromFile 在文件上传失败时仍提前保存 Knowledge 记录的问题。

原来的执行顺序是:

  1. 检查文件是否重复
  2. 保存 Knowledge 记录
  3. 上传文件到存储

这会导致当第 3 步失败时,数据库里已经留下带 file_hash 的 Knowledge 记录;后续重新上传同一个文件时,会被重复校验拦住,无法继续处理。

本 PR 将流程调整为:

  1. 检查文件是否重复
  2. 预生成 knowledge.ID
  3. 先上传文件到存储
  4. 上传成功后再保存 Knowledge 记录

另外补充了回归测试,确保:

  • 上传失败时不会持久化 Knowledge 记录
  • 上传成功后会正常保存 Knowledge 和 file_path
  • 如果上传成功但数据库写入失败,会清理已上传文件,避免孤儿文件

变更类型 (Type of Change)

  • 🐛 Bug 修复 (Bug fix)
  • ✨ 新功能 (New feature)
  • 💥 破坏性变更 (Breaking change)
  • 📚 文档更新 (Documentation update)
  • 🎨 代码重构 (Code refactoring)
  • ⚡ 性能优化 (Performance improvement)
  • 🧪 测试相关 (Test related)
  • 🔧 配置变更 (Configuration change)
  • 🐳 Docker 相关 (Docker related)
  • 🎨 前端 UI/UX (Frontend UI/UX)

影响范围 (Scope)

  • 后端 API (Backend API)
  • 前端界面 (Frontend UI)
  • 数据库 (Database)
  • 文档解析服务 (Document Reader Service)
  • MCP 服务器 (MCP Server)
  • Docker 配置 (Docker Configuration)
  • 配置文件 (Configuration)
  • 其他 (Other):

测试 (Testing)

  • 单元测试 (Unit tests)
  • 集成测试 (Integration tests)
  • 手动测试 (Manual testing)
  • 前端测试 (Frontend testing)
  • API 测试 (API testing)

测试步骤 (Test Steps)

  1. 运行 go test ./internal/application/service -run 'TestCreateKnowledgeFromFile_'
  2. 验证 TestCreateKnowledgeFromFile_DoesNotPersistWhenUploadFails 通过,确认上传失败时数据库中不会残留 Knowledge 记录
  3. 验证 TestCreateKnowledgeFromFile_PersistsAfterSuccessfulUpload 通过,确认上传成功后会正常保存 Knowledge 和文件路径

检查清单 (Checklist)

  • 代码遵循项目的编码规范
  • 已进行自我代码审查
  • 代码变更已添加适当的注释
  • 相关文档已更新
  • 变更不会产生新的警告
  • 已添加测试用例证明修复有效或功能正常
  • 新功能和变更已更新到相关文档
  • 破坏性变更已在描述中明确说明

相关 Issue

Fixes #1099

截图/录屏 (Screenshots/Recordings)

不涉及。

数据库迁移 (Database Migration)

  • 需要数据库迁移
  • 不需要数据库迁移

配置变更 (Configuration Changes)

无。

部署说明 (Deployment Notes)

无特殊部署要求。

其他信息 (Additional Information)

本次修改主要涉及:

  • internal/application/service/knowledge.go
  • internal/application/service/knowledge_file_upload_test.go

说明:internal/application/service 包全量测试在当前环境下仍有与本次修改无关的 vectorstore/Elasticsearch 依赖失败;本 PR 相关回归测试已通过。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: 知识库上传文件失败

1 participant