Skip to content

Commit 5782560

Browse files
fix(opentelemetry): avoid propagation of empty baggage (#2968)
1 parent 6701616 commit 5782560

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

sentry_sdk/integrations/opentelemetry/propagator.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,23 @@
1717
SpanContext,
1818
TraceFlags,
1919
)
20+
21+
from sentry_sdk._types import TYPE_CHECKING
2022
from sentry_sdk.integrations.opentelemetry.consts import (
2123
SENTRY_BAGGAGE_KEY,
2224
SENTRY_TRACE_KEY,
2325
)
2426
from sentry_sdk.integrations.opentelemetry.span_processor import (
2527
SentrySpanProcessor,
2628
)
27-
2829
from sentry_sdk.tracing import (
2930
BAGGAGE_HEADER_NAME,
3031
SENTRY_TRACE_HEADER_NAME,
3132
)
3233
from sentry_sdk.tracing_utils import Baggage, extract_sentrytrace_data
33-
from sentry_sdk._types import TYPE_CHECKING
3434

3535
if TYPE_CHECKING:
36-
from typing import Optional
37-
from typing import Set
36+
from typing import Optional, Set
3837

3938

4039
class SentryPropagator(TextMapPropagator):
@@ -107,7 +106,9 @@ def inject(self, carrier, context=None, setter=default_setter):
107106
if sentry_span.containing_transaction:
108107
baggage = sentry_span.containing_transaction.get_baggage()
109108
if baggage:
110-
setter.set(carrier, BAGGAGE_HEADER_NAME, baggage.serialize())
109+
baggage_data = baggage.serialize()
110+
if baggage_data:
111+
setter.set(carrier, BAGGAGE_HEADER_NAME, baggage_data)
111112

112113
@property
113114
def fields(self):

tests/integrations/opentelemetry/test_propagator.py

+48-4
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
from unittest.mock import MagicMock
55

66
from opentelemetry.context import get_current
7-
from opentelemetry.trace.propagation import get_current_span
87
from opentelemetry.trace import (
9-
set_span_in_context,
10-
TraceFlags,
118
SpanContext,
9+
TraceFlags,
10+
set_span_in_context,
1211
)
12+
from opentelemetry.trace.propagation import get_current_span
13+
1314
from sentry_sdk.integrations.opentelemetry.consts import (
1415
SENTRY_BAGGAGE_KEY,
1516
SENTRY_TRACE_KEY,
@@ -198,7 +199,50 @@ def test_inject_sentry_span_no_baggage():
198199
)
199200

200201

201-
@pytest.mark.forked
202+
def test_inject_sentry_span_empty_baggage():
203+
"""
204+
Inject a sentry span with no baggage.
205+
"""
206+
carrier = None
207+
context = get_current()
208+
setter = MagicMock()
209+
setter.set = MagicMock()
210+
211+
trace_id = "1234567890abcdef1234567890abcdef"
212+
span_id = "1234567890abcdef"
213+
214+
span_context = SpanContext(
215+
trace_id=int(trace_id, 16),
216+
span_id=int(span_id, 16),
217+
trace_flags=TraceFlags(TraceFlags.SAMPLED),
218+
is_remote=True,
219+
)
220+
span = MagicMock()
221+
span.get_span_context.return_value = span_context
222+
223+
sentry_span = MagicMock()
224+
sentry_span.to_traceparent = mock.Mock(
225+
return_value="1234567890abcdef1234567890abcdef-1234567890abcdef-1"
226+
)
227+
sentry_span.containing_transaction.get_baggage = mock.Mock(return_value=Baggage({}))
228+
229+
span_processor = SentrySpanProcessor()
230+
span_processor.otel_span_map[span_id] = sentry_span
231+
232+
with mock.patch(
233+
"sentry_sdk.integrations.opentelemetry.propagator.trace.get_current_span",
234+
return_value=span,
235+
):
236+
full_context = set_span_in_context(span, context)
237+
SentryPropagator().inject(carrier, full_context, setter)
238+
239+
setter.set.assert_called_once_with(
240+
carrier,
241+
"sentry-trace",
242+
"1234567890abcdef1234567890abcdef-1234567890abcdef-1",
243+
)
244+
245+
202246
def test_inject_sentry_span_baggage():
203247
"""
204248
Inject a sentry span with baggage.

0 commit comments

Comments
 (0)