Browse Source

fix(mep): Catch all dry run errors (#33375)

- This catches everything when a dry run has an exception
- Fixes SENTRY-TNK
William Mak 2 years ago
parent
commit
949c038732

+ 10 - 0
src/sentry/snuba/metrics_enhanced_performance.py

@@ -101,6 +101,11 @@ def query(
         except IncompatibleMetricsQuery as error:
             sentry_sdk.set_tag("performance.mep_incompatible", str(error))
             metrics_compatible = False
+        except Exception as error:
+            if dry_run:
+                return
+            else:
+                raise error
 
     if dry_run:
         return {}
@@ -207,6 +212,11 @@ def timeseries_query(
         except IncompatibleMetricsQuery as error:
             sentry_sdk.set_tag("performance.mep_incompatible", str(error))
             metrics_compatible = False
+        except Exception as error:
+            if dry_run:
+                return
+            else:
+                raise error
 
     if dry_run:
         return {}

+ 11 - 0
tests/snuba/api/endpoints/test_organization_events_v2.py

@@ -6,6 +6,7 @@ from django.urls import reverse
 from django.utils import timezone
 from pytz import utc
 from snuba_sdk.column import Column
+from snuba_sdk.conditions import InvalidConditionError
 from snuba_sdk.function import Function
 
 from sentry.discover.models import TeamKeyTransaction
@@ -5818,3 +5819,13 @@ class OrganizationEventsMetricsEnhancedPerformanceEndpointTest(MetricsEnhancedPe
             assert response.status_code == 200, response.content
             assert len(mock_builder.mock_calls) == 2
             assert mock_builder.call_args.kwargs["dry_run"]
+
+            mock_builder.side_effect = InvalidConditionError("Something bad")
+            query = {
+                "field": ["count()"],
+                "project": [self.project.id],
+            }
+            response = self.do_request(query)
+            assert response.status_code == 200, response.content
+            assert len(mock_builder.mock_calls) == 3
+            assert mock_builder.call_args.kwargs["dry_run"]