simulator: checkpoint after an open savepoint fails the run with TableLocked
Author: LeMikaelFCreated Sep 17, 2026Updated Sep 17, 2026
The simulator (Faultless) job failed on #9136.
- Run: https://github.com/tursodatabase/turso/actions/runs/35269350663/job/105364728207
- Seed:
2203329238356856833 - Error:
failed with error: 'TableLocked'
What the log shows
- Connection 5 runs
SAVEPOINT sim_sp_419;. This opens a transaction. - The next statement,
DELETE FROM funny_crudo_231 WHERE TRUE;, fails withBusy. is_recoverable_tx_error(testing/simulator/runner/execution.rs:27) acceptsBusy, so the run continues. The savepoint stays open.- Later, connection 5 runs
PRAGMA aux0.wal_checkpoint(FULL);. op_checkpoint(core/vdbe/execute.rs:692) returnsTableLocked, because the connection is still in a transaction. SQLite does the same.TableLockedis not in the recoverable list, so the run fails.
The engine behavior is correct. The simulator must close the savepoint after a Busy, or accept TableLocked as a legal result.
The PR changes only hash join selection. The failure is in other code.
Source: tursodatabase/turso