Move IPC tools functionality into osrm-datastore

This commit is contained in:
Michael Krasnyk
2017-01-18 09:53:18 +01:00
committed by Patrick Niklaus
parent fbc7189cf8
commit a48cf58468
4 changed files with 46 additions and 93 deletions
+46 -3
View File
@@ -1,4 +1,5 @@
#include "storage/shared_barriers.hpp"
#include "storage/shared_memory.hpp"
#include "storage/storage.hpp"
#include "util/exception.hpp"
#include "util/log.hpp"
@@ -13,6 +14,41 @@
using namespace osrm;
void removeLocks() { osrm::storage::SharedBarriers::remove(); }
void deleteRegion(const storage::SharedDataType region)
{
if (storage::SharedMemory::RegionExists(region) && !storage::SharedMemory::Remove(region))
{
util::Log(logWARNING) << "could not delete shared memory region "
<< storage::regionToString(region);
}
}
void springClean()
{
osrm::util::Log() << "Releasing all locks";
osrm::util::Log() << "ATTENTION! BE CAREFUL!";
osrm::util::Log() << "----------------------";
osrm::util::Log() << "This tool may put osrm-routed into an undefined state!";
osrm::util::Log() << "Type 'Y' to acknowledge that you know what your are doing.";
osrm::util::Log() << "\n\nDo you want to purge all shared memory allocated "
<< "by osrm-datastore? [type 'Y' to confirm]";
const auto letter = getchar();
if (letter != 'Y')
{
osrm::util::Log() << "aborted.";
}
else
{
deleteRegion(storage::REGION_1);
deleteRegion(storage::REGION_2);
deleteRegion(storage::CURRENT_REGION);
removeLocks();
}
}
// generate boost::program_options object for the routing part
bool generateDataStoreOptions(const int argc,
const char *argv[],
@@ -22,7 +58,8 @@ bool generateDataStoreOptions(const int argc,
// declare a group of options that will be allowed only on command line
boost::program_options::options_description generic_options("Options");
generic_options.add_options()("version,v", "Show version")("help,h", "Show this help message")(
"remove-locks,r", "Remove locks");
"remove-locks,r", "Remove locks")("spring-clean,s",
"Spring-cleaning all shared memory regions");
// declare a group of options that will be allowed both on command line
// as well as in a config file
@@ -89,7 +126,13 @@ bool generateDataStoreOptions(const int argc,
if (option_variables.count("remove-locks"))
{
osrm::storage::SharedBarriers::remove();
removeLocks();
return false;
}
if (option_variables.count("spring-clean"))
{
springClean();
return false;
}
@@ -100,7 +143,7 @@ bool generateDataStoreOptions(const int argc,
[[noreturn]] void CleanupSharedBarriers(int signum)
{ // Here the lock state of named mutexes is unknown, make a hard cleanup
osrm::storage::SharedBarriers::remove();
removeLocks();
std::_Exit(128 + signum);
}