From 5292ff61b25c532682470ab959e0fe305c4267f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mauricio=20V=C3=A1squez?= Date: Mon, 10 Feb 2020 20:50:25 -0500 Subject: [PATCH 1/3] sdk: set sampled flag to true upon sampling decision --- opentelemetry-api/src/opentelemetry/trace/__init__.py | 6 ++++++ opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py | 3 +++ opentelemetry-sdk/tests/trace/test_trace.py | 2 ++ 3 files changed, 11 insertions(+) diff --git a/opentelemetry-api/src/opentelemetry/trace/__init__.py b/opentelemetry-api/src/opentelemetry/trace/__init__.py index 014e82b3bc2..28c1bf40bec 100644 --- a/opentelemetry-api/src/opentelemetry/trace/__init__.py +++ b/opentelemetry-api/src/opentelemetry/trace/__init__.py @@ -265,6 +265,12 @@ class TraceOptions(int): def get_default(cls) -> "TraceOptions": return cls(cls.DEFAULT) + @classmethod + def get_sampled(cls, other: "TraceOptions" = None) -> "TraceOptions": + if other is None: + return cls(cls.SAMPLED) + return cls(other | cls.SAMPLED) + @property def sampled(self) -> bool: return bool(self & TraceOptions.SAMPLED) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index e4294670614..20083740f73 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -511,6 +511,9 @@ def start_span( # pylint: disable=too-many-locals ) if sampling_decision.sampled: + context.trace_options = trace_api.TraceOptions.get_sampled( + context.trace_options + ) if attributes is None: span_attributes = sampling_decision.attributes else: diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index 449fb51e8ee..11a0c8f2061 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -117,6 +117,7 @@ def test_default_sampler(self): self.assertIsInstance(root_span, trace.Span) child_span = tracer.start_span(name="child span", parent=root_span) self.assertIsInstance(child_span, trace.Span) + self.assertTrue(root_span.context.trace_options.sampled) def test_sampler_no_sampling(self): tracer_source = trace.TracerSource(sampling.ALWAYS_OFF) @@ -251,6 +252,7 @@ def test_start_span_explicit(self): other_parent = trace_api.SpanContext( trace_id=0x000000000000000000000000DEADBEEF, span_id=0x00000000DEADBEF0, + trace_options=trace_api.TraceOptions.get_sampled(), ) self.assertIsNone(tracer.get_current_span()) From 1abe7eff9fb628cef0dd49e2afaafd0ff7eb4a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mauricio=20V=C3=A1squez?= Date: Tue, 11 Feb 2020 07:13:08 -0500 Subject: [PATCH 2/3] fix type annotation --- opentelemetry-api/src/opentelemetry/trace/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/opentelemetry-api/src/opentelemetry/trace/__init__.py b/opentelemetry-api/src/opentelemetry/trace/__init__.py index 28c1bf40bec..3473361dfed 100644 --- a/opentelemetry-api/src/opentelemetry/trace/__init__.py +++ b/opentelemetry-api/src/opentelemetry/trace/__init__.py @@ -266,7 +266,9 @@ def get_default(cls) -> "TraceOptions": return cls(cls.DEFAULT) @classmethod - def get_sampled(cls, other: "TraceOptions" = None) -> "TraceOptions": + def get_sampled( + cls, other: typing.Optional["TraceOptions"] = None + ) -> "TraceOptions": if other is None: return cls(cls.SAMPLED) return cls(other | cls.SAMPLED) From daaecafd4ad625034d16c65d71a6547032006e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mauricio=20V=C3=A1squez?= Date: Tue, 11 Feb 2020 16:48:11 -0500 Subject: [PATCH 3/3] remove get_sampled, use or operation directly --- opentelemetry-api/src/opentelemetry/trace/__init__.py | 8 -------- opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py | 5 ++--- opentelemetry-sdk/tests/trace/test_trace.py | 4 +++- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/opentelemetry-api/src/opentelemetry/trace/__init__.py b/opentelemetry-api/src/opentelemetry/trace/__init__.py index 3473361dfed..014e82b3bc2 100644 --- a/opentelemetry-api/src/opentelemetry/trace/__init__.py +++ b/opentelemetry-api/src/opentelemetry/trace/__init__.py @@ -265,14 +265,6 @@ class TraceOptions(int): def get_default(cls) -> "TraceOptions": return cls(cls.DEFAULT) - @classmethod - def get_sampled( - cls, other: typing.Optional["TraceOptions"] = None - ) -> "TraceOptions": - if other is None: - return cls(cls.SAMPLED) - return cls(other | cls.SAMPLED) - @property def sampled(self) -> bool: return bool(self & TraceOptions.SAMPLED) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 20083740f73..7c67a131cd4 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -511,9 +511,8 @@ def start_span( # pylint: disable=too-many-locals ) if sampling_decision.sampled: - context.trace_options = trace_api.TraceOptions.get_sampled( - context.trace_options - ) + options = context.trace_options | trace_api.TraceOptions.SAMPLED + context.trace_options = trace_api.TraceOptions(options) if attributes is None: span_attributes = sampling_decision.attributes else: diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index 11a0c8f2061..6a5c571fdf5 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -252,7 +252,9 @@ def test_start_span_explicit(self): other_parent = trace_api.SpanContext( trace_id=0x000000000000000000000000DEADBEEF, span_id=0x00000000DEADBEF0, - trace_options=trace_api.TraceOptions.get_sampled(), + trace_options=trace_api.TraceOptions( + trace_api.TraceOptions.SAMPLED + ), ) self.assertIsNone(tracer.get_current_span())