From c868a1c34a705d6973f62339ae4b0640068ff1e6 Mon Sep 17 00:00:00 2001 From: Tony Xiao Date: Tue, 19 Aug 2025 19:00:43 -0400 Subject: [PATCH] fix(tracing): Do not attach stacktrace to transaction The `attach_stacktrace` option was attaching stack traces to transactions. This is an expensive operation but the results aren't used anywhere. --- sentry_sdk/client.py | 6 ++++-- tests/test_client.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/sentry_sdk/client.py b/sentry_sdk/client.py index 5d584a5537..c45d5e2f4f 100644 --- a/sentry_sdk/client.py +++ b/sentry_sdk/client.py @@ -516,8 +516,9 @@ def _prepare_event( if event.get("timestamp") is None: event["timestamp"] = datetime.now(timezone.utc) + is_transaction = event.get("type") == "transaction" + if scope is not None: - is_transaction = event.get("type") == "transaction" spans_before = len(cast(List[Dict[str, object]], event.get("spans", []))) event_ = scope.apply_to_event(event, hint, self.options) @@ -560,7 +561,8 @@ def _prepare_event( ) if ( - self.options["attach_stacktrace"] + not is_transaction + and self.options["attach_stacktrace"] and "exception" not in event and "stacktrace" not in event and "threads" not in event diff --git a/tests/test_client.py b/tests/test_client.py index 0468fcbb7b..a02ea6e56a 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -21,6 +21,7 @@ capture_exception, capture_event, set_tag, + start_transaction, ) from sentry_sdk.spotlight import DEFAULT_SPOTLIGHT_URL from sentry_sdk.utils import capture_internal_exception @@ -562,6 +563,15 @@ def test_attach_stacktrace_disabled(sentry_init, capture_events): assert "threads" not in event +def test_attach_stacktrace_transaction(sentry_init, capture_events): + sentry_init(traces_sample_rate=1.0, attach_stacktrace=True) + events = capture_events() + with start_transaction(name="transaction"): + pass + (event,) = events + assert "threads" not in event + + def test_capture_event_works(sentry_init): sentry_init(transport=_TestTransport()) pytest.raises(EnvelopeCapturedError, lambda: capture_event({}))