forked from Qortal/qortal
Rewrite of isNotOldPeer predicate, to fix logic issue.
Previously, a peer would be continuously considered not 'old' if it had a connection attempt in the past day. This prevented some peers from being removed, causing nodes to hold a large repository of peers. On slower systems, this large number of known peers resulted in low numbers of outbound connections being made, presumably because of the time taken to iterate through dataset, using up a lot of allKnownPeers lock time. On devices that experienced the problem, it could be solved by deleting all known peers. This adds confidence that the old peers were the problem.
This commit is contained in:
parent
ba148dfd88
commit
d81071f254
@ -1373,17 +1373,26 @@ public class Network {
|
||||
// We attempted to connect within the last day
|
||||
// but we last managed to connect over a week ago.
|
||||
Predicate<PeerData> isNotOldPeer = peerData -> {
|
||||
|
||||
// First check if there was a connection attempt within the last day
|
||||
if (peerData.getLastAttempted() == null
|
||||
|| peerData.getLastAttempted() < now - OLD_PEER_ATTEMPTED_PERIOD) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// There was, so now check if we had a successful connection in the last 7 days
|
||||
if (peerData.getLastConnected() == null
|
||||
|| peerData.getLastConnected() > now - OLD_PEER_CONNECTION_PERIOD) {
|
||||
|
||||
// We did, so this is NOT an 'old' peer
|
||||
return true;
|
||||
}
|
||||
|
||||
// Last successful connection was more than 1 week ago - this is an 'old' peer
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
// Best to wait until we have a connection attempt - assume not an 'old' peer until then
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// Disregard peers that are NOT 'old'
|
||||
|
Loading…
Reference in New Issue
Block a user