Skip to content

Commit 30f79fd

Browse files
authored
exporter/b3: Fix B3 propagator to not crash work with DefaultSpan (#1148)
1 parent d8edd50 commit 30f79fd

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,21 +140,23 @@ def inject(
140140
) -> None:
141141
span = trace.get_current_span(context=context)
142142

143-
if span.get_context() == trace.INVALID_SPAN_CONTEXT:
143+
span_context = span.get_context()
144+
if span_context == trace.INVALID_SPAN_CONTEXT:
144145
return
145146

146-
sampled = (trace.TraceFlags.SAMPLED & span.context.trace_flags) != 0
147+
sampled = (trace.TraceFlags.SAMPLED & span_context.trace_flags) != 0
147148
set_in_carrier(
148-
carrier, self.TRACE_ID_KEY, format_trace_id(span.context.trace_id),
149+
carrier, self.TRACE_ID_KEY, format_trace_id(span_context.trace_id),
149150
)
150151
set_in_carrier(
151-
carrier, self.SPAN_ID_KEY, format_span_id(span.context.span_id)
152+
carrier, self.SPAN_ID_KEY, format_span_id(span_context.span_id)
152153
)
153-
if span.parent is not None:
154+
span_parent = getattr(span, "parent", None)
155+
if span_parent is not None:
154156
set_in_carrier(
155157
carrier,
156158
self.PARENT_SPAN_ID_KEY,
157-
format_span_id(span.parent.span_id),
159+
format_span_id(span_parent.span_id),
158160
)
159161
set_in_carrier(carrier, self.SAMPLED_KEY, "1" if sampled else "0")
160162

opentelemetry-sdk/tests/trace/propagation/test_b3_format.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,3 +307,16 @@ def test_inject_empty_context():
307307
new_carrier = {}
308308
FORMAT.inject(dict.__setitem__, new_carrier, get_current())
309309
assert len(new_carrier) == 0
310+
311+
@staticmethod
312+
def test_default_span():
313+
"""Make sure propagator does not crash when working with DefaultSpan"""
314+
315+
def getter(carrier, key):
316+
return carrier.get(key, None)
317+
318+
def setter(carrier, key, value):
319+
carrier[key] = value
320+
321+
ctx = FORMAT.extract(getter, {})
322+
FORMAT.inject(setter, {}, ctx)

0 commit comments

Comments
 (0)