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