Merge pull request #1495 from lbryio/retry_dht
[DHT] retry on protocol level
This commit is contained in:
commit
b7ae446059
1 changed files with 16 additions and 2 deletions
|
@ -118,7 +118,20 @@ class KademliaProtocol(protocol.DatagramProtocol):
|
||||||
return args
|
return args
|
||||||
return args + ({b'protocolVersion': self._protocolVersion},)
|
return args + ({b'protocolVersion': self._protocolVersion},)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
def sendRPC(self, contact, method, args):
|
def sendRPC(self, contact, method, args):
|
||||||
|
for _ in range(constants.rpcAttempts):
|
||||||
|
try:
|
||||||
|
response = yield self._sendRPC(contact, method, args)
|
||||||
|
return response
|
||||||
|
except TimeoutError:
|
||||||
|
if contact.contact_is_good:
|
||||||
|
log.debug("RETRY %s ON %s", method, contact)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
def _sendRPC(self, contact, method, args):
|
||||||
"""
|
"""
|
||||||
Sends an RPC to the specified contact
|
Sends an RPC to the specified contact
|
||||||
|
|
||||||
|
@ -153,11 +166,12 @@ class KademliaProtocol(protocol.DatagramProtocol):
|
||||||
df = defer.Deferred()
|
df = defer.Deferred()
|
||||||
|
|
||||||
def _remove_contact(failure): # remove the contact from the routing table and track the failure
|
def _remove_contact(failure): # remove the contact from the routing table and track the failure
|
||||||
|
contact.update_last_failed()
|
||||||
try:
|
try:
|
||||||
self._node.removeContact(contact)
|
if not contact.contact_is_good:
|
||||||
|
self._node.removeContact(contact)
|
||||||
except (ValueError, IndexError):
|
except (ValueError, IndexError):
|
||||||
pass
|
pass
|
||||||
contact.update_last_failed()
|
|
||||||
return failure
|
return failure
|
||||||
|
|
||||||
def _update_contact(result): # refresh the contact in the routing table
|
def _update_contact(result): # refresh the contact in the routing table
|
||||||
|
|
Loading…
Reference in a new issue