Attempt at fixing the Disconnection issue.

* Added DataRate accounting to Relay and Dht.
 * Rates are exposed through rsDht.h interface.
 * Added LastIncomingTS() to pqistreamer.
 * Turned HeartBeat reset() into a warning.
 * Added NoPacket in 60 sec reset().
 * Minor typos/errors corrected.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4818 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2012-01-19 16:23:57 +00:00
parent 7dc0cd6b0f
commit 4aec00a0c2
12 changed files with 212 additions and 9 deletions

View file

@ -150,6 +150,8 @@ p3BitDht::p3BitDht(std::string id, pqiConnectCb *cb, p3NetMgr *nm,
#endif
setupRelayDefaults();
clearDataRates();
}
p3BitDht::~p3BitDht()

View file

@ -165,6 +165,8 @@ virtual int getRelayProxies(std::list<RsDhtRelayProxy> &relayProxies);
virtual std::string getUdpAddressString();
virtual void getDhtRates(float &read, float &write);
virtual void getRelayRates(float &read, float &write, float &relay);
/***********************************************************************************************
********** External RsDHT Interface (defined in libretroshare/src/retroshare/rsdht.h) *********
@ -312,6 +314,21 @@ int pushRelayServers();
virtual bool loadList(std::list<RsItem *>& load);
/*****************************************************************/
// DATA RATES: Variables (Mutex Protected).
private:
void updateDataRates();
void clearDataRates();
float mRelayReadRate;
float mRelayWriteRate;
float mRelayRelayRate;
float mDhtReadRate;
float mDhtWriteRate;
time_t mLastDataRateUpdate;
/***********************************************************************************************
************************** Internal Accounting (p3bitdht_peers.cc) ****************************
************************************************************************************************/

View file

@ -194,6 +194,77 @@ std::string p3BitDht::getUdpAddressString()
return out.str();
}
void p3BitDht::updateDataRates()
{
uint32_t relayRead = 0;
uint32_t relayWrite = 0;
uint32_t relayRelay = 0;
uint32_t dhtRead = 0;
uint32_t dhtWrite = 0;
mRelay->getDataTransferred(relayRead, relayWrite, relayRelay);
mUdpBitDht->getDataTransferred(dhtRead, dhtWrite);
RsStackMutex stack(dhtMtx); /********* LOCKED *********/
time_t now = time(NULL);
float period = now - mLastDataRateUpdate;
#define RATE_FACTOR (0.75)
mRelayReadRate *= RATE_FACTOR;
mRelayReadRate += (1.0 - RATE_FACTOR) * (relayRead / period);
mRelayWriteRate *= RATE_FACTOR;
mRelayWriteRate += (1.0 - RATE_FACTOR) * (relayWrite / period);
mRelayRelayRate *= RATE_FACTOR;
mRelayRelayRate += (1.0 - RATE_FACTOR) * (relayRelay / period);
mDhtReadRate *= RATE_FACTOR;
mDhtReadRate += (1.0 - RATE_FACTOR) * (dhtRead / period);
mDhtWriteRate *= RATE_FACTOR;
mDhtWriteRate += (1.0 - RATE_FACTOR) * (dhtWrite / period);
mLastDataRateUpdate = now;
}
void p3BitDht::clearDataRates()
{
RsStackMutex stack(dhtMtx); /********* LOCKED *********/
mRelayReadRate = 0;
mRelayWriteRate = 0;
mRelayRelayRate = 0;
mDhtReadRate = 0;
mDhtWriteRate = 0;
mLastDataRateUpdate = time(NULL);
}
/* in kB/s */
void p3BitDht::getDhtRates(float &read, float &write)
{
RsStackMutex stack(dhtMtx); /********* LOCKED *********/
read = mDhtReadRate / 1024.0;
write = mDhtWriteRate / 1024.0;
}
void p3BitDht::getRelayRates(float &read, float &write, float &relay)
{
RsStackMutex stack(dhtMtx); /********* LOCKED *********/
read = mRelayReadRate / 1024.0;
write = mRelayWriteRate / 1024.0;
relay = mRelayRelayRate / 1024.0;
}
/***********************************************************************************************
********** External RsDHT Interface (defined in libretroshare/src/retroshare/rsdht.h) *********
************************************************************************************************/

View file

@ -1103,6 +1103,29 @@ int p3BitDht::minuteTick()
{
mRelay->checkRelays();
updateDataRates();
/* temp - testing - print dht & relay traffic */
float dhtRead, dhtWrite;
float relayRead, relayWrite, relayRelayed;
getRelayRates(relayRead, relayWrite, relayRelayed);
getDhtRates(dhtRead, dhtWrite);
double denom = deltaT;
std::cerr << "p3BitDht::minuteTick() ";
std::cerr << "DhtRead: " << dhtRead / denom << " kB/s ";
std::cerr << "DhtWrite: " << dhtWrite / denom << " kB/s ";
std::cerr << std::endl;
std::cerr << "p3BitDht::minuteTick() ";
std::cerr << "RelayRead: " << relayRead / denom << " kB/s ";
std::cerr << "RelayWrite: " << relayWrite / denom << " kB/s ";
std::cerr << "RelayRelayed: " << relayRelayed / denom << " kB/s ";
std::cerr << std::endl;
RsStackMutex stack(dhtMtx); /********** LOCKED MUTEX ***************/
mMinuteTS = now;
}