diff --git a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/OtTracerPropagator.java b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/OtTracerPropagator.java index 499ca4fc74..210c84cc19 100644 --- a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/OtTracerPropagator.java +++ b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/OtTracerPropagator.java @@ -58,7 +58,12 @@ public final class OtTracerPropagator implements TextMapPropagator { if (!spanContext.isValid()) { return; } - setter.set(carrier, TRACE_ID_HEADER, spanContext.getTraceIdAsHexString()); + // Lightstep trace id MUST be 64-bits therefore OpenTelemetry trace id is truncated to 64-bits + // by retaining least significant (right-most) bits. + setter.set( + carrier, + TRACE_ID_HEADER, + spanContext.getTraceIdAsHexString().substring(TraceId.getHexLength() / 2)); setter.set(carrier, SPAN_ID_HEADER, spanContext.getSpanIdAsHexString()); setter.set(carrier, SAMPLED_HEADER, String.valueOf(spanContext.isSampled())); } diff --git a/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/OtTracerPropagatorTest.java b/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/OtTracerPropagatorTest.java index e2f0ea8424..8ee1347147 100644 --- a/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/OtTracerPropagatorTest.java +++ b/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/OtTracerPropagatorTest.java @@ -27,6 +27,7 @@ class OtTracerPropagatorTest { private static final TraceState TRACE_STATE_DEFAULT = TraceState.builder().build(); private static final String TRACE_ID = "ff000000000000000000000000000041"; + private static final String TRACE_ID_RIGHT_PART = "0000000000000041"; private static final String SHORT_TRACE_ID = "ff00000000000000"; private static final String SHORT_TRACE_ID_FULL = "0000000000000000ff00000000000000"; private static final String SPAN_ID = "ff00000000000041"; @@ -80,7 +81,7 @@ class OtTracerPropagatorTest { Context.current()), carrier, setter); - assertThat(carrier).containsEntry(OtTracerPropagator.TRACE_ID_HEADER, TRACE_ID); + assertThat(carrier).containsEntry(OtTracerPropagator.TRACE_ID_HEADER, TRACE_ID_RIGHT_PART); assertThat(carrier).containsEntry(OtTracerPropagator.SPAN_ID_HEADER, SPAN_ID); assertThat(carrier).containsEntry(OtTracerPropagator.SAMPLED_HEADER, "true"); } @@ -94,7 +95,7 @@ class OtTracerPropagatorTest { Context.current()), null, (Setter>) (ignored, key, value) -> carrier.put(key, value)); - assertThat(carrier).containsEntry(OtTracerPropagator.TRACE_ID_HEADER, TRACE_ID); + assertThat(carrier).containsEntry(OtTracerPropagator.TRACE_ID_HEADER, TRACE_ID_RIGHT_PART); assertThat(carrier).containsEntry(OtTracerPropagator.SPAN_ID_HEADER, SPAN_ID); assertThat(carrier).containsEntry(OtTracerPropagator.SAMPLED_HEADER, "true"); } @@ -108,7 +109,7 @@ class OtTracerPropagatorTest { Context.current()), carrier, setter); - assertThat(carrier).containsEntry(OtTracerPropagator.TRACE_ID_HEADER, TRACE_ID); + assertThat(carrier).containsEntry(OtTracerPropagator.TRACE_ID_HEADER, TRACE_ID_RIGHT_PART); assertThat(carrier).containsEntry(OtTracerPropagator.SPAN_ID_HEADER, SPAN_ID); assertThat(carrier).containsEntry(OtTracerPropagator.SAMPLED_HEADER, "false"); }