Repository navigation
Conversation
|
Note: this is 0.23.x material — it flips a user-visible default (multi-writer mode on by default) and renames a setting, so it should ride the 0.23 release, not get backported to a 0.22.x patch. |
|
Companion binding PRs (same default flip, separate repos since these are submodules here): ladybug-python#76, ladybug-java#17, ladybug-rust#44. nodejs/wasm don't expose the flag, so no change needed there. CI on this PR covers the engine side. |
|
Update: superseded the default-flip-only binding PRs with fuller ones where each binding lets the engine control all defaults (unset = engine default): ladybug-python#77, ladybug-java#18, ladybug-rust#45, plus nodejs#28 and wasm#14 which needed the same treatment. CI here covers the engine side; each binding repo's CI covers its own. |
|
I checked this against the open PRs under #1376, simulating the new default on their merge. Automatic checkpoints wait for other writers. A commit's automatic checkpoint takes the write gate and waits up to 5 s for every other write transaction to leave. In single-writer mode none can be open at that point. Here, one connection held a write transaction open while another committed three single-row writes, with
With the 16 MB default this starts once the WAL passes the threshold and repeats on every commit while a long write transaction stays open, and new writers wait behind the gate meanwhile. So #1361 should land with or before this PR; otherwise retries of those "failed" commits apply them twice. The 5 s stall stays even with #1361; an automatic checkpoint could skip, instead of waiting, while other write transactions are open. #1375 still matters. In multi-writer mode a BEGIN is still refused when the WAL is poisoned. With one failed WAL sync injected, 0.22.0 refuses the BEGIN and the connection's next Merge notes.
Apart from those, The simulator and the retention loop behind #1436 and #1437 have only run single-writer mode so far; the C stress loop ran multi-writer mode in half of its rounds without a violation. |
…rites, default to true The debug_ prefix no longer reflects reality: concurrent write transactions are production-ready. Rename the setting to enable_multi_writes (matching SystemConfig::enableMultiWrites and the other enable_* settings), rename EnableMVCCSetting to EnableMultiWritesSetting, and flip the default from false to true. Update all CALL sites, and make the MultiWritesException e2e case opt out explicitly via CALL enable_multi_writes=false so it still covers single-writer mode.
c2e34d6 to
f7b571a
Compare
Concurrent write transactions are production-ready, so the
debug_prefix has to go.What changed
debug_enable_multi_writes->enable_multi_writes(consistent withSystemConfig::enableMultiWritesand the otherenable_*settings).EnableMVCCSetting->EnableMultiWritesSetting; dropped the stale TODO calling it a temporary test solution.falsetotrueinSystemConfig.CALLsites (e2e.testfiles,transaction_test.cpp,checkpoint_test.cpp,node_write_bench.cpp).ddl_serial_execution.testMultiWritesExceptioncase now opts out explicitly withCALL enable_multi_writes=falseso single-writer mode stays covered; theEnableMultiWritescase now exercises the false->true toggle.Verified locally
ninja -C build/release lbugbuilds clean.ddl_serial,ddl_concurrent,dml_empty_serial,dml_tinysnb_serial.Companion binding PRs
Each binding now lets the engine control defaults (unset = engine default), so no binding pins a copy of these defaults anymore: