mirror of
				https://github.com/isar/libmdbx.git
				synced 2025-10-25 13:18:56 +08:00 
			
		
		
		
	mdbx: add db-copy testcase.
Change-Id: Ib554880ebbabcb5dfc55bdb3c71767d0fa1630fd
This commit is contained in:
		| @@ -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" /> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user