mdbx: допущение нехватки страниц при ранней/не-отложенной очистке GC (продолжение).

This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2025-06-19 21:46:37 +03:00
parent d14927366d
commit fa0cd4d8b3
2 changed files with 14 additions and 6 deletions

View File

@ -1096,10 +1096,15 @@ next_gc:
txn->cursors[FREE_DBI] = gc; txn->cursors[FREE_DBI] = gc;
ret.err = cursor_del(gc, 0); ret.err = cursor_del(gc, 0);
txn->cursors[FREE_DBI] = gc->next; txn->cursors[FREE_DBI] = gc->next;
if (unlikely(ret.err != MDBX_SUCCESS)) if (likely(ret.err == MDBX_SUCCESS)) {
goto fail;
rkl = &txn->wr.gc.ready4reuse; rkl = &txn->wr.gc.ready4reuse;
rkl_name = "ready4reuse"; rkl_name = "ready4reuse";
} else {
VERBOSE("gc-early-clean: err %d, repnl %zu, gc-height %u (%u branch, %u leafs)", ret.err,
MDBX_PNL_GETSIZE(txn->wr.repnl), gc->tree->height, gc->tree->branch_pages, gc->tree->leaf_pages);
if (unlikely(txn->flags & MDBX_TXN_ERROR))
goto fail;
}
} }
ret.err = rkl_push(rkl, id); ret.err = rkl_push(rkl, id);
TRACE("%" PRIaTXN " len %zu pushed to rkl-%s, err %d", id, gc_len, rkl_name, ret.err); TRACE("%" PRIaTXN " len %zu pushed to rkl-%s, err %d", id, gc_len, rkl_name, ret.err);

View File

@ -182,8 +182,11 @@ __hot int page_touch_unmodifable(MDBX_txn *txn, MDBX_cursor *mc, const page_t *c
const pgr_t par = gc_alloc_single(mc); const pgr_t par = gc_alloc_single(mc);
rc = par.err; rc = par.err;
np = par.page; np = par.page;
if (unlikely(rc != MDBX_SUCCESS)) if (unlikely(rc != MDBX_SUCCESS)) {
if (likely(mc->dbi_state != txn->dbi_state) || (rc != MDBX_MAP_FULL && rc != MDBX_BACKLOG_DEPLETED))
goto fail; goto fail;
return rc;
}
rc = pnl_append(&txn->wr.retired_pages, mp->pgno); rc = pnl_append(&txn->wr.retired_pages, mp->pgno);
if (unlikely(rc != MDBX_SUCCESS)) if (unlikely(rc != MDBX_SUCCESS))