diff --git a/src/sentry/seer/similarity/grouping_records.py b/src/sentry/seer/similarity/grouping_records.py index f8e36118943283..d45f17bb8b9a63 100644 --- a/src/sentry/seer/similarity/grouping_records.py +++ b/src/sentry/seer/similarity/grouping_records.py @@ -5,7 +5,7 @@ from typing import TypedDict from django.conf import settings -from urllib3.exceptions import ReadTimeoutError +from urllib3.exceptions import MaxRetryError, ReadTimeoutError, TimeoutError from sentry import options from sentry.conf.server import ( @@ -13,6 +13,7 @@ SEER_PROJECT_GROUPING_RECORDS_DELETE_URL, ) from sentry.net.http import connection_from_url +from sentry.seer.signed_seer_api import make_signed_seer_api_request from sentry.utils import json, metrics logger = logging.getLogger(__name__) @@ -75,16 +76,15 @@ def call_seer_to_delete_project_grouping_records( def call_seer_to_delete_these_hashes(project_id: int, hashes: Sequence[str]) -> bool: extra = {"project_id": project_id, "hashes": hashes} try: - body = {"project_id": project_id, "hash_list": hashes} - response = seer_grouping_connection_pool.urlopen( - "POST", + body = json.dumps({"project_id": project_id, "hash_list": hashes}).encode("utf-8") + response = make_signed_seer_api_request( + seer_grouping_connection_pool, SEER_HASH_GROUPING_RECORDS_DELETE_URL, - body=json.dumps(body), - headers={"Content-Type": "application/json;charset=utf-8"}, + body=body, timeout=POST_BULK_GROUPING_RECORDS_TIMEOUT, ) - except ReadTimeoutError: - extra.update({"reason": "ReadTimeoutError", "timeout": POST_BULK_GROUPING_RECORDS_TIMEOUT}) + except (TimeoutError, MaxRetryError) as e: + extra.update({"reason": type(e).__name__, "timeout": POST_BULK_GROUPING_RECORDS_TIMEOUT}) logger.exception( "seer.delete_grouping_records.hashes.timeout", extra=extra, @@ -92,7 +92,7 @@ def call_seer_to_delete_these_hashes(project_id: int, hashes: Sequence[str]) -> metrics.incr( DELETE_HASH_METRIC, sample_rate=options.get("seer.similarity.metrics_sample_rate"), - tags={"success": False, "reason": "ReadTimeoutError"}, + tags={"success": False, "reason": type(e).__name__}, ) return False diff --git a/tests/sentry/seer/similarity/test_grouping_records.py b/tests/sentry/seer/similarity/test_grouping_records.py index 229b880a75e6a3..ba70905f047a7a 100644 --- a/tests/sentry/seer/similarity/test_grouping_records.py +++ b/tests/sentry/seer/similarity/test_grouping_records.py @@ -18,7 +18,7 @@ @django_db_all @mock.patch("sentry.seer.similarity.grouping_records.logger") -@mock.patch("sentry.seer.similarity.grouping_records.seer_grouping_connection_pool.urlopen") +@mock.patch("sentry.seer.similarity.grouping_records.make_signed_seer_api_request") def test_delete_grouping_records_by_hash_success( mock_seer_request: MagicMock, mock_logger: MagicMock ): @@ -40,7 +40,7 @@ def test_delete_grouping_records_by_hash_success( @django_db_all @mock.patch("sentry.seer.similarity.grouping_records.logger") -@mock.patch("sentry.seer.similarity.grouping_records.seer_grouping_connection_pool.urlopen") +@mock.patch("sentry.seer.similarity.grouping_records.make_signed_seer_api_request") def test_delete_grouping_records_by_hash_timeout( mock_seer_request: MagicMock, mock_logger: MagicMock ): @@ -63,7 +63,7 @@ def test_delete_grouping_records_by_hash_timeout( @django_db_all @mock.patch("sentry.seer.similarity.grouping_records.logger") -@mock.patch("sentry.seer.similarity.grouping_records.seer_grouping_connection_pool.urlopen") +@mock.patch("sentry.seer.similarity.grouping_records.make_signed_seer_api_request") def test_delete_grouping_records_by_hash_failure( mock_seer_request: MagicMock, mock_logger: MagicMock ):