[Bug] Concurrent mcode processes kill each other's turns: SQLITE_BUSY on shared runtime-state.sqlite
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- sqlite, typescript
Research direction
Reproduce the failure with 5+ concurrent mcode sessions and inspect ~/.minimax/v2/observability/logs/runtime-*.log for the history-delivery or event-writer stage. Then trace the transaction helpers $t, YMe, and transaction(r).immediate() in the bundled chunks around runtime-state.sqlite. Done means concurrent turns no longer abort with SQLITE_BUSY or database-locked errors.
Written by the indexing model from the issue text.
Description
Summary
When several minimax-code processes run in parallel (common for power users running multiple sessions), turns intermittently die with:
The response failed.
Reason: database is locked
The failure is local, not an upstream API error — the request never reaches the network. From ~/.minimax/v2/observability/logs/runtime-*.log:
[pi-turn-runner] history delivery failed ... SqliteError: database is locked
at sqliteTransaction (.../better-sqlite3/lib/methods/transaction.js:63:9)
[local-runtime-v2] agent host turn failed ... failure_stage="Agent execution failed."
Root cause
All processes share a single ~/.minimax/v2/sqlite/runtime-state.sqlite (WAL mode). The runtime sets PRAGMA busy_timeout = 5000, but under N concurrent writers a 5s wait is not always enough, and no retry on SQLITE_BUSY exists — the transaction wrapper ($t, YMe, and the goal-repo transaction(r).immediate() call sites in the bundled chunks) throws immediately once the timeout expires. The turn then fails at history delivery / event writer stage and the whole agent turn is aborted.
Observed with 9 concurrent processes on a ~330 MB database; frequency grows with parallelism and DB size.
Suggested fixes (any of)
- Retry with backoff on
SQLITE_BUSYaround the transaction helpers — cheapest, survives arbitrarily long foreign transactions. - Raise
busy_timeout(e.g. 30s) — helps but does not coverBUSY_SNAPSHOTcases. - Shard session-scoped tables per session (e.g.
runtime-state-<session>.sqlite) while keeping shared tables (local_runtime_agents,local_runtime_communication_messages,local_runtime_queues,local_runtime_crons,local_runtime_background_tasks,local_runtime_session_locks) in a coordinator DB — removes write contention entirely for the hot path. Note: a naive per-session split is not possible because the schema intentionally mixes session-scoped and cross-session coordination tables.
Environment
@minimax-ai/code0.5.0 (npm), Linux x64, Node v24.18.0- Repro: run 5+
mcodesessions concurrently with active tool calls; within an hour at least one turn dies withdatabase is locked.
- Dominant language
- TypeScript
- Stars
- 1.9k
- Forks
- 226
- Avg merge
- 3h 32m
- Merged PRs (30d)
- 122
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from MiniMax-AI/minimax-code
-
bug needs-triage tui
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
MiniMax-AI/minimax-code#393 · 1 comment ·
Maintainers usually reply within 1 day
-
bug cli documentation needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
MiniMax-AI/minimax-code#299 · 3 comments ·
Maintainers usually reply within 1 day
-
bug cli needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
MiniMax-AI/minimax-code#128 · 2 comments ·
Maintainers usually reply within 1 day
-
bug desktop
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
MiniMax-AI/minimax-code#87 · 2 comments · 2 reactions ·
Maintainers usually reply within 1 day
-
bug desktop needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
MiniMax-AI/minimax-code#80 ·
Maintainers usually reply within 1 day
All issues in MiniMax-AI/minimax-code
Similar issues
-
area/frontend good first issue kind/cooldown
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
voidzero-dev/oxc-angular-compiler#511 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
langchain-ai/deepagentsjs#898 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 92/100
anomalyco/models.dev#8509 · 2 comments ·
Maintainers usually reply within 1 day
-
bug documentation P2 UI/UX
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 1 day