mdbx_chk
functional to the library API.MDBX_NOTLS
option.New:
tools-static
make target to build statically linked MDBX tools.mdbx::filesystem
C++ API namespace that corresponds to std::filesystem
or std::experimental::filesystem
.Fixes:
SIGSEGV
in the cursor tracking code.MDBX_EPERM
error returned from mdbx_env_set_geometry()
.libstdc++fs
/libc++fs
/libc++experimental
for C++ std::filesystem
or std::experimental::filesystem
for legacy compilers.static constexpr
member field.Minors:
/INCREMENTAL[:YES]
with /LTCG
, /W4
with /W3
, the C5105
warning.MDBX_EPERM
instead of ‘MDBX_RESULT_TRUE’ to indicate that the geometry cannot be updated.NULL
checking during memory allocation inside mdbx_chk
.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:
Fixes:
mdbx::cursor::find_multivalue()
.Minors:
lib-static
and lib-shared
targets for make.The release with the temporary hotfix for a flaw of Linux unified page/buffer cache. See issue#269 for more information.
Acknowledgements:
Fixes:
SIGSEGV
while open DB with overrided non-default page size.mdbx_env_open()
idempotence in failure cases.mdbx_update_gc()
to avoid non-reclamation in a rare cases.Minors:
__attribute__((__pure__))
) to avoid compiler misoptimization.__ARM_FEATURE_UNALIGNED
defined.The stable release with fixes for large and huge databases sized of 4..128 TiB.
Acknowledgements:
New features, extensions and improvements:
UINT64_MAX
value as maximum for given option inside mdbx_env_set_option()
.to_hex/to_base58/to_base64::output(std::ostream&)
overloads without using temporary string objects as buffers.--geometry-jitter=YES|no
option to the test framework.Fixes:
MDBX_opt_rp_augment_limit
for GC's records from huge transactions (Erigon/Akula/Ethereum).sys/sem.h
).mdbx::move_result
.&
for std::ostream &operator<<()
overloads.EXDEV
(Cross-device link) error from mdbx_env_copy()
.pgno_t
during checking PNL on 64-bit platforms.MAX_PAGENO
and DB upper-size geometry limit.Minors:
pthread_barrier_t
stub).unused parameter
warning.\n
at the end.-fno-semantic interposition
option to reduce the overhead to calling self own public functions.Acknowledgements:
New features, extensions and improvements:
mdbx_cursor_get_batch()
.MDBX_SET_UPPERBOUND
.Fixes:
MDBX_SHRINK_ALLOWED
with MDBX_ACCEDE
.Minors:
MDBX_RESULT_TRUE
(unexpected -1) from mdbx_env_set_option()
.mdbx_env_get_syncbytes()
and mdbx_env_get_syncperiod()
.MDBX_INTEGERKEY
.mdbx_env_sync_internal()
.mdbx_cursor_put()
for MDBX_DUPFIXED
cases.mdbx_env_info_ex()
.mdbx_override_meta()
to avoid false-positive assertions.MDBX_ENODATA
for some cases.Acknowledgements:
Fixes:
devtoolset-9
on CentOS/RHEL 7.MDBX_PROBLEM
error because of update an obsolete meta-page.MDBX_NOTFOUND
error in case an inexact value found for MDBX_GET_BOTH
operation.Minors:
constexpr
-related macros for legacy compilers.MDBX_FORCE_BUILD_AS_MAIN_PROJECT
cmake option.#undef P_DIRTY
.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:
Acknowledgements:
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;v0.10.5
, i.e. the forward-compatibility is broken for v0.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 of v0.10.5
.
Acknowledgements:
Fixes:
#pragma pack
fix for modern compilers.mdbx_chk
utility.Minors:
@MAIN
and @GC
sub-databases of a last committed modification transaction's ID.Acknowledgements:
Fixes:
#pragma pack
to avoid provoking some compilers to generate code with unaligned access.noexcept
for potentially throwing txn::put()
of C++ API.Minors:
Acknowledgements:
Extensions and improvements:
cursor::erase()
overloads for key
and for key-value
.Fixes:
madvise
while opening DB (fixes https://github.com/erthink/libmdbx/issues/231).P_DIRTY
flag (0x10
) for nested/sub-pages.Minors:
Acknowledgements:
node-mdbx
NodeJS bindings.lmdbx-store
NodeJS bindings.New features, extensions and improvements:
MDBX_BUILD_TIMESTAMP
for builds reproducibility.long-stochastic
script.MDBX_TXN_FULL
error for large transactions when possible.MDBX_READERS_LIMIT
increased to 32767
.MDBX_TOO_LARGE
under Valgrind/ASAN if being opened DB is 100 larger than RAM (to avoid hangs and OOM).mdbx_chk
now skips iteration & checking of DB' records if corresponding page-tree is corrupted (to avoid SIGSEGV
, ASAN failures, etc).Backward compatibility break:
VERSION.txt
for version information instead of VERSION
to avoid collision with #include <version>
.slice::from/to_FOO_bytes()
to ‘slice::envisage_from/to_FOO_length()’.MDBX_TEST_EXTRA
make's variable to MDBX_SMOKE_EXTRA
.Fixes:
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.MDBX_NOTLS
option.mdbx_cursor_eof()
result.make install
with non-GNU install
utility (OSX, BSD).CMake
in special cases by complete use GNUInstallDirs
's variables.std::string
and alignment.safe64_reset()
for platforms without atomic 64-bit compare-and-swap.__cxa_thread_atexit()
.noexcept
for buffer::&assign_reference()
.bootid
generation on Windows for case of change system' time.Acknowledgements:
New features:
-p
option to mdbx_stat
utility for printing page operations statistic.EINVAL
error.Fixes:
#elsif
typo.MDBX_PROBLEM
error during altering data in huge transactions due to wrong spilling/oust of dirty pages (https://github.com/erthink/libmdbx/issues/195).Acknowledgements:
New features:
mdbx_env_set_option()
and mdbx_env_get_option()
for controls various runtime options for an environment (announce of this feature was missed in a previous news).MDBX_DISABLE_PAGECHECKS
build option to disable some checks to reduce an overhead and detection probability of database corruption to a values closer to the LMDB. The MDBX_DISABLE_PAGECHECKS=1
provides a performance boost of about 10% in CRUD scenarios, and conjointly with the MDBX_ENV_CHECKPID=0
and MDBX_TXN_CHECKOWNER=0
options can yield up to 30% more performance compared to LMDB.mdbx_drop
similar to LMDB command-line tool to purge or delete (sub)database(s).MDBX_ENABLE_MADVISE
build option which controls the use of POSIX madvise()
hints and friends.mdbx_chk
output number of keys/items on pages.install-strip
and install-no-strip
targets to the Makefile
(https://github.com/erthink/libmdbx/pull/180).mdbx_get_sysraminfo()
to the API.MDBX_WRITEMAP
mode the OS kernel able to oust dirty pages to DB file without further penalty during transaction commit. As a result, page swapping and I/O could be significantly reduced during extra large transactions and/or lack of memory.mdbx_env_info_ex()
.MDBX_opt_txn_dp_limit
option).make options
to list available build options.make help
to list available make targets.make
's build by default.Backward compatibility break:
MDBX_AVOID_CRT
build option was renamed to MDBX_WITHOUT_MSVC_CRT
. This option is only relevant when building for Windows.mdbx_env_stat()
always, and mdbx_env_stat_ex()
when called with the zeroed transaction parameter, now internally start temporary read transaction and thus may returns MDBX_BAD_RSLOT
error. So, just never use deprecated ‘mdbx_env_stat()’ and call mdbx_env_stat_ex()
with transaction parameter.MDBX_CONFIG_MANUAL_TLS_CALLBACK
was removed and now just a non-zero value of the MDBX_MANUAL_MODULE_HANDLER
macro indicates the requirement to manually call mdbx_module_handler()
when loading libraries and applications uses statically linked libmdbx on an obsolete Windows versions.Fixes:
@MAIN
's DBI-handle.mdbx_env_info_ex()
in case of a call for a non-open environment (https://github.com/erthink/libmdbx/issues/171).mdbx_env_set_geometry()
for implicit out-of-range cases (https://github.com/erthink/libmdbx/issues/170).mdbx_env_set_option()
for set initial and limit size of dirty page list ((https://github.com/erthink/libmdbx/issues/179).constexpr
specifier for the slice::invalid()
.mdbx_env_stat_ex()
to returning statistics of the whole environment instead of MainDB only (https://github.com/erthink/libmdbx/issues/190).std::filesystem::path
).WIN32_WINNT < 0x0600
).Acknowledgements:
Removed options and features:
MDBX_HUGE_TRANSACTIONS
build-option (now no longer required).New features:
-p
option (purge subDB before loading) to mdbx_load
tool.MDBX_ENABLE_REFUND
and MDBX_PNL_ASCENDING
internal/advanced build options.mdbx_default_pagesize()
function.LIBMDBX_NO_EXPORTS_LEGACY_API
build option.Fixes:
mdbx_realloc()
for case of nullptr and MDBX_WITHOUT_MSVC_CRT=ON
for Windows.bootid
meta-page's field (https://github.com/erthink/libmdbx/issues/153).MDBX_TXN_FULL
and regressive MDBX_KEYEXIST
during large transaction commit with MDBX_LIFORECLAIM
(https://github.com/erthink/libmdbx/issues/123).weak->steady
with the same boot-id) when Database size at last weak checkpoint is large than at last steady checkpoint.Acknowledgements:
Added features:
mdbx_env_delete()
for deletion an environment files in a proper and multiprocess-safe way.mdbx_txn_commit_ex()
with collecting latency information.LIBMDBX_INLINE_API
macro and inline versions of some API functions.mdbx_cursor_copy()
function.MDBX_SET_LOWERBOUND
operation for mdbx_cursor_get()
.Fixes:
mdbx.h++
.__noreturn
.yield
instruction on ARM if unsupported.pthread_yield()
for non-GLIBC.RegGetValueA()
on Windows 2000/XP.GetTickCount64()
on Windows 2000/XP.DEFINE_ENUM_FLAG_OPERATORS
from Windows SDK.SIGPIPE
suppression for internal thread during mdbx_env_copy()
.MDBX_KEY_EXIST
error during mdbx_commit()
(https://github.com/erthink/libmdbx/issues/131).mdbx_load
for 'plain text' and without -s name
cases (https://github.com/erthink/libmdbx/issues/136).mdbx_chk
).ERROR_NOT_SUPPORTED
while opening DB by UNC pathnames (https://github.com/miranda-ng/miranda-ng/issues/2627).EXCEPTION_POSSIBLE_DEADLOCK
condition for Windows.Added features:
MDBX_SYNC_DURABLE
to sync modes for API clarity.MDBX_ALLDUPS
and MDBX_UPSERT
for API clarity.MDBX_TXN_RDONLY_PREPARE
flag).mdbx_cursor_create()
and mdbx_cursor_bind()
functions).mdbx_chk -h
).mdbx_chk -h
).mdbx_txn_break()
function to explicitly mark a transaction as broken.mdbx_chk
utility and mdbx_walk_tree()
function.pure-function
and const-function
attributes to C API.Deprecated functions and flags:
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:
mdbx_strerror()
for MDBX_BUSY
error (no error description is returned).EACCESS
or EBADFD
error).mdbx_page_get()
null-defer when DB corrupted (crash by SIGSEGV
).mdbx_env_open()
for re-opening after non-fatal errors (mdbx_chk
unexpected failures).static_assert()
bug.getopt()
messages for Windows (Thanks to Andrey Sporaw for reporting).Added features:
Deprecated functions and flags:
mdbx_dbi_open_ex()
are deprecated, since such databases couldn't be checked by the mdbx_chk
utility. Please use the value-to-key functions to provide keys that are compatible with the built-in libmdbx comparators.MDBX_WRITEMAP
option.mdbx_get_keycmp()
and mdbx_get_datacmp()
functions (helpful to avoid using custom comparators).ENABLE_UBSAN
CMake option to enabling the UndefinedBehaviorSanitizer from GCC/CLANG.MDBX_CORRUPTED
in case all meta-pages are weak and no other error.MDBX_UNABLE_EXTEND_MAPSIZE
error will now be returned less frequently and only when using the DB in the current process really requires it to be reopened.mdbx_env_set_geometry()
for case it is called from an opened environment outside of a write transaction.MDBX_HUGE_TRANSACTIONS
build-option (default OFF
)./EHsc
option).MDBX_NOSUBDIR
while opening for any existing database.MDBX_WITHOUT_MSVC_CRT
option and missing ntdll.def
.mdbx_env_close()
to work correctly called concurrently from several threads.ENODATA
for FreeBSD.pwritev()
for single-writes (up to 10% speedup for some kernels & scenarios).MDBX_UTTERLY_NOSYNC
as result of flags merge.mdbx_dbi_dupsort_depthmask()
function.MDBX_CP_FORCE_RESIZEABLE
option.MDBX_MAP_RESIZED
for compatibility.MDBX_BUILD_TOOLS
option (default ON
).mdbx_dbi_open_ex()
to safe concurrently opening the same handle from different threads.mdbx_update_gc()
for huge transactions with small sizes of database page.CFLAGS_EXTRA
make-option for convenience.memcpy(ptr, NULL, 0)
.MDBX_MAP_RESIZED
renamed to MDBX_UNABLE_EXTEND_MAPSIZE
.MDBX_TXN_OVERLAPPING
error and MDBX_DBG_LEGACY_OVERLAP
option.mdbx_key_from_jsonInteger()
, mdbx_key_from_double()
, mdbx_key_from_float()
, mdbx_key_from_int64()
and mdbx_key_from_int32()
functions. See mdbx.h
for description.mdbx_load
utility for custom comparators.MDBX_APPEND
flag inside mdbx_cursor_put()
.STATUS_CONFLICTING_ADDRESSES
.MDBX_DBG_DUMP
option to avoid disk I/O performance degradation.mdbx_env_set_geometry()
for large page size.MDBX_NOTLS
option.MADV_DONTNEED
threshold.mdbx_chk
utility for don't checking some numbers if walking on the B-tree was disabled.MDBX_FORCE_ASSERTIONS
built-time option.MDBX_DBG_DUMP
to avoid performance degradation.MDBX_NOSYNC
to MDBX_SAFE_NOSYNC
for clarity.ERROR_ACCESS_DENIED
from OpenProcess()
as 'process exists'.FILE_FLAG_NO_BUFFERING
for compatibility with small database pages.MDBX_ACCEDE
flag for database opening.