Skip to content

Commit 8d5f75a

Browse files
committed
fpta: update libmdbx to 0.11.1.1 (new signature for DB' format).
1 parent 14c15d1 commit 8d5f75a

File tree

11 files changed

+133
-55
lines changed

11 files changed

+133
-55
lines changed

externals/libmdbx/ChangeLog.md

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
ChangeLog
22
---------
33

4-
## v0.11.x (in development)
5-
64
### TODO
75

86
- [Engage an "overlapped I/O" on Windows](https://github.com/erthink/libmdbx/issues/224).
@@ -20,7 +18,34 @@ ChangeLog
2018
- Packages for [Astra Linux](https://astralinux.ru/), [ALT Linux](https://www.altlinux.org/), [ROSA Linux](https://www.rosalinux.ru/), etc.
2119

2220

23-
## v0.10.5 at 2021-10-13
21+
## v0.11.1 at 2021-10-23
22+
23+
### Backward compatibility break:
24+
25+
The database format signature has been changed to prevent
26+
forward-interoperability with an previous releases, which may lead to a
27+
[false positive diagnosis of database corruption](https://github.com/erthink/libmdbx/issues/238)
28+
due to flaws of an old library versions.
29+
30+
This change is mostly invisible:
31+
32+
- previously versions are unable to read/write a new DBs;
33+
- but the new release is able to handle an old DBs and will silently upgrade ones.
34+
35+
Acknowledgements:
36+
37+
- [Alex Sharov](https://github.com/AskAlexSharov) for reporting and testing.
38+
39+
40+
## v0.10.5 at 2021-10-13 (obsolete, please use v0.11.1)
41+
42+
Unfortunately, the `v0.10.5` accidentally comes not full-compatible with previous releases:
43+
44+
- `v0.10.5` can read/processing DBs created by previous releases, i.e. the backward-compatibility is provided;
45+
- 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 for `v0.10.4` and earlier.
46+
47+
This cannot be fixed, as it requires fixing past versions, which as a result we will just get a current version.
48+
Therefore, it is recommended to use `v0.11.1` instead of `v0.10.5`.
2449

2550
Acknowledgements:
2651

externals/libmdbx/VERSION.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.10.5.2
1+
0.11.1.1

externals/libmdbx/mdbx.c

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* <http://www.OpenLDAP.org/license.html>. */
1313

1414
#define xMDBX_ALLOY 1
15-
#define MDBX_BUILD_SOURCERY 85bc9c7f9abbde697804567872d47e90ed6deccdb5811bb75eb220561e79324a_v0_10_5_2_g51491062
15+
#define MDBX_BUILD_SOURCERY 918eea7458487812b07b514656d83381f5965b04f9069a9862751dc58c60b8c9_v0_11_1_1_g93a24abb
1616
#ifdef MDBX_CONFIG_H
1717
#include MDBX_CONFIG_H
1818
#endif
@@ -68,7 +68,7 @@
6868
#endif
6969
#ifndef _CRT_SECURE_NO_WARNINGS
7070
#define _CRT_SECURE_NO_WARNINGS
71-
#endif
71+
#endif /* _CRT_SECURE_NO_WARNINGS */
7272
#if _MSC_VER > 1800
7373
#pragma warning(disable : 4464) /* relative include path contains '..' */
7474
#endif
@@ -551,7 +551,7 @@ extern "C" {
551551
#if defined(_WIN32) || defined(_WIN64)
552552
#if !defined(_CRT_SECURE_NO_WARNINGS)
553553
#define _CRT_SECURE_NO_WARNINGS
554-
#endif
554+
#endif /* _CRT_SECURE_NO_WARNINGS */
555555
#if !defined(_NO_CRT_STDIO_INLINE) && MDBX_BUILD_SHARED_LIBRARY && \
556556
!defined(xMDBX_TOOLS) && MDBX_WITHOUT_MSVC_CRT
557557
#define _NO_CRT_STDIO_INLINE
@@ -2142,7 +2142,7 @@ MDBX_MAYBE_UNUSED static
21422142
#define MDBX_MAGIC UINT64_C(/* 56-bit prime */ 0x59659DBDEF4C11)
21432143

21442144
/* FROZEN: The version number for a database's datafile format. */
2145-
#define MDBX_DATA_VERSION 2
2145+
#define MDBX_DATA_VERSION 3
21462146
/* The version number for a database's lockfile format. */
21472147
#define MDBX_LOCK_VERSION 4
21482148

@@ -2547,7 +2547,11 @@ typedef struct MDBX_lockinfo {
25472547

25482548
#define MDBX_DATA_MAGIC \
25492549
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + MDBX_DATA_VERSION)
2550-
#define MDBX_DATA_MAGIC_DEVEL ((MDBX_MAGIC << 8) + 255)
2550+
2551+
#define MDBX_DATA_MAGIC_LEGACY_COMPAT \
2552+
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + 2)
2553+
2554+
#define MDBX_DATA_MAGIC_LEGACY_DEVEL ((MDBX_MAGIC << 8) + 255)
25512555

25522556
#define MDBX_LOCK_MAGIC ((MDBX_MAGIC << 8) + MDBX_LOCK_VERSION)
25532557

@@ -13545,7 +13549,8 @@ static int mdbx_validate_meta(MDBX_env *env, MDBX_meta *const meta,
1354513549
const uint64_t magic_and_version =
1354613550
unaligned_peek_u64(4, &meta->mm_magic_and_version);
1354713551
if (unlikely(magic_and_version != MDBX_DATA_MAGIC &&
13548-
magic_and_version != MDBX_DATA_MAGIC_DEVEL)) {
13552+
magic_and_version != MDBX_DATA_MAGIC_LEGACY_COMPAT &&
13553+
magic_and_version != MDBX_DATA_MAGIC_LEGACY_DEVEL)) {
1354913554
mdbx_error("meta[%u] has invalid magic/version %" PRIx64, meta_number,
1355013555
magic_and_version);
1355113556
return ((magic_and_version >> 8) != MDBX_MAGIC) ? MDBX_INVALID
@@ -15288,6 +15293,26 @@ __cold static int mdbx_setup_dxb(MDBX_env *env, const int lck_rc,
1528815293

1528915294
atomic_store32(&env->me_lck->mti_discarded_tail,
1529015295
bytes2pgno(env, used_aligned2os_bytes), mo_Relaxed);
15296+
15297+
if ((env->me_flags & MDBX_RDONLY) == 0 && env->me_stuck_meta < 0) {
15298+
for (int n = 0; n < 3; ++n) {
15299+
MDBX_meta *const pmeta = METAPAGE(env, n);
15300+
if (unlikely(unaligned_peek_u64(4, &pmeta->mm_magic_and_version) !=
15301+
MDBX_DATA_MAGIC)) {
15302+
const txnid_t txnid = mdbx_meta_txnid_fluid(env, pmeta);
15303+
mdbx_notice("%s %s"
15304+
"meta[%u], txnid %" PRIaTXN,
15305+
"updating db-format signature for",
15306+
META_IS_STEADY(pmeta) ? "stead-" : "weak-", n, txnid);
15307+
err = mdbx_override_meta(env, n, txnid, pmeta);
15308+
if (unlikely(err != MDBX_SUCCESS)) {
15309+
mdbx_error("%s meta[%u], txnid %" PRIaTXN ", error %d",
15310+
"updating db-format signature for", n, txnid, err);
15311+
return err;
15312+
}
15313+
}
15314+
}
15315+
}
1529115316
} /* lck exclusive, lck_rc == MDBX_RESULT_TRUE */
1529215317

1529315318
//---------------------------------------------------- setup madvise/readahead
@@ -28433,7 +28458,7 @@ __cold int mdbx_get_sysraminfo(intptr_t *page_size, intptr_t *total_pages,
2843328458

2843428459

2843528460
#if MDBX_VERSION_MAJOR != 0 || \
28436-
MDBX_VERSION_MINOR != 10
28461+
MDBX_VERSION_MINOR != 11
2843728462
#error "API version mismatch! Had `git fetch --tags` done?"
2843828463
#endif
2843928464

@@ -28453,11 +28478,11 @@ __dll_export
2845328478
#endif
2845428479
const struct MDBX_version_info mdbx_version = {
2845528480
0,
28456-
10,
28457-
5,
28458-
2,
28459-
{"2021-10-15T01:11:20+03:00", "55f877883a6ed58b32d717d8878059fa8f5c2068", "514910621e260a0af00d12830242cbe895eb958f",
28460-
"v0.10.5-2-g51491062"},
28481+
11,
28482+
1,
28483+
1,
28484+
{"2021-10-24T02:28:28+03:00", "c93a4fd7cbff46e4b4e08d18488a60125c6da8e4", "93a24abbabfb46fcf47cfc1b2311bf426fcd3e4f",
28485+
"v0.11.1-1-g93a24abb"},
2846128486
sourcery};
2846228487

2846328488
__dll_export

externals/libmdbx/mdbx.c++

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* <http://www.OpenLDAP.org/license.html>. */
1313

1414
#define xMDBX_ALLOY 1
15-
#define MDBX_BUILD_SOURCERY 85bc9c7f9abbde697804567872d47e90ed6deccdb5811bb75eb220561e79324a_v0_10_5_2_g51491062
15+
#define MDBX_BUILD_SOURCERY 918eea7458487812b07b514656d83381f5965b04f9069a9862751dc58c60b8c9_v0_11_1_1_g93a24abb
1616
#ifdef MDBX_CONFIG_H
1717
#include MDBX_CONFIG_H
1818
#endif
@@ -68,7 +68,7 @@
6868
#endif
6969
#ifndef _CRT_SECURE_NO_WARNINGS
7070
#define _CRT_SECURE_NO_WARNINGS
71-
#endif
71+
#endif /* _CRT_SECURE_NO_WARNINGS */
7272
#if _MSC_VER > 1800
7373
#pragma warning(disable : 4464) /* relative include path contains '..' */
7474
#endif
@@ -551,7 +551,7 @@ extern "C" {
551551
#if defined(_WIN32) || defined(_WIN64)
552552
#if !defined(_CRT_SECURE_NO_WARNINGS)
553553
#define _CRT_SECURE_NO_WARNINGS
554-
#endif
554+
#endif /* _CRT_SECURE_NO_WARNINGS */
555555
#if !defined(_NO_CRT_STDIO_INLINE) && MDBX_BUILD_SHARED_LIBRARY && \
556556
!defined(xMDBX_TOOLS) && MDBX_WITHOUT_MSVC_CRT
557557
#define _NO_CRT_STDIO_INLINE
@@ -2142,7 +2142,7 @@ MDBX_MAYBE_UNUSED static
21422142
#define MDBX_MAGIC UINT64_C(/* 56-bit prime */ 0x59659DBDEF4C11)
21432143

21442144
/* FROZEN: The version number for a database's datafile format. */
2145-
#define MDBX_DATA_VERSION 2
2145+
#define MDBX_DATA_VERSION 3
21462146
/* The version number for a database's lockfile format. */
21472147
#define MDBX_LOCK_VERSION 4
21482148

@@ -2547,7 +2547,11 @@ typedef struct MDBX_lockinfo {
25472547

25482548
#define MDBX_DATA_MAGIC \
25492549
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + MDBX_DATA_VERSION)
2550-
#define MDBX_DATA_MAGIC_DEVEL ((MDBX_MAGIC << 8) + 255)
2550+
2551+
#define MDBX_DATA_MAGIC_LEGACY_COMPAT \
2552+
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + 2)
2553+
2554+
#define MDBX_DATA_MAGIC_LEGACY_DEVEL ((MDBX_MAGIC << 8) + 255)
25512555

25522556
#define MDBX_LOCK_MAGIC ((MDBX_MAGIC << 8) + MDBX_LOCK_VERSION)
25532557

@@ -3427,9 +3431,9 @@ MDBX_MAYBE_UNUSED static void static_checks(void) {
34273431
// Non-inline part of the libmdbx C++ API (preliminary)
34283432
//
34293433

3430-
#ifdef _MSC_VER
3434+
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
34313435
#define _CRT_SECURE_NO_WARNINGS
3432-
#endif
3436+
#endif /* _CRT_SECURE_NO_WARNINGS */
34333437

34343438

34353439

externals/libmdbx/mdbx.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -568,9 +568,9 @@ typedef mode_t mdbx_mode_t;
568568
extern "C" {
569569
#endif
570570

571-
/* MDBX version 0.10.x */
571+
/* MDBX version 0.11.x */
572572
#define MDBX_VERSION_MAJOR 0
573-
#define MDBX_VERSION_MINOR 10
573+
#define MDBX_VERSION_MINOR 11
574574

575575
#ifndef LIBMDBX_API
576576
#if defined(LIBMDBX_EXPORTS)

externals/libmdbx/mdbx_chk.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
* top-level directory of the distribution or, alternatively, at
3535
* <http://www.OpenLDAP.org/license.html>. */
3636

37-
#define MDBX_BUILD_SOURCERY 85bc9c7f9abbde697804567872d47e90ed6deccdb5811bb75eb220561e79324a_v0_10_5_2_g51491062
37+
#define MDBX_BUILD_SOURCERY 918eea7458487812b07b514656d83381f5965b04f9069a9862751dc58c60b8c9_v0_11_1_1_g93a24abb
3838
#ifdef MDBX_CONFIG_H
3939
#include MDBX_CONFIG_H
4040
#endif
@@ -90,7 +90,7 @@
9090
#endif
9191
#ifndef _CRT_SECURE_NO_WARNINGS
9292
#define _CRT_SECURE_NO_WARNINGS
93-
#endif
93+
#endif /* _CRT_SECURE_NO_WARNINGS */
9494
#if _MSC_VER > 1800
9595
#pragma warning(disable : 4464) /* relative include path contains '..' */
9696
#endif
@@ -573,7 +573,7 @@ extern "C" {
573573
#if defined(_WIN32) || defined(_WIN64)
574574
#if !defined(_CRT_SECURE_NO_WARNINGS)
575575
#define _CRT_SECURE_NO_WARNINGS
576-
#endif
576+
#endif /* _CRT_SECURE_NO_WARNINGS */
577577
#if !defined(_NO_CRT_STDIO_INLINE) && MDBX_BUILD_SHARED_LIBRARY && \
578578
!defined(xMDBX_TOOLS) && MDBX_WITHOUT_MSVC_CRT
579579
#define _NO_CRT_STDIO_INLINE
@@ -2164,7 +2164,7 @@ MDBX_MAYBE_UNUSED static
21642164
#define MDBX_MAGIC UINT64_C(/* 56-bit prime */ 0x59659DBDEF4C11)
21652165

21662166
/* FROZEN: The version number for a database's datafile format. */
2167-
#define MDBX_DATA_VERSION 2
2167+
#define MDBX_DATA_VERSION 3
21682168
/* The version number for a database's lockfile format. */
21692169
#define MDBX_LOCK_VERSION 4
21702170

@@ -2569,7 +2569,11 @@ typedef struct MDBX_lockinfo {
25692569

25702570
#define MDBX_DATA_MAGIC \
25712571
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + MDBX_DATA_VERSION)
2572-
#define MDBX_DATA_MAGIC_DEVEL ((MDBX_MAGIC << 8) + 255)
2572+
2573+
#define MDBX_DATA_MAGIC_LEGACY_COMPAT \
2574+
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + 2)
2575+
2576+
#define MDBX_DATA_MAGIC_LEGACY_DEVEL ((MDBX_MAGIC << 8) + 255)
25732577

25742578
#define MDBX_LOCK_MAGIC ((MDBX_MAGIC << 8) + MDBX_LOCK_VERSION)
25752579

externals/libmdbx/mdbx_copy.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
* top-level directory of the distribution or, alternatively, at
3535
* <http://www.OpenLDAP.org/license.html>. */
3636

37-
#define MDBX_BUILD_SOURCERY 85bc9c7f9abbde697804567872d47e90ed6deccdb5811bb75eb220561e79324a_v0_10_5_2_g51491062
37+
#define MDBX_BUILD_SOURCERY 918eea7458487812b07b514656d83381f5965b04f9069a9862751dc58c60b8c9_v0_11_1_1_g93a24abb
3838
#ifdef MDBX_CONFIG_H
3939
#include MDBX_CONFIG_H
4040
#endif
@@ -90,7 +90,7 @@
9090
#endif
9191
#ifndef _CRT_SECURE_NO_WARNINGS
9292
#define _CRT_SECURE_NO_WARNINGS
93-
#endif
93+
#endif /* _CRT_SECURE_NO_WARNINGS */
9494
#if _MSC_VER > 1800
9595
#pragma warning(disable : 4464) /* relative include path contains '..' */
9696
#endif
@@ -573,7 +573,7 @@ extern "C" {
573573
#if defined(_WIN32) || defined(_WIN64)
574574
#if !defined(_CRT_SECURE_NO_WARNINGS)
575575
#define _CRT_SECURE_NO_WARNINGS
576-
#endif
576+
#endif /* _CRT_SECURE_NO_WARNINGS */
577577
#if !defined(_NO_CRT_STDIO_INLINE) && MDBX_BUILD_SHARED_LIBRARY && \
578578
!defined(xMDBX_TOOLS) && MDBX_WITHOUT_MSVC_CRT
579579
#define _NO_CRT_STDIO_INLINE
@@ -2164,7 +2164,7 @@ MDBX_MAYBE_UNUSED static
21642164
#define MDBX_MAGIC UINT64_C(/* 56-bit prime */ 0x59659DBDEF4C11)
21652165

21662166
/* FROZEN: The version number for a database's datafile format. */
2167-
#define MDBX_DATA_VERSION 2
2167+
#define MDBX_DATA_VERSION 3
21682168
/* The version number for a database's lockfile format. */
21692169
#define MDBX_LOCK_VERSION 4
21702170

@@ -2569,7 +2569,11 @@ typedef struct MDBX_lockinfo {
25692569

25702570
#define MDBX_DATA_MAGIC \
25712571
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + MDBX_DATA_VERSION)
2572-
#define MDBX_DATA_MAGIC_DEVEL ((MDBX_MAGIC << 8) + 255)
2572+
2573+
#define MDBX_DATA_MAGIC_LEGACY_COMPAT \
2574+
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + 2)
2575+
2576+
#define MDBX_DATA_MAGIC_LEGACY_DEVEL ((MDBX_MAGIC << 8) + 255)
25732577

25742578
#define MDBX_LOCK_MAGIC ((MDBX_MAGIC << 8) + MDBX_LOCK_VERSION)
25752579

externals/libmdbx/mdbx_drop.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
* top-level directory of the distribution or, alternatively, at
3737
* <http://www.OpenLDAP.org/license.html>. */
3838

39-
#define MDBX_BUILD_SOURCERY 85bc9c7f9abbde697804567872d47e90ed6deccdb5811bb75eb220561e79324a_v0_10_5_2_g51491062
39+
#define MDBX_BUILD_SOURCERY 918eea7458487812b07b514656d83381f5965b04f9069a9862751dc58c60b8c9_v0_11_1_1_g93a24abb
4040
#ifdef MDBX_CONFIG_H
4141
#include MDBX_CONFIG_H
4242
#endif
@@ -92,7 +92,7 @@
9292
#endif
9393
#ifndef _CRT_SECURE_NO_WARNINGS
9494
#define _CRT_SECURE_NO_WARNINGS
95-
#endif
95+
#endif /* _CRT_SECURE_NO_WARNINGS */
9696
#if _MSC_VER > 1800
9797
#pragma warning(disable : 4464) /* relative include path contains '..' */
9898
#endif
@@ -575,7 +575,7 @@ extern "C" {
575575
#if defined(_WIN32) || defined(_WIN64)
576576
#if !defined(_CRT_SECURE_NO_WARNINGS)
577577
#define _CRT_SECURE_NO_WARNINGS
578-
#endif
578+
#endif /* _CRT_SECURE_NO_WARNINGS */
579579
#if !defined(_NO_CRT_STDIO_INLINE) && MDBX_BUILD_SHARED_LIBRARY && \
580580
!defined(xMDBX_TOOLS) && MDBX_WITHOUT_MSVC_CRT
581581
#define _NO_CRT_STDIO_INLINE
@@ -2166,7 +2166,7 @@ MDBX_MAYBE_UNUSED static
21662166
#define MDBX_MAGIC UINT64_C(/* 56-bit prime */ 0x59659DBDEF4C11)
21672167

21682168
/* FROZEN: The version number for a database's datafile format. */
2169-
#define MDBX_DATA_VERSION 2
2169+
#define MDBX_DATA_VERSION 3
21702170
/* The version number for a database's lockfile format. */
21712171
#define MDBX_LOCK_VERSION 4
21722172

@@ -2571,7 +2571,11 @@ typedef struct MDBX_lockinfo {
25712571

25722572
#define MDBX_DATA_MAGIC \
25732573
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + MDBX_DATA_VERSION)
2574-
#define MDBX_DATA_MAGIC_DEVEL ((MDBX_MAGIC << 8) + 255)
2574+
2575+
#define MDBX_DATA_MAGIC_LEGACY_COMPAT \
2576+
((MDBX_MAGIC << 8) + MDBX_PNL_ASCENDING * 64 + 2)
2577+
2578+
#define MDBX_DATA_MAGIC_LEGACY_DEVEL ((MDBX_MAGIC << 8) + 255)
25752579

25762580
#define MDBX_LOCK_MAGIC ((MDBX_MAGIC << 8) + MDBX_LOCK_VERSION)
25772581

0 commit comments

Comments
 (0)