mdbx: release v0.9.3
Acknowledgements:
-----------------
- [Mahlon E. Smith](http://www.martini.nu/) for [FreeBSD port of libmdbx](https://svnweb.freebsd.org/ports/head/databases/mdbx/).
- [장세연](http://www.castis.com) for bug fixing and PR.
- [Clément Renault](https://github.com/Kerollmops/heed) for [Heed](https://github.com/Kerollmops/heed) fully typed Rust wrapper.
- [Alex Sharov](https://github.com/AskAlexSharov) for bug reporting.
- [Noel Kuntze](https://github.com/Thermi) 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) to `mdbx_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` and `MDBX_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](https://en.cppreference.com/w/c/atomic).
- 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 and `MDBX_AVOID_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 regressive `MDBX_KEYEXIST` during large transaction commit with `MDBX_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).
TODO:
-----
- Engage new terminology (https://github.com/erthink/libmdbx/issues/137).
- Resolve few TODOs (https://github.com/erthink/libmdbx/issues/124, https://github.com/erthink/libmdbx/issues/127, https://github.com/erthink/libmdbx/issues/115).
- Finalize C++ API.
- Packages for [ROSA Linux](https://www.rosalinux.ru/), [ALT Linux](https://www.altlinux.org/), Fedora/RHEL, Debian/Ubuntu.
Change-Id: I414b8ef2e4b90e04fb344779c0e3f1b4bd1c06be
2021-02-03 03:18:21 +08:00
|
|
|
version: 0.9.3.{build}
|
2017-04-04 20:42:30 +08:00
|
|
|
|
|
|
|
environment:
|
|
|
|
matrix:
|
2020-08-23 01:19:46 +08:00
|
|
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
|
|
|
CMAKE_GENERATOR: Visual Studio 14 2015
|
|
|
|
TOOLSET: 140
|
2019-08-31 22:13:02 +08:00
|
|
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
|
|
|
CMAKE_GENERATOR: Visual Studio 16 2019
|
|
|
|
TOOLSET: 142
|
2019-10-24 18:01:58 +08:00
|
|
|
MDBX_BUILD_SHARED_LIBRARY: OFF
|
|
|
|
MDBX_AVOID_CRT: OFF
|
|
|
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
|
|
|
CMAKE_GENERATOR: Visual Studio 16 2019
|
|
|
|
TOOLSET: 142
|
|
|
|
MDBX_BUILD_SHARED_LIBRARY: ON
|
|
|
|
MDBX_AVOID_CRT: ON
|
|
|
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
|
|
|
CMAKE_GENERATOR: Visual Studio 16 2019
|
|
|
|
TOOLSET: 142
|
|
|
|
MDBX_BUILD_SHARED_LIBRARY: OFF
|
|
|
|
MDBX_AVOID_CRT: ON
|
|
|
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
|
|
|
CMAKE_GENERATOR: Visual Studio 16 2019
|
|
|
|
TOOLSET: 142
|
|
|
|
MDBX_BUILD_SHARED_LIBRARY: ON
|
|
|
|
MDBX_AVOID_CRT: OFF
|
2017-07-06 02:40:18 +08:00
|
|
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
2019-08-31 22:13:02 +08:00
|
|
|
CMAKE_GENERATOR: Visual Studio 15 2017
|
|
|
|
TOOLSET: 141
|
2017-03-29 06:11:33 +08:00
|
|
|
|
2017-07-22 03:51:56 +08:00
|
|
|
branches:
|
|
|
|
except:
|
|
|
|
- coverity_scan
|
|
|
|
|
2017-03-29 06:11:33 +08:00
|
|
|
configuration:
|
2017-07-06 02:40:18 +08:00
|
|
|
- Debug
|
2020-09-14 08:48:59 +08:00
|
|
|
# MSVC-2019 hangs during code generation/optimization due to its own internal errors.
|
|
|
|
# I have found out that the problem occurs because of the /Ob2 option (see https://github.com/erthink/libmdbx/issues/116).
|
|
|
|
# So the simplest workaround is to using RelWithDebiInfo configuration for testing (cmake will uses /Ob1 option), instead of Release.
|
|
|
|
# - Release
|
|
|
|
- RelWithDebInfo
|
2017-07-06 02:40:18 +08:00
|
|
|
|
|
|
|
platform:
|
2019-08-31 22:13:02 +08:00
|
|
|
- Win32
|
2018-09-14 19:10:36 +08:00
|
|
|
- x64
|
2017-03-29 06:11:33 +08:00
|
|
|
|
2020-09-08 01:49:40 +08:00
|
|
|
# MSVC-2019 may hang up during code generation/optimization due to its own internal errors.
|
|
|
|
matrix:
|
|
|
|
allow_failures:
|
|
|
|
- image: Visual Studio 2019
|
|
|
|
configuration: Release
|
|
|
|
|
|
|
|
# Enable RDP for troubleshooting
|
|
|
|
init:
|
|
|
|
- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
|
|
|
|
2019-08-31 22:13:02 +08:00
|
|
|
before_build:
|
2019-10-24 18:01:58 +08:00
|
|
|
- git clean -x -f -d
|
2019-08-31 22:13:02 +08:00
|
|
|
- git submodule sync
|
2021-03-02 06:48:16 +08:00
|
|
|
- git fetch --tags --prune --force
|
2019-08-31 22:13:02 +08:00
|
|
|
- git submodule update --init --recursive
|
2021-03-02 06:48:16 +08:00
|
|
|
- git submodule foreach --recursive git fetch --tags --prune --force
|
2019-08-31 22:13:02 +08:00
|
|
|
- cmake --version
|
2017-03-29 06:11:33 +08:00
|
|
|
|
2019-08-31 22:13:02 +08:00
|
|
|
build_script:
|
2017-03-30 23:54:57 +08:00
|
|
|
- ps: |
|
2019-08-31 22:13:02 +08:00
|
|
|
Write-Output "*******************************************************************************"
|
|
|
|
Write-Output "Configuration: $env:CONFIGURATION"
|
|
|
|
Write-Output "Platform: $env:PLATFORM"
|
|
|
|
Write-Output "Toolchain: $env:CMAKE_GENERATOR v$env:TOOLSET"
|
2019-10-24 18:01:58 +08:00
|
|
|
Write-Output "Options: MDBX_AVOID_CRT=$env:MDBX_AVOID_CRT MDBX_BUILD_SHARED_LIBRARY=$env:MDBX_BUILD_SHARED_LIBRARY"
|
2019-08-31 22:13:02 +08:00
|
|
|
Write-Output "*******************************************************************************"
|
|
|
|
|
|
|
|
md _build -Force | Out-Null
|
|
|
|
cd _build
|
|
|
|
|
|
|
|
$generator = $env:CMAKE_GENERATOR
|
|
|
|
if ($env:TOOLSET -lt 142) {
|
|
|
|
if ($env:PLATFORM -eq "x64") {
|
|
|
|
$generator = "$generator Win64"
|
|
|
|
}
|
2020-09-14 08:48:59 +08:00
|
|
|
& cmake -G "$generator" -D CMAKE_CONFIGURATION_TYPES="Debug;Release;RelWithDebInfo" -D MDBX_AVOID_CRT:BOOL=$env:MDBX_AVOID_CRT -D MDBX_BUILD_SHARED_LIBRARY:BOOL=$env:MDBX_BUILD_SHARED_LIBRARY ..
|
2017-07-06 02:40:18 +08:00
|
|
|
} else {
|
2020-09-14 08:48:59 +08:00
|
|
|
& cmake -G "$generator" -A $env:PLATFORM -D CMAKE_CONFIGURATION_TYPES="Debug;Release;RelWithDebInfo" -DMDBX_AVOID_CRT:BOOL=$env:MDBX_AVOID_CRT -D MDBX_BUILD_SHARED_LIBRARY:BOOL=$env:MDBX_BUILD_SHARED_LIBRARY ..
|
2017-07-06 02:40:18 +08:00
|
|
|
}
|
2019-08-31 22:13:02 +08:00
|
|
|
if ($LastExitCode -ne 0) {
|
|
|
|
throw "Exec: $ErrorMessage"
|
|
|
|
}
|
|
|
|
Write-Output "*******************************************************************************"
|
|
|
|
|
|
|
|
& cmake --build . --config $env:CONFIGURATION
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
|
|
throw "Exec: $ErrorMessage"
|
|
|
|
}
|
|
|
|
Write-Output "*******************************************************************************"
|
2017-07-06 02:40:18 +08:00
|
|
|
|
2019-08-31 22:13:02 +08:00
|
|
|
test_script:
|
|
|
|
- ps: |
|
|
|
|
if (($env:PLATFORM -ne "ARM") -and ($env:PLATFORM -ne "ARM64")) {
|
2019-10-02 06:21:41 +08:00
|
|
|
& ./$env:CONFIGURATION/mdbx_test.exe --progress --console=no --pathname=test.db --dont-cleanup-after basic > test.log
|
|
|
|
Get-Content test.log | Select-Object -last 42
|
2019-08-31 22:13:02 +08:00
|
|
|
if ($LastExitCode -ne 0) {
|
|
|
|
throw "Exec: $ErrorMessage"
|
|
|
|
} else {
|
2019-09-01 21:53:11 +08:00
|
|
|
& ./$env:CONFIGURATION/mdbx_chk.exe -nvv test.db | Tee-Object -file chk.log | Select-Object -last 42
|
2019-08-31 22:13:02 +08:00
|
|
|
}
|
2017-04-11 04:34:59 +08:00
|
|
|
}
|
2017-04-25 00:03:38 +08:00
|
|
|
|
2017-04-25 23:30:31 +08:00
|
|
|
on_failure:
|
2019-10-28 01:55:29 +08:00
|
|
|
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\test.log
|
|
|
|
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\test.db
|
|
|
|
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\chk.log
|