From 2152ad87be72e79d6d362eb7e9a7d5b1354e863e Mon Sep 17 00:00:00 2001 From: gky360 Date: Tue, 14 Apr 2020 16:35:44 +0900 Subject: [PATCH 1/3] Fix span.status --- opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index c162ea5c1ca..8e8e4a917ab 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -604,8 +604,9 @@ def use_span( context_api.detach(token) except Exception as error: # pylint: disable=broad-except + status = span.status if hasattr(span, "status") else None if ( - span.status is None + status is None and span._set_status_on_exception # pylint:disable=protected-access # noqa ): span.set_status( From 9bc1247db4ab855b0a298d1fd47aed58d1d2244f Mon Sep 17 00:00:00 2001 From: gky360 Date: Wed, 15 Apr 2020 10:26:25 +0900 Subject: [PATCH 2/3] Check span type in use_span --- opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 8e8e4a917ab..3b64006d3d5 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -604,9 +604,9 @@ def use_span( context_api.detach(token) except Exception as error: # pylint: disable=broad-except - status = span.status if hasattr(span, "status") else None if ( - status is None + isinstance(span, Span) + and span.status is None and span._set_status_on_exception # pylint:disable=protected-access # noqa ): span.set_status( From 52389ae61065a9918d6a1fc89859b9e49af4513a Mon Sep 17 00:00:00 2001 From: gky360 Date: Wed, 15 Apr 2020 10:26:36 +0900 Subject: [PATCH 3/3] Add test for use_span --- opentelemetry-sdk/tests/trace/test_trace.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index ccb1ccd1e4e..f9db925f11c 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -107,6 +107,16 @@ def run_general_code(shutdown_on_exit, explicit_shutdown): out = run_general_code(False, False) self.assertTrue(out.startswith(b"0")) + def test_use_span_exception(self): + class TestUseSpanException(Exception): + pass + + default_span = trace_api.DefaultSpan(trace_api.INVALID_SPAN_CONTEXT) + tracer = new_tracer() + with self.assertRaises(TestUseSpanException): + with tracer.use_span(default_span): + raise TestUseSpanException() + class TestTracerSampling(unittest.TestCase): def test_default_sampler(self):