diff --git a/api/include/opentelemetry/trace/propagation/http_trace_context.h b/api/include/opentelemetry/trace/propagation/http_trace_context.h index 91905b794e..9440960be3 100644 --- a/api/include/opentelemetry/trace/propagation/http_trace_context.h +++ b/api/include/opentelemetry/trace/propagation/http_trace_context.h @@ -100,7 +100,11 @@ class HttpTraceContext : public opentelemetry::context::propagation::TextMapProp nostd::span{&trace_parent[kTraceIdSize + kSpanIdSize + 5], 2}); carrier.Set(kTraceParent, nostd::string_view(trace_parent, sizeof(trace_parent))); - carrier.Set(kTraceState, span_context.trace_state()->ToHeader()); + const auto trace_state = span_context.trace_state()->ToHeader(); + if (!trace_state.empty()) + { + carrier.Set(kTraceState, trace_state); + } } static SpanContext ExtractContextFromTraceHeaders(nostd::string_view trace_parent, diff --git a/api/test/trace/propagation/http_text_format_test.cc b/api/test/trace/propagation/http_text_format_test.cc index d42d508860..8fa0e44ed2 100644 --- a/api/test/trace/propagation/http_text_format_test.cc +++ b/api/test/trace/propagation/http_text_format_test.cc @@ -55,8 +55,8 @@ TEST(TextMapPropagatorTest, NoSendEmptyTraceState) context::Context ctx2 = format.Extract(carrier, ctx1); TextMapCarrierTest carrier2; format.Inject(carrier2, ctx2); - EXPECT_TRUE(carrier.headers_.count("traceparent") > 0); - EXPECT_FALSE(carrier.headers_.count("tracestate") > 0); + EXPECT_TRUE(carrier2.headers_.count("traceparent") > 0); + EXPECT_FALSE(carrier2.headers_.count("tracestate") > 0); } TEST(TextMapPropagatorTest, PropogateTraceState) @@ -72,8 +72,8 @@ TEST(TextMapPropagatorTest, PropogateTraceState) TextMapCarrierTest carrier2; format.Inject(carrier2, ctx2); - EXPECT_TRUE(carrier.headers_.count("traceparent") > 0); - EXPECT_TRUE(carrier.headers_.count("tracestate") > 0); + EXPECT_TRUE(carrier2.headers_.count("traceparent") > 0); + EXPECT_TRUE(carrier2.headers_.count("tracestate") > 0); EXPECT_EQ(carrier2.headers_["tracestate"], "congo=t61rcWkgMzE"); }