From 53d0f222d35e4a08574468b23bee7b85f0c9bdce Mon Sep 17 00:00:00 2001 From: qstokkink Date: Fri, 26 Apr 2024 10:42:52 +0200 Subject: [PATCH] Fixed Fake DHT check not being run and notify metadata --- .../core/libtorrent/download_manager/download_manager.py | 7 +++++++ src/tribler/core/torrent_checker/torrent_checker.py | 3 ++- .../core/torrent_checker/torrentchecker_session.py | 2 ++ .../core/torrent_checker/test_torrent_checker.py | 8 ++++---- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/tribler/core/libtorrent/download_manager/download_manager.py b/src/tribler/core/libtorrent/download_manager/download_manager.py index d94a1548c7..c21b970fb9 100644 --- a/src/tribler/core/libtorrent/download_manager/download_manager.py +++ b/src/tribler/core/libtorrent/download_manager/download_manager.py @@ -540,6 +540,13 @@ async def get_metainfo(self, infohash: bytes, timeout: float = 7, hops: int | No logger.info("Successfully retrieved metainfo for %s", infohash_hex) self.metainfo_cache[infohash] = {"time": timemod.time(), "meta_info": metainfo} + self.notifier.notify(Notification.torrent_metadata_added, metadata={ + "infohash": infohash, + "size": download.tdef.get_length(), + "title": download.tdef.get_name_utf8(), + "metadata_type": 300, + "tracker_info": list(download.tdef.get_trackers()) or "" + }) if infohash in self.metainfo_requests: self.metainfo_requests[infohash][1] -= 1 diff --git a/src/tribler/core/torrent_checker/torrent_checker.py b/src/tribler/core/torrent_checker/torrent_checker.py index bd20e74604..fa8f919a24 100644 --- a/src/tribler/core/torrent_checker/torrent_checker.py +++ b/src/tribler/core/torrent_checker/torrent_checker.py @@ -30,7 +30,7 @@ from tribler.tribler_config import TriblerConfigManager TRACKER_SELECTION_INTERVAL = 1 # The interval for querying a random tracker -TORRENT_SELECTION_INTERVAL = 120 # The interval for checking the health of a random torrent +TORRENT_SELECTION_INTERVAL = 10 # The interval for checking the health of a random torrent MIN_TORRENT_CHECK_INTERVAL = 900 # How much time we should wait before checking a torrent again TORRENT_CHECK_RETRY_INTERVAL = 30 # Interval when the torrent was successfully checked for the last time MAX_TORRENTS_CHECKED_PER_SESSION = 50 @@ -345,6 +345,7 @@ async def check_torrent_health(self, infohash: bytes, timeout: float = 20, scrap session.add_infohash(infohash) self._logger.info("DHT session has been created for %s: %s", infohash_hex, str(session)) self.sessions["DHT"].append(session) + self.register_anonymous_task("FakeDHT resolve", session.connect_to_tracker) self._logger.info("%d responses for %s have been received: %s", len(responses), infohash_hex, str(responses)) successful_responses = [response for response in responses if not isinstance(response, Exception)] diff --git a/src/tribler/core/torrent_checker/torrentchecker_session.py b/src/tribler/core/torrent_checker/torrentchecker_session.py index 73e3f64340..06830883f3 100644 --- a/src/tribler/core/torrent_checker/torrentchecker_session.py +++ b/src/tribler/core/torrent_checker/torrentchecker_session.py @@ -420,6 +420,8 @@ async def connect_to_tracker(self) -> TrackerResponse: now = int(time.time()) for infohash in self.infohash_list: metainfo = await self.download_manager.get_metainfo(infohash, timeout=self.timeout) + if metainfo is None: + continue health = HealthInfo(infohash, seeders=metainfo[b'seeders'], leechers=metainfo[b'leechers'], last_check=now, self_checked=True) health_list.append(health) diff --git a/src/tribler/test_unit/core/torrent_checker/test_torrent_checker.py b/src/tribler/test_unit/core/torrent_checker/test_torrent_checker.py index 744253f719..d9eb9923ac 100644 --- a/src/tribler/test_unit/core/torrent_checker/test_torrent_checker.py +++ b/src/tribler/test_unit/core/torrent_checker/test_torrent_checker.py @@ -5,7 +5,7 @@ import time from binascii import unhexlify from pathlib import Path -from unittest.mock import MagicMock, Mock, patch +from unittest.mock import AsyncMock, MagicMock, Mock, patch from ipv8.test.base import TestBase from ipv8.util import succeed @@ -66,9 +66,9 @@ def setUp(self) -> None: self.metadata_store.TorrentMetadata.__class__.instances = [] self.tracker_manager = TrackerManager(state_dir=Path("."), metadata_store=self.metadata_store) - self.torrent_checker = TorrentChecker(config=TriblerConfigManager(), download_manager=MagicMock(), - notifier=MagicMock(), metadata_store=self.metadata_store, - tracker_manager=self.tracker_manager) + self.torrent_checker = TorrentChecker(config=TriblerConfigManager(), tracker_manager=self.tracker_manager, + download_manager=MagicMock(get_metainfo=AsyncMock()), + notifier=MagicMock(), metadata_store=self.metadata_store) async def tearDown(self) -> None: """