Skip to content

v1.1.1 — The turso 0.7.2 engine upgrade

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Aug 23:44

The bundled turso storage engine advances from 0.5.3 to 0.7.2, and the release exists for exactly two reasons: two releases of upstream corruption fixes, and a clone path that now runs 15–20% less CPU than 1.1.0's engine did.

The engine upgrade

All three engine crates are vendored at 0.7.2: turso, turso_sdk_kit, and — new in this release — turso_core. The upgrade picks up upstream fixes for WAL frame-cache slot reuse, page-spill frame reuse, a nonblocking read_page race, and WAL-header init ordering. The vendored read-only open patch is re-applied (immutable parent artifacts must never be opened writable, and upstream's SDK still has no read-only mode). Default features are trimmed to mimalloc; the new fts/tantivy default stays out of the build. No experimental engine feature (MVCC, multiprocess WAL) is enabled — session liveness stays derived from Vfs's own advisory locks.

The prepare-cache fix

turso_core is vendored to carry one patch: Statement drop no longer invalidates the connection's prepared-statement cache. Upstream 0.6+ bumps the prepare-context generation on every statement drop once the TEMP database exists, and BEGIN IMMEDIATE initializes TEMP on every writer connection — so each of a clone workload's ~89,000 statements re-prepared from scratch. With the patch the workload re-prepares zero statements. The vendored SDK also caches one-shot execute/query statements per connection (512 entries, PRAGMAs exempt). Details in third_party/turso_core/PATCHES.md.

The perf contract held the merge until it passed: interleaved per-phase gate against the 0.5.3 baseline, three rounds, no phase red, clone 6–13% faster in every round.

Removed

  • The private TMPDIR sort-spill override and its SIGKILL reaper: turso 0.6.0 fixed the unlink leak the machinery contained. Children of run/exec/init -c now simply inherit the ambient TMPDIR.
  • PRAGMA temp_store = MEMORY from connection setup: any temp_store assignment initializes the TEMP database eagerly, and Vfs's statements never materialize temp B-trees.

No contract changes: artifact version, manifest shapes, exit statuses, and the session store layout are untouched from 1.1.0. Sessions packed by any 1.x build adopt cleanly.