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
-67
View File
@@ -1,67 +0,0 @@
#include <cstdio>
#include "storage/shared_datatype.hpp"
#include "storage/shared_memory.hpp"
#include "util/log.hpp"
namespace osrm
{
namespace tools
{
// FIXME remove after folding back into datastore
using namespace storage;
void deleteRegion(const SharedDataType region)
{
if (SharedMemory::RegionExists(region) && !SharedMemory::Remove(region))
{
const std::string name = [&] {
switch (region)
{
case CURRENT_REGION:
return "CURRENT_REGIONS";
case REGION_1:
return "REGION_1";
case REGION_2:
return "REGION_2";
default: // REGION_NONE:
return "REGION_NONE";
}
}();
util::Log(logWARNING) << "could not delete shared memory region " << name;
}
}
// find all existing shmem regions and remove them.
void springclean()
{
util::Log() << "spring-cleaning all shared memory regions";
deleteRegion(REGION_1);
deleteRegion(REGION_2);
deleteRegion(CURRENT_REGION);
}
}
}
int main()
{
osrm::util::LogPolicy::GetInstance().Unmute();
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.";
return EXIT_SUCCESS;
}
osrm::tools::springclean();
return EXIT_SUCCESS;
}
+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);
}
-14
View File
@@ -1,14 +0,0 @@
#include "storage/shared_barriers.hpp"
#include "util/log.hpp"
#include <iostream>
int main()
{
osrm::util::LogPolicy::GetInstance().Unmute();
osrm::util::Log() << "Releasing all locks";
osrm::storage::SharedBarriers::remove();
return 0;
}