implements #947, free osrm-datastore's shared memory
This commit is contained in:
		
							parent
							
								
									38ebdbb563
								
							
						
					
					
						commit
						3d691a3aec
					
				@ -43,12 +43,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// generate boost::program_options object for the routing part
 | 
					// generate boost::program_options object for the routing part
 | 
				
			||||||
inline bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerPaths &paths)
 | 
					inline bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerPaths &paths, bool & springclean)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // declare a group of options that will be allowed only on command line
 | 
					    // declare a group of options that will be allowed only on command line
 | 
				
			||||||
    boost::program_options::options_description generic_options("Options");
 | 
					    boost::program_options::options_description generic_options("Options");
 | 
				
			||||||
    generic_options.add_options()("version,v", "Show version")("help,h", "Show this help message")(
 | 
					    generic_options.add_options()("version,v", "Show version")("help,h", "Show this help message")
 | 
				
			||||||
        "config,c",
 | 
					        ("springclean,s", "Remove all regions in shared memory")("config,c",
 | 
				
			||||||
        boost::program_options::value<boost::filesystem::path>(&paths["config"])
 | 
					        boost::program_options::value<boost::filesystem::path>(&paths["config"])
 | 
				
			||||||
            ->default_value("server.ini"),
 | 
					            ->default_value("server.ini"),
 | 
				
			||||||
        "Path to a configuration file");
 | 
					        "Path to a configuration file");
 | 
				
			||||||
@ -122,6 +122,11 @@ inline bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerP
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (option_variables.count("springclean"))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        springclean = true;
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    boost::program_options::notify(option_variables);
 | 
					    boost::program_options::notify(option_variables);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const bool parameter_present = (paths.find("hsgrdata") != paths.end() &&
 | 
					    const bool parameter_present = (paths.find("hsgrdata") != paths.end() &&
 | 
				
			||||||
 | 
				
			|||||||
@ -89,10 +89,53 @@ int main(const int argc, const char *argv[])
 | 
				
			|||||||
        SimpleLogger().Write(logDEBUG) << "Checking input parameters";
 | 
					        SimpleLogger().Write(logDEBUG) << "Checking input parameters";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ServerPaths server_paths;
 | 
					        ServerPaths server_paths;
 | 
				
			||||||
        if (!GenerateDataStoreOptions(argc, argv, server_paths))
 | 
					        bool springclean = false;
 | 
				
			||||||
 | 
					        if (!GenerateDataStoreOptions(argc, argv, server_paths, springclean))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (springclean)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            SimpleLogger().Write() << "spring-cleaning all shared memory regions";
 | 
				
			||||||
 | 
					            // find all existing shmem regions and remove them.
 | 
				
			||||||
 | 
					            if (SharedMemory::RegionExists(DATA_1))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (!SharedMemory::Remove(DATA_1))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    SimpleLogger().Write(logWARNING) << "could not delete DATA_1";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (SharedMemory::RegionExists(LAYOUT_1))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (!SharedMemory::Remove(LAYOUT_1))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    SimpleLogger().Write(logWARNING) << "could not delete LAYOUT_1";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (SharedMemory::RegionExists(DATA_2))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (!SharedMemory::Remove(DATA_2))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    SimpleLogger().Write(logWARNING) << "could not delete DATA_2";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (SharedMemory::RegionExists(LAYOUT_2))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (!SharedMemory::Remove(LAYOUT_2))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    SimpleLogger().Write(logWARNING) << "could not delete LAYOUT_2";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (SharedMemory::RegionExists(CURRENT_REGIONS))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (!SharedMemory::Remove(CURRENT_REGIONS))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    SimpleLogger().Write(logWARNING) << "could not delete CURRENT_REGIONS";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (server_paths.find("hsgrdata") == server_paths.end())
 | 
					        if (server_paths.find("hsgrdata") == server_paths.end())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            throw OSRMException("no hsgr file found");
 | 
					            throw OSRMException("no hsgr file found");
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user