mirror of
https://github.com/isar/libmdbx.git
synced 2025-12-17 17:32:24 +08:00
mdbx-test: add --ignore-dbfull option (major).
Change-Id: I252f9c3679a371722a780913ba994ca3dee9b90a
This commit is contained in:
66
test/test.cc
66
test/test.cc
@@ -170,20 +170,42 @@ void testcase::txn_begin(bool readonly, unsigned flags) {
|
||||
flags);
|
||||
}
|
||||
|
||||
int testcase::breakable_commit() {
|
||||
int rc = MDBX_SUCCESS;
|
||||
log_trace(">> txn_commit");
|
||||
assert(txn_guard);
|
||||
|
||||
MDBX_txn *txn = txn_guard.release();
|
||||
txn_inject_writefault(txn);
|
||||
int err = mdbx_txn_commit(txn);
|
||||
if (unlikely(err != MDBX_SUCCESS)) {
|
||||
if (err == MDBX_MAP_FULL && config.params.ignore_dbfull) {
|
||||
rc = err;
|
||||
err = mdbx_txn_abort(txn);
|
||||
if (unlikely(err != MDBX_SUCCESS && err != MDBX_THREAD_MISMATCH))
|
||||
failure_perror("mdbx_txn_abort()", err);
|
||||
} else
|
||||
failure_perror("mdbx_txn_commit()", err);
|
||||
}
|
||||
|
||||
log_trace("<< txn_commit: %s", rc ? "failed" : "Ok");
|
||||
return rc;
|
||||
}
|
||||
|
||||
void testcase::txn_end(bool abort) {
|
||||
log_trace(">> txn_end(%s)", abort ? "abort" : "commit");
|
||||
assert(txn_guard);
|
||||
|
||||
MDBX_txn *txn = txn_guard.release();
|
||||
if (abort) {
|
||||
int rc = mdbx_txn_abort(txn);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
failure_perror("mdbx_txn_abort()", rc);
|
||||
int err = mdbx_txn_abort(txn);
|
||||
if (unlikely(err != MDBX_SUCCESS && err != MDBX_THREAD_MISMATCH))
|
||||
failure_perror("mdbx_txn_abort()", err);
|
||||
} else {
|
||||
txn_inject_writefault(txn);
|
||||
int rc = mdbx_txn_commit(txn);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
failure_perror("mdbx_txn_commit()", rc);
|
||||
int err = mdbx_txn_commit(txn);
|
||||
if (unlikely(err != MDBX_SUCCESS))
|
||||
failure_perror("mdbx_txn_commit()", err);
|
||||
}
|
||||
|
||||
log_trace("<< txn_end(%s)", abort ? "abort" : "commit");
|
||||
@@ -211,6 +233,16 @@ void testcase::cursor_close() {
|
||||
log_trace("<< cursor_close()");
|
||||
}
|
||||
|
||||
int testcase::breakable_restart() {
|
||||
int rc = MDBX_SUCCESS;
|
||||
if (txn_guard)
|
||||
rc = breakable_commit();
|
||||
if (cursor_guard)
|
||||
cursor_close();
|
||||
txn_begin(false, 0);
|
||||
return rc;
|
||||
}
|
||||
|
||||
void testcase::txn_restart(bool abort, bool readonly, unsigned flags) {
|
||||
if (txn_guard)
|
||||
txn_end(abort);
|
||||
@@ -394,6 +426,28 @@ void testcase::update_canary(uint64_t increment) {
|
||||
log_trace("<< update_canary: sequence = %" PRIu64, canary_now.y);
|
||||
}
|
||||
|
||||
int testcase::db_open__begin__table_create_open_clean(MDBX_dbi &dbi) {
|
||||
db_open();
|
||||
|
||||
int err, retry_left = 42;
|
||||
for (;;) {
|
||||
txn_begin(false);
|
||||
dbi = db_table_open(true);
|
||||
db_table_clear(dbi);
|
||||
err = breakable_commit();
|
||||
if (likely(err == MDBX_SUCCESS)) {
|
||||
txn_begin(false);
|
||||
return MDBX_SUCCESS;
|
||||
}
|
||||
if (--retry_left == 0)
|
||||
break;
|
||||
jitter_delay(true);
|
||||
}
|
||||
log_notice("db_begin_table_create_open_clean: bailout due '%s'",
|
||||
mdbx_strerror(err));
|
||||
return err;
|
||||
}
|
||||
|
||||
MDBX_dbi testcase::db_table_open(bool create) {
|
||||
log_trace(">> testcase::db_table_create");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user