From df38090a1d2c325f1103eac20be591334b5d4adb Mon Sep 17 00:00:00 2001 From: Eunbin Son Date: Sat, 12 Sep 2026 18:01:02 +0900 Subject: [PATCH] Propagate baggage to the parent context in SpanBuilderShim --- .../opentracingshim/SpanBuilderShim.java | 3 +- .../opentracingshim/SpanBuilderShimTest.java | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java index 9a0b845bc40..0d3be078c1f 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java @@ -197,8 +197,9 @@ public Span start() { builder.setNoParent(); baggage = Baggage.empty(); } else if (mainParent != null) { - builder.setParent(Context.root().with(io.opentelemetry.api.trace.Span.wrap(mainParent))); baggage = getAllBaggage(allParents); + builder.setParent( + Context.root().with(io.opentelemetry.api.trace.Span.wrap(mainParent)).with(baggage)); } else { // No explicit parent Span, but extracted baggage may be available. baggage = Baggage.current(); diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java index d6b3ec70a27..bd4805b1aa3 100644 --- a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java @@ -19,8 +19,10 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.trace.ReadWriteSpan; import io.opentelemetry.sdk.trace.ReadableSpan; import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.SpanProcessor; import io.opentelemetry.sdk.trace.data.LinkData; import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.sdk.trace.data.StatusData; @@ -31,6 +33,7 @@ import io.opentracing.tag.Tags; import java.math.BigInteger; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -231,6 +234,50 @@ void baggage_parent() { } } + @Test + void baggage_explicitParent_inParentContext() { + AtomicReference parentContextBaggage = new AtomicReference<>(); + SdkTracerProvider tracerSdkFactory = + SdkTracerProvider.builder() + .addSpanProcessor( + new SpanProcessor() { + @Override + public void onStart(Context parentContext, ReadWriteSpan span) { + parentContextBaggage.set(Baggage.fromContext(parentContext)); + } + + @Override + public boolean isStartRequired() { + return true; + } + + @Override + public void onEnd(ReadableSpan span) {} + + @Override + public boolean isEndRequired() { + return false; + } + }) + .build(); + Tracer tracer = tracerSdkFactory.get("SpanShimTest"); + + SpanShim parentSpan = (SpanShim) new SpanBuilderShim(tracer, SPAN_NAME).start(); + try { + parentSpan.setBaggageItem("key1", "value1"); + + SpanShim childSpan = + (SpanShim) new SpanBuilderShim(tracer, SPAN_NAME).asChildOf(parentSpan).start(); + try { + assertThat(parentContextBaggage.get().getEntryValue("key1")).isEqualTo("value1"); + } finally { + childSpan.finish(); + } + } finally { + parentSpan.finish(); + } + } + @Test void baggage_parentContext() { SpanShim parentSpan = (SpanShim) new SpanBuilderShim(tracer, SPAN_NAME).start();