diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index e4294670614..7c67a131cd4 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -511,6 +511,8 @@ def start_span( # pylint: disable=too-many-locals ) if sampling_decision.sampled: + 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 449fb51e8ee..6a5c571fdf5 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,9 @@ def test_start_span_explicit(self): other_parent = trace_api.SpanContext( trace_id=0x000000000000000000000000DEADBEEF, span_id=0x00000000DEADBEF0, + trace_options=trace_api.TraceOptions( + trace_api.TraceOptions.SAMPLED + ), ) self.assertIsNone(tracer.get_current_span())