From 34f5bc93ae256c92b6a6ced5bc542a2339df5c44 Mon Sep 17 00:00:00 2001 From: Kay Kurokawa Date: Thu, 9 Feb 2017 10:09:58 -0500 Subject: [PATCH] adding immediate announce option to hash announce --- lbrynet/core/server/DHTHashAnnouncer.py | 9 ++++++--- tests/unit/core/server/test_DHTHashAnnouncer.py | 9 ++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lbrynet/core/server/DHTHashAnnouncer.py b/lbrynet/core/server/DHTHashAnnouncer.py index 98e5a24bb..a68a97d0f 100644 --- a/lbrynet/core/server/DHTHashAnnouncer.py +++ b/lbrynet/core/server/DHTHashAnnouncer.py @@ -39,7 +39,7 @@ class DHTHashAnnouncer(object): def immediate_announce(self, blob_hashes): if self.peer_port is not None: - return self._announce_hashes(blob_hashes) + return self._announce_hashes(blob_hashes, immediate=True) else: return defer.succeed(False) @@ -56,7 +56,7 @@ class DHTHashAnnouncer(object): dl = defer.DeferredList(ds) return dl - def _announce_hashes(self, hashes): + def _announce_hashes(self, hashes, immediate=False): if not hashes: return log.debug('Announcing %s hashes', len(hashes)) @@ -67,7 +67,10 @@ class DHTHashAnnouncer(object): for h in hashes: announce_deferred = defer.Deferred() ds.append(announce_deferred) - self.hash_queue.append((h, announce_deferred)) + if immediate: + self.hash_queue.appendleft((h, announce_deferred)) + else: + self.hash_queue.append((h, announce_deferred)) log.debug('There are now %s hashes remaining to be announced', self.hash_queue_size()) def announce(): diff --git a/tests/unit/core/server/test_DHTHashAnnouncer.py b/tests/unit/core/server/test_DHTHashAnnouncer.py index 726f03749..c6bb05967 100644 --- a/tests/unit/core/server/test_DHTHashAnnouncer.py +++ b/tests/unit/core/server/test_DHTHashAnnouncer.py @@ -42,9 +42,16 @@ class DHTHashAnnouncerTest(unittest.TestCase): def test_basic(self): self.announcer._announce_available_hashes() + self.assertEqual(self.announcer.hash_queue_size(),self.announcer.CONCURRENT_ANNOUNCERS) self.clock.advance(1) self.assertEqual(self.dht_node.blobs_announced, self.num_blobs) self.assertEqual(self.announcer.hash_queue_size(), 0) - + def test_immediate_announce(self): + # Test that immediate announce puts a hash at the front of the queue + self.announcer._announce_available_hashes() + blob_hash = binascii.b2a_hex(os.urandom(32)) + self.announcer.immediate_announce([blob_hash]) + self.assertEqual(self.announcer.hash_queue_size(),self.announcer.CONCURRENT_ANNOUNCERS+1) + self.assertEqual(blob_hash, self.announcer.hash_queue[0][0])