Skip to content

Commit 90ac2ec

Browse files
committed
read sentry-trace header for sampled / non sampled TraceFlags
1 parent afc5ab4 commit 90ac2ec

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

sentry-opentelemetry/sentry-opentelemetry-otlp/src/main/java/io/sentry/opentelemetry/otlp/OpenTelemetryOtlpPropagator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,16 @@ public <C> Context extract(
9090
final Baggage baggage = Baggage.fromHeader(baggageString);
9191
final @NotNull TraceState traceState = TraceState.getDefault();
9292

93+
final @NotNull TraceFlags traceFlags =
94+
Boolean.FALSE.equals(sentryTraceHeader.isSampled())
95+
? TraceFlags.getDefault()
96+
: TraceFlags.getSampled();
97+
9398
SpanContext otelSpanContext =
9499
SpanContext.createFromRemoteParent(
95100
sentryTraceHeader.getTraceId().toString(),
96101
sentryTraceHeader.getSpanId().toString(),
97-
TraceFlags.getSampled(),
102+
traceFlags,
98103
traceState);
99104

100105
Span wrappedSpan = Span.wrap(otelSpanContext);

sentry-opentelemetry/sentry-opentelemetry-otlp/src/test/kotlin/OtelSentryPropagatorTest.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import io.sentry.Sentry
1212
import kotlin.test.BeforeTest
1313
import kotlin.test.Test
1414
import kotlin.test.assertEquals
15+
import kotlin.test.assertFalse
1516
import kotlin.test.assertNull
1617
import kotlin.test.assertTrue
1718

@@ -67,6 +68,32 @@ class OpenTelemetryOtlpPropagatorTest {
6768
)
6869
}
6970

71+
@Test
72+
fun `extract sets sampled trace flag when sentry-trace has sampled=0`() {
73+
val propagator = OpenTelemetryOtlpPropagator()
74+
val carrier: Map<String, String> =
75+
mapOf("sentry-trace" to "f9118105af4a2d42b4124532cd1065ff-424cffc8f94feeee-0")
76+
val newContext = propagator.extract(Context.root(), carrier, MapGetter())
77+
78+
val span = Span.fromContext(newContext)
79+
assertEquals("f9118105af4a2d42b4124532cd1065ff", span.spanContext.traceId)
80+
assertEquals("424cffc8f94feeee", span.spanContext.spanId)
81+
assertFalse(span.spanContext.isSampled)
82+
}
83+
84+
@Test
85+
fun `extract sets sampled trace flag when sentry-trace has no sampling decision`() {
86+
val propagator = OpenTelemetryOtlpPropagator()
87+
val carrier: Map<String, String> =
88+
mapOf("sentry-trace" to "f9118105af4a2d42b4124532cd1065ff-424cffc8f94feeee")
89+
val newContext = propagator.extract(Context.root(), carrier, MapGetter())
90+
91+
val span = Span.fromContext(newContext)
92+
assertEquals("f9118105af4a2d42b4124532cd1065ff", span.spanContext.traceId)
93+
assertEquals("424cffc8f94feeee", span.spanContext.spanId)
94+
assertTrue(span.spanContext.isSampled)
95+
}
96+
7097
@Test
7198
fun `injects headers`() {
7299
val propagator = OpenTelemetryOtlpPropagator()

0 commit comments

Comments
 (0)