Browse Source

Update Python SDK and remove some minimetrics checks that are obsolete (#60347)

Bump the Sentry Python SDK and at the same time remove the override. 
The override was used for metrics, but since everything in that override 
has now found its way into the SDK, it is not necessary anymore.
Anton Pirker 1 year ago
parent
commit
86d92ee083

+ 0 - 1
.pre-commit-config.yaml

@@ -74,7 +74,6 @@ repos:
         entry: '(^# *mypy: *ignore-errors|^# *type: *ignore|\bno_type_check\b)'
         language: pygrep
         types: [python]
-        exclude: ^src/sentry/metrics/minimetrics.py$
       - id: prevent-push
         name: prevent pushing master
         stages: [pre-push]

+ 1 - 1
requirements-base.txt

@@ -65,7 +65,7 @@ sentry-kafka-schemas>=0.1.33
 sentry-kafka-schemas>=0.1.34
 sentry-redis-tools>=0.1.7
 sentry-relay>=0.8.35
-sentry-sdk>=1.31.0
+sentry-sdk>=1.35.0
 snuba-sdk>=2.0.9
 simplejson>=3.17.6
 sqlparse>=0.4.4

+ 1 - 1
requirements-dev-frozen.txt

@@ -176,7 +176,7 @@ sentry-forked-djangorestframework-stubs==3.14.4.post2
 sentry-kafka-schemas==0.1.34
 sentry-redis-tools==0.1.7
 sentry-relay==0.8.35
-sentry-sdk==1.31.0
+sentry-sdk==1.35.0
 sentry-usage-accountant==0.0.10
 simplejson==3.17.6
 six==1.16.0

+ 1 - 1
requirements-frozen.txt

@@ -117,7 +117,7 @@ sentry-arroyo==2.14.20
 sentry-kafka-schemas==0.1.34
 sentry-redis-tools==0.1.7
 sentry-relay==0.8.35
-sentry-sdk==1.31.0
+sentry-sdk==1.35.0
 sentry-usage-accountant==0.0.10
 simplejson==3.17.6
 six==1.16.0

+ 0 - 5
requirements-getsentry-overrides.txt

@@ -7,8 +7,3 @@
 # the format is:
 # # comment explaining what you're doing
 # library-name @ https://github.com/getsentry/<repo>/archive/<40 char sha>.zip
-
-
-# This overrides our sentry-python version to use a version with
-# configurable gzip compression
-sentry-sdk @ https://github.com/getsentry/sentry-python/archive/1b445c61d1e263ccd04d823307b3a03a6945dc8a.zip

+ 7 - 22
src/sentry/metrics/minimetrics.py

@@ -1,17 +1,9 @@
-# mypy: ignore-errors
-
 import random
 from functools import wraps
 from typing import Any, Dict, Iterable, Optional, Tuple, Union
 
 import sentry_sdk
-
-try:
-    from sentry_sdk.metrics import Metric, MetricsAggregator, metrics_noop  # type: ignore
-
-    have_minimetrics = True
-except ImportError:
-    have_minimetrics = False
+from sentry_sdk.metrics import Metric, MetricsAggregator, metrics_noop
 
 from sentry import options
 from sentry.metrics.base import MetricsBackend, Tags
@@ -19,9 +11,6 @@ from sentry.utils import metrics
 
 
 def patch_sentry_sdk():
-    if not have_minimetrics:
-        return
-
     real_add = MetricsAggregator.add
     real_emit = MetricsAggregator._emit
 
@@ -100,23 +89,19 @@ def before_emit_metric(key: str, tags: Dict[str, Any]) -> bool:
 
 
 class MiniMetricsMetricsBackend(MetricsBackend):
-    def __init__(self, prefix: Optional[str] = None):
-        super().__init__(prefix=prefix)
-        if not have_minimetrics:
-            raise RuntimeError("Sentry SDK too old (no minimetrics)")
-
     @staticmethod
     def _keep_metric(sample_rate: float) -> bool:
         return random.random() < sample_rate
 
     @staticmethod
     def _to_minimetrics_unit(unit: Optional[str], default: Optional[str] = None) -> str:
-        if unit is None and default is None:
+        if unit is None:
+            if default is not None:
+                return default
+
             return "none"
-        elif unit is None:
-            return default
-        else:
-            return unit
+
+        return unit
 
     def incr(
         self,

+ 13 - 25
tests/sentry/metrics/test_minimetrics.py

@@ -6,11 +6,7 @@ import pytest
 from sentry_sdk import Client, Hub, Transport
 
 from sentry.metrics.composite_experimental import CompositeExperimentalMetricsBackend
-from sentry.metrics.minimetrics import (
-    MiniMetricsMetricsBackend,
-    before_emit_metric,
-    have_minimetrics,
-)
+from sentry.metrics.minimetrics import MiniMetricsMetricsBackend, before_emit_metric
 from sentry.testutils.helpers import override_options
 
 
@@ -98,7 +94,6 @@ def backend():
         yield rv
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.enable_capture_envelope": True,
@@ -122,7 +117,6 @@ def test_incr_called_with_no_tags(backend, hub):
     assert len(hub.client.metrics_aggregator.buckets) == 0
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.enable_capture_envelope": True,
@@ -146,7 +140,6 @@ def test_incr_called_with_no_tags_and_no_common_tags(backend, hub):
     assert len(hub.client.metrics_aggregator.buckets) == 0
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.enable_capture_envelope": True,
@@ -167,7 +160,6 @@ def test_incr_called_with_tag_value_as_list(backend, hub):
     assert len(hub.client.metrics_aggregator.buckets) == 0
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.enable_capture_envelope": True,
@@ -190,7 +182,6 @@ def test_gauge_as_count(backend, hub):
     assert len(hub.client.metrics_aggregator.buckets) == 0
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.enable_capture_envelope": True,
@@ -213,7 +204,6 @@ def test_gauge(backend, hub):
     assert len(hub.client.metrics_aggregator.buckets) == 0
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.enable_capture_envelope": True,
@@ -255,7 +245,6 @@ def test_composite_backend_does_not_recurse(hub):
     assert len(hub.client.metrics_aggregator.buckets) == 0
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.minimetrics_sample_rate": 1.0,
@@ -276,7 +265,6 @@ def test_unit_is_correctly_propagated_for_incr(sentry_sdk, unit, expected_unit):
     assert sentry_sdk.metrics.incr.call_args.kwargs == {**params, "unit": expected_unit}
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.minimetrics_sample_rate": 1.0,
@@ -293,7 +281,6 @@ def test_unit_is_correctly_propagated_for_timing(sentry_sdk, unit, expected_unit
     assert sentry_sdk.metrics.distribution.call_args.kwargs == {**params, "unit": expected_unit}
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {"delightful_metrics.minimetrics_sample_rate": 1.0, "delightful_metrics.emit_gauges": True}
 )
@@ -308,7 +295,6 @@ def test_unit_is_correctly_propagated_for_gauge(sentry_sdk, unit, expected_unit)
     assert sentry_sdk.metrics.gauge.call_args.kwargs == {**params, "unit": expected_unit}
 
 
-@pytest.mark.skipif(not have_minimetrics, reason="no minimetrics")
 @override_options(
     {
         "delightful_metrics.minimetrics_sample_rate": 1.0,
@@ -325,13 +311,15 @@ def test_unit_is_correctly_propagated_for_distribution(sentry_sdk, unit, expecte
     assert sentry_sdk.metrics.distribution.call_args.kwargs == {**params, "unit": expected_unit}
 
 
-def test_did_you_remove_type_ignore():
-    from importlib.metadata import version
-
-    ver = tuple(map(int, version("sentry-sdk").split(".")[:2]))
-    if ver > (1, 31):
-        raise RuntimeError(
-            "Released SDK version with minimetrics support. Please delete "
-            "this test and follow up instructions in "
-            "https://github.com/getsentry/sentry/issues/56651"
-        )
+@pytest.mark.parametrize(
+    "unit,default,expected_result",
+    [
+        (None, None, "none"),
+        (None, "my_default", "my_default"),
+        ("second", None, "second"),
+        ("second", "my_default", "second"),
+    ],
+)
+def test_to_minimetrics_unit(unit, default, expected_result):
+    result = MiniMetricsMetricsBackend._to_minimetrics_unit(unit, default)
+    assert result == expected_result