add timestamp to management data structure
This commit is contained in:
parent
3349d43c00
commit
6bf35c679f
@ -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) );
|
||||||
|
@ -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_ */
|
||||||
|
@ -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");
|
||||||
|
Loading…
Reference in New Issue
Block a user