From 24cfda240ef0a78a7b8ef1dc32a0c9723aa57259 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Wed, 9 Nov 2022 13:40:35 +0100 Subject: [PATCH] fix(otel): Remove sampling decision in propagator (#6152) Previously the Sentry Propagator was setting the sample rate on the opentelemetry span context based on the incoming traceparent from `sentry-trace`. This is problematic because it a span is unsampled, it does not enter a span processor. This means that we could create transactions erroneously (for example, unnecessarily promote a child span to a transaction). --- packages/opentelemetry-node/src/propagator.ts | 4 ++-- packages/opentelemetry-node/src/spanprocessor.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/opentelemetry-node/src/propagator.ts b/packages/opentelemetry-node/src/propagator.ts index e028377a2dfa..3cb1171c8c8e 100644 --- a/packages/opentelemetry-node/src/propagator.ts +++ b/packages/opentelemetry-node/src/propagator.ts @@ -62,12 +62,12 @@ export class SentryPropagator implements TextMapPropagator { const traceparentData = extractTraceparentData(header); newContext = newContext.setValue(SENTRY_TRACE_PARENT_CONTEXT_KEY, traceparentData); if (traceparentData) { - const traceFlags = traceparentData.parentSampled ? TraceFlags.SAMPLED : TraceFlags.NONE; const spanContext = { traceId: traceparentData.traceId || '', spanId: traceparentData.parentSpanId || '', isRemote: true, - traceFlags, + // Always sample if traceparent exists, we use SentrySpanProcessor to make sampling decisions with `startTransaction`. + traceFlags: TraceFlags.SAMPLED, }; newContext = trace.setSpanContext(newContext, spanContext); } diff --git a/packages/opentelemetry-node/src/spanprocessor.ts b/packages/opentelemetry-node/src/spanprocessor.ts index b5556a72c9c2..ed9cfb44ca45 100644 --- a/packages/opentelemetry-node/src/spanprocessor.ts +++ b/packages/opentelemetry-node/src/spanprocessor.ts @@ -129,7 +129,7 @@ function getTraceData(otelSpan: OtelSpan, parentContext: Context): Partial | undefined; - return { + const context: Partial = { spanId, traceId, parentSpanId, @@ -139,6 +139,13 @@ function getTraceData(otelSpan: OtelSpan, parentContext: Context): Partial