fix: prevent document lifecycle races and add async cleanup - #106
fix: prevent document lifecycle races and add async cleanup#106ltrinthewind wants to merge 3 commits into
Conversation
820d345 to
98d49ba
Compare
|
其次,删除代码中的AI味。比如注释句尾的中文句号。 |
- 新增 document_version 和 DELETING 状态,统一文档操作所有权 - 使用版本 CAS 保护分块领取、超时恢复、删除、启禁用及 Chunk CRUD - MQ、事务回查和定时刷新携带文档版本,跳过陈旧或重复任务 - Sink 写入前锁定当前运行版本,将 Chunk、向量、文件元数据和成功状态统一提交 - 修复旧任务覆盖新执行、删除后重建向量及定时刷新文件切换竞态 - 新增本地 PostgreSQL 并发、事务回滚和写入顺序测试
98d49ba to
0c56729
Compare
- 使用 RocketMQ 事务消息投递文档清理事件 - 在本地事务中删除文档、Chunk、调度、日志及 PgVector 数据 - 事务提交后异步清理 Milvus、ES、LightRAG 和对象文件 - 补充事务回查、幂等消费、失败重试及存储分阶段测试
0c56729 to
514d907
Compare
|
感谢详细审查,已通过两个提交完成调整:
|
- 增加事务消息对本地事务执行结果的检查 - 将 document_version 升级脚本移至 v2.0.0 - 更新数据库升级说明和文档版本字段注释
|
感谢 review,相关问题已在
|
|
这个代码改动不对吧,怎么这么多文件提交?建议这个PR关掉,重新提一个干净的PR,不需要那么多单元测试,不写也可以。 其次考虑下这个问题: [P1] 定时刷新可能删除数据库正在引用的新文件 在刷新写入成功后,事务已经把文档状态和
反向交错也有问题:V 失败后,W 成功,V 可能把 W 的 根因在于 修复应让切片接口返回“本 owner/version 是否已经提交文件切换”的明确结果,不能靠事后读取全局状态推断。 |
|
你好,提交文件多的原因有以下:
想确认一下,更期望采用哪种方式重新提交:
关于最新提出的定时刷新问题,我理解是:当前
|
Summary
document_version作为每次文档操作的版本及写入 fencing token,解决文档相关操作之间的竞态问题以及 ABA 问题。Changes
版本隔离与并发控制
document_version,每次分块、删除、恢复及稳定态修改通过 CAS 推进版本。RUNNING状态与版本。SUCCESS状态在同一事务中提交。异步资源清理
事务消息失败传播
SEND_OK且本地事务状态为COMMIT_MESSAGE时视为成功。ROLLBACK_MESSAGE或UNKNOW会清理本地事务回调并抛出ServiceException,避免调用方收到假成功。数据库升级
document_version增量脚本放入upgrades/v2.0.0/。Tests
Related to #42
Related to #44