reduce routing table ping flood
This commit is contained in:
parent
673d259d7a
commit
1adce8b227
2 changed files with 10 additions and 3 deletions
|
@ -67,7 +67,7 @@ class _Contact:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def lastFailed(self):
|
def lastFailed(self):
|
||||||
return self._contactManager._rpc_failures.get((self.address, self.port), [None])[-1]
|
return (self.failures or [None])[-1]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def failures(self):
|
def failures(self):
|
||||||
|
|
|
@ -48,6 +48,7 @@ class TreeRoutingTable:
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
getTime = reactor.seconds
|
getTime = reactor.seconds
|
||||||
self._getTime = getTime
|
self._getTime = getTime
|
||||||
|
self._ongoing_replacements = set()
|
||||||
|
|
||||||
def get_contacts(self):
|
def get_contacts(self):
|
||||||
contacts = []
|
contacts = []
|
||||||
|
@ -134,8 +135,14 @@ class TreeRoutingTable:
|
||||||
to_replace = not_good_contacts[0]
|
to_replace = not_good_contacts[0]
|
||||||
else:
|
else:
|
||||||
to_replace = self._buckets[bucketIndex]._contacts[0]
|
to_replace = self._buckets[bucketIndex]._contacts[0]
|
||||||
df = to_replace.ping()
|
if to_replace not in self._ongoing_replacements:
|
||||||
df.addErrback(replaceContact, to_replace)
|
log.debug("pinging %s:%s", to_replace.address, to_replace.port)
|
||||||
|
self._ongoing_replacements.add(to_replace)
|
||||||
|
df = to_replace.ping()
|
||||||
|
df.addErrback(replaceContact, to_replace)
|
||||||
|
df.addBoth(lambda _: self._ongoing_replacements.remove(to_replace))
|
||||||
|
else:
|
||||||
|
df = defer.succeed(None)
|
||||||
return df
|
return df
|
||||||
else:
|
else:
|
||||||
self.touchKBucketByIndex(bucketIndex)
|
self.touchKBucketByIndex(bucketIndex)
|
||||||
|
|
Loading…
Reference in a new issue