mirror of
https://github.com/isar/libmdbx.git
synced 2024-12-30 02:24:14 +08:00
mdbx: add db-copy testcase.
Change-Id: Ib554880ebbabcb5dfc55bdb3c71767d0fa1630fd
This commit is contained in:
parent
40e3f735ab
commit
24d42c1583
@ -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
|
||||||
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -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 ¶ms,
|
|||||||
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);
|
||||||
|
@ -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
26
test/copy.cc
Normal 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;
|
||||||
|
}
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
11
test/test.h
11
test/test.h
@ -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();
|
||||||
|
};
|
||||||
|
@ -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" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user