diff --git a/CHANGELOG.md b/CHANGELOG.md index af6f44c32..5d0a0de31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ at anytime. * Refactored and pruned blob related classes into `lbrynet.blobs` * Changed several `assert`s to raise more useful errors * Added ability for reflector to store stream information for head blob announce + * Added blob announcement information to API call status with session flag ### Removed * Removed `TempBlobFile` diff --git a/lbrynet/core/BlobManager.py b/lbrynet/core/BlobManager.py index 6293db4ff..91097d06e 100644 --- a/lbrynet/core/BlobManager.py +++ b/lbrynet/core/BlobManager.py @@ -88,6 +88,9 @@ class DiskBlobManager(DHTHashSupplier): def hashes_to_announce(self): return self._get_blobs_to_announce() + def count_should_announce_blobs(self): + return self._count_should_announce_blobs() + def set_should_announce(self, blob_hash, should_announce): if blob_hash in self.blobs: blob = self.blobs[blob_hash] @@ -215,6 +218,12 @@ class DiskBlobManager(DHTHashSupplier): (blob_hash,)) defer.returnValue(result[0][0]) + @rerun_if_locked + @defer.inlineCallbacks + def _count_should_announce_blobs(self): + result = yield self.db_conn.runQuery("select count(*) from blobs where should_announce=1") + defer.returnValue(result[0][0]) + @defer.inlineCallbacks def _completed_blobs(self, blobhashes_to_check): """Returns of the blobhashes_to_check, which are valid""" diff --git a/lbrynet/daemon/Daemon.py b/lbrynet/daemon/Daemon.py index 2555a5821..59e344b25 100644 --- a/lbrynet/daemon/Daemon.py +++ b/lbrynet/daemon/Daemon.py @@ -1029,6 +1029,8 @@ class Daemon(AuthJSONRPCServer): 'session_status': { 'managed_blobs': count of blobs in the blob manager, 'managed_streams': count of streams in the file manager + 'announce_queue_size': number of blobs currently queued to be announced + 'should_announce_blobs': number of blobs that should be announced } If given the dht status option: @@ -1077,9 +1079,13 @@ class Daemon(AuthJSONRPCServer): } if session_status: blobs = yield self.session.blob_manager.get_all_verified_blobs() + announce_queue_size = self.session.hash_announcer.hash_queue_size() + should_announce_blobs = yield self.session.blob_manager.count_should_announce_blobs() response['session_status'] = { 'managed_blobs': len(blobs), 'managed_streams': len(self.lbry_file_manager.lbry_files), + 'announce_queue_size': announce_queue_size, + 'should_announce_blobs': should_announce_blobs, } if dht_status: response['dht_status'] = self.session.dht_node.get_bandwidth_stats() diff --git a/lbrynet/tests/unit/core/test_BlobManager.py b/lbrynet/tests/unit/core/test_BlobManager.py index 1dbb65096..9747cb502 100644 --- a/lbrynet/tests/unit/core/test_BlobManager.py +++ b/lbrynet/tests/unit/core/test_BlobManager.py @@ -32,7 +32,7 @@ class BlobManagerTest(unittest.TestCase): shutil.rmtree(self.db_dir) @defer.inlineCallbacks - def _create_and_add_blob(self): + def _create_and_add_blob(self, should_announce=False): # create and add blob to blob manager data_len = random.randint(1, 1000) data = ''.join(random.choice(string.lowercase) for data_len in range(data_len)) @@ -48,7 +48,7 @@ class BlobManagerTest(unittest.TestCase): writer, finished_d = yield blob.open_for_writing(self.peer) yield writer.write(data) - yield self.bm.blob_completed(blob) + yield self.bm.blob_completed(blob, should_announce) yield self.bm.add_blob_to_upload_history(blob_hash, 'test', len(data)) # check to see if blob is there @@ -112,3 +112,20 @@ class BlobManagerTest(unittest.TestCase): self.assertEqual(len(blobs), 10) self.assertTrue(blob_hashes[-1] in blobs) self.assertTrue(os.path.isfile(os.path.join(self.blob_dir, blob_hashes[-1]))) + + @defer.inlineCallbacks + def test_should_announce(self): + # create blob with should announce + blob_hash = yield self._create_and_add_blob(should_announce=True) + out = yield self.bm.get_should_announce(blob_hash) + self.assertTrue(out) + count = yield self.bm.count_should_announce_blobs() + self.assertEqual(1, count) + + # set should annouce to False + out = yield self.bm.set_should_announce(blob_hash, should_announce=False) + out = yield self.bm.get_should_announce(blob_hash) + self.assertFalse(out) + count = yield self.bm.count_should_announce_blobs() + self.assertEqual(0, count) +