Skip to content

Commit 4541883

Browse files
committed
Fix #2348, add handling for non recording span in jaeger exporter
1 parent ca7a3fa commit 4541883

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3737
([#2705](https://github.com/open-telemetry/opentelemetry-python/pull/2705))
3838
- Add entrypoint for metrics exporter
3939
([#2748](https://github.com/open-telemetry/opentelemetry-python/pull/2748))
40+
- Fix Jaeger propagator usage with NonRecordingSpan
41+
([#2762](https://github.com/open-telemetry/opentelemetry-python/pull/2762))
4042

4143
## [1.12.0rc1-0.31b0](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.12.0rc1-0.31b0) - 2022-05-17
4244

propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ def inject(
8181
if span_context == trace.INVALID_SPAN_CONTEXT:
8282
return
8383

84-
span_parent_id = span.parent.span_id if span.parent else 0
84+
# Non-recording spans do not have a parent
85+
span_parent_id = span.parent.span_id if span.is_recording() and span.parent else 0
8586
trace_flags = span_context.trace_flags
8687
if trace_flags.sampled:
8788
trace_flags |= self.DEBUG_FLAG

propagator/opentelemetry-propagator-jaeger/tests/test_jaeger_propagator.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,3 +230,15 @@ def test_extract_invalid_uber_trace_id_header_to_implicit_ctx(self):
230230

231231
ctx = FORMAT.extract(carrier)
232232
self.assertDictEqual(Context(), ctx)
233+
234+
def test_non_recording_span_does_not_crash(self):
235+
"""Make sure propagator does not crash when working with NonRecordingSpan"""
236+
tracer = trace.TracerProvider().get_tracer("sdk_tracer_provider")
237+
mock_setter = Mock()
238+
span = trace_api.NonRecordingSpan(trace_api.SpanContext(1, 1, True))
239+
with trace_api.use_span(span, end_on_exit=True):
240+
try:
241+
FORMAT.inject({}, setter=mock_setter)
242+
except Exception as exc:
243+
self.fail(f'Injecting failed for NonRecordingSpan with {exc}')
244+

0 commit comments

Comments
 (0)