Intermittent SQLite transaction error on read operations (cannot start a transaction within a transaction)
还没有人认领这个 Issue。
评估
调研方向
Start with the inTransaction() check in src/lib/object_store/DB.cpp and transaction start logic in src/lib/object_store/DBObject.cpp, both linked in the issue. Trace how concurrent reads share the SQLite connection and inspect the related transaction tests. Done means simultaneous read operations no longer fail with “cannot start a transaction within a transaction” and existing transaction behavior remains correct.
由索引模型根据 Issue 内容生成。
描述
When performing multiple simultaneous read operations (e.g., from different threads) using the SQLite backend, the following error occurs:
SQLITE3: cannot start a transaction within a transaction (1)
Steps to Reproduce
- Open multiple threads or sessions that execute read operations (e.g., enumerate objects, get token info) concurrently against the same token/slot.
- Observe backend logs or error output when these operations overlap in time.
Expected Behavior
Concurrent read operations (which start read-only SQLite transactions) should be able to called from concurrent threads without errors when using a shared database connection in SQLITE_OPEN_FULLMUTEX mode.
Actual Behavior
The backend emits the error:
SQLITE3: cannot start a transaction within a transaction (1)
and one or more read operations fails. Specifically, this happens when reading multiple objects from the same slot/token simultaneously from multiple backend application threads.
Details
Each read operation attempts to start a new read-only transaction (BEGIN) on the same underlying sqlite3* connection. But the two concurrent reads can race: both can pass the DBObject inTransaction() check, then both attempt to start a transaction (Time of Check/Time of Use), but SQLite only allows a single active transaction per connection, causing the second BEGIN to fail.
- 主要语言
- C++
- 星标
- 1.1k
- 派生
- 434
- 平均合并
- 12 天 14 小时
- 30 天内合并 PR
- 2
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
softhsm/SoftHSMv2 的其他 Issue
-
C_DigestKey digests a sensitive EC private key's CKA_VALUE: no check that the object is a secret key未关闭
难度 2/5 1-3 小时 新手友好度 78/100
-
难度 2/5 1-3 小时 新手友好度 78/100
-
难度 2/5 1-3 小时 新手友好度 72/100
-
难度 4/5 3-5 天 新手友好度 54/100
-
难度 4/5 3-5 天 新手友好度 56/100
查看 softhsm/SoftHSMv2 的全部 Issue
相似的 Issue
-
area/ysql kind/bug priority/medium status/awaiting-triage
难度 2/5 1-3 小时 新手友好度 78/100
yugabyte/yugabyte-db#37523 ·
维护者通常 1 天内回复
-
mlir
难度 2/5 1-3 小时 新手友好度 72/100
llvm/llvm-project#241070 · 1 条评论 ·
维护者通常 1 天内回复
-
backlog documentation
难度 1/5 1 小时以内 新手友好度 96/100
EchoTools/nevr-runtime#2354 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 75/100
维护者通常 1 天内回复
-
help wanted new command
难度 2/5 1-3 小时 新手友好度 76/100
tldr-pages/tldr#25111 ·
维护者通常 1 天内回复