Expanded DHT history analysis, and ran some more tests on DHT behaviour.

- Tweaked query parameters (quicker discard, longer requery period).

The analysis suggests that in general the DHT is running okay with some minor issues.
 - BitDHT peers respond to ~50% of FIND_NODE queries. This means we drop them, 
   and so  some ONLINE friends, become UNREACHABLE friends.

This appears to be caused by too many FIND_NODE queries reaching BitDHT, and the 
peer starts dropping them. This appears to come from specific peers, which 
are not RS nodes. Proposed solution is to Track and Filter Over-Querying Peers.
(Only one query per peer every 30 seconds).

 - Should be more lenient on the exact query matches.
Allow some dropped messages.

 - Queries appear to run longer than necessary.
A better query completion criteria needs to be established.

 


git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6614 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2013-08-26 04:29:27 +00:00
parent 1554e17f48
commit 0608f67d71
6 changed files with 488 additions and 98 deletions

View file

@ -37,8 +37,8 @@
**/
#define EXPECTED_REPLY 10 // Speed up queries
#define QUERY_IDLE_RETRY_PEER_PERIOD 300 // 5min = (mFns->bdNumQueryNodes() * 30)
#define MAX_QUERY_IDLE_PERIOD 900 // 15min.
#define QUERY_IDLE_RETRY_PEER_PERIOD 600 // 10min = (mFns->bdNumQueryNodes() * 60)
#define MAX_QUERY_IDLE_PERIOD 1200 // 20min.
/************************************************************
@ -980,6 +980,7 @@ int bdQuery::printQuery()
fprintf(stderr, "Id: ");
mFns->bdPrintId(std::cerr, &(it->second.mPeerId));
fprintf(stderr, " Bucket: %d ", mFns->bdBucketDistance(&(it->first)));
fprintf(stderr," Flags: %x", it->second.mPeerFlags);
fprintf(stderr," Found: %ld ago", ts-it->second.mFoundTime);
fprintf(stderr," LastSent: %ld ago", ts-it->second.mLastSendTime);
fprintf(stderr," LastRecv: %ld ago", ts-it->second.mLastRecvTime);
@ -992,35 +993,12 @@ int bdQuery::printQuery()
fprintf(stderr, "Id: ");
mFns->bdPrintId(std::cerr, &(it->second.mPeerId));
fprintf(stderr, " Bucket: %d ", mFns->bdBucketDistance(&(it->first)));
fprintf(stderr," Flags: %x", it->second.mPeerFlags);
fprintf(stderr," Found: %ld ago", ts-it->second.mFoundTime);
fprintf(stderr," LastSent: %ld ago", ts-it->second.mLastSendTime);
fprintf(stderr," LastRecv: %ld ago", ts-it->second.mLastRecvTime);
fprintf(stderr, "\n");
}
std::list<bdPeer>::iterator lit;
fprintf(stderr, "\nProxies Flagged:\n");
for(lit = mProxiesFlagged.begin(); lit != mProxiesFlagged.end(); lit++)
{
fprintf(stderr, "ProxyId: ");
mFns->bdPrintId(std::cerr, &(lit->mPeerId));
fprintf(stderr," Found: %ld ago", ts-lit->mFoundTime);
fprintf(stderr," LastSent: %ld ago", ts-lit->mLastSendTime);
fprintf(stderr," LastRecv: %ld ago", ts-lit->mLastRecvTime);
fprintf(stderr, "\n");
}
fprintf(stderr, "\nProxies Unknown:\n");
for(lit = mProxiesUnknown.begin(); lit != mProxiesUnknown.end(); lit++)
{
fprintf(stderr, "ProxyId: ");
mFns->bdPrintId(std::cerr, &(lit->mPeerId));
fprintf(stderr," Found: %ld ago", ts-lit->mFoundTime);
fprintf(stderr," LastSent: %ld ago", ts-lit->mLastSendTime);
fprintf(stderr," LastRecv: %ld ago", ts-lit->mLastRecvTime);
fprintf(stderr, "\n");
}
#else
// shortened version.
fprintf(stderr, "Closest Available Peer: ");
@ -1049,6 +1027,7 @@ int bdQuery::printQuery()
}
fprintf(stderr, "\n");
#endif
std::list<bdPeer>::iterator lit;
fprintf(stderr, "Flagged Proxies:\n");
for(lit = mProxiesFlagged.begin(); lit != mProxiesFlagged.end(); lit++)
@ -1073,7 +1052,6 @@ int bdQuery::printQuery()
fprintf(stderr," LastRecv: %ld ago", ts-lit->mLastRecvTime);
fprintf(stderr, "\n");
}
#endif
return 1;
}