libmdbx v0.9.3 Release Notes
Release Date: 2021-02-02 // about 3 years ago-
Acknowledgements:
- Mahlon E. Smith for FreeBSD port of libmdbx.
- 장세연 for bug fixing and PR.
- Clément Renault for Heed fully typed Rust wrapper.
- Alex Sharov for bug reporting.
- Noel Kuntze for bug reporting.
✂ Removed options and features:
- Drop
MDBX_HUGE_TRANSACTIONS
build-option (now no longer required).
🆕 New features:
- Package for FreeBSD is available now by Mahlon E. Smith.
- New API functions to get/set various options (https://github.com/erthink/libmdbx/issues/128):
- the maximum number of named databases for the environment;
- the maximum number of threads/reader slots;
- threshold (since the last unsteady commit) to force flush the data buffers to disk;
- relative period (since the last unsteady commit) to force flush the data buffers to disk;
- limit to grow a list of reclaimed/recycled page's numbers for finding a sequence of contiguous pages for large data items;
- limit to grow a cache of dirty pages for reuse in the current transaction;
- limit of a pre-allocated memory items for dirty pages;
- limit of dirty pages for a write transaction;
- initial allocation size for dirty pages list of a write transaction;
- maximal part of the dirty pages may be spilled when necessary;
- minimal part of the dirty pages should be spilled when necessary;
- how much of the parent transaction dirty pages will be spilled while start each child transaction;
- Unlimited/Dynamic size of retired and dirty page lists (https://github.com/erthink/libmdbx/issues/123).
- Added
-p
option (purge subDB before loading) tomdbx_load
tool. - Reworked spilling of large transaction and committing of nested transactions:
- page spilling code reworked to avoid the flaws and bugs inherited from LMDB;
- limit for number of dirty pages now is controllable at runtime;
- a spilled pages, including overflow/large pages, now can be reused and refunded/compactified in nested transactions;
- more effective refunding/compactification especially for the loosed page cache.
- Added
MDBX_ENABLE_REFUND
andMDBX_PNL_ASCENDING
internal/advanced build options. - Added
mdbx_default_pagesize()
function. - Better support architectures with a weak/relaxed memory consistency model (ARM, AARCH64, PPC, MIPS, RISC-V, etc) by means C11 atomics.
- Speed up page number lists and dirty page lists (https://github.com/erthink/libmdbx/issues/132).
- Added
LIBMDBX_NO_EXPORTS_LEGACY_API
build option.
🛠 Fixes:
- Fixed missing cleanup (null assigned) in the C++ commit/abort (https://github.com/erthink/libmdbx/pull/143).
- Fixed
mdbx_realloc()
for case of nullptr andMDBX_WITHOUT_MSVC_CRT=ON
for Windows. - Fixed the possibility to use invalid and renewed (closed & re-opened, dropped & re-created) DBI-handles (https://github.com/erthink/libmdbx/issues/146).
- Fixed 4-byte aligned access to 64-bit integers, including access to the
bootid
meta-page's field (https://github.com/erthink/libmdbx/issues/153). - Fixed minor/potential memory leak during page flushing and unspilling.
- Fixed handling states of cursors's and subDBs's for nested transactions.
- Fixed page leak in extra rare case the list of retired pages changed during update GC on transaction commit.
- Fixed assertions to avoid false-positive UB detection by CLANG/LLVM (https://github.com/erthink/libmdbx/issues/153).
- Fixed
MDBX_TXN_FULL
and regressiveMDBX_KEYEXIST
during large transaction commit withMDBX_LIFORECLAIM
(https://github.com/erthink/libmdbx/issues/123). - Fixed auto-recovery (
weak->steady
with the same boot-id) when Database size at last weak checkpoint is large than at last steady checkpoint. - Fixed operation on systems with unusual small/large page size, including PowerPC (https://github.com/erthink/libmdbx/issues/157).