diff --git a/sdk/include/opentelemetry/sdk/trace/sampler.h b/sdk/include/opentelemetry/sdk/trace/sampler.h index 452ba924b4..799d490e8b 100644 --- a/sdk/include/opentelemetry/sdk/trace/sampler.h +++ b/sdk/include/opentelemetry/sdk/trace/sampler.h @@ -45,6 +45,12 @@ struct SamplingResult std::unique_ptr> attributes; // The tracestate used by the span. nostd::shared_ptr trace_state; + + inline bool IsRecording() + { + return decision == Decision::RECORD_ONLY || decision == Decision::RECORD_AND_SAMPLE; + } + inline bool IsSampled() { return decision == Decision::RECORD_AND_SAMPLE; } }; /** diff --git a/sdk/src/trace/tracer.cc b/sdk/src/trace/tracer.cc index be5e5f7d96..370eda49cb 100644 --- a/sdk/src/trace/tracer.cc +++ b/sdk/src/trace/tracer.cc @@ -64,9 +64,9 @@ nostd::shared_ptr Tracer::StartSpan( auto sampling_result = context_->GetSampler().ShouldSample(parent_context, trace_id, name, options.kind, attributes, links); - auto trace_flags = sampling_result.decision == Decision::DROP - ? trace_api::TraceFlags{} - : trace_api::TraceFlags{trace_api::TraceFlags::kIsSampled}; + auto trace_flags = sampling_result.IsSampled() + ? trace_api::TraceFlags{trace_api::TraceFlags::kIsSampled} + : trace_api::TraceFlags{}; auto span_context = std::unique_ptr(new trace_api::SpanContext( trace_id, span_id, trace_flags, false, @@ -74,7 +74,7 @@ nostd::shared_ptr Tracer::StartSpan( : is_parent_span_valid ? parent_context.trace_state() : trace_api::TraceState::GetDefault())); - if (sampling_result.decision == Decision::DROP) + if (!sampling_result.IsRecording()) { // create no-op span with valid span-context.