mdbx: skip update meta-geo in read-only mode.

Change-Id: I1c9610920ad87dc8110e8d03038ef385220000c8
This commit is contained in:
Leonid Yuriev 2020-09-05 11:57:34 +03:00
parent c24e566591
commit 54ccb92444

View File

@ -9743,8 +9743,7 @@ static int __cold mdbx_setup_dxb(MDBX_env *env, const int lck_rc) {
env->me_dxb_mmap.current); env->me_dxb_mmap.current);
return MDBX_PROBLEM; return MDBX_PROBLEM;
} }
if (env->me_dxb_mmap.current != env->me_dbgeo.now && if (env->me_dxb_mmap.current != env->me_dbgeo.now) {
(env->me_flags & MDBX_RDONLY) == 0) {
meta.mm_geo.now = bytes2pgno(env, env->me_dxb_mmap.current); meta.mm_geo.now = bytes2pgno(env, env->me_dxb_mmap.current);
mdbx_notice("update meta-geo to filesize %" PRIuPTR " bytes, %" PRIaPGNO mdbx_notice("update meta-geo to filesize %" PRIuPTR " bytes, %" PRIaPGNO
" pages", " pages",
@ -9752,32 +9751,44 @@ static int __cold mdbx_setup_dxb(MDBX_env *env, const int lck_rc) {
} }
if (memcmp(&meta.mm_geo, &head->mm_geo, sizeof(meta.mm_geo))) { if (memcmp(&meta.mm_geo, &head->mm_geo, sizeof(meta.mm_geo))) {
const txnid_t txnid = mdbx_meta_txnid_stable(env, head); if (env->me_flags & MDBX_RDONLY) {
const txnid_t next_txnid = safe64_txnid_next(txnid); mdbx_warning(
mdbx_verbose("updating meta.geo: " "skipped update meta.geo in read-only mode: from l%" PRIaPGNO
"from l%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO "/s%u-g%u, to l%" PRIaPGNO
"/s%u-g%u (txn#%" PRIaTXN "), " "-n%" PRIaPGNO "-u%" PRIaPGNO "/s%u-g%u",
"to l%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO head->mm_geo.lower, head->mm_geo.now, head->mm_geo.upper,
"/s%u-g%u (txn#%" PRIaTXN ")", head->mm_geo.shrink, head->mm_geo.grow, meta.mm_geo.lower,
head->mm_geo.lower, head->mm_geo.now, head->mm_geo.upper, meta.mm_geo.now, meta.mm_geo.upper, meta.mm_geo.shrink,
head->mm_geo.shrink, head->mm_geo.grow, txnid, meta.mm_geo.grow);
meta.mm_geo.lower, meta.mm_geo.now, meta.mm_geo.upper, } else {
meta.mm_geo.shrink, meta.mm_geo.grow, next_txnid); const txnid_t txnid = mdbx_meta_txnid_stable(env, head);
const txnid_t next_txnid = safe64_txnid_next(txnid);
mdbx_notice("updating meta.geo: "
"from l%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO
"/s%u-g%u (txn#%" PRIaTXN "), "
"to l%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO
"/s%u-g%u (txn#%" PRIaTXN ")",
head->mm_geo.lower, head->mm_geo.now, head->mm_geo.upper,
head->mm_geo.shrink, head->mm_geo.grow, txnid,
meta.mm_geo.lower, meta.mm_geo.now, meta.mm_geo.upper,
meta.mm_geo.shrink, meta.mm_geo.grow, next_txnid);
mdbx_ensure(env, mdbx_meta_eq(env, &meta, head)); mdbx_ensure(env, mdbx_meta_eq(env, &meta, head));
mdbx_meta_set_txnid(env, &meta, next_txnid); mdbx_meta_set_txnid(env, &meta, next_txnid);
err = mdbx_sync_locked(env, env->me_flags | MDBX_SHRINK_ALLOWED, &meta); err = mdbx_sync_locked(env, env->me_flags | MDBX_SHRINK_ALLOWED, &meta);
if (err) { if (err) {
mdbx_error("error %d, while updating meta.geo: " mdbx_error("error %d, while updating meta.geo: "
"from l%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO "from l%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO
"/s%u-g%u (txn#%" PRIaTXN "), " "/s%u-g%u (txn#%" PRIaTXN "), "
"to l%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO "to l%" PRIaPGNO "-n%" PRIaPGNO "-u%" PRIaPGNO
"/s%u-g%u (txn#%" PRIaTXN ")", "/s%u-g%u (txn#%" PRIaTXN ")",
err, head->mm_geo.lower, head->mm_geo.now, err, head->mm_geo.lower, head->mm_geo.now,
head->mm_geo.upper, head->mm_geo.shrink, head->mm_geo.grow, head->mm_geo.upper, head->mm_geo.shrink, head->mm_geo.grow,
txnid, meta.mm_geo.lower, meta.mm_geo.now, meta.mm_geo.upper, txnid, meta.mm_geo.lower, meta.mm_geo.now,
meta.mm_geo.shrink, meta.mm_geo.grow, next_txnid); meta.mm_geo.upper, meta.mm_geo.shrink, meta.mm_geo.grow,
return err; next_txnid);
return err;
}
} }
} }
} }