mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-07-25 15:35:49 -04:00
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:
parent
7dc0cd6b0f
commit
4aec00a0c2
12 changed files with 212 additions and 9 deletions
|
@ -150,6 +150,8 @@ p3BitDht::p3BitDht(std::string id, pqiConnectCb *cb, p3NetMgr *nm,
|
|||
#endif
|
||||
|
||||
setupRelayDefaults();
|
||||
|
||||
clearDataRates();
|
||||
}
|
||||
|
||||
p3BitDht::~p3BitDht()
|
||||
|
|
|
@ -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) ****************************
|
||||
************************************************************************************************/
|
||||
|
|
|
@ -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) *********
|
||||
************************************************************************************************/
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue