Merge pull request #1854 from lbryio/no-self-queries
fix trying downloading from oneself, prune querying peer from findValue results
This commit is contained in:
commit
6033399f05
4 changed files with 12 additions and 9 deletions
|
@ -238,7 +238,13 @@ class Node:
|
||||||
async with self.stream_peer_search_junction(search_queue) as search_junction: # pylint: disable=E1701
|
async with self.stream_peer_search_junction(search_queue) as search_junction: # pylint: disable=E1701
|
||||||
async for peers in search_junction:
|
async for peers in search_junction:
|
||||||
if peers:
|
if peers:
|
||||||
result_queue.put_nowait(peers)
|
result_queue.put_nowait([
|
||||||
|
peer for peer in peers
|
||||||
|
if not (
|
||||||
|
peer.address == self.protocol.external_ip
|
||||||
|
and peer.tcp_port == self.protocol.peer_port
|
||||||
|
)
|
||||||
|
])
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -255,7 +255,6 @@ class IterativeFinder:
|
||||||
self.delayed_calls.clear()
|
self.delayed_calls.clear()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class IterativeNodeFinder(IterativeFinder):
|
class IterativeNodeFinder(IterativeFinder):
|
||||||
def __init__(self, loop: asyncio.BaseEventLoop, peer_manager: 'PeerManager',
|
def __init__(self, loop: asyncio.BaseEventLoop, peer_manager: 'PeerManager',
|
||||||
routing_table: 'TreeRoutingTable', protocol: 'KademliaProtocol', key: bytes,
|
routing_table: 'TreeRoutingTable', protocol: 'KademliaProtocol', key: bytes,
|
||||||
|
|
|
@ -83,11 +83,11 @@ class KademliaRPC:
|
||||||
response[b'protocolVersion'] = self.protocol.protocol_version
|
response[b'protocolVersion'] = self.protocol.protocol_version
|
||||||
|
|
||||||
# get peers we have stored for this blob_exchange
|
# get peers we have stored for this blob_exchange
|
||||||
has_other_peers = self.protocol.data_store.has_peers_for_blob(key)
|
peers = [
|
||||||
peers = []
|
peer.compact_address_tcp()
|
||||||
if has_other_peers:
|
for peer in self.protocol.data_store.get_peers_for_blob(key)
|
||||||
peers.extend([peer.compact_address_tcp() for peer in self.protocol.data_store.get_peers_for_blob(key)])
|
if not rpc_contact.tcp_port or peer.compact_address_tcp() != rpc_contact.compact_address_tcp()
|
||||||
|
]
|
||||||
# if we don't have k storing peers to return and we have this hash locally, include our contact information
|
# if we don't have k storing peers to return and we have this hash locally, include our contact information
|
||||||
if len(peers) < constants.k and binascii.hexlify(key).decode() in self.protocol.data_store.completed_blobs:
|
if len(peers) < constants.k and binascii.hexlify(key).decode() in self.protocol.data_store.completed_blobs:
|
||||||
peers.append(self.compact_address())
|
peers.append(self.compact_address())
|
||||||
|
|
|
@ -183,8 +183,6 @@ class TreeRoutingTable:
|
||||||
exclude = [self._parent_node_id]
|
exclude = [self._parent_node_id]
|
||||||
if sender_node_id:
|
if sender_node_id:
|
||||||
exclude.append(sender_node_id)
|
exclude.append(sender_node_id)
|
||||||
if key in exclude:
|
|
||||||
exclude.remove(key)
|
|
||||||
count = count or constants.k
|
count = count or constants.k
|
||||||
distance = Distance(key)
|
distance = Distance(key)
|
||||||
contacts = self.get_peers()
|
contacts = self.get_peers()
|
||||||
|
|
Loading…
Reference in a new issue