Releases: erigontech/mdbx-go
zero-alloc `.Count()` method
v0.39.17 zero-alloc `Count()` (#209)
PutCurrent method
mdbx: add Cursor.PutCurrent for DupSort in-place dup replacement (#208) * mdbx: add Cursor.PutCurrent for DupSort in-place dup replacement For DupSort tables, after positioning with Get(GetBothRange), calling PutCurrent(key, newVal) replaces the current duplicate entry in-place using MDBX_CURRENT flag — saving one CGo call per update vs the previous Del(Current)+Put() pattern. Add TestCursor_PutCurrent_DupSort verifying the Erigon domain flush pattern: insert (key, stepPrefix+payload) pairs, seek to exact step, replace payload in-place, verify count and values are correct. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * mdbx: fix appendAssign lint in TestCursor_PutCurrent_DupSort Use explicit copies for val1/val2 to avoid appending to step1/step2 backing arrays (gocritic appendAssign). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * mdbx: simplify TestCursor_PutCurrent_DupSort — merge 4 txns into 2 Combine DBI open + insert into one transaction (matching the pattern used in other DupSort tests). Combine PutCurrent + verification into one transaction (read-your-own-writes within an Update works fine). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * go.mod: bump go directive to 1.24 for b.Loop() support BenchmarkCursor_Put_Sequence uses testing.Loop which requires go1.24. The toolchain was already go1.24.1; align the go directive to match. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.39.15
v0.39.14 libmdbx new version 0.13.10 "Gloss of Glory"
What's new?
NB! Breaking changes in the code distribution model of db repository (bindings are not affected). Please read carefully
release notes and post in telegram describing the situation.
What else?
Full changelog here:
https://sourcecraft.dev/dqdkfa/libmdbx/releases/v0.13.10
TL;DR
- Fixed multiple stability issues, including TLS-related crashes on library unload and Windows
ERROR_IO_PENDINGerrors when reopening the same database within a process. - Improved filesystem robustness on Linux by mitigating ext4
fast_commitedge cases. - Fixed page-size auto-tuning that could incorrectly increase page size on high-RAM systems.
- Resolved several CMake/CTest regressions, including incorrect Valgrind integration and false-positive memcheck reports.
- Cleaned up minor memory leaks, UBSAN warnings, and compiler false positives.
- Improved C++ API internals and buffer handling.
- Extended build and test support (RISC-V, HarmonyOS, additional CMake tests).
p.s. 0.39.13 dropped due to a minor bug, nvm
v0.39.12 libmdbx v0.13.9 "ИС-2"
What's changed:
new mdbx 0.13.9 IS-2 release full changelog here
TL;DR
- Fixed an assert crash in the DBI bitmap scan path affecting rare 32-bit debug builds.
- Improved detection of lib.exe and dlltool.exe utilities in CMake builds on Windows.
- Fixed a regression where database size could increase instead of shrink after introducing fallocate() (to prevent SIGBUS on low disk space).
- Fixed a typo in test/battery-tmux.sh that created a stray file named -.
- Removed leftover unnecessary uses of the MDBX_INTERNAL macro.
- Added a workaround on Android to reduce EAGAIN errors caused by system resource limits when reopening a database quickly.
- Added support for Harmony OS (OHOS).
v0.39.11 libmdbx v0.13.7 with small fix
added cp of small fix from 0.13.8 to 0.13.7
Mithril-mine/libmdbx@43cb913
v0.39.10 libmdbx v0.13.8 Vseobuch
What's Changed
changed mdbx version to latest stable 0.13.8 (vseobuch) release
TL:DR
- Patched rare SIGBUS crash on full filesystems when extending DB.
- Restored compatibility with Linux 3.16+ while keeping 4.x+ support.
- Fixed regression in MDBX_WANNA_RECOVERY checks for read-only DBs.
Full changelog here
mdbx v0.13.7
What's Changed
changed mdbx version to latest stable 0.13 release
TL:DR
- Fixed critical semaphore issue in mdbx_env_resurrect_after_fork() (SysV semaphores on macOS/POSIX with MDBX_LOCKING=5)
- Resolved POSIX DB copy API errors (EWOULDBLOCK/EAGAIN) on non‑Linux and non‑local filesystems
- Corrected unexpected MDBX_BAD_DBI and MDBX_DBS_FULL returns during concurrent transactions and DBI reopen
- Patched Android build with _FILE_OFFSET_BITS, and replaced misuse of ENOMEM with MDBX_ENOMEM
- Removed various incorrect assert()s (in txn_end(), txn_lock(), txn_unlock()) and silenced MSVC warnings C5286/C5287
- Enhanced POSIX OFD‑lock fallback to handle additional error codes (ENOSYS, ENOTSUP, etc.)
- Improved test framework: NUMA‑binding option --numa, tmux script NUMA distribution, and random test order
For full release info: https://gitflic.ru/project/erthink/libmdbx/release/4465d9ff-62a2-4104-ad9b-c0224ea60e48
v0.40.0 (mdbx v0.14.1 beta)
What's Changed
Full Changelog: v0.39.8...v0.40.0
Added new version of MDBX 0.14.1
Full changelog:
https://gitflic.ru/project/erthink/libmdbx/release/a9cfaf48-ba05-4824-8d4c-b2e5c2f91e3f
TLDR:
- GC Rewrite: Replaced legacy LMDB-based GC with a new algorithm using compact container structures (RKL), drastically reducing overhead and complexity. Enables GC updates from O(1) to O(log N) depending on transaction size.
- New Cursor API:
MDBX_SEEK_AND_GET_MULTIPLE: batch-read multi-values from a specific key.mdbx_cursor_close2(),mdbx_txn_release_all_cursors_ex(),cursor::put_multiple_samelength(), etc.
- Build Options:
MDBX_NOSUCCESS_PURE_COMMIT: helps detect redundant write transactions.MDBX_ENABLE_NON_READ_EXPORT: allows DBs on NFS (at user’s risk).
- New Tooling Features:
mdbx_chk: now includes a histogram of multi-values.mdbx_dump/mdbx_load: support for compact mode to reduce dump size.
- Behavioral Changes:
- No-op inserts: In dupsort tables, inserting existing duplicates now avoids unnecessary copy-on-write operations.
- Improved error handling and more robust cursor management (e.g. disallowed unbinding in nested transactions).