From 2c001345dcb9b5a344c7acfd08ffe9c483cfbdb8 Mon Sep 17 00:00:00 2001 From: Antoine Lambert <anlambert@softwareheritage.org> Date: Thu, 20 Mar 2025 11:24:08 +0100 Subject: [PATCH] package: Do not report NotFound to sentry when package info is missing It exist cases when a package version is referenced in package versions list but package info for that version is missing. This type of error is not fixable from the SWH side so there is no need to report these errors to sentry as it generates a lot of noise in the sentry dashboards. Fixes #4751. --- swh/loader/package/loader.py | 5 +++-- swh/loader/package/tests/test_loader.py | 26 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/swh/loader/package/loader.py b/swh/loader/package/loader.py index 07b05e4e..01b2c3ff 100644 --- a/swh/loader/package/loader.py +++ b/swh/loader/package/loader.py @@ -659,9 +659,10 @@ class PackageLoader(BaseLoader, Generic[TPackageInfo]): packages_info.append((branch_name, p_info)) except Exception as e: load_exceptions.append(e) - sentry_sdk.capture_exception(e) error = f"Failed to get package info for version {version} of {self.origin.url}" - logger.exception(error) + if not isinstance(e, NotFound): + sentry_sdk.capture_exception(e) + logger.exception(error) errors.append(f"{error}: {e}") # Compute the ExtID of each of these packages diff --git a/swh/loader/package/tests/test_loader.py b/swh/loader/package/tests/test_loader.py index 441480d2..48555cfe 100644 --- a/swh/loader/package/tests/test_loader.py +++ b/swh/loader/package/tests/test_loader.py @@ -19,6 +19,7 @@ from swh.loader.core.loader import ( SENTRY_VISIT_TYPE_TAG_NAME, ) from swh.loader.core.utils import EMPTY_AUTHOR +from swh.loader.exception import NotFound from swh.loader.package.loader import BasePackageInfo, PackageLoader from swh.model.model import ( ExtID, @@ -742,3 +743,28 @@ def test_loader_with_duplicated_releases(swh_storage, requests_mock_datadir, moc == snapshot.branches[f"branch-v{i}".encode()] ) assert b"HEAD" in snapshot.branches + + +class StubPackageLoaderWithPackageInfoNotFound(StubPackageLoader): + def get_package_info(self, version): + if version == "v4.0": + raise NotFound("Package info not found") + else: + return super().get_package_info(version) + + +def test_loader_origin_with_package_info_not_found( + swh_storage, sentry_events, requests_mock_datadir +): + """NotFound exception for get_package_info should not be sent to sentry.""" + loader = StubPackageLoaderWithPackageInfoNotFound(swh_storage, ORIGIN_URL) + + assert loader.load() == { + "snapshot_id": "eec06c0cb03a0c19d513ad0e9a2b08f547ae7bd2", + "status": "eventful", + } + + assert loader.load_status() == {"status": "eventful"} + assert loader.visit_status() == "partial" + + assert not sentry_events -- GitLab