From b8ef896a69efd7d4de5304208dc4fa66de506d87 Mon Sep 17 00:00:00 2001 From: nellaG Date: Sat, 2 Nov 2024 15:08:18 +0900 Subject: [PATCH 1/4] ref(celery): remove deprecated `propagate_traces` option `propagate_traces` is not documented and superseded by `trace_propagation_targets`. Refs #3106 --- sentry_sdk/consts.py | 1 - sentry_sdk/integrations/celery/__init__.py | 10 +----- sentry_sdk/scope.py | 2 -- .../test_celery_beat_cron_monitoring.py | 3 +- tests/integrations/celery/test_celery.py | 31 +------------------ 5 files changed, 3 insertions(+), 44 deletions(-) diff --git a/sentry_sdk/consts.py b/sentry_sdk/consts.py index 6791abeb0e..61af5e02a3 100644 --- a/sentry_sdk/consts.py +++ b/sentry_sdk/consts.py @@ -517,7 +517,6 @@ def __init__( debug=None, # type: Optional[bool] attach_stacktrace=False, # type: bool ca_certs=None, # type: Optional[str] - propagate_traces=True, # type: bool traces_sample_rate=None, # type: Optional[float] traces_sampler=None, # type: Optional[TracesSampler] profiles_sample_rate=None, # type: Optional[float] diff --git a/sentry_sdk/integrations/celery/__init__.py b/sentry_sdk/integrations/celery/__init__.py index 9a984de8c3..c66f9b2d40 100644 --- a/sentry_sdk/integrations/celery/__init__.py +++ b/sentry_sdk/integrations/celery/__init__.py @@ -63,12 +63,10 @@ class CeleryIntegration(Integration): def __init__( self, - propagate_traces=True, monitor_beat_tasks=False, exclude_beat_tasks=None, ): - # type: (bool, bool, Optional[List[str]]) -> None - self.propagate_traces = propagate_traces + # type: (bool, Optional[List[str]]) -> None self.monitor_beat_tasks = monitor_beat_tasks self.exclude_beat_tasks = exclude_beat_tasks @@ -257,12 +255,6 @@ def apply_async(*args, **kwargs): return f(*args, **kwargs) kwarg_headers = kwargs.get("headers") or {} - propagate_traces = kwarg_headers.pop( - "sentry-propagate-traces", integration.propagate_traces - ) - - if not propagate_traces: - return f(*args, **kwargs) if isinstance(args[0], Task): task_name = args[0].name # type: str diff --git a/sentry_sdk/scope.py b/sentry_sdk/scope.py index 0c0482904e..9f700a0ae0 100644 --- a/sentry_sdk/scope.py +++ b/sentry_sdk/scope.py @@ -615,8 +615,6 @@ def iter_trace_propagation_headers(self, *args, **kwargs): If no span is given, the trace data is taken from the scope. """ client = self.get_client() - if not client.options.get("propagate_traces"): - return span = kwargs.pop("span", None) span = span or self.span diff --git a/tests/integrations/celery/integration_tests/test_celery_beat_cron_monitoring.py b/tests/integrations/celery/integration_tests/test_celery_beat_cron_monitoring.py index 53f2f63215..20539a1af2 100644 --- a/tests/integrations/celery/integration_tests/test_celery_beat_cron_monitoring.py +++ b/tests/integrations/celery/integration_tests/test_celery_beat_cron_monitoring.py @@ -34,11 +34,10 @@ def celery_init(sentry_init, celery_config): from sentry_sdk.integrations.celery import CeleryIntegration - def inner(propagate_traces=True, monitor_beat_tasks=False, **kwargs): + def inner(monitor_beat_tasks=False, **kwargs): sentry_init( integrations=[ CeleryIntegration( - propagate_traces=propagate_traces, monitor_beat_tasks=monitor_beat_tasks, ) ], diff --git a/tests/integrations/celery/test_celery.py b/tests/integrations/celery/test_celery.py index e51341599f..f2e7aacc0f 100644 --- a/tests/integrations/celery/test_celery.py +++ b/tests/integrations/celery/test_celery.py @@ -28,7 +28,6 @@ def inner(signal, f): @pytest.fixture def init_celery(sentry_init, request): def inner( - propagate_traces=True, backend="always_eager", monitor_beat_tasks=False, **kwargs, @@ -36,7 +35,6 @@ def inner( sentry_init( integrations=[ CeleryIntegration( - propagate_traces=propagate_traces, monitor_beat_tasks=monitor_beat_tasks, ) ], @@ -267,24 +265,6 @@ def dummy_task(): assert not sentry_sdk.get_isolation_scope()._tags -def test_simple_no_propagation(capture_events, init_celery): - celery = init_celery(propagate_traces=False) - events = capture_events() - - @celery.task(name="dummy_task") - def dummy_task(): - 1 / 0 - - with start_transaction() as transaction: - dummy_task.delay() - - (event,) = events - assert event["contexts"]["trace"]["trace_id"] != transaction.trace_id - assert event["transaction"] == "dummy_task" - (exception,) = event["exception"]["values"] - assert exception["type"] == "ZeroDivisionError" - - def test_ignore_expected(capture_events, celery): events = capture_events() @@ -532,9 +512,7 @@ def test_sentry_propagate_traces_override(init_celery): Test if the `sentry-propagate-traces` header given to `apply_async` overrides the `propagate_traces` parameter in the integration constructor. """ - celery = init_celery( - propagate_traces=True, traces_sample_rate=1.0, release="abcdef" - ) + celery = init_celery(traces_sample_rate=1.0, release="abcdef") @celery.task(name="dummy_task", bind=True) def dummy_task(self, message): @@ -550,13 +528,6 @@ def dummy_task(self, message): ).get() assert transaction_trace_id == task_transaction_id - # should NOT propagate trace (overrides `propagate_traces` parameter in integration constructor) - task_transaction_id = dummy_task.apply_async( - args=("another message",), - headers={"sentry-propagate-traces": False}, - ).get() - assert transaction_trace_id != task_transaction_id - def test_apply_async_manually_span(sentry_init): sentry_init( From f8088027cfac86acfb48108f1ef263ad19fa0eb8 Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Tue, 14 Jan 2025 14:29:46 +0100 Subject: [PATCH 2/4] This is a separate option that can be given to apply_async and needs to stay --- sentry_sdk/integrations/celery/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sentry_sdk/integrations/celery/__init__.py b/sentry_sdk/integrations/celery/__init__.py index 3432f88b6c..0863bacba8 100644 --- a/sentry_sdk/integrations/celery/__init__.py +++ b/sentry_sdk/integrations/celery/__init__.py @@ -254,6 +254,10 @@ def apply_async(*args, **kwargs): return f(*args, **kwargs) kwarg_headers = kwargs.get("headers") or {} + propagate_traces = kwarg_headers.pop("sentry-propagate-traces", True) + + if not propagate_traces: + return f(*args, **kwargs) if isinstance(args[0], Task): task_name = args[0].name # type: str From 40f20280472088cd202dbd9cc9cd059e8ae6f3b4 Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Tue, 14 Jan 2025 14:31:44 +0100 Subject: [PATCH 3/4] This is testing another header option and has to stay --- tests/integrations/celery/test_celery.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/integrations/celery/test_celery.py b/tests/integrations/celery/test_celery.py index f2e7aacc0f..0eca1ac520 100644 --- a/tests/integrations/celery/test_celery.py +++ b/tests/integrations/celery/test_celery.py @@ -528,6 +528,13 @@ def dummy_task(self, message): ).get() assert transaction_trace_id == task_transaction_id + # should NOT propagate trace (overrides `propagate_traces` parameter in integration constructor) + task_transaction_id = dummy_task.apply_async( + args=("another message",), + headers={"sentry-propagate-traces": False}, + ).get() + assert transaction_trace_id != task_transaction_id + def test_apply_async_manually_span(sentry_init): sentry_init( From 2926c008f13799df9d62367b647c8819d63d5e7c Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Tue, 14 Jan 2025 14:33:37 +0100 Subject: [PATCH 4/4] cleanup --- tests/integrations/celery/test_celery.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integrations/celery/test_celery.py b/tests/integrations/celery/test_celery.py index 0eca1ac520..8e9f933ed7 100644 --- a/tests/integrations/celery/test_celery.py +++ b/tests/integrations/celery/test_celery.py @@ -510,7 +510,7 @@ def dummy_task(self, x, y): def test_sentry_propagate_traces_override(init_celery): """ Test if the `sentry-propagate-traces` header given to `apply_async` - overrides the `propagate_traces` parameter in the integration constructor. + overrides the default trace propagation behavior. """ celery = init_celery(traces_sample_rate=1.0, release="abcdef") @@ -528,7 +528,7 @@ def dummy_task(self, message): ).get() assert transaction_trace_id == task_transaction_id - # should NOT propagate trace (overrides `propagate_traces` parameter in integration constructor) + # should NOT propagate trace task_transaction_id = dummy_task.apply_async( args=("another message",), headers={"sentry-propagate-traces": False},