Skip to content

Commit cef882b

Browse files
save (#41)
1 parent e5861e3 commit cef882b

2 files changed

Lines changed: 36 additions & 27 deletions

File tree

mdbx/mdbx.c

Lines changed: 34 additions & 25 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 783046896c7a0ed430a0f65b28d3632edc41f69d227ca12ff88eeb6719dcc72f_v0_10_5_0_gedda9515
15+
#define MDBX_BUILD_SOURCERY 268e19480a95f8af62408394a79062c88b08bf4199e0200629bf1c06b484c27c_v0_11_0_0_gfcb8cd21
1616
#ifdef MDBX_CONFIG_H
1717
#include MDBX_CONFIG_H
1818
#endif
@@ -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
@@ -16537,10 +16542,11 @@ mdbx_page_get_ex(MDBX_cursor *const mc, const pgno_t pgno,
1653716542
mdbx_tassert(txn, front <= txn->mt_front);
1653816543
if (unlikely(pgno >= txn->mt_next_pgno)) {
1653916544
mdbx_error("page #%" PRIaPGNO " beyond next-pgno", pgno);
16545+
notfound:
1654016546
ret.page = nullptr;
16541-
corrupted:
16542-
mc->mc_txn->mt_flags |= MDBX_TXN_ERROR;
1654316547
ret.err = MDBX_PAGE_NOTFOUND;
16548+
bailout:
16549+
mc->mc_txn->mt_flags |= MDBX_TXN_ERROR;
1654416550
return ret;
1654516551
}
1654616552

@@ -16580,33 +16586,36 @@ mdbx_page_get_ex(MDBX_cursor *const mc, const pgno_t pgno,
1658016586
"mismatch actual pgno (%" PRIaPGNO ") != expected (%" PRIaPGNO
1658116587
")\n",
1658216588
ret.page->mp_pgno, pgno);
16583-
goto corrupted;
16589+
goto notfound;
1658416590
}
1658516591

1658616592
#if !MDBX_DISABLE_PAGECHECKS
1658716593
if (unlikely(ret.page->mp_flags & P_ILL_BITS)) {
16588-
bad_page(ret.page, "invalid page's flags (%u)\n", ret.page->mp_flags);
16589-
goto corrupted;
16594+
ret.err =
16595+
bad_page(ret.page, "invalid page's flags (%u)\n", ret.page->mp_flags);
16596+
goto bailout;
1659016597
}
1659116598

1659216599
if (unlikely(ret.page->mp_txnid > front) &&
1659316600
unlikely(ret.page->mp_txnid > txn->mt_front || front < txn->mt_txnid)) {
16594-
bad_page(ret.page,
16595-
"invalid page txnid (%" PRIaTXN ") for %s' txnid (%" PRIaTXN ")\n",
16596-
ret.page->mp_txnid,
16597-
(front == txn->mt_front && front != txn->mt_txnid) ? "front-txn"
16598-
: "parent-page",
16599-
front);
16600-
goto corrupted;
16601+
ret.err = bad_page(
16602+
ret.page,
16603+
"invalid page txnid (%" PRIaTXN ") for %s' txnid (%" PRIaTXN ")\n",
16604+
ret.page->mp_txnid,
16605+
(front == txn->mt_front && front != txn->mt_txnid) ? "front-txn"
16606+
: "parent-page",
16607+
front);
16608+
goto bailout;
1660116609
}
1660216610

1660316611
if (unlikely((ret.page->mp_upper < ret.page->mp_lower ||
1660416612
((ret.page->mp_lower | ret.page->mp_upper) & 1) ||
1660516613
PAGEHDRSZ + ret.page->mp_upper > env->me_psize) &&
1660616614
!IS_OVERFLOW(ret.page))) {
16607-
bad_page(ret.page, "invalid page lower(%u)/upper(%u) with limit (%u)\n",
16608-
ret.page->mp_lower, ret.page->mp_upper, page_space(env));
16609-
goto corrupted;
16615+
ret.err =
16616+
bad_page(ret.page, "invalid page lower(%u)/upper(%u) with limit (%u)\n",
16617+
ret.page->mp_lower, ret.page->mp_upper, page_space(env));
16618+
goto bailout;
1661016619
}
1661116620
#endif /* !MDBX_DISABLE_PAGECHECKS */
1661216621

@@ -16851,7 +16860,7 @@ __hot static int mdbx_page_search(MDBX_cursor *mc, const MDBX_val *key,
1685116860
break;
1685216861
}
1685316862
while (unlikely((scan = scan->mt_parent) != nullptr));
16854-
if (unlikely((rc = mdbx_page_get(mc, root, &mc->mc_pg[0], pp_txnid) != 0)))
16863+
if (unlikely((rc = mdbx_page_get(mc, root, &mc->mc_pg[0], pp_txnid)) != 0))
1685516864
return rc;
1685616865
}
1685716866

@@ -28429,7 +28438,7 @@ __cold int mdbx_get_sysraminfo(intptr_t *page_size, intptr_t *total_pages,
2842928438

2843028439

2843128440
#if MDBX_VERSION_MAJOR != 0 || \
28432-
MDBX_VERSION_MINOR != 10
28441+
MDBX_VERSION_MINOR != 11
2843328442
#error "API version mismatch! Had `git fetch --tags` done?"
2843428443
#endif
2843528444

@@ -28449,11 +28458,11 @@ __dll_export
2844928458
#endif
2845028459
const struct MDBX_version_info mdbx_version = {
2845128460
0,
28452-
10,
28453-
5,
28461+
11,
28462+
0,
2845428463
0,
28455-
{"2021-10-13T16:35:26+03:00", "31713895aac05dd55b3ebc8cadd419f96b38de54", "edda9515d67b4e6d3a6b1e95f1a7f7a20b462038",
28456-
"v0.10.5-0-gedda9515"},
28464+
{"2021-10-21T15:17:18+03:00", "7faddaf52d678a2afcb4cf2ca87075b8aaaa9e0e", "fcb8cd214591f37d2738b83fd9f23f3630844774",
28465+
"v0.11.0-0-gfcb8cd21"},
2845728466
sourcery};
2845828467

2845928468
__dll_export

mdbx/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)

0 commit comments

Comments
 (0)