mirror of
https://github.com/isar/libmdbx.git
synced 2025-02-08 17:00:51 +08:00
mdbx: remove creation obsolete legacy checkpoints.
Change-Id: I2d88b5ef4853d9379188fc450e87e11b28754c75
This commit is contained in:
parent
2b5eec2295
commit
ed986ecbb5
@ -2107,6 +2107,8 @@ static __must_check_result int mdbx_page_retire(MDBX_cursor *mc, MDBX_page *mp);
|
|||||||
static __must_check_result int mdbx_page_loose(MDBX_txn *txn, MDBX_page *mp);
|
static __must_check_result int mdbx_page_loose(MDBX_txn *txn, MDBX_page *mp);
|
||||||
static int mdbx_page_alloc(MDBX_cursor *mc, unsigned num, MDBX_page **mp,
|
static int mdbx_page_alloc(MDBX_cursor *mc, unsigned num, MDBX_page **mp,
|
||||||
int flags);
|
int flags);
|
||||||
|
static txnid_t mdbx_oomkick(MDBX_env *env, const txnid_t laggard);
|
||||||
|
|
||||||
static int mdbx_page_new(MDBX_cursor *mc, uint32_t flags, unsigned num,
|
static int mdbx_page_new(MDBX_cursor *mc, uint32_t flags, unsigned num,
|
||||||
MDBX_page **mp);
|
MDBX_page **mp);
|
||||||
static int mdbx_page_touch(MDBX_cursor *mc);
|
static int mdbx_page_touch(MDBX_cursor *mc);
|
||||||
@ -2372,8 +2374,6 @@ const char *mdbx_strerror_ANSI2OEM(int errnum) {
|
|||||||
}
|
}
|
||||||
#endif /* Bit of madness for Windows */
|
#endif /* Bit of madness for Windows */
|
||||||
|
|
||||||
static txnid_t mdbx_oomkick(MDBX_env *env, const txnid_t laggard);
|
|
||||||
|
|
||||||
void __cold mdbx_debug_log(int level, const char *function, int line,
|
void __cold mdbx_debug_log(int level, const char *function, int line,
|
||||||
const char *fmt, ...) {
|
const char *fmt, ...) {
|
||||||
va_list args;
|
va_list args;
|
||||||
@ -3374,7 +3374,7 @@ static __inline uint64_t mdbx_meta_sign(const MDBX_meta *meta) {
|
|||||||
return (sign > MDBX_DATASIGN_WEAK) ? sign : ~sign;
|
return (sign > MDBX_DATASIGN_WEAK) ? sign : ~sign;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum meta_choise_mode { prefer_last, prefer_noweak, prefer_steady };
|
enum meta_choise_mode { prefer_last, prefer_steady };
|
||||||
|
|
||||||
static __inline bool mdbx_meta_ot(const enum meta_choise_mode mode,
|
static __inline bool mdbx_meta_ot(const enum meta_choise_mode mode,
|
||||||
const MDBX_env *env, const MDBX_meta *a,
|
const MDBX_env *env, const MDBX_meta *a,
|
||||||
@ -3395,15 +3395,10 @@ static __inline bool mdbx_meta_ot(const enum meta_choise_mode mode,
|
|||||||
return META_IS_STEADY(b);
|
return META_IS_STEADY(b);
|
||||||
/* fall through */
|
/* fall through */
|
||||||
__fallthrough;
|
__fallthrough;
|
||||||
case prefer_noweak:
|
|
||||||
if (META_IS_WEAK(a) != META_IS_WEAK(b))
|
|
||||||
return !META_IS_WEAK(b);
|
|
||||||
/* fall through */
|
|
||||||
__fallthrough;
|
|
||||||
case prefer_last:
|
case prefer_last:
|
||||||
mdbx_jitter4testing(true);
|
mdbx_jitter4testing(true);
|
||||||
if (txnid_a == txnid_b)
|
if (txnid_a == txnid_b)
|
||||||
return META_IS_STEADY(b) || (META_IS_WEAK(a) && !META_IS_WEAK(b));
|
return META_IS_STEADY(b);
|
||||||
return txnid_a < txnid_b;
|
return txnid_a < txnid_b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3494,12 +3489,10 @@ static __hot txnid_t mdbx_recent_steady_txnid(const MDBX_env *env) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const char *mdbx_durable_str(const MDBX_meta *const meta) {
|
static const char *mdbx_durable_str(const MDBX_meta *const meta) {
|
||||||
if (META_IS_WEAK(meta))
|
|
||||||
return "Weak";
|
|
||||||
if (META_IS_STEADY(meta))
|
if (META_IS_STEADY(meta))
|
||||||
return (meta->mm_datasync_sign == mdbx_meta_sign(meta)) ? "Steady"
|
return (meta->mm_datasync_sign == mdbx_meta_sign(meta)) ? "Steady"
|
||||||
: "Tainted";
|
: "Tainted";
|
||||||
return "Legacy";
|
return "Weak";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
@ -7316,16 +7309,17 @@ static int __cold mdbx_read_header(MDBX_env *env, MDBX_meta *dest,
|
|||||||
if (rc != MDBX_SUCCESS)
|
if (rc != MDBX_SUCCESS)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mdbx_meta_ot(prefer_noweak, env, dest, meta)) {
|
if (mdbx_meta_ot(prefer_steady, env, dest, meta)) {
|
||||||
*dest = *meta;
|
*dest = *meta;
|
||||||
if (META_IS_WEAK(dest))
|
if (!META_IS_STEADY(dest))
|
||||||
loop_limit += 1; /* LY: should re-read to hush race with update */
|
loop_limit += 1; /* LY: should re-read to hush race with update */
|
||||||
mdbx_verbose("latch meta[%u]", meta_number);
|
mdbx_verbose("latch meta[%u]", meta_number);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dest->mm_psize == 0 ||
|
if (dest->mm_psize == 0 ||
|
||||||
(META_IS_WEAK(dest) && !meta_weak_acceptable(env, dest, lck_exclusive))) {
|
(!META_IS_STEADY(dest) &&
|
||||||
|
!meta_weak_acceptable(env, dest, lck_exclusive))) {
|
||||||
mdbx_error("%s", "no usable meta-pages, database is corrupted");
|
mdbx_error("%s", "no usable meta-pages, database is corrupted");
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -7531,9 +7525,7 @@ static int mdbx_sync_locked(MDBX_env *env, unsigned flags,
|
|||||||
*env->me_sync_timestamp = mdbx_osal_monotime();
|
*env->me_sync_timestamp = mdbx_osal_monotime();
|
||||||
} else {
|
} else {
|
||||||
assert(rc == MDBX_RESULT_TRUE /* carry non-steady */);
|
assert(rc == MDBX_RESULT_TRUE /* carry non-steady */);
|
||||||
pending->mm_datasync_sign = F_ISSET(env->me_flags, MDBX_UTTERLY_NOSYNC)
|
pending->mm_datasync_sign = MDBX_DATASIGN_WEAK;
|
||||||
? MDBX_DATASIGN_NONE
|
|
||||||
: MDBX_DATASIGN_WEAK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MDBX_meta *target = nullptr;
|
MDBX_meta *target = nullptr;
|
||||||
|
@ -305,9 +305,7 @@ typedef struct MDBX_meta {
|
|||||||
|
|
||||||
#define MDBX_DATASIGN_NONE 0u
|
#define MDBX_DATASIGN_NONE 0u
|
||||||
#define MDBX_DATASIGN_WEAK 1u
|
#define MDBX_DATASIGN_WEAK 1u
|
||||||
#define SIGN_IS_WEAK(sign) ((sign) == MDBX_DATASIGN_WEAK)
|
|
||||||
#define SIGN_IS_STEADY(sign) ((sign) > MDBX_DATASIGN_WEAK)
|
#define SIGN_IS_STEADY(sign) ((sign) > MDBX_DATASIGN_WEAK)
|
||||||
#define META_IS_WEAK(meta) SIGN_IS_WEAK((meta)->mm_datasync_sign)
|
|
||||||
#define META_IS_STEADY(meta) SIGN_IS_STEADY((meta)->mm_datasync_sign)
|
#define META_IS_STEADY(meta) SIGN_IS_STEADY((meta)->mm_datasync_sign)
|
||||||
volatile uint64_t mm_datasync_sign;
|
volatile uint64_t mm_datasync_sign;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user