move springclean functionality in its own tools, remove from datastore
This commit is contained in:
		
							parent
							
								
									9449c99e25
								
							
						
					
					
						commit
						52ed8a7ed0
					
				| @ -284,11 +284,14 @@ if(WITH_TOOLS OR BUILD_TOOLS) | ||||
|   endif() | ||||
|   add_executable(osrm-check-hsgr Tools/check-hsgr.cpp $<TARGET_OBJECTS:FINGERPRINT>) | ||||
|   target_link_libraries(osrm-check-hsgr ${Boost_LIBRARIES}) | ||||
|   add_executable(osrm-springclean Tools/springclean.cpp $<TARGET_OBJECTS:FINGERPRINT>) | ||||
|   target_link_libraries(osrm-springclean ${Boost_LIBRARIES}) | ||||
| 
 | ||||
|   install(TARGETS osrm-cli DESTINATION bin) | ||||
|   install(TARGETS osrm-io-benchmark DESTINATION bin) | ||||
|   install(TARGETS osrm-unlock-all DESTINATION bin) | ||||
|   install(TARGETS osrm-check-hsgr DESTINATION bin) | ||||
|   install(TARGETS osrm-springclean DESTINATION bin) | ||||
| endif() | ||||
| 
 | ||||
| file(GLOB InstallGlob Include/osrm/*.h Library/OSRM.h) | ||||
|  | ||||
							
								
								
									
										91
									
								
								Tools/springclean.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								Tools/springclean.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | ||||
| /*
 | ||||
| 
 | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include <cstdio> | ||||
| 
 | ||||
| #include "../DataStructures/SharedMemoryFactory.h" | ||||
| #include "../Server/DataStructures/SharedDataType.h" | ||||
| #include "../Util/SimpleLogger.h" | ||||
| 
 | ||||
| void delete_region(const SharedDataType region) | ||||
| { | ||||
|     if (SharedMemory::RegionExists(region) && !SharedMemory::Remove(region)) | ||||
|     { | ||||
|         const std::string name = [&] | ||||
|         { | ||||
|             switch (region) | ||||
|             { | ||||
|             case CURRENT_REGIONS: | ||||
|                 return "CURRENT_REGIONS"; | ||||
|             case LAYOUT_1: | ||||
|                 return "LAYOUT_1"; | ||||
|             case DATA_1: | ||||
|                 return "DATA_1"; | ||||
|             case LAYOUT_2: | ||||
|                 return "LAYOUT_2"; | ||||
|             case DATA_2: | ||||
|                 return "DATA_2"; | ||||
|             case LAYOUT_NONE: | ||||
|                 return "LAYOUT_NONE"; | ||||
|             default: // DATA_NONE:
 | ||||
|                 return "DATA_NONE"; | ||||
|             } | ||||
|         }(); | ||||
| 
 | ||||
|         SimpleLogger().Write(logWARNING) << "could not delete shared memory region " << name; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // find all existing shmem regions and remove them.
 | ||||
| void springclean() | ||||
| { | ||||
|     SimpleLogger().Write() << "spring-cleaning all shared memory regions"; | ||||
|     delete_region(DATA_1); | ||||
|     delete_region(LAYOUT_1); | ||||
|     delete_region(DATA_2); | ||||
|     delete_region(LAYOUT_2); | ||||
|     delete_region(CURRENT_REGIONS); | ||||
| } | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
|     LogPolicy::GetInstance().Unmute(); | ||||
|     SimpleLogger().Write() << "ATTENTION! BE CAREFUL!"; | ||||
|     SimpleLogger().Write() << "----------------------"; | ||||
|     SimpleLogger().Write() << "This tool may put osrm-routed into an undefined state!"; | ||||
|     SimpleLogger().Write() << "By typing 'Y' you acknowledge that you know what your are doing."; | ||||
|     SimpleLogger().Write() << "\n\nDo you want to purge all shared memory allocated by osrm-datastore? [type 'Y' to confirm]"; | ||||
| 
 | ||||
|     const auto c = getchar(); | ||||
|     if (c != 'Y') | ||||
|     { | ||||
|         SimpleLogger().Write() << "aborted."; | ||||
|         return 0; | ||||
|     } | ||||
|     springclean(); | ||||
|     return 0; | ||||
| } | ||||
| @ -43,7 +43,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| #include <string> | ||||
| 
 | ||||
| // generate boost::program_options object for the routing part
 | ||||
| bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerPaths &paths, bool & springclean) | ||||
| bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerPaths &paths) | ||||
| { | ||||
|     // declare a group of options that will be allowed only on command line
 | ||||
|     boost::program_options::options_description generic_options("Options"); | ||||
| @ -122,11 +122,6 @@ bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerPaths &p | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     if (option_variables.count("springclean")) | ||||
|     { | ||||
|         springclean = true; | ||||
|         return true; | ||||
|     } | ||||
|     boost::program_options::notify(option_variables); | ||||
| 
 | ||||
|     const bool parameter_present = (paths.find("hsgrdata") != paths.end() && | ||||
|  | ||||
| @ -90,17 +90,6 @@ void delete_region(const SharedDataType region) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // find all existing shmem regions and remove them.
 | ||||
| void springclean() | ||||
| { | ||||
|     SimpleLogger().Write() << "spring-cleaning all shared memory regions"; | ||||
|     delete_region(DATA_1); | ||||
|     delete_region(LAYOUT_1); | ||||
|     delete_region(DATA_2); | ||||
|     delete_region(LAYOUT_2); | ||||
|     delete_region(CURRENT_REGIONS); | ||||
| } | ||||
| 
 | ||||
| int main(const int argc, const char *argv[]) | ||||
| { | ||||
|     LogPolicy::GetInstance().Unmute(); | ||||
| @ -138,16 +127,10 @@ int main(const int argc, const char *argv[]) | ||||
|         SimpleLogger().Write(logDEBUG) << "Checking input parameters"; | ||||
| 
 | ||||
|         ServerPaths server_paths; | ||||
|         bool should_springclean = false; | ||||
|         if (!GenerateDataStoreOptions(argc, argv, server_paths, should_springclean)) | ||||
|         if (!GenerateDataStoreOptions(argc, argv, server_paths)) | ||||
|         { | ||||
|             return 0; | ||||
|         } | ||||
|         if (should_springclean) | ||||
|         { | ||||
|             springclean(); | ||||
|             return 0; | ||||
|         } | ||||
| 
 | ||||
|         if (server_paths.find("hsgrdata") == server_paths.end()) | ||||
|         { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user