libmdbx v0.9.2 Release Notes

Release Date: 2020-11-27 // 3 months ago
  • Acknowledgements:

    βž• Added features:

    • πŸ— Provided package for buildroot.
    • Binding for Nim is available now by Jens Alfke.
    • Added mdbx_env_delete() for deletion an environment files in a proper and multiprocess-safe way.
    • Added mdbx_txn_commit_ex() with collecting latency information.
    • Fast completion pure nested transactions.
    • Added LIBMDBX_INLINE_API macro and inline versions of some API functions.
    • Added mdbx_cursor_copy() function.
    • βœ… Extended tests for checking cursor tracking.
    • Added MDBX_SET_LOWERBOUND operation for mdbx_cursor_get().

    πŸ›  Fixes:

    • πŸ›  Fixed missing installation of mdbx.h++.
    • πŸ›  Fixed use of obsolete __noreturn.
    • πŸ›  Fixed use of yield instruction on ARM if unsupported.
    • βž• Added pthread workaround for buggy toolchain/cmake/buildroot.
    • πŸ›  Fixed use of pthread_yield() for non-GLIBC.
    • πŸ›  Fixed use of RegGetValueA() on Windows 2000/XP.
    • πŸ›  Fixed use of GetTickCount64() on Windows 2000/XP.
    • πŸ›  Fixed opening DB on a network shares (in the exclusive mode).
    • πŸ›  Fixed copy&paste typos.
    • πŸ›  Fixed minor false-positive GCC warning.
    • Added workaround for broken DEFINE_ENUM_FLAG_OPERATORS from Windows SDK.
    • πŸ›  Fixed cursor state after multimap/dupsort repeated deletes (#121).
    • Added SIGPIPE suppression for internal thread during mdbx_env_copy().
    • Fixed extra-rare MDBX_KEY_EXIST error during mdbx_commit() (#131).
    • πŸ›  Fixed spilled pages checking (#126).
    • πŸ›  Fixed mdbx_load for 'plain text' and without -s name cases (#136).
    • πŸ›  Fixed save/restore/commit of cursors for nested transactions.
    • πŸ›  Fixed cursors state in rare/special cases (move next beyond end-of-data, after deletion and so on).
    • βž• Added workaround for MSVC 19.28 (Visual Studio 16.8) (but may still hang during compilation).
    • πŸ›  Fixed paranoidal Clang C++ UB for bitwise operations with flags defined by enums.
    • πŸ›  Fixed large pages checking (for compatibility and to avoid false-positive errors from mdbx_chk).
    • βž• Added workaround for Wine (miranda-ng/miranda-ng#1209).
    • Fixed ERROR_NOT_SUPPORTED while opening DB by UNC pathnames (miranda-ng/miranda-ng#2627).
    • Added handling EXCEPTION_POSSIBLE_DEADLOCK condition for Windows.

    TODO for v0.9.3

    • Engage new terminology (#137).
    • πŸ”€ Rework/speedup the implementation of the dirty page list (lazy compactification, lazy sorting via merge).
    • Resolve few TODOs (#123, #124, #127, #128, #132, #115).
    • ✏️ Finalize C++ API (few typos and trivia bugs are still likely for now).
    • 🐧 Packages for ROSA Linux, ALT Linux, Fedora/RHEL, Debian/Ubuntu.

    SHA256 checksums

    c35cc53d66d74ebfc86e39441ba26276541ac7892bf91dba1e70c83665a02767 libmdbx-amalgamated-0.9.2.tar.gz
    82523330f701939325ce96becace35ec739d30f8e98ec776c4d50bc8745297a8 libmdbx-amalgamated-0_9_2.zip
    a98382d85a06a551393a89152a50c53fd45abf6bf9f5e01e594bbd799c1352c7 v0.9.2.tar.gz
    099b31eef060bd41c35221ba2c805571d173b936075da9a97fcaf4801c8c2ecf v0.9.2.zip
    

Previous changes from v0.9.1

  • βž• Added features:

    • πŸ‘ Preliminary C++ API with support for C++17 polymorphic allocators.
    • Online C++ API reference by Doxygen.
    • ⚑️ Quick reference for Insert/Update/Delete operations.
    • πŸ”€ Explicit MDBX_SYNC_DURABLE to sync modes for API clarity.
    • Explicit MDBX_ALLDUPS and MDBX_UPSERT for API clarity.
    • Support for read transactions preparation (MDBX_TXN_RDONLY_PREPARE flag).
    • Support for cursor preparation/(pre)allocation and reusing (mdbx_cursor_create() and mdbx_cursor_bind() functions).
    • πŸ‘Œ Support for checking database using specified meta-page (see mdbx_chk -h).
    • πŸ‘Œ Support for turn to the specific meta-page after checking (see mdbx_chk -h).
    • πŸ‘Œ Support for explicit reader threads (de)registration.
    • The mdbx_txn_break() function to explicitly mark a transaction as broken.
    • Improved handling of corrupted databases by mdbx_chk utility and mdbx_walk_tree() function.
    • πŸ‘Œ Improved DB corruption detection by checking parent-page-txnid.
    • πŸ‘Œ Improved opening large DB (> 4Gb) from 32-bit code.
    • Provided pure-function and const-function attributes to C API.
    • πŸ‘Œ Support for user-settable context for transactions & cursors.
    • πŸ“š Revised API and documentation related to Handle-Slow-Readers callback feature.

    πŸ—„ Deprecated functions and flags:

    • πŸ—„ For clarity and API simplification the MDBX_MAPASYNC flag is deprecated.
      Just use MDBX_SAFE_NOSYNC or MDBX_UTTERLY_NOSYNC instead of it.
    • MDBX_oom_func, mdbx_env_set_oomfunc() and mdbx_env_get_oomfunc()
      replaced with MDBX_hsr_func, mdbx_env_get_hsr and mdbx_env_get_hsr().

    πŸ›  Fixes:

    • Fix mdbx_strerror() for MDBX_BUSY error (no error description is returned).
    • πŸ›  Fix update internal meta-geo information in read-only mode (EACCESS or EBADFD error).
    • Fix mdbx_page_get() null-defer when DB corrupted (crash by SIGSEGV).
    • Fix mdbx_env_open() for re-opening after non-fatal errors (mdbx_chk unexpected failures).
    • β†ͺ Workaround for MSVC 19.27 static_assert() bug.
    • Doxygen descriptions and refinement.
    • ⚑️ Update Valgrind's suppressions.
    • βœ… Workaround to avoid infinite loop of 'nested' testcase on MIPS under QEMU.
    • πŸ›  Fix a lot of typos & spelling (Thanks to Josh Soref for PR).
    • πŸ›  Fix getopt() messages for Windows (Thanks to Andrey Sporaw for reporting).
    • πŸ›  Fix MSVC compiler version requirements (Thanks to Andrey Sporaw for reporting).
    • πŸ— Workarounds for QEMU's bugs to run tests for cross-builded library under QEMU.
    • πŸ— Now C++ compiler optional for building by CMake.

    TODO for next version(s):

    • πŸ”€ Rework/speedup the implementation of the dirty page list (lazy compactification, lazy sorting via merge).
    • ✏️ Finalize C++ API (few typos and trivia bugs are likely for now).
    • 🐧 Packages for ROSA Linux, ALT Linux, Fedora/RHEL, Debian/Ubuntu.