From 56613a71d5d64feed414f2405147ead1c9c7d33b Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Tue, 3 Jul 2018 11:51:39 -0300 Subject: [PATCH 1/5] let find value run until it finds a value --- lbrynet/dht/iterativefind.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lbrynet/dht/iterativefind.py b/lbrynet/dht/iterativefind.py index 9844053e4..5b0e9c992 100644 --- a/lbrynet/dht/iterativefind.py +++ b/lbrynet/dht/iterativefind.py @@ -134,6 +134,9 @@ class _IterativeFind(object): defer.returnValue(contact.id) def should_stop(self): + if self.is_find_value_request: + # search stops when it finds a value, let it run + return False if self.prev_closest_node and self.closest_node and self.distance.is_closer(self.prev_closest_node.id, self.closest_node.id): # we're getting further away From 023846703b8d9178c13b0dbb49d5c549ac725700 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Tue, 3 Jul 2018 11:53:21 -0300 Subject: [PATCH 2/5] adds a changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca7a23b9d..9e1f6b623 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ at anytime. * ### Changed + * change iterative find stop condition on find value to allow it to continue until a value is found (or it times out) * include all of our own blobs in the local dht datastore (as if we had announced them to ourselves) * ignore dht `store` token validation errors for the first expiration-time after startup (fixes failed `store` requests after a restart) From 7e0784d8e0c015a76717a6da94b0799394740e64 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Tue, 3 Jul 2018 12:20:33 -0300 Subject: [PATCH 3/5] log a warning when peer search times out for real --- lbrynet/dht/peerfinder.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lbrynet/dht/peerfinder.py b/lbrynet/dht/peerfinder.py index 4074807ea..5d4b073c8 100644 --- a/lbrynet/dht/peerfinder.py +++ b/lbrynet/dht/peerfinder.py @@ -48,6 +48,7 @@ class DHTPeerFinder(DummyPeerFinder): try: peer_list = yield finished_deferred except defer.TimeoutError: + log.warning("DHT timed out while looking peers for blob {}".format(blob_hash)) peer_list = [] peers = set(peer_list) From 1cc7ce69ab62fa66ad750e5def4680b1e05c325a Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Tue, 3 Jul 2018 13:35:34 -0300 Subject: [PATCH 4/5] set the peer search timeout as configured and raise it to 30s --- lbrynet/conf.py | 2 +- lbrynet/dht/peerfinder.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lbrynet/conf.py b/lbrynet/conf.py index da5e1381b..14fa45b53 100644 --- a/lbrynet/conf.py +++ b/lbrynet/conf.py @@ -291,7 +291,7 @@ ADJUSTABLE_SETTINGS = { 'run_reflector_server': (bool, False), 'sd_download_timeout': (int, 3), 'share_usage_data': (bool, True), # whether to share usage stats and diagnostic info with LBRY - 'peer_search_timeout': (int, 3), + 'peer_search_timeout': (int, 30), 'use_auth_http': (bool, False), 'use_upnp': (bool, True), 'use_keyring': (bool, False), diff --git a/lbrynet/dht/peerfinder.py b/lbrynet/dht/peerfinder.py index 5d4b073c8..3b51f7a4e 100644 --- a/lbrynet/dht/peerfinder.py +++ b/lbrynet/dht/peerfinder.py @@ -4,6 +4,7 @@ import logging from zope.interface import implements from twisted.internet import defer from lbrynet.interfaces import IPeerFinder +from lbrynet import conf log = logging.getLogger(__name__) @@ -43,12 +44,14 @@ class DHTPeerFinder(DummyPeerFinder): """ bin_hash = binascii.unhexlify(blob_hash) finished_deferred = self.dht_node.iterativeFindValue(bin_hash) + timeout = timeout or conf.settings['peer_search_timeout'] if timeout: finished_deferred.addTimeout(timeout, self.dht_node.clock) try: peer_list = yield finished_deferred except defer.TimeoutError: - log.warning("DHT timed out while looking peers for blob {}".format(blob_hash)) + log.warning("DHT timed out while looking peers for blob" + " %s after %s seconds.", blob_hash, timeout) peer_list = [] peers = set(peer_list) From 8b6902fb00363133a721453a44d3867f83a56ba5 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Tue, 3 Jul 2018 13:49:35 -0300 Subject: [PATCH 5/5] adds a changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e1f6b623..7c9d0d8fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ at anytime. * ### Changed + * default for `peer_search_timeout` raised from 3 to 30 and being logged on console * change iterative find stop condition on find value to allow it to continue until a value is found (or it times out) * include all of our own blobs in the local dht datastore (as if we had announced them to ourselves) * ignore dht `store` token validation errors for the first expiration-time after startup (fixes failed `store` requests after a restart)