Changelog History
Page 1
-
v0.11.6 Changes
March 24, 2022π The stable release with the complete workaround for an incoherence flaw of Linux unified page/buffer cache. Nonetheless the cause for this trouble may be an issue of Intel CPU cache/MESI. π See issue#269 for more information.
Acknowledgements:
- David BouyssiΓ© for Scala bindings.
- Michelangelo Riccobene for reporting and testing.
π Fixes:
- Added complete workaround for an incoherence flaw of Linux unified page/buffer cache.
- Fixed cursor reusing for read-only transactions.
- Fixed copy&paste typo inside
mdbx::cursor::find_multivalue()
.
Minors:
- Minor refine C++ API for convenience.
- Minor internals refines.
- Added
lib-static
andlib-shared
targets for make. - Added minor workaround for AppleClang 13.3 bug.
- Clarified error messages of a signature/version mismatch.
-
v0.11.5 Changes
February 23, 2022π The stable release with the hotfix/workaround for a flaw of Linux 4.19 (at least) unified page/buffer cache. π See issue#269 for more information.
Acknowledgements:
- Simon Leier for reporting and testing.
- Kai Wetlesen for RPMs.
- Tullio Canepa for reporting C++ API issue and contributing.
π Fixes:
- Added workaround for a flaw of Linux 4.19 (at least) unified page/buffer cache.
- Fixed/Reworked move-assignment operators for "managed" classes of C++ API.
- Fixed potential
SIGSEGV
while open DB with overrided non-default page size. - Made
mdbx_env_open()
idempotence in failure cases. - Refined/Fixed pages reservation inside
mdbx_update_gc()
to avoid non-reclamation in a rare cases. - Fixed typo in a retained space calculation for the hsr-callback.
Minors:
- Reworked functions for meta-pages, split-off non-volatile.
- Disentangled C11-atomic fences/barriers and pure-functions (with
__attribute__((__pure__))
) to avoid compiler misoptimization. - Fixed hypotetic unaligned access to 64-bit dwords on ARM with
__ARM_FEATURE_UNALIGNED
defined. - Reasonable paranoia that makes clarity for code readers.
- Minor fixes Doxygen references, comments, descriptions, etc.
-
v0.11.4 Changes
January 28, 2022π The stable release with fixes for large and huge databases sized of 4..128 TiB.
Acknowledgements:
- Ledgerwatch, Binance and Positive Technologies teams for reporting, assistance in investigation and testing.
- Alex Sharov for reporting, testing and provide resources for remote debugging/investigation.
- Kris Zyp for Deno support.
π New features, extensions and improvements:
- Added treating the
UINT64_MAX
value as maximum for given option insidemdbx_env_set_option()
. - Added
to_hex/to_base58/to_base64::output(std::ostream&)
overloads without using temporary string objects as buffers. - Added
--geometry-jitter=YES|no
option to the test framework. - Added support for Deno support by Kris Zyp.
π Fixes:
- Fixed handling
MDBX_opt_rp_augment_limit
for GC's records from huge transactions (Erigon/Akula/Ethereum). - Fixed build on Android (avoid including
sys/sem.h
). - Fixed missing copy assignment operator for
mdbx::move_result
. - Fixed missing
&
forstd::ostream &operator<<()
overloads. - Fixed unexpected
EXDEV
(Cross-device link) error frommdbx_env_copy()
. - Fixed base64 encoding/decoding bugs in auxillary C++ API.
- Fixed overflow of
pgno_t
during checking PNL on 64-bit platforms. - Fixed excessive PNL checking after sort for spilling.
- Reworked checking
MAX_PAGENO
and DB upper-size geometry limit. - Fixed build for some combinations of versions of MSVC and Windows SDK.
Minors:
- Added workaround for CLANG bug D79919/PR42445.
- Fixed build test on Android (using
pthread_barrier_t
stub). - Disabled C++20 concepts for CLANG < 14 on Android.
- Fixed minor
unused parameter
warning. - Added CI for Android.
- Refine/cleanup internal logging.
- Refined line splitting inside hex/base58/base64 encoding to avoid
\n
at the end. - Added workaround for modern libstdc++ with CLANG < 4.x
- Relaxed txn-check rules for auxiliary functions.
- Clarified a comments and descriptions, etc.
- Using the
-fno-semantic interposition
option to reduce the overhead to calling self own public functions.
-
v0.11.3 Changes
December 31, 2021Acknowledgements:
- gcxfd [email protected] for reporting, contributing and testing.
- μ₯μΈμ° (Π§Π°Π½ Π‘Π΅ ΠΠ½) for reporting and testing.
- Alex Sharov for reporting, testing and provide resources for remote debugging/investigation.
π New features, extensions and improvements:
- Added
mdbx_cursor_get_batch()
. - Added
MDBX_SET_UPPERBOUND
. - C++ API is finalized now.
- The GC update stage has been significantly speeded when fixing huge Erigon's transactions (Ethereum ecosystem).
π Fixes:
- Disabled C++20 concepts for stupid AppleClang 13.x
- Fixed internal collision of
MDBX_SHRINK_ALLOWED
withMDBX_ACCEDE
.
Minors:
- Fixed returning
MDBX_RESULT_TRUE
(unexpected -1) frommdbx_env_set_option()
. - Added
mdbx_env_get_syncbytes()
andmdbx_env_get_syncperiod()
. - Clarified description of
MDBX_INTEGERKEY
. - Reworked/simplified
mdbx_env_sync_internal()
. - Fixed extra assertion inside
mdbx_cursor_put()
forMDBX_DUPFIXED
cases. - Avoiding extra looping inside
mdbx_env_info_ex()
. - Explicitly enabled core dumps from stochastic tests scripts on Linux.
- Fixed
mdbx_override_meta()
to avoid false-positive assertions. - For compatibility reverted returning
MDBX_ENODATA
for some cases.
-
v0.11.2 Changes
December 02, 2021Acknowledgements:
- μ₯μΈμ° (Π§Π°Π½ Π‘Π΅ ΠΠ½) for contributing to C++ API.
- Alain Picard for Java bindings.
- Alex Sharov for reporting and testing.
- Kris Zyp for reporting and testing.
- Artem Vorotnikov for support Rust wrapper.
π Fixes:
- Fixed compilation with
devtoolset-9
on CentOS/RHEL 7. - Fixed unexpected
MDBX_PROBLEM
error because of update an obsolete meta-page. - Fixed returning
MDBX_NOTFOUND
error in case an inexact value found forMDBX_GET_BOTH
operation. - Fixed compilation without kernel/libc-devel headers.
Minors:
- Fixed
constexpr
-related macros for legacy compilers. - Allowed to define 'CMAKE_CXX_STANDARD` using an environment variable.
- Simplified collection statistics of page operation .
- Added
MDBX_FORCE_BUILD_AS_MAIN_PROJECT
cmake option. - Remove unneeded
#undef P_DIRTY
.
-
v0.11.1 Changes
October 23, 2021Backward compatibility break:
The database format signature has been changed to prevent π forward-interoperability with an previous releases, which may lead to a false positive diagnosis of database corruption due to flaws of an old library versions.
This change is mostly invisible:
- previously versions are unable to read/write a new DBs;
- but the new release is able to handle an old DBs and will silently upgrade ones.
Acknowledgements:
- Alex Sharov for reporting and testing.
-
v0.10.5 Changes
October 13, 2021π Unfortunately, the
v0.10.5
accidentally comes not full-compatible with previous releases:v0.10.5
can read/processing DBs created by previous releases, i.e. the backward-compatibility is provided;- however, previous releases may lead to false-corrupted state with DB that was touched by
v0.10.5
, i.e. the forward-compatibility is broken forv0.10.4
and earlier.
π This cannot be fixed, as it requires fixing past versions, which as a result we will just get a current version. Therefore, it is recommended to use
v0.11.1
instead ofv0.10.5
.Acknowledgements:
- Noel Kuntze for immediately bug reporting.
π Fixes:
- Fixed unaligned access regression after the
#pragma pack
fix for modern compilers. - Added UBSAN-test to CI to avoid a regression(s) similar to lately fixed.
- Fixed possibility of meta-pages clashing after manually turn to a particular meta-page using
mdbx_chk
utility.
Minors:
- Refined handling of weak or invalid meta-pages while a DB opening.
- Refined providing information for the
@MAIN
and@GC
sub-databases of a last committed modification transaction's ID.
-
v0.10.4 Changes
October 12, 2021Acknowledgements:
- Artem Vorotnikov for support Rust wrapper.
- Andrew Ashikhmin for contributing to C++ API.
π Fixes:
- Fixed possibility of looping update GC during transaction commit (no public issue since the problem was discovered inside Positive Technologies).
- Fixed
#pragma pack
to avoid provoking some compilers to generate code with unaligned access. - Fixed
noexcept
for potentially throwingtxn::put()
of C++ API.
Minors:
- Added stochastic test script for checking small transactions cases.
- Removed extra transaction commit/restart inside test framework.
- In debugging builds fixed a too small (single page) by default DB shrink threshold.
-
v0.10.3 Changes
August 27, 2021Acknowledgements:
- Francisco Vallarino for Haskell bindings for libmdbx.
- Alex Sharov for reporting and testing.
- Andrea Lanfranchi for contributing.
Extensions and improvements:
- Added
cursor::erase()
overloads forkey
and forkey-value
. - Resolve minor Coverity Scan issues (no fixes but some hint/comment were added).
- Resolve minor UndefinedBehaviorSanitizer issues (no fixes but some workaround were added).
π Fixes:
- Always setup
madvise
while opening DB (fixes https://github.com/erthink/libmdbx/issues/231). - Fixed checking legacy
P_DIRTY
flag (0x10
) for nested/sub-pages.
Minors:
- Fixed getting revision number from middle of history during amalgamation (GNU Makefile).
- Fixed search GCC tools for LTO (CMake scripts).
- Fixed/reorder dirs list for search CLANG tools for LTO (CMake scripts).
- Fixed/workarounds for CLANG < 9.x
- Fixed CMake warning about compatibility with 3.8.2
-
v0.10.2 Changes
July 26, 2021Acknowledgements:
- Alex Sharov for reporting and testing.
- Andrea Lanfranchi for reporting bugs.
- Lionel Debroux for fuzzing tests and reporting bugs.
- Sergey Fedotov for
node-mdbx
NodeJS bindings. - Kris Zyp for
lmdbx-store
NodeJS bindings. - Noel Kuntze for draft Python bindings.
π New features, extensions and improvements:
- Allow to predefine/override
MDBX_BUILD_TIMESTAMP
for builds reproducibility. - Added options support for
long-stochastic
script. - Avoided
MDBX_TXN_FULL
error for large transactions when possible. - The
MDBX_READERS_LIMIT
increased to32767
. - Raise
MDBX_TOO_LARGE
under Valgrind/ASAN if being opened DB is 100 larger than RAM (to avoid hangs and OOM). - Minimized the size of poisoned/unpoisoned regions to avoid Valgrind/ASAN stuck.
- Added more workarounds for QEMU for testing builds for 32-bit platforms, Alpha and Sparc architectures.
mdbx_chk
now skips iteration & checking of DB' records if corresponding page-tree is corrupted (to avoidSIGSEGV
, ASAN failures, etc).- Added more checks for rare/fuzzing corruption cases.
Backward compatibility break:
- Use file
VERSION.txt
for version information instead ofVERSION
to avoid collision with#include <version>
. - Rename
slice::from/to_FOO_bytes()
to `slice::envisage_from/to_FOO_length()'. - Rename
MDBX_TEST_EXTRA
make's variable toMDBX_SMOKE_EXTRA
. - Some details of the C++ API have been changed for subsequent freezing.
π Fixes:
- Fixed excess meta-pages checks in case
mdbx_chk
is called to check the DB for a specific meta page and thus could prevent switching to the selected meta page, even if the check passed without errors. - Fixed recursive use of SRW-lock on Windows cause by
MDBX_NOTLS
option. - Fixed log a warning during a new DB creation.
- Fixed false-negative
mdbx_cursor_eof()
result. - Fixed
make install
with non-GNUinstall
utility (OSX, BSD). - Fixed installation by
CMake
in special cases by complete useGNUInstallDirs
's variables. - Fixed C++ Buffer issue with
std::string
and alignment. - Fixed
safe64_reset()
for platforms without atomic 64-bit compare-and-swap. - Fixed hang/shutdown on big-endian platforms without
__cxa_thread_atexit()
. - Fixed using bad meta-pages if DB was partially/recoverable corrupted.
- Fixed extra
noexcept
forbuffer::&assign_reference()
. - Fixed
bootid
generation on Windows for case of change system' time. - Fixed test framework keygen-related issue.