mirror of
https://github.com/isar/libmdbx.git
synced 2025-02-07 15:59:36 +08:00
mdbx: рефакторинг coherency_check_written()
.
This commit is contained in:
parent
3798d47a71
commit
319753661a
@ -168,26 +168,24 @@ int coherency_check_written(const MDBX_env *env, const txnid_t txnid,
|
|||||||
uint64_t *timestamp) {
|
uint64_t *timestamp) {
|
||||||
const bool report = !(timestamp && *timestamp);
|
const bool report = !(timestamp && *timestamp);
|
||||||
const txnid_t head_txnid = meta_txnid(meta);
|
const txnid_t head_txnid = meta_txnid(meta);
|
||||||
if (unlikely(head_txnid < MIN_TXNID || head_txnid < txnid)) {
|
if (likely(head_txnid >= MIN_TXNID && head_txnid >= txnid)) {
|
||||||
if (report) {
|
if (likely(
|
||||||
env->lck->pgops.incoherence.weak =
|
coherency_check(env, head_txnid, &meta->trees.gc, meta, report))) {
|
||||||
(env->lck->pgops.incoherence.weak >= INT32_MAX)
|
eASSERT(env, meta->trees.gc.flags == MDBX_INTEGERKEY);
|
||||||
? INT32_MAX
|
eASSERT(env, check_sdb_flags(meta->trees.main.flags));
|
||||||
: env->lck->pgops.incoherence.weak + 1;
|
return MDBX_SUCCESS;
|
||||||
WARNING("catch %s txnid %" PRIaTXN " for meta_%" PRIaPGNO " %s",
|
|
||||||
(head_txnid < MIN_TXNID) ? "invalid" : "unexpected", head_txnid,
|
|
||||||
bytes2pgno(env, ptr_dist(meta, env->dxb_mmap.base)),
|
|
||||||
"(workaround for incoherent flaw of unified page/buffer cache)");
|
|
||||||
}
|
}
|
||||||
return coherency_timeout(timestamp, pgno, env);
|
} else if (report) {
|
||||||
|
env->lck->pgops.incoherence.weak =
|
||||||
|
(env->lck->pgops.incoherence.weak >= INT32_MAX)
|
||||||
|
? INT32_MAX
|
||||||
|
: env->lck->pgops.incoherence.weak + 1;
|
||||||
|
WARNING("catch %s txnid %" PRIaTXN " for meta_%" PRIaPGNO " %s",
|
||||||
|
(head_txnid < MIN_TXNID) ? "invalid" : "unexpected", head_txnid,
|
||||||
|
bytes2pgno(env, ptr_dist(meta, env->dxb_mmap.base)),
|
||||||
|
"(workaround for incoherent flaw of unified page/buffer cache)");
|
||||||
}
|
}
|
||||||
if (unlikely(
|
return coherency_timeout(timestamp, pgno, env);
|
||||||
!coherency_check(env, head_txnid, &meta->trees.gc, meta, report)))
|
|
||||||
return coherency_timeout(timestamp, pgno, env);
|
|
||||||
|
|
||||||
eASSERT(env, meta->trees.gc.flags == MDBX_INTEGERKEY);
|
|
||||||
eASSERT(env, check_sdb_flags(meta->trees.main.flags));
|
|
||||||
return MDBX_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool coherency_check_meta(const MDBX_env *env, const volatile meta_t *meta,
|
bool coherency_check_meta(const MDBX_env *env, const volatile meta_t *meta,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user