mirror of
https://github.com/isar/libmdbx.git
synced 2025-06-23 01:42:36 +08:00
mdbx: удаление known_continuous
аргумента rkl_push()
.
This commit is contained in:
parent
b3329fddf2
commit
bb5b6c5823
17
src/gc-get.c
17
src/gc-get.c
@ -1047,14 +1047,15 @@ next_gc:
|
||||
}
|
||||
|
||||
/* Remember ID of readed GC record */
|
||||
ret.err = rkl_push(&txn->wr.gc.reclaimed, id,
|
||||
false /* Вместо false, тут можно передавать/использовать (flags & ALLOC_LIFO) == 0, тогда
|
||||
* дыры/пропуски в идентификаторах GC будут образовывать непрерывные интервалы в wr.gc.reclaimed,
|
||||
* что обеспечит больше свободных идентификаторов/слотов для возврата страниц. Однако, это
|
||||
* также приведёт к пустым попыткам удаления отсутствующих записей в gc_clear_reclaimed(),
|
||||
* а далее к перекладыванию этих сплошных интервалов поэлементно в ready4reuse.
|
||||
* Поэтому смысла в этом решительно нет. Следует либо формировать сплошные интервалы при
|
||||
* работе gc_clear_reclaimed(), особенно в FIFO-режиме, либо искать их только в gc_provide_ids() */);
|
||||
ret.err = rkl_push(
|
||||
&txn->wr.gc.reclaimed, id
|
||||
/* Вместо known_continuous=false, тут можно передавать/использовать (flags & ALLOC_LIFO) == 0, тогда дыры/пропуски
|
||||
* в идентификаторах GC будут образовывать непрерывные интервалы в wr.gc.reclaimed, что обеспечит больше свободных
|
||||
* идентификаторов/слотов для возврата страниц. Однако, это также приведёт к пустым попыткам удаления
|
||||
* отсутствующих записей в gc_clear_reclaimed(), а далее к перекладыванию этих сплошных интервалов поэлементно в
|
||||
* ready4reuse. Поэтому смысла в этом решительно нет. Следует либо формировать сплошные интервалы при работе
|
||||
* gc_clear_reclaimed(), особенно в FIFO-режиме, либо искать их только в gc_provide_ids() */
|
||||
);
|
||||
TRACE("%" PRIaTXN " len %zu pushed to txn-rkl, err %d", id, gc_len, ret.err);
|
||||
if (unlikely(ret.err != MDBX_SUCCESS))
|
||||
goto fail;
|
||||
|
@ -485,7 +485,7 @@ static int gc_remove_rkl(MDBX_txn *txn, gcu_t *ctx, rkl_t *rkl) {
|
||||
int err = cursor_seek(&ctx->cursor, &key, nullptr, MDBX_SET).err;
|
||||
tASSERT(txn, id == rkl_edge(rkl, is_lifo(txn)));
|
||||
if (err == MDBX_NOTFOUND) {
|
||||
err = rkl_push(&ctx->ready4reuse, rkl_pop(rkl, is_lifo(txn)), false);
|
||||
err = rkl_push(&ctx->ready4reuse, rkl_pop(rkl, is_lifo(txn)));
|
||||
WARNING("unexpected %s for gc-id %" PRIaTXN ", ignore and continue, push-err %d", "MDBX_NOTFOUND", id, err);
|
||||
if (unlikely(MDBX_IS_ERROR(err)))
|
||||
return err;
|
||||
@ -506,7 +506,7 @@ static int gc_remove_rkl(MDBX_txn *txn, gcu_t *ctx, rkl_t *rkl) {
|
||||
return err;
|
||||
ENSURE(txn->env, id == rkl_pop(rkl, is_lifo(txn)));
|
||||
tASSERT(txn, id <= txn->env->lck->cached_oldest.weak);
|
||||
err = rkl_push(&ctx->ready4reuse, id, false);
|
||||
err = rkl_push(&ctx->ready4reuse, id);
|
||||
if (unlikely(err != MDBX_SUCCESS))
|
||||
return err;
|
||||
TRACE("id %" PRIaTXN " cleared and moved to ready4reuse", id);
|
||||
@ -528,7 +528,7 @@ static int gc_push_sequel(MDBX_txn *txn, gcu_t *ctx, txnid_t id) {
|
||||
tASSERT(txn, id > 0 && id < txn->env->gc.detent);
|
||||
tASSERT(txn, !rkl_contain(&txn->wr.gc.comeback, id) && !rkl_contain(&ctx->ready4reuse, id));
|
||||
TRACE("id %" PRIaTXN ", return-left %zi", id, ctx->return_left);
|
||||
int err = rkl_push(&ctx->sequel, id, false);
|
||||
int err = rkl_push(&ctx->sequel, id);
|
||||
if (unlikely(err != MDBX_SUCCESS)) {
|
||||
if (err == MDBX_RESULT_TRUE) {
|
||||
ERROR("%s/%d: %s", "MDBX_PROBLEM", MDBX_PROBLEM, "unexpected duplicate(s) during rkl-push");
|
||||
@ -959,7 +959,7 @@ static inline int gc_reserve4return(MDBX_txn *txn, gcu_t *ctx, const size_t chun
|
||||
return MDBX_PROBLEM;
|
||||
}
|
||||
|
||||
int err = rkl_push(&txn->wr.gc.comeback, reservation_id, false);
|
||||
int err = rkl_push(&txn->wr.gc.comeback, reservation_id);
|
||||
if (unlikely(err != MDBX_SUCCESS))
|
||||
return err;
|
||||
|
||||
|
@ -218,9 +218,10 @@ static int extend_solid(rkl_t *rkl, txnid_t solid_begin, txnid_t solid_end, cons
|
||||
return MDBX_SUCCESS;
|
||||
}
|
||||
|
||||
int rkl_push(rkl_t *rkl, const txnid_t id, const bool known_continuous) {
|
||||
int rkl_push(rkl_t *rkl, const txnid_t id) {
|
||||
assert(id >= MIN_TXNID && id < INVALID_TXNID);
|
||||
assert(rkl_check(rkl));
|
||||
const bool known_continuous = false;
|
||||
|
||||
if (rkl->solid_begin >= rkl->solid_end) {
|
||||
/* непрерывный интервал пуст */
|
||||
@ -396,7 +397,7 @@ int rkl_merge(rkl_t *dst, const rkl_t *src, bool ignore_duplicates) {
|
||||
if (src->list_length) {
|
||||
size_t i = src->list_length;
|
||||
do {
|
||||
int err = rkl_push(dst, src->list[i - 1], false);
|
||||
int err = rkl_push(dst, src->list[i - 1]);
|
||||
if (unlikely(err != MDBX_SUCCESS) && (!ignore_duplicates || err != MDBX_RESULT_TRUE))
|
||||
return err;
|
||||
} while (--i);
|
||||
@ -404,7 +405,7 @@ int rkl_merge(rkl_t *dst, const rkl_t *src, bool ignore_duplicates) {
|
||||
|
||||
txnid_t id = src->solid_begin;
|
||||
while (id < src->solid_end) {
|
||||
int err = rkl_push(dst, id, false);
|
||||
int err = rkl_push(dst, id);
|
||||
if (unlikely(err != MDBX_SUCCESS) && (!ignore_duplicates || err != MDBX_RESULT_TRUE))
|
||||
return err;
|
||||
++id;
|
||||
|
@ -48,8 +48,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline txnid_t rkl_edge(cons
|
||||
const bool highest_not_lowest) {
|
||||
return highest_not_lowest ? rkl_highest(rkl) : rkl_lowest(rkl);
|
||||
}
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL __must_check_result int rkl_push(rkl_t *rkl, const txnid_t id,
|
||||
const bool known_continuous);
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL __must_check_result int rkl_push(rkl_t *rkl, const txnid_t id);
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL txnid_t rkl_pop(rkl_t *rkl, const bool highest_not_lowest);
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL __must_check_result int rkl_merge(rkl_t *dst, const rkl_t *src, bool ignore_duplicates);
|
||||
|
||||
|
@ -86,12 +86,12 @@ void trivia(void) {
|
||||
CHECK_EQ(hole.begin, 1);
|
||||
CHECK_EQ(hole.end, MAX_TXNID);
|
||||
|
||||
CHECK_EQ((uint64_t)rkl_push(&x, 42, false), (uint64_t)MDBX_SUCCESS);
|
||||
CHECK_EQ((uint64_t)rkl_push(&x, 42), (uint64_t)MDBX_SUCCESS);
|
||||
CHECK_TRUE(rkl_check(&x));
|
||||
CHECK_FALSE(rkl_empty(&x));
|
||||
CHECK_EQ(rkl_len(&x), 1);
|
||||
CHECK_EQ((uint64_t)rkl_push(&x, 42, true), (uint64_t)MDBX_RESULT_TRUE);
|
||||
CHECK_TRUE(rkl_check(&x));
|
||||
// CHECK_EQ((uint64_t)rkl_push(&x, 42, true), (uint64_t)MDBX_RESULT_TRUE);
|
||||
// CHECK_TRUE(rkl_check(&x));
|
||||
|
||||
f = rkl_iterator(&x, false);
|
||||
r = rkl_iterator(&x, true);
|
||||
@ -188,7 +188,7 @@ static bool stochastic_pass(const unsigned start, const unsigned width, const un
|
||||
if (id < MIN_TXNID || id >= INVALID_TXNID)
|
||||
continue;
|
||||
if (txl_contain(l, id)) {
|
||||
if (CHECK_TRUE(rkl_contain(&k, id)) && CHECK_EQ((uint64_t)rkl_push(&k, id, false), (uint64_t)MDBX_RESULT_TRUE))
|
||||
if (CHECK_TRUE(rkl_contain(&k, id)) && CHECK_EQ((uint64_t)rkl_push(&k, id), (uint64_t)MDBX_RESULT_TRUE))
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
@ -208,7 +208,7 @@ static bool stochastic_pass(const unsigned start, const unsigned width, const un
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!CHECK_EQ(rkl_push(&k, id, false), MDBX_SUCCESS))
|
||||
if (!CHECK_EQ(rkl_push(&k, id), MDBX_SUCCESS))
|
||||
break;
|
||||
if (!CHECK_TRUE(rkl_check(&k)))
|
||||
break;
|
||||
@ -416,7 +416,7 @@ static bool stochastic_pass_hole(size_t set, size_t trims) {
|
||||
rkl_init(&rkl);
|
||||
for (size_t n = 1; n < CHAR_BIT * sizeof(set); ++n)
|
||||
if (bit(set, n))
|
||||
CHECK_EQ(rkl_push(&rkl, n, false), MDBX_SUCCESS);
|
||||
CHECK_EQ(rkl_push(&rkl, n), MDBX_SUCCESS);
|
||||
|
||||
if (!check_holes_fourways(set, &rkl))
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user