mirror of
https://github.com/isar/libmdbx.git
synced 2025-02-03 14:50:51 +08:00
mdbx-tests: add --inject-writefault=N option.
This commit is contained in:
parent
638ed91e3e
commit
d63c2484fe
@ -326,6 +326,11 @@ void dump(const char *title) {
|
|||||||
else
|
else
|
||||||
log_info("no-delay\n");
|
log_info("no-delay\n");
|
||||||
|
|
||||||
|
if (i->params.inject_writefaultn)
|
||||||
|
log_info("inject-writefault on %u ops\n", i->params.inject_writefaultn);
|
||||||
|
else
|
||||||
|
log_info("no-inject-writefault\n");
|
||||||
|
|
||||||
log_info("limits: readers %u, tables %u\n", i->params.max_readers,
|
log_info("limits: readers %u, tables %u\n", i->params.max_readers,
|
||||||
i->params.max_tables);
|
i->params.max_tables);
|
||||||
|
|
||||||
|
@ -218,6 +218,7 @@ struct actor_params_pod {
|
|||||||
|
|
||||||
unsigned delaystart;
|
unsigned delaystart;
|
||||||
unsigned waitfor_nops;
|
unsigned waitfor_nops;
|
||||||
|
unsigned inject_writefaultn;
|
||||||
|
|
||||||
unsigned max_readers;
|
unsigned max_readers;
|
||||||
unsigned max_tables;
|
unsigned max_tables;
|
||||||
|
@ -219,6 +219,9 @@ int main(int argc, char *const argv[]) {
|
|||||||
if (config::parse_option(argc, argv, narg, "wait4ops", params.waitfor_nops,
|
if (config::parse_option(argc, argv, narg, "wait4ops", params.waitfor_nops,
|
||||||
config::decimal))
|
config::decimal))
|
||||||
continue;
|
continue;
|
||||||
|
if (config::parse_option(argc, argv, narg, "inject-writefault",
|
||||||
|
params.inject_writefaultn, config::decimal))
|
||||||
|
continue;
|
||||||
if (config::parse_option(argc, argv, narg, "drop", params.drop_table))
|
if (config::parse_option(argc, argv, narg, "drop", params.drop_table))
|
||||||
continue;
|
continue;
|
||||||
if (config::parse_option(argc, argv, narg, "dump-config",
|
if (config::parse_option(argc, argv, narg, "dump-config",
|
||||||
|
22
test/test.cc
22
test/test.cc
@ -204,6 +204,7 @@ void testcase::txn_end(bool abort) {
|
|||||||
if (unlikely(rc != MDBX_SUCCESS))
|
if (unlikely(rc != MDBX_SUCCESS))
|
||||||
failure_perror("mdbx_txn_abort()", rc);
|
failure_perror("mdbx_txn_abort()", rc);
|
||||||
} else {
|
} else {
|
||||||
|
txn_inject_writefault(txn);
|
||||||
int rc = mdbx_txn_commit(txn);
|
int rc = mdbx_txn_commit(txn);
|
||||||
if (unlikely(rc != MDBX_SUCCESS))
|
if (unlikely(rc != MDBX_SUCCESS))
|
||||||
failure_perror("mdbx_txn_commit()", rc);
|
failure_perror("mdbx_txn_commit()", rc);
|
||||||
@ -218,6 +219,27 @@ void testcase::txn_restart(bool abort, bool readonly, unsigned flags) {
|
|||||||
txn_begin(readonly, flags);
|
txn_begin(readonly, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void testcase::txn_inject_writefault(void) {
|
||||||
|
if (txn_guard)
|
||||||
|
txn_inject_writefault(txn_guard.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
void testcase::txn_inject_writefault(MDBX_txn *txn) {
|
||||||
|
if (config.params.inject_writefaultn && txn) {
|
||||||
|
if (config.params.inject_writefaultn <= nops_completed &&
|
||||||
|
(mdbx_txn_flags(txn) & MDBX_RDONLY) == 0) {
|
||||||
|
log_info("== txn_inject_writefault(): got %u nops or more, inject FAULT",
|
||||||
|
config.params.inject_writefaultn);
|
||||||
|
log_flush();
|
||||||
|
#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS)
|
||||||
|
TerminateProcess(GetCurrentProcess(), 42);
|
||||||
|
#else
|
||||||
|
raise(SIGKILL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool testcase::wait4start() {
|
bool testcase::wait4start() {
|
||||||
if (config.wait4id) {
|
if (config.wait4id) {
|
||||||
log_trace(">> wait4start(%u)", config.wait4id);
|
log_trace(">> wait4start(%u)", config.wait4id);
|
||||||
|
@ -107,6 +107,8 @@ protected:
|
|||||||
void txn_begin(bool readonly, unsigned flags = 0);
|
void txn_begin(bool readonly, unsigned flags = 0);
|
||||||
void txn_end(bool abort);
|
void txn_end(bool abort);
|
||||||
void txn_restart(bool abort, bool readonly, unsigned flags = 0);
|
void txn_restart(bool abort, bool readonly, unsigned flags = 0);
|
||||||
|
void txn_inject_writefault(void);
|
||||||
|
void txn_inject_writefault(MDBX_txn *txn);
|
||||||
void fetch_canary();
|
void fetch_canary();
|
||||||
void update_canary(uint64_t increment);
|
void update_canary(uint64_t increment);
|
||||||
void kick_progress(bool active) const;
|
void kick_progress(bool active) const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user