fix(storage): finish SQLite transactions before propagating cancellation
This commit is contained in:
@@ -11,6 +11,10 @@
|
||||
| postgresql | 多 worker、多实例 | AsyncPostgresSaver | 进程内锁 + PostgreSQL session advisory lock |
|
||||
|
||||
SQLite 实例锁由操作系统管理,第二个实例打开同一数据库会失败,进程退出自动释放。
|
||||
业务事务的 BEGIN、提交与异常路径均在回滚保护范围内;请求取消时,回滚必须
|
||||
完成后才能释放连接锁。SQLite checkpoint saver 保留官方表结构,并在本地
|
||||
写入/删除操作完成后再传播取消,异常时回滚,避免残留事务锁住业务连接。
|
||||
这段取消保护只覆盖数据库操作,不覆盖模型生成。
|
||||
SQLite 文件必须放在本地持久化磁盘,不作为多主机共享文件使用。PostgreSQL 的
|
||||
锁连接与业务事务连接使用独立连接池;LLM 运行期间不持有业务行事务。
|
||||
|
||||
@@ -139,3 +143,5 @@ conda run -n py3.11 python -m pytest test/storage/ -q
|
||||
没有该变量时跳过 PostgreSQL 用例,不把跳过当作 PostgreSQL 已验证。
|
||||
测试使用 fake LLM,不消耗模型额度,覆盖:重启续聊、四接口、两种数据类型、
|
||||
幂等重放、版本冲突、checkpoint 缺失/超前、提交前后进程直接退出、数据库锁和删除恢复。
|
||||
`test_sqlite_cancellation.py` 另外覆盖 BEGIN、回滚、checkpoint 写入/删除中的
|
||||
取消、重复取消及后续请求可用性,验证不依赖服务重启释放残留事务。
|
||||
|
||||
Reference in New Issue
Block a user