Skip to content

Commit

Permalink
POTEL 61 - Tracing without Performance defer sampling decision (#3945)
Browse files Browse the repository at this point in the history
* bump OTel to 2.10.0

* support DB_QUERY_TEXT

* changelog

* change bom version for otel

* Replace OTel ContextStorage wrapper with ContextStorageProvider

* bump spring boot 3.4

* fix twp

* Use null sampled for TwP

* make todo url configurable

* Format code

* reverse configurable todo url

* changelog

---------

Co-authored-by: Sentry Github Bot <[email protected]>
  • Loading branch information
adinauer and getsentry-bot authored Dec 2, 2024
1 parent 254461b commit 53bf61a
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 17 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
- A `sentry-trace` header that only contains trace ID and span ID but no sampled flag (`-1`, `-0` suffix) means the receiving system can make its own sampling decision
- When generating `sentry-trace` header from `PropagationContext` we now copy the `sampled` flag.
- In `TransactionContext.fromPropagationContext` when there is no parent sampling decision, keep the decision `null` so a new sampling decision is made instead of defaulting to `false`
- Defer sampling decision by setting `sampled` to `null` in `PropagationContext` when using OpenTelemetry in case of an incoming defer sampling `sentry-trace` header. ([#3945](https://github.com/getsentry/sentry-java/pull/3945))

## 8.0.0-rc.1

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ public final class io/sentry/opentelemetry/OtelInternalSpanDetectionUtil {
public final class io/sentry/opentelemetry/OtelSamplingUtil {
public fun <init> ()V
public static fun extractSamplingDecision (Lio/opentelemetry/api/common/Attributes;)Lio/sentry/TracesSamplingDecision;
public static fun extractSamplingDecisionOrDefault (Lio/opentelemetry/api/common/Attributes;)Lio/sentry/TracesSamplingDecision;
}

public final class io/sentry/opentelemetry/OtelSentryPropagator : io/opentelemetry/context/propagation/TextMapPropagator {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,6 @@
@ApiStatus.Internal
public final class OtelSamplingUtil {

public static @NotNull TracesSamplingDecision extractSamplingDecisionOrDefault(
final @NotNull Attributes attributes) {
final @Nullable TracesSamplingDecision decision = extractSamplingDecision(attributes);
if (decision != null) {
return decision;
} else {
return new TracesSamplingDecision(false);
}
}

public static @Nullable TracesSamplingDecision extractSamplingDecision(
final @NotNull Attributes attributes) {
final @Nullable Boolean sampled = attributes.get(InternalSemanticAttributes.SAMPLED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri

final @Nullable IOtelSpanWrapper sentryParentSpan =
spanStorage.getSentrySpan(otelSpan.getParentSpanContext());
@NotNull
@Nullable
TracesSamplingDecision samplingDecision =
OtelSamplingUtil.extractSamplingDecisionOrDefault(otelSpan.toSpanData().getAttributes());
OtelSamplingUtil.extractSamplingDecision(otelSpan.toSpanData().getAttributes());
@Nullable Baggage baggage = null;
@Nullable SpanId sentryParentSpanId = null;
otelSpan.setAttribute(IS_REMOTE_PARENT, otelSpan.getParentSpanContext().isRemote());
Expand Down Expand Up @@ -81,10 +81,7 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri
}
}

final boolean sampled =
samplingDecision != null
? samplingDecision.getSampled()
: otelSpan.getSpanContext().isSampled();
final @Nullable Boolean sampled = isSampled(otelSpan, samplingDecision);

final @NotNull PropagationContext propagationContext =
sentryTraceHeader == null
Expand All @@ -111,6 +108,21 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri
spanStorage.storeSentrySpan(spanContext, sentrySpan);
}

private @Nullable Boolean isSampled(
final @NotNull ReadWriteSpan otelSpan,
final @Nullable TracesSamplingDecision samplingDecision) {
if (samplingDecision != null) {
return samplingDecision.getSampled();
}

if (otelSpan.getSpanContext().isSampled()) {
return true;
}

// tracing without performance
return null;
}

private static void updatePropagationContext(
IScopes scopes, PropagationContext propagationContext) {
scopes.configureScope(
Expand Down

0 comments on commit 53bf61a

Please sign in to comment.