mdbx: add db-copy testcase.

Change-Id: Ib554880ebbabcb5dfc55bdb3c71767d0fa1630fd
This commit is contained in:
Leonid Yuriev 2018-11-04 18:57:36 +03:00
parent 40e3f735ab
commit 24d42c1583
9 changed files with 81 additions and 30 deletions

View File

@ -3,6 +3,7 @@ README-RU.md
pcrf_test/CMakeLists.txt pcrf_test/CMakeLists.txt
src/tools/CMakeLists.txt src/tools/CMakeLists.txt
test/CMakeLists.txt test/CMakeLists.txt
test/copy.cc
tutorial/CMakeLists.txt tutorial/CMakeLists.txt
tutorial/sample-mdbx.c tutorial/sample-mdbx.c
AUTHORS AUTHORS

View File

@ -1,34 +1,35 @@
set(TARGET mdbx_test) set(TARGET mdbx_test)
project(${TARGET}) project(${TARGET})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-declarations") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-declarations")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-cast-qual") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-cast-qual")
add_executable(${TARGET} add_executable(${TARGET}
base.h base.h
cases.cc cases.cc
chrono.cc chrono.cc
chrono.h chrono.h
config.cc config.cc
config.h config.h
dead.cc copy.cc
hill.cc dead.cc
jitter.cc hill.cc
keygen.cc jitter.cc
keygen.h keygen.cc
log.cc keygen.h
log.h log.cc
main.cc log.h
osal.h main.cc
osal-unix.cc osal.h
test.cc osal-unix.cc
test.h test.cc
try.cc test.h
utils.cc try.cc
utils.h utils.cc
) utils.h
)
target_link_libraries(${TARGET} target_link_libraries(${TARGET}
mdbx mdbx
) )

View File

@ -1,4 +1,4 @@
/* /*
* Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru> * Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file. * and other libmdbx authors: please see AUTHORS file.
* All rights reserved. * All rights reserved.
@ -68,6 +68,7 @@ void testcase_setup(const char *casename, actor_params &params,
configure_actor(last_space_id, ac_jitter, nullptr, params); configure_actor(last_space_id, ac_jitter, nullptr, params);
configure_actor(last_space_id, ac_hill, nullptr, params); configure_actor(last_space_id, ac_hill, nullptr, params);
configure_actor(last_space_id, ac_try, nullptr, params); configure_actor(last_space_id, ac_try, nullptr, params);
configure_actor(last_space_id, ac_copy, nullptr, params);
log_notice("<<< testcase_setup(%s): done", casename); log_notice("<<< testcase_setup(%s): done", casename);
} else { } else {
failure("unknown testcase `%s`", casename); failure("unknown testcase `%s`", casename);

View File

@ -1,4 +1,4 @@
/* /*
* Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru> * Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file. * and other libmdbx authors: please see AUTHORS file.
* All rights reserved. * All rights reserved.
@ -26,7 +26,8 @@ enum actor_testcase {
ac_deadread, ac_deadread,
ac_deadwrite, ac_deadwrite,
ac_jitter, ac_jitter,
ac_try ac_try,
ac_copy
}; };
enum actor_status { enum actor_status {

26
test/copy.cc Normal file
View File

@ -0,0 +1,26 @@
#include "test.h"
void testcase_copy::copy_db(const bool with_compaction) {
int err = osal_removefile(copy_pathname);
if (err != MDBX_SUCCESS && err != MDBX_ENOFILE)
failure_perror("mdbx_removefile()", err);
err = mdbx_env_copy(db_guard.get(), copy_pathname.c_str(),
with_compaction ? MDBX_CP_COMPACT : 0);
if (unlikely(err != MDBX_SUCCESS))
failure_perror(with_compaction ? "mdbx_env_copy(MDBX_CP_COMPACT)"
: "mdbx_env_copy(MDBX_CP_ASIS)",
err);
}
bool testcase_copy::run() {
jitter_delay();
db_open();
assert(!txn_guard);
const bool order = flipcoin();
jitter_delay();
copy_db(order);
jitter_delay();
copy_db(!order);
return true;
}

View File

@ -1,4 +1,4 @@
/* /*
* Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru> * Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file. * and other libmdbx authors: please see AUTHORS file.
* All rights reserved. * All rights reserved.
@ -337,6 +337,10 @@ int main(int argc, char *const argv[]) {
configure_actor(last_space_id, ac_deadwrite, value, params); configure_actor(last_space_id, ac_deadwrite, value, params);
continue; continue;
} }
if (config::parse_option(argc, argv, narg, "copy", nullptr)) {
configure_actor(last_space_id, ac_copy, value, params);
continue;
}
if (config::parse_option(argc, argv, narg, "failfast", if (config::parse_option(argc, argv, narg, "failfast",
global::config::failfast)) global::config::failfast))
continue; continue;

View File

@ -1,4 +1,4 @@
/* /*
* Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru> * Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file. * and other libmdbx authors: please see AUTHORS file.
* All rights reserved. * All rights reserved.
@ -31,6 +31,8 @@ const char *testcase2str(const actor_testcase testcase) {
return "jitter"; return "jitter";
case ac_try: case ac_try:
return "try"; return "try";
case ac_copy:
return "copy";
} }
} }
@ -453,6 +455,9 @@ bool test_execute(const actor_config &config) {
case ac_try: case ac_try:
test.reset(new testcase_try(config, pid)); test.reset(new testcase_try(config, pid));
break; break;
case ac_copy:
test.reset(new testcase_copy(config, pid));
break;
default: default:
test.reset(new testcase(config, pid)); test.reset(new testcase(config, pid));
break; break;

View File

@ -185,3 +185,14 @@ public:
: testcase(config, pid) {} : testcase(config, pid) {}
bool run(); bool run();
}; };
class testcase_copy : public testcase {
const std::string copy_pathname;
void copy_db(const bool with_compaction);
public:
testcase_copy(const actor_config &config, const mdbx_pid_t pid)
: testcase(config, pid),
copy_pathname(config.params.pathname_db + "-copy") {}
bool run();
};

View File

@ -184,6 +184,7 @@
<ClCompile Include="cases.cc" /> <ClCompile Include="cases.cc" />
<ClCompile Include="chrono.cc" /> <ClCompile Include="chrono.cc" />
<ClCompile Include="config.cc" /> <ClCompile Include="config.cc" />
<ClCompile Include="copy.cc" />
<ClCompile Include="dead.cc" /> <ClCompile Include="dead.cc" />
<ClCompile Include="hill.cc" /> <ClCompile Include="hill.cc" />
<ClCompile Include="try.cc" /> <ClCompile Include="try.cc" />