mdbx: новый код обновления GC.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev)
2025-04-26 00:15:41 +03:00
parent 011c3072da
commit 2b36fd5974
24 changed files with 1493 additions and 905 deletions

View File

@@ -3,8 +3,18 @@
#include "internals.h"
__hot txnid_t txn_snapshot_oldest(const MDBX_txn *const txn) {
return mvcc_shapshot_oldest(txn->env, txn->wr.troika.txnid[txn->wr.troika.prefer_steady]);
MDBX_cursor *txn_gc_cursor(MDBX_txn *txn) {
tASSERT(txn, (txn->flags & (MDBX_TXN_BLOCKED | MDBX_TXN_RDONLY)) == 0);
return ptr_disp(txn->env->basal_txn, sizeof(MDBX_txn));
}
__hot bool txn_gc_detent(const MDBX_txn *const txn) {
const txnid_t detent = mvcc_shapshot_oldest(txn->env, txn->wr.troika.txnid[txn->wr.troika.prefer_steady]);
if (likely(detent == txn->env->gc.detent))
return false;
txn->env->gc.detent = detent;
return true;
}
void txn_done_cursors(MDBX_txn *txn) {
@@ -417,12 +427,9 @@ MDBX_txn *txn_alloc(const MDBX_txn_flags_t flags, MDBX_env *env) {
txn = osal_malloc(size);
if (unlikely(!txn))
return txn;
#if MDBX_DEBUG
memset(txn, 0xCD, size);
VALGRIND_MAKE_MEM_UNDEFINED(txn, size);
#endif /* MDBX_DEBUG */
MDBX_ANALYSIS_ASSUME(size > base);
memset(txn, 0, (MDBX_GOOFY_MSVC_STATIC_ANALYZER && base > size) ? size : base);
txn->dbs = ptr_disp(txn, base);
txn->cursors = ptr_disp(txn->dbs, env->max_dbi * sizeof(txn->dbs[0]));
#if MDBX_DEBUG