Merged PRs
dolt
- 10887: fixed failing bats test
- 10876: go/store/nbs: Fix a rare race condition whould could cause GC and some concurrent readers or writers to deadlock.
If a GC was started immediately after another GC finished, a session which was waiting on the first GC completion could get stuck waiting for the second GC to complete instead. But the second GC itself was going to block on that session finishing whatever work it was doing.
Added tracking for the gcCycleCounter which reflects the actual GC operation which any individual call into the NomsBlockStore actually needs to block on. - 10875: Add swappable identifier validation function
Adds a function variable that Doltgres can override to change identifier validation logic.
Related to dolthub/doltgresql#2580 - 10873: Fix panic when branch tracking has no merge ref
Fixes anilpointer panic inDOLT_PULLwhen a branch has a remote recorded in its tracking configuration but no merge ref set.
Fix #10839 - 10820: go: derive internal cache sizes from GOMEMLIMIT
Summary
- Solves #10821
- Adds a
memlimitpackage that reads standard GoGOMEMLIMITand proportionally sizes Dolt's three largest caches (node cache, memtable, decoded chunks) - When
GOMEMLIMITis unset, all defaults preserved exactly — zero behavior change - Replaces the per-cache env var approach from #10815/#10816 with a single standard knob
Usage
GOMEMLIMIT=512MiB dolt sql-server
Design
Cache Default At GOMEMLIMIT=512MiB Prolly node cache 256 MiB ~120 MiB Memtable write buffer 256 MiB ~120 MiB Decoded chunks cache 32 MiB ~15 MiB Budget partitioning: 50% usable (50% GC reserve), then 47/47/6 across caches — matching the ratio of the original hardcoded defaults (256:256:32 MiB). Minimums prevent pathologically small caches. Maximum caps ensure caches never exceed current defaults, even with high GOMEMLIMIT — we can loosen these later if needed. Changes
- New:
go/libraries/doltcore/memlimit/— budget calculator with 8 unit tests - Modified:
go/store/prolly/tree/node_store.go— lazysync.Onceinit via memlimit - Modified:
go/store/types/value_store.go— decoded chunks from memlimit - Modified:
go/libraries/doltcore/dbfactory/— all 8 factory impls callmemlimit.MemtableSize()directly - Modified:
go/cmd/dolt/dolt.go—memlimit.Init()inrunMain()
What this doesn't do
- No custom
DOLT_*env vars - No YAML config additions
- No
automemlimitdep yet (follow-up for container cgroup auto-detection) - Doesn't touch commit cache (already has
DOLT_COMMIT_CACHE_SIZE)
Test plan
- 8 unit tests: defaults, zero, 512 MiB, 128 MiB, 32 MiB (minimums), 4 GiB (capped at defaults), accessors
-
store/prolly/tree,store/types,libraries/doltcore/dbfactory,store/prollytest suites pass - Full binary build + live RSS measurement (needs CI with ICU headers)
🤖 Generated with Claude Code
go-mysql-server
- 3510: Ignore unique key errors when inserting into fulltext position table
fixes #10882
Ignore unique key errors when inserting into fulltextindex.Positiontable (similar to how unique key errors are ignored forindex.DocCount).
We should consider using a non-unique index forindex.Positionandindex.DocCountor restructuring how we're writing to these tables if we're always going to be ignoring unique key errors. - 3508: go.mod: Bump go-icu-regex.
- 3505: trim analyzer rules for simple selects
This PR adds a fast analysis pass for queries of the formSELECT ... FROM ... WHERE ....
The idea is that simple select queries (no subqueries) can avoid many (recursive) analyzer rules like applying triggers and foreign keys.
Benchmarks: #10824 (comment) - 3501: Several new spatial funcs
Also revived our MySQL engine test harness to verify these new tests match the current MySQL behavior
Closed Issues
- 10882: REPLACE INTO panics on FULLTEXT-indexed table when old and new content share a word at the same position
- 10839: DOLT_PULL panics with nil pointer when branch tracking not configured in repo_state.json
- 10841: (Dolt shell) Do not throw error when parsing delimiter statements that follow a line comment
- 10573: Support jsonl format in
dolt table export - 10849: dolt server consumes significant CPU while idle
- 3506: ICU regex dependency causes portability problems for downstream consumers
- 3507: CGO compilation fails because icu.go includes C++ ICU header unicode/regex.h via C compiler