enabled load/save of grouter configuration. Checked that keys and info is properly restored at startup

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6975 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2013-12-28 21:47:15 +00:00
parent 146465a53f
commit be3a593ee2
5 changed files with 28 additions and 1 deletions

View File

@ -122,7 +122,7 @@ void GRouterMatrix::debugDump() const
for(std::map<GRouterKeyId, std::vector<float> >::const_iterator it(_time_combined_hits.begin());it!=_time_combined_hits.end();++it) for(std::map<GRouterKeyId, std::vector<float> >::const_iterator it(_time_combined_hits.begin());it!=_time_combined_hits.end();++it)
{ {
std::cerr << it->first.toStdString() << " : " ; std::cerr << " " << it->first.toStdString() << " : " ;
for(uint32_t i=0;i<it->second.size();++i) for(uint32_t i=0;i<it->second.size();++i)
std::cerr << it->second[i] << " " ; std::cerr << it->second[i] << " " ;

View File

@ -38,6 +38,7 @@ typedef uint32_t GRouterMsgPropagationId ;
static const uint32_t RS_GROUTER_MATRIX_MAX_HIT_ENTRIES = 5; static const uint32_t RS_GROUTER_MATRIX_MAX_HIT_ENTRIES = 5;
static const uint32_t RS_GROUTER_MATRIX_MIN_TIME_BETWEEN_HITS = 60; // can be set to up to half the publish time interval. Prevents flooding routes. static const uint32_t RS_GROUTER_MATRIX_MIN_TIME_BETWEEN_HITS = 60; // can be set to up to half the publish time interval. Prevents flooding routes.
static const uint32_t RS_GROUTER_MIN_CONFIG_SAVE_PERIOD = 5; // at most save config every 5 seconds
static const time_t RS_GROUTER_DEBUG_OUTPUT_PERIOD = 20 ; // Output everything static const time_t RS_GROUTER_DEBUG_OUTPUT_PERIOD = 20 ; // Output everything
static const time_t RS_GROUTER_AUTOWASH_PERIOD = 60 ; // Autowash every minute. Not a costly operation. static const time_t RS_GROUTER_AUTOWASH_PERIOD = 60 ; // Autowash every minute. Not a costly operation.

View File

@ -37,6 +37,8 @@ p3GRouter::p3GRouter(p3LinkMgr *lm)
{ {
addSerialType(new RsGRouterSerialiser()) ; addSerialType(new RsGRouterSerialiser()) ;
_changed = false ;
// Debug stuff. Create a random key and register it. // Debug stuff. Create a random key and register it.
uint8_t random_hash_buff[20] ; uint8_t random_hash_buff[20] ;
RSRandom::random_bytes(random_hash_buff,20) ; RSRandom::random_bytes(random_hash_buff,20) ;
@ -52,6 +54,7 @@ int p3GRouter::tick()
static time_t last_autowash_time = 0 ; static time_t last_autowash_time = 0 ;
static time_t last_publish_campaign_time = 0 ; static time_t last_publish_campaign_time = 0 ;
static time_t last_debug_output_time = 0 ; static time_t last_debug_output_time = 0 ;
static time_t last_config_changed = 0 ;
time_t now = time(NULL) ; time_t now = time(NULL) ;
@ -85,6 +88,19 @@ int p3GRouter::tick()
last_debug_output_time = now ; last_debug_output_time = now ;
debugDump() ; debugDump() ;
} }
// If content has changed, save config, at most every RS_GROUTER_MIN_CONFIG_SAVE_PERIOD seconds appart
// Otherwise, always save at least every RS_GROUTER_MAX_CONFIG_SAVE_PERIOD seconds
//
if(_changed && now > last_config_changed + RS_GROUTER_MIN_CONFIG_SAVE_PERIOD)
{
std::cerr << "p3GRouter::tick(): triggering config save." << std::endl;
_changed = false ;
last_config_changed = now ;
IndicateConfigChanged() ;
}
return 0 ; return 0 ;
} }
@ -422,6 +438,8 @@ void p3GRouter::handleRecvPublishKeyItem(RsGRouterPublishKeyItem *item)
// Doing this we can control the amount of key propagation and avoid flooding. // Doing this we can control the amount of key propagation and avoid flooding.
locked_forwardKey(*item) ; locked_forwardKey(*item) ;
_changed = true ;
} }
void p3GRouter::handleRecvACKItem(RsGRouterACKItem *item) void p3GRouter::handleRecvACKItem(RsGRouterACKItem *item)
@ -536,6 +554,8 @@ void p3GRouter::handleRecvDataItem(RsGRouterGenericDataItem *item)
std::cerr << " (WW) key is outdated. Dropping this item." << std::endl; std::cerr << " (WW) key is outdated. Dropping this item." << std::endl;
else else
std::cerr << " Item is not for us. Leaving in pending msgs to be routed later." << std::endl; std::cerr << " Item is not for us. Leaving in pending msgs to be routed later." << std::endl;
_changed = true ;
} }
bool p3GRouter::registerClientService(const GRouterServiceId& id,GRouterClientService *service) bool p3GRouter::registerClientService(const GRouterServiceId& id,GRouterClientService *service)

View File

@ -199,6 +199,9 @@ class p3GRouter: public RsGRouter, public p3Service, public p3Config
// Multi-thread protection mutex. // Multi-thread protection mutex.
// //
RsMutex grMtx ; RsMutex grMtx ;
// config update/save variables
bool _changed ;
}; };

View File

@ -2549,6 +2549,9 @@ int RsServer::StartupRetroShare()
mConfigMgr->addConfiguration("p3Status.cfg", mStatusSrv); mConfigMgr->addConfiguration("p3Status.cfg", mStatusSrv);
mConfigMgr->addConfiguration("turtle.cfg", tr); mConfigMgr->addConfiguration("turtle.cfg", tr);
mConfigMgr->addConfiguration("p3disc.cfg", ad); mConfigMgr->addConfiguration("p3disc.cfg", ad);
#ifdef GROUTER
mConfigMgr->addConfiguration("grouter.cfg", gr);
#endif
#ifdef RS_USE_BITDHT #ifdef RS_USE_BITDHT
mConfigMgr->addConfiguration("bitdht.cfg", mBitDht); mConfigMgr->addConfiguration("bitdht.cfg", mBitDht);