Michael Krasnyk 2017-01-31 06:49:55 +01:00 committed by Patrick Niklaus
parent c22ce3ae1f
commit b3ef27d104
2 changed files with 18 additions and 24 deletions

View File

@ -49,8 +49,6 @@ class Engine final
Status Tile(const api::TileParameters &parameters, std::string &result) const; Status Tile(const api::TileParameters &parameters, std::string &result) const;
private: private:
std::unique_ptr<DataWatchdog> watchdog;
const plugins::ViaRoutePlugin route_plugin; const plugins::ViaRoutePlugin route_plugin;
const plugins::TablePlugin table_plugin; const plugins::TablePlugin table_plugin;
const plugins::NearestPlugin nearest_plugin; const plugins::NearestPlugin nearest_plugin;

View File

@ -18,27 +18,28 @@
namespace namespace
{ {
auto GetWatchdogDataFacade()
{
static osrm::engine::DataWatchdog watchdog;
return watchdog.GetDataFacade();
}
// Abstracted away the query locking into a template function // Abstracted away the query locking into a template function
// Works the same for every plugin. // Works the same for every plugin.
template <typename ParameterT, typename PluginT, typename ResultT> template <typename ParameterT, typename PluginT, typename ResultT>
osrm::engine::Status osrm::engine::Status
RunQuery(const std::unique_ptr<osrm::engine::DataWatchdog> &watchdog, RunQuery(const std::shared_ptr<const osrm::engine::datafacade::BaseDataFacade> &immutable_facade,
const std::shared_ptr<const osrm::engine::datafacade::BaseDataFacade> &immutable_facade,
const ParameterT &parameters, const ParameterT &parameters,
PluginT &plugin, PluginT &plugin,
ResultT &result) ResultT &result)
{ {
if (watchdog) if (immutable_facade)
{ {
BOOST_ASSERT(!immutable_facade); return plugin.HandleRequest(immutable_facade, parameters, result);
auto facade = watchdog->GetDataFacade();
return plugin.HandleRequest(facade, parameters, result);
} }
BOOST_ASSERT(immutable_facade); return plugin.HandleRequest(GetWatchdogDataFacade(), parameters, result);
return plugin.HandleRequest(immutable_facade, parameters, result);
} }
} // anon. ns } // anon. ns
@ -57,12 +58,7 @@ Engine::Engine(const EngineConfig &config)
tile_plugin() // tile_plugin() //
{ {
if (config.use_shared_memory) if (!config.use_shared_memory)
{
watchdog = std::make_unique<DataWatchdog>();
BOOST_ASSERT(watchdog);
}
else
{ {
if (!config.storage_config.IsValid()) if (!config.storage_config.IsValid())
{ {
@ -78,32 +74,32 @@ Engine::Engine(const EngineConfig &config)
Status Engine::Route(const api::RouteParameters &params, util::json::Object &result) const Status Engine::Route(const api::RouteParameters &params, util::json::Object &result) const
{ {
return RunQuery(watchdog, immutable_data_facade, params, route_plugin, result); return RunQuery(immutable_data_facade, params, route_plugin, result);
} }
Status Engine::Table(const api::TableParameters &params, util::json::Object &result) const Status Engine::Table(const api::TableParameters &params, util::json::Object &result) const
{ {
return RunQuery(watchdog, immutable_data_facade, params, table_plugin, result); return RunQuery(immutable_data_facade, params, table_plugin, result);
} }
Status Engine::Nearest(const api::NearestParameters &params, util::json::Object &result) const Status Engine::Nearest(const api::NearestParameters &params, util::json::Object &result) const
{ {
return RunQuery(watchdog, immutable_data_facade, params, nearest_plugin, result); return RunQuery(immutable_data_facade, params, nearest_plugin, result);
} }
Status Engine::Trip(const api::TripParameters &params, util::json::Object &result) const Status Engine::Trip(const api::TripParameters &params, util::json::Object &result) const
{ {
return RunQuery(watchdog, immutable_data_facade, params, trip_plugin, result); return RunQuery(immutable_data_facade, params, trip_plugin, result);
} }
Status Engine::Match(const api::MatchParameters &params, util::json::Object &result) const Status Engine::Match(const api::MatchParameters &params, util::json::Object &result) const
{ {
return RunQuery(watchdog, immutable_data_facade, params, match_plugin, result); return RunQuery(immutable_data_facade, params, match_plugin, result);
} }
Status Engine::Tile(const api::TileParameters &params, std::string &result) const Status Engine::Tile(const api::TileParameters &params, std::string &result) const
{ {
return RunQuery(watchdog, immutable_data_facade, params, tile_plugin, result); return RunQuery(immutable_data_facade, params, tile_plugin, result);
} }
} // engine ns } // engine ns