From a237cbd9636f9f2fb600b0ee58bec9881cc63dd7 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Mon, 27 Sep 2021 03:26:34 -0300 Subject: [PATCH] add dht seed node script --- lbry/dht/protocol/data_store.py | 3 +++ scripts/dht_node.py | 38 +++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 scripts/dht_node.py diff --git a/lbry/dht/protocol/data_store.py b/lbry/dht/protocol/data_store.py index 6a614680f..3d937e84e 100644 --- a/lbry/dht/protocol/data_store.py +++ b/lbry/dht/protocol/data_store.py @@ -16,6 +16,9 @@ class DictDataStore: self._peer_manager = peer_manager self.completed_blobs: typing.Set[str] = set() + def __len__(self): + return self._data_store.__len__() + def removed_expired_peers(self): now = self.loop.time() keys = list(self._data_store.keys()) diff --git a/scripts/dht_node.py b/scripts/dht_node.py new file mode 100644 index 000000000..9321c5f52 --- /dev/null +++ b/scripts/dht_node.py @@ -0,0 +1,38 @@ +import asyncio +import argparse +import logging + +from lbry.dht.constants import generate_id +from lbry.dht.node import Node +from lbry.dht.peer import PeerManager +from lbry.extras.daemon.storage import SQLiteStorage +from lbry.conf import Config + +logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)-4s %(name)s:%(lineno)d: %(message)s") +log = logging.getLogger(__name__) + + +async def main(host: str, port: int): + loop = asyncio.get_event_loop() + conf = Config() + storage = SQLiteStorage(conf, ":memory:", loop, loop.time) + await storage.open() + node = Node( + loop, PeerManager(loop), generate_id(), port, port, 3333, None, + storage=storage + ) + node.start(host, conf.known_dht_nodes) + while True: + await asyncio.sleep(10) + log.info("Known peers: %d. Storing contact information for %d blobs from %d peers.", + len(node.protocol.routing_table.get_peers()), len(node.protocol.data_store), + len(node.protocol.data_store.get_storing_contacts())) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description="Starts a single DHT node, which then can be used as a seed node or just a contributing node.") + parser.add_argument("--host", default='0.0.0.0', help="Host to listen for requests. Default: 0.0.0.0") + parser.add_argument("--port", default=4444, help="Port to listen for requests. Default: 4444") + args = parser.parse_args() + asyncio.run(main(args.host, args.port))