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 StaticRTree<RTreeLeaf, true>::TreeNode RTreeNode;
SharedDataLayout * data_layout;
char * shared_memory;
SharedDataType * data_type_ptr;
SharedDataLayout * data_layout;
char * shared_memory;
SharedDataTimestamp * data_timestamp_ptr;
SharedDataType CURRENT_LAYOUT;
SharedDataType CURRENT_DATA;
unsigned CURRENT_TIMESTAMP;
unsigned m_check_sum;
unsigned m_number_of_nodes;
@ -191,15 +192,16 @@ private:
public:
SharedDataFacade( ) {
data_type_ptr = (SharedDataType *)SharedMemoryFactory::Get(
data_timestamp_ptr = (SharedDataTimestamp *)SharedMemoryFactory::Get(
CURRENT_REGIONS,
2*sizeof(SharedDataType),
sizeof(SharedDataTimestamp),
false,
false
)->Ptr();
CURRENT_LAYOUT = LAYOUT_NONE;
CURRENT_DATA = DATA_NONE;
CURRENT_TIMESTAMP = 0;
//load data
CheckAndReloadFacade();
@ -207,15 +209,17 @@ public:
void CheckAndReloadFacade() {
if(
CURRENT_LAYOUT != data_type_ptr[0] ||
CURRENT_DATA != data_type_ptr[1]
CURRENT_LAYOUT != data_timestamp_ptr->layout ||
CURRENT_DATA != data_timestamp_ptr->data ||
CURRENT_TIMESTAMP != data_timestamp_ptr->timestamp
) {
// release the previous shared memory segments
SharedMemory::Remove(CURRENT_LAYOUT);
SharedMemory::Remove(CURRENT_DATA);
CURRENT_LAYOUT = data_type_ptr[0];
CURRENT_DATA = data_type_ptr[1];
CURRENT_LAYOUT = data_timestamp_ptr->layout;
CURRENT_DATA = data_timestamp_ptr->data;
CURRENT_TIMESTAMP = data_timestamp_ptr->timestamp;
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);
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) );

View File

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

View File

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