add timestamp to management data structure

This commit is contained in:
Dennis Luxen 2013-10-30 14:15:55 +01:00
parent 3349d43c00
commit 6bf35c679f
3 changed files with 24 additions and 11 deletions

View File

@ -57,12 +57,13 @@ private:
typedef typename super::RTreeLeaf RTreeLeaf; typedef typename super::RTreeLeaf RTreeLeaf;
typedef typename StaticRTree<RTreeLeaf, true>::TreeNode RTreeNode; typedef typename StaticRTree<RTreeLeaf, true>::TreeNode RTreeNode;
SharedDataLayout * data_layout; SharedDataLayout * data_layout;
char * shared_memory; char * shared_memory;
SharedDataType * data_type_ptr; SharedDataTimestamp * data_timestamp_ptr;
SharedDataType CURRENT_LAYOUT; SharedDataType CURRENT_LAYOUT;
SharedDataType CURRENT_DATA; SharedDataType CURRENT_DATA;
unsigned CURRENT_TIMESTAMP;
unsigned m_check_sum; unsigned m_check_sum;
unsigned m_number_of_nodes; unsigned m_number_of_nodes;
@ -191,15 +192,16 @@ private:
public: public:
SharedDataFacade( ) { SharedDataFacade( ) {
data_type_ptr = (SharedDataType *)SharedMemoryFactory::Get( data_timestamp_ptr = (SharedDataTimestamp *)SharedMemoryFactory::Get(
CURRENT_REGIONS, CURRENT_REGIONS,
2*sizeof(SharedDataType), sizeof(SharedDataTimestamp),
false, false,
false false
)->Ptr(); )->Ptr();
CURRENT_LAYOUT = LAYOUT_NONE; CURRENT_LAYOUT = LAYOUT_NONE;
CURRENT_DATA = DATA_NONE; CURRENT_DATA = DATA_NONE;
CURRENT_TIMESTAMP = 0;
//load data //load data
CheckAndReloadFacade(); CheckAndReloadFacade();
@ -207,15 +209,17 @@ public:
void CheckAndReloadFacade() { void CheckAndReloadFacade() {
if( if(
CURRENT_LAYOUT != data_type_ptr[0] || CURRENT_LAYOUT != data_timestamp_ptr->layout ||
CURRENT_DATA != data_type_ptr[1] CURRENT_DATA != data_timestamp_ptr->data ||
CURRENT_TIMESTAMP != data_timestamp_ptr->timestamp
) { ) {
// release the previous shared memory segments // release the previous shared memory segments
SharedMemory::Remove(CURRENT_LAYOUT); SharedMemory::Remove(CURRENT_LAYOUT);
SharedMemory::Remove(CURRENT_DATA); SharedMemory::Remove(CURRENT_DATA);
CURRENT_LAYOUT = data_type_ptr[0]; CURRENT_LAYOUT = data_timestamp_ptr->layout;
CURRENT_DATA = data_type_ptr[1]; CURRENT_DATA = data_timestamp_ptr->data;
CURRENT_TIMESTAMP = data_timestamp_ptr->timestamp;
m_layout_memory.reset( SharedMemoryFactory::Get(CURRENT_LAYOUT) ); m_layout_memory.reset( SharedMemoryFactory::Get(CURRENT_LAYOUT) );
@ -224,7 +228,10 @@ public:
); );
boost::filesystem::path ram_index_path(data_layout->ram_index_file_name); boost::filesystem::path ram_index_path(data_layout->ram_index_file_name);
if( !boost::filesystem::exists(ram_index_path) ) { if( !boost::filesystem::exists(ram_index_path) ) {
throw OSRMException("no leaf index file given in ini file"); throw OSRMException(
"no leaf index file given. "
"Is any data loaded into shared memory?"
);
} }
m_large_memory.reset( SharedMemoryFactory::Get(CURRENT_DATA) ); m_large_memory.reset( SharedMemoryFactory::Get(CURRENT_DATA) );

View File

@ -220,4 +220,10 @@ enum SharedDataType {
DATA_NONE DATA_NONE
}; };
struct SharedDataTimestamp {
SharedDataType layout;
SharedDataType data;
unsigned timestamp;
};
#endif /* SHARED_DATA_TYPE_H_ */ #endif /* SHARED_DATA_TYPE_H_ */

View File

@ -230,7 +230,7 @@ inline bool GenerateServerProgramOptions(
boost::program_options::notify(option_variables); boost::program_options::notify(option_variables);
} }
if( !option_variables.count("sharedmemory") ) { if( !use_shared_memory ) {
if( !option_variables.count("hsgrdata") ) { if( !option_variables.count("hsgrdata") ) {
if( !option_variables.count("base") ) { if( !option_variables.count("base") ) {
throw OSRMException("hsgrdata (or base) must be specified"); throw OSRMException("hsgrdata (or base) must be specified");