Rework facades to accept ServerPaths object as configuration

This commit is contained in:
Dennis Luxen 2013-10-15 15:44:35 +02:00
parent 424055c04e
commit 02e9f8aef3
3 changed files with 58 additions and 91 deletions

View File

@ -78,11 +78,9 @@ public:
const unsigned id
) const = 0;
virtual unsigned GetOutDegree( const NodeID n ) const = 0;
virtual NodeID GetTarget( const EdgeID e ) const = 0;
virtual EdgeDataT &GetEdgeData( const EdgeID e ) = 0;
virtual TurnInstruction GetTurnInstructionForEdgeID(
const unsigned id
) const = 0;
virtual bool LocateClosestEndPointForCoordinate(
const FixedPointCoordinate& input_coordinate,
@ -90,14 +88,21 @@ public:
const unsigned zoom_level = 18
) const = 0;
virtual EdgeID EndEdges( const NodeID n ) const = 0;
//searches for a specific edge
virtual EdgeID FindEdge( const NodeID from, const NodeID to ) const = 0;
virtual bool FindPhantomNodeForCoordinate(
const FixedPointCoordinate & input_coordinate,
PhantomNode & resulting_phantom_node,
const unsigned zoom_level
) const = 0;
virtual unsigned GetCheckSum() const = 0;
virtual unsigned GetNameIndexFromEdgeID(const unsigned id) const = 0;
virtual void GetName(
const unsigned name_id,
std::string & result
) const = 0;
std::string GetEscapedNameForNameID(const unsigned name_id) const {
std::string temporary_string;
GetName(name_id, temporary_string);

View File

@ -34,6 +34,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
#include "../../Util/BoostFileSystemFix.h"
#include "../../Util/GraphLoader.h"
#include "../../Util/IniFile.h"
#include "../../Util/ProgramOptions.h"
#include "../../Util/SimpleLogger.h"
template<class EdgeDataT>
@ -198,95 +199,60 @@ public:
delete m_static_rtree;
}
InternalDataFacade(
const IniFile & server_config,
const boost::filesystem::path & base_path
) {
//check contents of config file
if ( !server_config.Holds("hsgrData")) {
throw OSRMException("no ram index file name in server ini");
}
if ( !server_config.Holds("ramIndex") ) {
throw OSRMException("no mem index file name in server ini");
}
if ( !server_config.Holds("fileIndex") ) {
throw OSRMException("no nodes file name in server ini");
}
if ( !server_config.Holds("nodesData") ) {
throw OSRMException("no nodes file name in server ini");
}
if ( !server_config.Holds("edgesData") ) {
throw OSRMException("no edges file name in server ini");
}
InternalDataFacade( const ServerPaths & server_paths ) {
//generate paths of data files
boost::filesystem::path hsgr_path = boost::filesystem::absolute(
server_config.GetParameter("hsgrData"),
base_path
);
boost::filesystem::path ram_index_path = boost::filesystem::absolute(
server_config.GetParameter("ramIndex"),
base_path
);
boost::filesystem::path file_index_path = boost::filesystem::absolute(
server_config.GetParameter("fileIndex"),
base_path
);
boost::filesystem::path node_data_path = boost::filesystem::absolute(
server_config.GetParameter("nodesData"),
base_path
);
boost::filesystem::path edge_data_path = boost::filesystem::absolute(
server_config.GetParameter("edgesData"),
base_path
);
boost::filesystem::path name_data_path = boost::filesystem::absolute(
server_config.GetParameter("namesData"),
base_path
);
boost::filesystem::path timestamp_path = boost::filesystem::absolute(
server_config.GetParameter("timestamp"),
base_path
);
if ( !boost::filesystem::exists(hsgr_path) ) {
throw(".hsgr not found");
if( server_paths.find("hsgrdata") == server_paths.end() ) {
throw OSRMException("no hsgr file given in ini file");
}
if ( !boost::filesystem::exists(ram_index_path) ) {
throw(".ramIndex not found");
if( server_paths.find("ramindex") == server_paths.end() ) {
throw OSRMException("no ram index file given in ini file");
}
if ( !boost::filesystem::exists(file_index_path) ) {
throw(".fileIndex not found");
if( server_paths.find("fileindex") == server_paths.end() ) {
throw OSRMException("no leaf index file given in ini file");
}
if ( !boost::filesystem::exists(node_data_path) ) {
throw(".nodes not found");
if( server_paths.find("nodesdata") == server_paths.end() ) {
throw OSRMException("no nodes file given in ini file");
}
if ( !boost::filesystem::exists(edge_data_path) ) {
throw(".edges not found");
if( server_paths.find("edgesdata") == server_paths.end() ) {
throw OSRMException("no edges file given in ini file");
}
if ( !boost::filesystem::exists(name_data_path) ) {
throw(".names not found");
if( server_paths.find("namesdata") == server_paths.end() ) {
throw OSRMException("no names file given in ini file");
}
// check if data files empty
if ( 0 == boost::filesystem::file_size( node_data_path ) ) {
throw OSRMException("nodes file is empty");
}
if ( 0 == boost::filesystem::file_size( edge_data_path ) ) {
throw OSRMException("edges file is empty");
}
ServerPaths::const_iterator paths_iterator = server_paths.find("hsgrdata");
BOOST_ASSERT(server_paths.end() != paths_iterator);
const boost::filesystem::path & hsgr_path = paths_iterator->second;
paths_iterator = server_paths.find("timestamp");
BOOST_ASSERT(server_paths.end() != paths_iterator);
const boost::filesystem::path & timestamp_path = paths_iterator->second;
paths_iterator = server_paths.find("ramindex");
BOOST_ASSERT(server_paths.end() != paths_iterator);
const boost::filesystem::path & ram_index_path = paths_iterator->second;
paths_iterator = server_paths.find("fileindex");
BOOST_ASSERT(server_paths.end() != paths_iterator);
const boost::filesystem::path & file_index_path = paths_iterator->second;
paths_iterator = server_paths.find("nodesdata");
BOOST_ASSERT(server_paths.end() != paths_iterator);
const boost::filesystem::path & nodes_data_path = paths_iterator->second;
paths_iterator = server_paths.find("edgesdata");
BOOST_ASSERT(server_paths.end() != paths_iterator);
const boost::filesystem::path & edges_data_path = paths_iterator->second;
paths_iterator = server_paths.find("namesdata");
BOOST_ASSERT(server_paths.end() != paths_iterator);
const boost::filesystem::path & names_data_path = paths_iterator->second;
//load data
SimpleLogger().Write() << "loading graph data";
LoadGraph(hsgr_path);
SimpleLogger().Write() << "loading egde information";
LoadNodeAndEdgeInformation(node_data_path, edge_data_path);
LoadNodeAndEdgeInformation(nodes_data_path, edges_data_path);
SimpleLogger().Write() << "loading r-tree";
LoadRTree(ram_index_path, file_index_path);
SimpleLogger().Write() << "loading timestamp";
LoadTimestamp(timestamp_path);
SimpleLogger().Write() << "loading street names";
LoadStreetNames(name_data_path);
LoadStreetNames(names_data_path);
}
//search graph access

View File

@ -29,7 +29,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
#include "../../DataStructures/StaticGraph.h"
#include "../../DataStructures/StaticRTree.h"
#include "../../Util/BoostFileSystemFix.h"
#include "../../Util/IniFile.h"
#include "../../Util/ProgramOptions.h"
#include "../../Util/SimpleLogger.h"
#include <algorithm>
@ -175,20 +175,16 @@ private:
}
public:
SharedDataFacade(
const IniFile & server_config,
const boost::filesystem::path base_path
) {
SharedDataFacade( const ServerPaths & server_paths ) {
//check contents of config file
if ( !server_config.Holds("fileIndex") ) {
throw OSRMException("no nodes file name in server ini");
if( server_paths.find("fileindex") == server_paths.end() ) {
throw OSRMException("no leaf index file given in ini file");
}
//generate paths of data files
boost::filesystem::path ram_index_path = boost::filesystem::absolute(
server_config.GetParameter("fileIndex"),
base_path
);
ServerPaths::const_iterator paths_iterator = server_paths.find("fileindex");
BOOST_ASSERT(server_paths.end() != paths_iterator);
boost::filesystem::path ram_index_path = paths_iterator->second;
data_layout = (SharedDataLayout *)(
SharedMemoryFactory::Get(LAYOUT_1)->Ptr()