Skip to content

Commit 61edbfa

Browse files
authored
Return INVALID_SPAN on get_current_span instead of None (open-telemetry#891)
1 parent 8cbd9d4 commit 61edbfa

File tree

11 files changed

+29
-23
lines changed

11 files changed

+29
-23
lines changed

ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ def inject(
7777
context: typing.Optional[Context] = None,
7878
) -> None:
7979
span = trace.get_current_span(context)
80-
if span is None:
81-
return
8280
span_context = span.get_context()
8381
if span_context == trace.INVALID_SPAN_CONTEXT:
8482
return

ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ def inject(
8686
context: typing.Optional[Context] = None,
8787
) -> None:
8888
span = get_current_span(context)
89+
span_context = span.get_context()
90+
if span_context == trace.INVALID_SPAN_CONTEXT:
91+
return
8992
sampled = (trace.TraceFlags.SAMPLED & span.context.trace_flags) != 0
9093
set_in_carrier(
9194
carrier, self.TRACE_ID_KEY, format_trace_id(span.context.trace_id),

ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ def handler(request, context):
118118
server.stop(None)
119119
active_span_after_call = trace.get_current_span()
120120

121-
self.assertIsNone(active_span_before_call)
122-
self.assertIsNone(active_span_after_call)
121+
self.assertEqual(active_span_before_call, trace.INVALID_SPAN)
122+
self.assertEqual(active_span_after_call, trace.INVALID_SPAN)
123123
self.assertIsInstance(active_span_in_handler, trace_sdk.Span)
124124
self.assertIsNone(active_span_in_handler.parent)
125125

ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ def active(self):
470470
"""
471471

472472
span = trace_api.get_current_span()
473-
if span is None:
473+
if span.get_context() == trace_api.INVALID_SPAN_CONTEXT:
474474
return None
475475

476476
span_context = SpanContextShim(span.get_context())

opentelemetry-api/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## Unreleased
44

5+
- Return INVALID_SPAN if no TracerProvider set for get_current_span
6+
([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751))
7+
58
## 0.9b0
69

710
Released 2020-06-10

opentelemetry-api/src/opentelemetry/trace/propagation/__init__.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,17 @@ def set_span_in_context(
3434
return ctx
3535

3636

37-
def get_current_span(context: Optional[Context] = None) -> Optional[Span]:
37+
def get_current_span(context: Optional[Context] = None) -> Span:
3838
"""Retrieve the current span.
3939
4040
Args:
4141
context: A Context object. If one is not passed, the
4242
default current context is used instead.
4343
4444
Returns:
45-
The Span set in the context if it exists. None otherwise.
45+
The Span set in the context if it exists. INVALID_SPAN otherwise.
4646
"""
4747
span = get_value(SPAN_KEY, context=context)
48-
if span is None:
49-
return None
50-
if not isinstance(span, Span):
48+
if span is None or not isinstance(span, Span):
5149
return INVALID_SPAN
5250
return span

opentelemetry-api/src/opentelemetry/trace/propagation/tracecontexthttptextformat.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,6 @@ def inject(
120120
See `opentelemetry.trace.propagation.httptextformat.HTTPTextFormat.inject`
121121
"""
122122
span = trace.get_current_span(context)
123-
if span is None:
124-
return
125123
span_context = span.get_context()
126124
if span_context == trace.INVALID_SPAN_CONTEXT:
127125
return

opentelemetry-api/tests/trace/test_globals.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ def test_get_current_span(self):
4646
"""DefaultTracer's start_span will also
4747
be retrievable via get_current_span
4848
"""
49-
self.assertIs(trace.get_current_span(), None)
49+
self.assertEqual(trace.get_current_span(), trace.INVALID_SPAN)
5050
span = trace.DefaultSpan(trace.INVALID_SPAN_CONTEXT)
5151
ctx = trace.set_span_in_context(span)
5252
token = context.attach(ctx)
5353
try:
5454
self.assertIs(trace.get_current_span(), span)
5555
finally:
5656
context.detach(token)
57-
self.assertIs(trace.get_current_span(), None)
57+
self.assertEqual(trace.get_current_span(), trace.INVALID_SPAN)

opentelemetry-api/tests/trace/test_tracer.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,9 @@ def test_use_span(self):
3333
span = trace.DefaultSpan(trace.INVALID_SPAN_CONTEXT)
3434
with self.tracer.use_span(span):
3535
pass
36+
37+
def test_get_current_span(self):
38+
with self.tracer.start_as_current_span("test") as span:
39+
trace.get_current_span().set_attribute("test", "test")
40+
self.assertEqual(span, trace.INVALID_SPAN)
41+
self.assertFalse(hasattr("span", "attributes"))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def inject(
123123
) -> None:
124124
span = trace.get_current_span(context=context)
125125

126-
if span is None:
126+
if span.get_context() == trace.INVALID_SPAN_CONTEXT:
127127
return
128128

129129
sampled = (trace.TraceFlags.SAMPLED & span.context.trace_flags) != 0

opentelemetry-sdk/tests/trace/test_trace.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ def test_span_processor_for_source(self):
225225
def test_start_span_implicit(self):
226226
tracer = new_tracer()
227227

228-
self.assertIsNone(trace_api.get_current_span())
228+
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
229229

230230
root = tracer.start_span("root")
231231
self.assertIsNotNone(root.start_time)
@@ -264,7 +264,7 @@ def test_start_span_implicit(self):
264264

265265
self.assertIsNotNone(child.end_time)
266266

267-
self.assertIsNone(trace_api.get_current_span())
267+
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
268268
self.assertIsNotNone(root.end_time)
269269

270270
def test_start_span_explicit(self):
@@ -277,7 +277,7 @@ def test_start_span_explicit(self):
277277
trace_flags=trace_api.TraceFlags(trace_api.TraceFlags.SAMPLED),
278278
)
279279

280-
self.assertIsNone(trace_api.get_current_span())
280+
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
281281

282282
root = tracer.start_span("root")
283283
self.assertIsNotNone(root.start_time)
@@ -320,7 +320,7 @@ def test_start_span_explicit(self):
320320
def test_start_as_current_span_implicit(self):
321321
tracer = new_tracer()
322322

323-
self.assertIsNone(trace_api.get_current_span())
323+
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
324324

325325
with tracer.start_as_current_span("root") as root:
326326
self.assertIs(trace_api.get_current_span(), root)
@@ -334,7 +334,7 @@ def test_start_as_current_span_implicit(self):
334334
self.assertIs(trace_api.get_current_span(), root)
335335
self.assertIsNotNone(child.end_time)
336336

337-
self.assertIsNone(trace_api.get_current_span())
337+
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
338338
self.assertIsNotNone(root.end_time)
339339

340340
def test_start_as_current_span_explicit(self):
@@ -346,7 +346,7 @@ def test_start_as_current_span_explicit(self):
346346
is_remote=False,
347347
)
348348

349-
self.assertIsNone(trace_api.get_current_span())
349+
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
350350

351351
# Test with the implicit root span
352352
with tracer.start_as_current_span("root") as root:
@@ -552,7 +552,7 @@ def test_sampling_attributes(self):
552552
self.assertEqual(root.attributes["attr-in-both"], "decision-attr")
553553

554554
def test_events(self):
555-
self.assertIsNone(trace_api.get_current_span())
555+
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
556556

557557
with self.tracer.start_as_current_span("root") as root:
558558
# only event name
@@ -608,7 +608,7 @@ def event_formatter():
608608
self.assertEqual(root.events[4].timestamp, now)
609609

610610
def test_invalid_event_attributes(self):
611-
self.assertIsNone(trace_api.get_current_span())
611+
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
612612

613613
with self.tracer.start_as_current_span("root") as root:
614614
root.add_event("event0", {"attr1": True, "attr2": ["hi", False]})

0 commit comments

Comments
 (0)