From 56802d6b950789ecfed1e3b3e28032b0c883c388 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 7 Apr 2025 14:49:36 -0400 Subject: [PATCH 01/18] saving work --- .../context/ThreadLocalContextManager.java | 2 ++ .../propagation/CompositePropagator.java | 2 ++ .../decorator/HttpServerDecorator.java | 12 +++++++ .../okhttp3/TracingInterceptor.java | 27 +++++++++++++-- .../tomcat/TomcatServerInstrumentation.java | 33 +++++++++++++++++-- .../trace/core/baggage/BaggagePropagator.java | 11 ++++--- .../trace/core/propagation/HttpCodec.java | 6 ++-- .../core/scopemanager/ContinuableScope.java | 1 + .../scopemanager/ContinuableScopeManager.java | 3 +- .../main/java/datadog/trace/api/Config.java | 4 +-- .../instrumentation/api/AgentPropagation.java | 2 ++ 11 files changed, 89 insertions(+), 14 deletions(-) diff --git a/components/context/src/main/java/datadog/context/ThreadLocalContextManager.java b/components/context/src/main/java/datadog/context/ThreadLocalContextManager.java index 27c17445d14..d9f964c8733 100644 --- a/components/context/src/main/java/datadog/context/ThreadLocalContextManager.java +++ b/components/context/src/main/java/datadog/context/ThreadLocalContextManager.java @@ -15,6 +15,8 @@ public ContextScope attach(Context context) { Context[] holder = CURRENT_HOLDER.get(); Context previous = holder[0]; holder[0] = context; + + System.out.println("ThreadLocalContextManager"); return new ContextScope() { private boolean closed; diff --git a/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java b/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java index 9484b2a8054..04cbdca777f 100644 --- a/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java +++ b/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java @@ -27,7 +27,9 @@ public Context extract(Context context, C carrier, CarrierVisitor visitor // Run the multiple extractions on cache for (Propagator propagator : this.propagators) { context = propagator.extract(context, carrierCache, carrierCache); + } + System.out.println("Context after composite propagator: " + context); return context; } diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java index 29e33a3dd8c..e5b6ff931f7 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java @@ -8,6 +8,8 @@ import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.DDTags; import datadog.trace.api.function.TriConsumer; @@ -132,6 +134,16 @@ public AgentSpanContext.Extracted extract(REQUEST_CARRIER carrier) { return extractContextAndGetSpanContext(carrier, getter); } + public Context extract(REQUEST_CARRIER carrier, boolean temp) { + AgentPropagation.ContextVisitor getter = getter(); + if (null == carrier || null == getter) { + return null; + } + Context context = Propagators.defaultPropagator().extract(Context.root(), carrier, getter); + System.out.println("context in extract: " + context); + return context; + } + /** Deprecated. Use {@link #startSpan(String, Object, AgentSpanContext.Extracted)} instead. */ @Deprecated public AgentSpan startSpan(REQUEST_CARRIER carrier, AgentSpanContext.Extracted context) { diff --git a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java index fa9b076cae8..2c1bd27d22c 100644 --- a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java +++ b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java @@ -8,10 +8,15 @@ import static datadog.trace.instrumentation.okhttp3.OkHttpClientDecorator.OKHTTP_REQUEST; import static datadog.trace.instrumentation.okhttp3.RequestBuilderInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; + +import datadog.trace.bootstrap.instrumentation.api.Baggage; +import datadog.trace.core.scopemanager.ContinuableScopeManager; + import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; @@ -23,15 +28,33 @@ public Response intercept(final Chain chain) throws IOException { return chain.proceed(chain.request()); } + System.out.println("before activateSpan: " + Context.current().getClass()); final AgentSpan span = startSpan("okhttp", OKHTTP_REQUEST); - try (final AgentScope scope = activateSpan(span)) { + System.out.println("AgentScope: " + scope.getClass()); + System.out.println("scope.context(): " + scope.context().getClass()); + System.out.print("Context.current(): "); + System.out.println(Context.current()==Context.root()); + System.out.println(Context.current().getClass()); DECORATE.afterStart(span); DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), requestBuilder, SETTER); + +// if(scope instanceof ContinuableScope){ +// +// } + Context context = span.with(dsmContext); + Baggage baggage = Baggage.fromContext(Context.current()); + if(baggage != null){ + System.out.println("Baggage: " + baggage.getW3cHeader()); + }else{ + System.out.println("null baggage"); + } + System.out.println("span: " + span); + System.out.println("span.with(baggage): " + span.with(baggage)); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), requestBuilder, SETTER); final Response response; try { diff --git a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java index 3ae2690d000..03850657cba 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java @@ -12,6 +12,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.ExcludeFilterProvider; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; @@ -19,10 +21,12 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.api.gateway.Flow; +import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.Baggage; import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter; import java.util.Arrays; import java.util.Collection; @@ -122,16 +126,39 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request return activateSpan((AgentSpan) existingSpan); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); + final Context extractedContext = DECORATE.extract(req, true); + AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + + req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedSpanContext); + + final AgentSpan span = DECORATE.startSpan(req, extractedSpanContext); +// extractedContext.with(span); + + System.out.println("ExtractedContext: " + extractedContext); + Baggage baggage = Baggage.fromContext(extractedContext); + if(baggage != null) { + System.out.println("Extracted Baggage: " + baggage.getW3cHeader()); + } + final ContextScope contextScope = extractedContext.attach(); + System.out.println("Context Scope: " + contextScope); + System.out.print("after attach: "); + System.out.println(Context.current().getClass()); - final AgentSpan span = DECORATE.startSpan(req, extractedContext); final AgentScope scope = activateSpan(span); + System.out.println("Scope: " + scope); + + // This span is finished when Request.recycle() is called by RequestInstrumentation. +// System.out.println("DECORATE.afterStart(span);"); DECORATE.afterStart(span); +// System.out.println("req.setAttribute(DD_SPAN_ATTRIBUTE, span);"); req.setAttribute(DD_SPAN_ATTRIBUTE, span); + +// System.out.println("req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId());"); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); +// System.out.println("req.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId());"); req.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); return scope; } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java index b7d32e7b9ea..851f2645fe8 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java @@ -61,10 +61,11 @@ public void inject(Context context, C carrier, CarrierSetter setter) { } String headerValue = baggage.getW3cHeader(); - if (headerValue != null) { - setter.set(carrier, BAGGAGE_KEY, headerValue); - return; - } +// if (headerValue != null) { +// System.out.println("Returning cached value immediately"); +// setter.set(carrier, BAGGAGE_KEY, headerValue); +// return; +// }e int processedItems = 0; int currentBytes = 0; @@ -162,6 +163,8 @@ private Map parseBaggageHeaders(String input) { @Override public void accept(String key, String value) { + System.out.println("key: " + key + " ;value: " + value); + // Only process tags that are relevant to baggage if (BAGGAGE_KEY.equalsIgnoreCase(key)) { Map baggage = parseBaggageHeaders(value); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java index 9835d2e1c03..08a3b03d38a 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java @@ -139,6 +139,7 @@ public static Extractor createExtractor( Config config, Supplier traceConfigSupplier) { final List extractors = new ArrayList<>(); for (final TracePropagationStyle style : config.getTracePropagationStylesToExtract()) { + System.out.println("TracePropagationStyle: " + style); switch (style) { case DATADOG: extractors.add(DatadogHttpCodec.newExtractor(config, traceConfigSupplier)); @@ -221,7 +222,8 @@ public TagContext extract( TagContext partialContext = null; // Extract and cache all headers in advance ExtractionCache extractionCache = new ExtractionCache<>(carrier, getter); - + System.out.println("extractors size: " + this.extractors.size()); + System.out.println("extractors size: " + this.extractors); for (final Extractor extractor : this.extractors) { TagContext extracted = extractor.extract(extractionCache, extractionCache); // Check if context is valid @@ -260,7 +262,7 @@ else if (extracted != null && partialContext == null) { partialContext = extracted; } } - + System.out.println("CompoundExtractor context: " + context); if (context != null) { log.debug("Extract complete context {}", context); return context; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java index 8451f914405..9b53190fead 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java @@ -127,6 +127,7 @@ public final AgentSpan span() { @Override public Context context() { + System.out.println("Coming here"); return context; } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java index 82208e13e41..2e82166ccfa 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java @@ -182,12 +182,13 @@ private AgentScope activate(final Context context) { // Inherit the async propagation from the active scope boolean asyncPropagation = top != null ? top.isAsyncPropagating() : DEFAULT_ASYNC_PROPAGATING; - + System.out.println("context in activate: " + context); final ContinuableScope scope = new ContinuableScope(this, context, CONTEXT, asyncPropagation, createScopeState(context)); scopeStack.push(scope); healthMetrics.onActivateScope(); + System.out.println("ContinuableScopeManager"); return scope; } diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index d6526b29716..6dcf1d9dfc0 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -2369,11 +2369,11 @@ public boolean isTracePropagationExtractFirst() { } public boolean isBaggageExtract() { - return tracePropagationStylesToExtract.contains(TracePropagationStyle.BAGGAGE); + return tracePropagationStylesToExtract.contains(TracePropagationStyle.BAGGAGE) && tracePropagationBehaviorExtract != TracePropagationBehaviorExtract.IGNORE; } public boolean isBaggageInject() { - return tracePropagationStylesToInject.contains(TracePropagationStyle.BAGGAGE); + return tracePropagationStylesToInject.contains(TracePropagationStyle.BAGGAGE) && tracePropagationBehaviorExtract != TracePropagationBehaviorExtract.IGNORE; } public boolean isBaggagePropagationEnabled() { diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java index a25c0abfee5..f572a27074e 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java @@ -9,6 +9,7 @@ import datadog.context.propagation.Propagators; import java.util.function.BiConsumer; import javax.annotation.ParametersAreNonnullByDefault; +import javax.swing.*; public final class AgentPropagation { public static final Concern TRACING_CONCERN = named("tracing"); @@ -43,6 +44,7 @@ default void forEachKeyValue(C carrier, BiConsumer visitor) { forEachKey( carrier, (key, value) -> { + System.out.println("carrier key: " + key + " value: " + value); visitor.accept(key, value); return true; }); From ff0a3be40e2a5a78a0655da77b8bcc489bb5ce3b Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 9 Apr 2025 16:49:06 -0400 Subject: [PATCH 02/18] accomadating baggage --- .../propagation/CompositePropagator.java | 2 +- .../tomcat/TomcatServerInstrumentation.java | 24 +++++++++---------- .../core/propagation/TracingPropagator.java | 2 ++ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java b/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java index 04cbdca777f..3a3ca6403f2 100644 --- a/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java +++ b/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java @@ -27,7 +27,7 @@ public Context extract(Context context, C carrier, CarrierVisitor visitor // Run the multiple extractions on cache for (Propagator propagator : this.propagators) { context = propagator.extract(context, carrierCache, carrierCache); - + System.out.println("Propagator: " + propagator + " context: " + context); } System.out.println("Context after composite propagator: " + context); return context; diff --git a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java index 03850657cba..41300f57724 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java @@ -133,32 +133,30 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedSpanContext); final AgentSpan span = DECORATE.startSpan(req, extractedSpanContext); +// System.out.println("span.getContext: " + ) // extractedContext.with(span); System.out.println("ExtractedContext: " + extractedContext); - Baggage baggage = Baggage.fromContext(extractedContext); - if(baggage != null) { - System.out.println("Extracted Baggage: " + baggage.getW3cHeader()); + Baggage baggage = Baggage.fromContext(extractedContext); //what if there were other contexts + final AgentScope scope; + if(baggage == null){ + scope = activateSpan(span); + }else { + extractedContext.with(span); + scope = (AgentScope) extractedContext.attach(); } - final ContextScope contextScope = extractedContext.attach(); - System.out.println("Context Scope: " + contextScope); +// final AgentScope contextScope = (AgentScope) extractedContext.attach(); +// System.out.println("Context Scope: " + contextScope); System.out.print("after attach: "); - System.out.println(Context.current().getClass()); - - final AgentScope scope = activateSpan(span); System.out.println("Scope: " + scope); - + System.out.println(Context.current().getClass()); // This span is finished when Request.recycle() is called by RequestInstrumentation. -// System.out.println("DECORATE.afterStart(span);"); DECORATE.afterStart(span); -// System.out.println("req.setAttribute(DD_SPAN_ATTRIBUTE, span);"); req.setAttribute(DD_SPAN_ATTRIBUTE, span); -// System.out.println("req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId());"); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); -// System.out.println("req.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId());"); req.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); return scope; } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/TracingPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/TracingPropagator.java index 89bb8ea5d59..88be6aa549b 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/propagation/TracingPropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/propagation/TracingPropagator.java @@ -65,7 +65,9 @@ public Context extract(Context context, C carrier, CarrierVisitor visitor if (context == null || carrier == null || visitor == null) { return context; } + System.out.println("before httpcodec extract"); TagContext spanContext = this.extractor.extract(carrier, toContextVisitor(visitor)); + System.out.println("span context post tracing extract: " + spanContext); // If the extraction fails, return the original context if (spanContext == null) { return context; From 2ea2788fcfcef336349f57458087629d35d47078 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 15 Apr 2025 12:54:36 -0400 Subject: [PATCH 03/18] cleanup comments --- .../trace/instrumentation/okhttp3/TracingInterceptor.java | 4 ---- .../instrumentation/tomcat/TomcatServerInstrumentation.java | 4 ---- 2 files changed, 8 deletions(-) diff --git a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java index 2c1bd27d22c..6e78836285e 100644 --- a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java +++ b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java @@ -42,10 +42,6 @@ public Response intercept(final Chain chain) throws IOException { final Request.Builder requestBuilder = chain.request().newBuilder(); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); -// if(scope instanceof ContinuableScope){ -// -// } - Context context = span.with(dsmContext); Baggage baggage = Baggage.fromContext(Context.current()); if(baggage != null){ System.out.println("Baggage: " + baggage.getW3cHeader()); diff --git a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java index 41300f57724..1a6c6911a86 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java @@ -133,8 +133,6 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedSpanContext); final AgentSpan span = DECORATE.startSpan(req, extractedSpanContext); -// System.out.println("span.getContext: " + ) -// extractedContext.with(span); System.out.println("ExtractedContext: " + extractedContext); Baggage baggage = Baggage.fromContext(extractedContext); //what if there were other contexts @@ -145,8 +143,6 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request extractedContext.with(span); scope = (AgentScope) extractedContext.attach(); } -// final AgentScope contextScope = (AgentScope) extractedContext.attach(); -// System.out.println("Context Scope: " + contextScope); System.out.print("after attach: "); System.out.println("Scope: " + scope); System.out.println(Context.current().getClass()); From 210aebee53e11fb12853c2100bc319a2b6e24d0e Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 15 Apr 2025 14:32:45 -0400 Subject: [PATCH 04/18] saving context value --- .../okhttp3/TracingInterceptor.java | 14 -------------- .../tomcat/TomcatServerInstrumentation.java | 14 ++------------ 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java index 6e78836285e..1434b56d367 100644 --- a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java +++ b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java @@ -28,28 +28,14 @@ public Response intercept(final Chain chain) throws IOException { return chain.proceed(chain.request()); } - System.out.println("before activateSpan: " + Context.current().getClass()); final AgentSpan span = startSpan("okhttp", OKHTTP_REQUEST); try (final AgentScope scope = activateSpan(span)) { - System.out.println("AgentScope: " + scope.getClass()); - System.out.println("scope.context(): " + scope.context().getClass()); - System.out.print("Context.current(): "); - System.out.println(Context.current()==Context.root()); - System.out.println(Context.current().getClass()); DECORATE.afterStart(span); DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - Baggage baggage = Baggage.fromContext(Context.current()); - if(baggage != null){ - System.out.println("Baggage: " + baggage.getW3cHeader()); - }else{ - System.out.println("null baggage"); - } - System.out.println("span: " + span); - System.out.println("span.with(baggage): " + span.with(baggage)); defaultPropagator().inject(Context.current().with(span).with(dsmContext), requestBuilder, SETTER); final Response response; diff --git a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java index 1a6c6911a86..6f63c2f7d1a 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java @@ -134,18 +134,8 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request final AgentSpan span = DECORATE.startSpan(req, extractedSpanContext); - System.out.println("ExtractedContext: " + extractedContext); - Baggage baggage = Baggage.fromContext(extractedContext); //what if there were other contexts - final AgentScope scope; - if(baggage == null){ - scope = activateSpan(span); - }else { - extractedContext.with(span); - scope = (AgentScope) extractedContext.attach(); - } - System.out.print("after attach: "); - System.out.println("Scope: " + scope); - System.out.println(Context.current().getClass()); + final Context finalContext = extractedContext.with(span); + final AgentScope scope = (AgentScope) finalContext.attach(); // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); From 2fe727e490162d1a04908d54cb11542cea3a0cd2 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 15 Apr 2025 14:40:24 -0400 Subject: [PATCH 05/18] nit changes --- .../datadog/context/ThreadLocalContextManager.java | 2 -- .../decorator/HttpServerDecorator.java | 1 - .../instrumentation/okhttp3/TracingInterceptor.java | 1 + .../tomcat/TomcatServerInstrumentation.java | 1 - .../datadog/trace/core/baggage/BaggagePropagator.java | 11 ++++------- .../datadog/trace/core/propagation/HttpCodec.java | 4 ---- .../trace/core/propagation/TracingPropagator.java | 2 -- .../trace/core/scopemanager/ContinuableScope.java | 1 - .../core/scopemanager/ContinuableScopeManager.java | 3 +-- .../instrumentation/api/AgentPropagation.java | 2 -- 10 files changed, 6 insertions(+), 22 deletions(-) diff --git a/components/context/src/main/java/datadog/context/ThreadLocalContextManager.java b/components/context/src/main/java/datadog/context/ThreadLocalContextManager.java index d9f964c8733..27c17445d14 100644 --- a/components/context/src/main/java/datadog/context/ThreadLocalContextManager.java +++ b/components/context/src/main/java/datadog/context/ThreadLocalContextManager.java @@ -15,8 +15,6 @@ public ContextScope attach(Context context) { Context[] holder = CURRENT_HOLDER.get(); Context previous = holder[0]; holder[0] = context; - - System.out.println("ThreadLocalContextManager"); return new ContextScope() { private boolean closed; diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java index e5b6ff931f7..5d7d7d454d7 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java @@ -140,7 +140,6 @@ public Context extract(REQUEST_CARRIER carrier, boolean temp) { return null; } Context context = Propagators.defaultPropagator().extract(Context.root(), carrier, getter); - System.out.println("context in extract: " + context); return context; } diff --git a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java index 1434b56d367..589f4a0703b 100644 --- a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java +++ b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java @@ -29,6 +29,7 @@ public Response intercept(final Chain chain) throws IOException { } final AgentSpan span = startSpan("okhttp", OKHTTP_REQUEST); + try (final AgentScope scope = activateSpan(span)) { DECORATE.afterStart(span); DECORATE.onRequest(span, chain.request()); diff --git a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java index 6f63c2f7d1a..7b03f69eafc 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java @@ -141,7 +141,6 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request DECORATE.afterStart(span); req.setAttribute(DD_SPAN_ATTRIBUTE, span); - req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); req.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); return scope; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java index 851f2645fe8..b7d32e7b9ea 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java @@ -61,11 +61,10 @@ public void inject(Context context, C carrier, CarrierSetter setter) { } String headerValue = baggage.getW3cHeader(); -// if (headerValue != null) { -// System.out.println("Returning cached value immediately"); -// setter.set(carrier, BAGGAGE_KEY, headerValue); -// return; -// }e + if (headerValue != null) { + setter.set(carrier, BAGGAGE_KEY, headerValue); + return; + } int processedItems = 0; int currentBytes = 0; @@ -163,8 +162,6 @@ private Map parseBaggageHeaders(String input) { @Override public void accept(String key, String value) { - System.out.println("key: " + key + " ;value: " + value); - // Only process tags that are relevant to baggage if (BAGGAGE_KEY.equalsIgnoreCase(key)) { Map baggage = parseBaggageHeaders(value); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java index 08a3b03d38a..19b3df2ce53 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java @@ -139,7 +139,6 @@ public static Extractor createExtractor( Config config, Supplier traceConfigSupplier) { final List extractors = new ArrayList<>(); for (final TracePropagationStyle style : config.getTracePropagationStylesToExtract()) { - System.out.println("TracePropagationStyle: " + style); switch (style) { case DATADOG: extractors.add(DatadogHttpCodec.newExtractor(config, traceConfigSupplier)); @@ -222,8 +221,6 @@ public TagContext extract( TagContext partialContext = null; // Extract and cache all headers in advance ExtractionCache extractionCache = new ExtractionCache<>(carrier, getter); - System.out.println("extractors size: " + this.extractors.size()); - System.out.println("extractors size: " + this.extractors); for (final Extractor extractor : this.extractors) { TagContext extracted = extractor.extract(extractionCache, extractionCache); // Check if context is valid @@ -262,7 +259,6 @@ else if (extracted != null && partialContext == null) { partialContext = extracted; } } - System.out.println("CompoundExtractor context: " + context); if (context != null) { log.debug("Extract complete context {}", context); return context; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/TracingPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/TracingPropagator.java index 88be6aa549b..89bb8ea5d59 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/propagation/TracingPropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/propagation/TracingPropagator.java @@ -65,9 +65,7 @@ public Context extract(Context context, C carrier, CarrierVisitor visitor if (context == null || carrier == null || visitor == null) { return context; } - System.out.println("before httpcodec extract"); TagContext spanContext = this.extractor.extract(carrier, toContextVisitor(visitor)); - System.out.println("span context post tracing extract: " + spanContext); // If the extraction fails, return the original context if (spanContext == null) { return context; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java index 9b53190fead..8451f914405 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java @@ -127,7 +127,6 @@ public final AgentSpan span() { @Override public Context context() { - System.out.println("Coming here"); return context; } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java index 2e82166ccfa..82208e13e41 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java @@ -182,13 +182,12 @@ private AgentScope activate(final Context context) { // Inherit the async propagation from the active scope boolean asyncPropagation = top != null ? top.isAsyncPropagating() : DEFAULT_ASYNC_PROPAGATING; - System.out.println("context in activate: " + context); + final ContinuableScope scope = new ContinuableScope(this, context, CONTEXT, asyncPropagation, createScopeState(context)); scopeStack.push(scope); healthMetrics.onActivateScope(); - System.out.println("ContinuableScopeManager"); return scope; } diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java index f572a27074e..a25c0abfee5 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java @@ -9,7 +9,6 @@ import datadog.context.propagation.Propagators; import java.util.function.BiConsumer; import javax.annotation.ParametersAreNonnullByDefault; -import javax.swing.*; public final class AgentPropagation { public static final Concern TRACING_CONCERN = named("tracing"); @@ -44,7 +43,6 @@ default void forEachKeyValue(C carrier, BiConsumer visitor) { forEachKey( carrier, (key, value) -> { - System.out.println("carrier key: " + key + " value: " + value); visitor.accept(key, value); return true; }); From 6bc47ce5074045a5b20ae6722d9fec002ab25243 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 16 Apr 2025 10:16:32 -0400 Subject: [PATCH 06/18] supporting serverside-instrumentations --- .../decorator/HttpServerDecorator.java | 10 +--------- .../akkahttp/DatadogWrapperHelper.java | 11 +++++++---- .../functions/AzureFunctionsInstrumentation.java | 12 ++++++++---- .../GrizzlyHttpHandlerInstrumentation.java | 13 ++++++++----- .../grizzlyhttp232/GrizzlyDecorator.java | 12 ++++++++---- .../jetty11/JettyServerAdvice.java | 11 +++++++---- .../jetty12/JettyServerAdvice.java | 11 +++++++---- .../jetty70/JettyServerInstrumentation.java | 11 +++++++---- .../jetty76/JettyServerInstrumentation.java | 11 +++++++---- .../jetty9/JettyServerInstrumentation.java | 11 +++++++---- .../instrumentation/jetty10/HandleAdvice.java | 11 +++++++---- .../liberty20/LibertyServerInstrumentation.java | 11 +++++++---- .../liberty23/LibertyServerInstrumentation.java | 11 +++++++---- .../server/HttpServerRequestTracingHandler.java | 11 +++++++---- .../server/HttpServerRequestTracingHandler.java | 11 +++++++---- .../server/HttpServerRequestTracingHandler.java | 11 +++++++---- .../pekkohttp/DatadogWrapperHelper.java | 11 +++++++---- .../trace/instrumentation/play23/PlayAdvice.java | 16 +++++++++++++--- .../trace/instrumentation/play24/PlayAdvice.java | 16 +++++++++++++--- .../trace/instrumentation/play26/PlayAdvice.java | 16 +++++++++++++--- .../tomcat/TomcatServerInstrumentation.java | 12 ++++-------- 21 files changed, 159 insertions(+), 91 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java index 5d7d7d454d7..b0dfc039f40 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java @@ -126,15 +126,7 @@ protected AgentTracer.TracerAPI tracer() { return AgentTracer.get(); } - public AgentSpanContext.Extracted extract(REQUEST_CARRIER carrier) { - AgentPropagation.ContextVisitor getter = getter(); - if (null == carrier || null == getter) { - return null; - } - return extractContextAndGetSpanContext(carrier, getter); - } - - public Context extract(REQUEST_CARRIER carrier, boolean temp) { + public Context extract(REQUEST_CARRIER carrier) { AgentPropagation.ContextVisitor getter = getter(); if (null == carrier || null == getter) { return null; diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogWrapperHelper.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogWrapperHelper.java index a339eff7542..6f742756f19 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogWrapperHelper.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogWrapperHelper.java @@ -5,18 +5,21 @@ import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; public class DatadogWrapperHelper { public static AgentScope createSpan(final HttpRequest request) { - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); - final AgentSpan span = DECORATE.startSpan(request, extractedContext); + final Context extractedContext = DECORATE.extract(request); + AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedSpanContext); - return activateSpan(span); + return (AgentScope) extractedContext.with(span).attach(); } public static void finishSpan(final AgentSpan span, final HttpResponse response) { diff --git a/dd-java-agent/instrumentation/azure-functions/src/main/java/datadog/trace/instrumentation/azure/functions/AzureFunctionsInstrumentation.java b/dd-java-agent/instrumentation/azure-functions/src/main/java/datadog/trace/instrumentation/azure/functions/AzureFunctionsInstrumentation.java index 604b5d77c42..fd848c4466d 100644 --- a/dd-java-agent/instrumentation/azure-functions/src/main/java/datadog/trace/instrumentation/azure/functions/AzureFunctionsInstrumentation.java +++ b/dd-java-agent/instrumentation/azure-functions/src/main/java/datadog/trace/instrumentation/azure/functions/AzureFunctionsInstrumentation.java @@ -14,6 +14,7 @@ import com.microsoft.azure.functions.ExecutionContext; import com.microsoft.azure.functions.HttpRequestMessage; import com.microsoft.azure.functions.HttpResponseMessage; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -67,13 +68,16 @@ public static class AzureFunctionsAdvice { public static AgentScope methodEnter( @Advice.Argument(0) final HttpRequestMessage request, @Advice.Argument(1) final ExecutionContext context) { - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); - final AgentSpan span = DECORATE.startSpan(request, extractedContext); + final Context extractedContext = DECORATE.extract(request); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + + final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); DECORATE.afterStart(span, context.getFunctionName()); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedSpanContext); HTTP_RESOURCE_DECORATOR.withRoute( span, request.getHttpMethod().name(), request.getUri().getPath()); - return activateSpan(span); + return (AgentScope) extractedContext.with(span).attach(); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/grizzly-2/src/main/java/datadog/trace/instrumentation/grizzly/GrizzlyHttpHandlerInstrumentation.java b/dd-java-agent/instrumentation/grizzly-2/src/main/java/datadog/trace/instrumentation/grizzly/GrizzlyHttpHandlerInstrumentation.java index f556f9bf920..9b4ecd59c0d 100644 --- a/dd-java-agent/instrumentation/grizzly-2/src/main/java/datadog/trace/instrumentation/grizzly/GrizzlyHttpHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly-2/src/main/java/datadog/trace/instrumentation/grizzly/GrizzlyHttpHandlerInstrumentation.java @@ -8,6 +8,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.CorrelationIdentifier; @@ -73,12 +74,14 @@ public static class HandleAdvice { return false; } - final AgentSpanContext.Extracted parentContext = DECORATE.extract(request); - final AgentSpan span = DECORATE.startSpan(request, parentContext); - DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, parentContext); + final Context extractedContext = DECORATE.extract(request); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); - scope = activateSpan(span); + final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); + DECORATE.afterStart(span); + DECORATE.onRequest(span, request, request, extractedSpanContext); + scope = (AgentScope) extractedContext.with(span).attach(); request.setAttribute(DD_SPAN_ATTRIBUTE, span); request.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); diff --git a/dd-java-agent/instrumentation/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java b/dd-java-agent/instrumentation/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java index 1f8029a0940..cacc50e2171 100644 --- a/dd-java-agent/instrumentation/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java +++ b/dd-java-agent/instrumentation/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java @@ -3,6 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import datadog.appsec.api.blocking.BlockingContentType; +import datadog.context.Context; import datadog.trace.api.gateway.BlockResponseFunction; import datadog.trace.api.gateway.Flow; import datadog.trace.api.gateway.RequestContext; @@ -114,13 +115,16 @@ public static NextAction onHttpCodecFilterExit( } HttpRequestPacket httpRequest = (HttpRequestPacket) httpHeader; HttpResponsePacket httpResponse = httpRequest.getResponse(); - AgentSpanContext.Extracted context = DECORATE.extract(httpRequest); - AgentSpan span = DECORATE.startSpan(httpRequest, context); - AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(httpRequest); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + + AgentSpan span = DECORATE.startSpan(httpRequest, extractedSpanContext); + AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); ctx.getAttributes().setAttribute(DD_SPAN_ATTRIBUTE, span); ctx.getAttributes().setAttribute(DD_RESPONSE_ATTRIBUTE, httpResponse); - DECORATE.onRequest(span, httpRequest, httpRequest, context); + DECORATE.onRequest(span, httpRequest, httpRequest, extractedSpanContext); Flow.Action.RequestBlockingAction rba = span.getRequestBlockingAction(); if (rba != null && thiz instanceof HttpServerFilter) { diff --git a/dd-java-agent/instrumentation/jetty-11/src/main/java11/datadog/trace/instrumentation/jetty11/JettyServerAdvice.java b/dd-java-agent/instrumentation/jetty-11/src/main/java11/datadog/trace/instrumentation/jetty11/JettyServerAdvice.java index 61c4e9be271..622f8b06b9d 100644 --- a/dd-java-agent/instrumentation/jetty-11/src/main/java11/datadog/trace/instrumentation/jetty11/JettyServerAdvice.java +++ b/dd-java-agent/instrumentation/jetty-11/src/main/java11/datadog/trace/instrumentation/jetty11/JettyServerAdvice.java @@ -4,6 +4,7 @@ import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.jetty11.JettyDecorator.DECORATE; +import datadog.context.Context; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -26,12 +27,14 @@ public static AgentScope onEnter( return activateSpan((AgentSpan) existingSpan); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); - final AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(req); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(req, extractedSpanContext); + final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); span.setMeasured(true); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedSpanContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); diff --git a/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/JettyServerAdvice.java b/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/JettyServerAdvice.java index 11b31cdffca..1af98be1801 100644 --- a/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/JettyServerAdvice.java +++ b/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/JettyServerAdvice.java @@ -3,6 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; +import datadog.context.Context; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -28,12 +29,14 @@ public static void onExit( } } - final AgentSpanContext.Extracted extractedContext = JettyDecorator.DECORATE.extract(req); - final AgentSpan span = JettyDecorator.DECORATE.startSpan(req, extractedContext); - try (final AgentScope scope = activateSpan(span)) { + final Context extractedContext = JettyDecorator.DECORATE.extract(req); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpan span = JettyDecorator.DECORATE.startSpan(req, extractedSpanContext); + try (final AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { span.setMeasured(true); JettyDecorator.DECORATE.afterStart(span); - JettyDecorator.DECORATE.onRequest(span, req, req, extractedContext); + JettyDecorator.DECORATE.onRequest(span, req, req, extractedSpanContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); diff --git a/dd-java-agent/instrumentation/jetty-7.0/src/main/java/datadog/trace/instrumentation/jetty70/JettyServerInstrumentation.java b/dd-java-agent/instrumentation/jetty-7.0/src/main/java/datadog/trace/instrumentation/jetty70/JettyServerInstrumentation.java index e8a9e449963..0507f5b6594 100644 --- a/dd-java-agent/instrumentation/jetty-7.0/src/main/java/datadog/trace/instrumentation/jetty70/JettyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-7.0/src/main/java/datadog/trace/instrumentation/jetty70/JettyServerInstrumentation.java @@ -10,6 +10,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; @@ -156,11 +157,13 @@ public static AgentScope onEnter( return activateSpan((AgentSpan) existingSpan); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); - final AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(req); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(req, extractedSpanContext); + final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedSpanContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); diff --git a/dd-java-agent/instrumentation/jetty-7.6/src/main/java/datadog/trace/instrumentation/jetty76/JettyServerInstrumentation.java b/dd-java-agent/instrumentation/jetty-7.6/src/main/java/datadog/trace/instrumentation/jetty76/JettyServerInstrumentation.java index 81225c7c820..9cf034e96cc 100644 --- a/dd-java-agent/instrumentation/jetty-7.6/src/main/java/datadog/trace/instrumentation/jetty76/JettyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-7.6/src/main/java/datadog/trace/instrumentation/jetty76/JettyServerInstrumentation.java @@ -10,6 +10,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; @@ -157,11 +158,13 @@ public static AgentScope onEnter( return activateSpan((AgentSpan) existingSpan); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); - final AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(req); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(req, extractedSpanContext); + final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedSpanContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); diff --git a/dd-java-agent/instrumentation/jetty-9/src/main/java/datadog/trace/instrumentation/jetty9/JettyServerInstrumentation.java b/dd-java-agent/instrumentation/jetty-9/src/main/java/datadog/trace/instrumentation/jetty9/JettyServerInstrumentation.java index 7aaea42fc4d..eb822c60dec 100644 --- a/dd-java-agent/instrumentation/jetty-9/src/main/java/datadog/trace/instrumentation/jetty9/JettyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-9/src/main/java/datadog/trace/instrumentation/jetty9/JettyServerInstrumentation.java @@ -15,6 +15,7 @@ import com.google.auto.service.AutoService; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.Context; import datadog.trace.agent.tooling.ExcludeFilterProvider; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; @@ -171,11 +172,13 @@ public static AgentScope onEnter( return activateSpan((AgentSpan) existingSpan); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); - final AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(req); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(req, extractedSpanContext); + final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedSpanContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); diff --git a/dd-java-agent/instrumentation/jetty-9/src/main/java_jetty10/datadog/trace/instrumentation/jetty10/HandleAdvice.java b/dd-java-agent/instrumentation/jetty-9/src/main/java_jetty10/datadog/trace/instrumentation/jetty10/HandleAdvice.java index 25459847c0d..1fe7ee0e176 100644 --- a/dd-java-agent/instrumentation/jetty-9/src/main/java_jetty10/datadog/trace/instrumentation/jetty10/HandleAdvice.java +++ b/dd-java-agent/instrumentation/jetty-9/src/main/java_jetty10/datadog/trace/instrumentation/jetty10/HandleAdvice.java @@ -4,6 +4,7 @@ import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.jetty10.JettyDecorator.DECORATE; +import datadog.context.Context; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -25,12 +26,14 @@ public static AgentScope onEnter( return activateSpan((AgentSpan) existingSpan); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); + final Context extractedContext = DECORATE.extract(req); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(req, extractedSpanContext); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedSpanContext); - final AgentScope scope = activateSpan(span); + final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); req.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); diff --git a/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java b/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java index 1a4769710b3..8912fda5e6d 100644 --- a/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java @@ -14,6 +14,7 @@ import com.ibm.ws.webcontainer.srt.SRTServletResponse; import com.ibm.ws.webcontainer.webapp.WebApp; import com.ibm.wsspi.webcontainer.webapp.IWebAppDispatcherContext; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.ClassloaderConfigurationOverrides; @@ -105,10 +106,12 @@ public static class HandleRequestAdvice { } catch (NullPointerException e) { } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); + final Context extractedContext = DECORATE.extract(request); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); - final AgentSpan span = DECORATE.startSpan(request, extractedContext); - scope = activateSpan(span); + final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); + scope = (AgentScope) extractedContext.with(span).attach(); if (Config.get().isJeeSplitByDeployment()) { final IWebAppDispatcherContext dispatcherContext = request.getWebAppDispatcherContext(); if (dispatcherContext != null) { @@ -122,7 +125,7 @@ public static class HandleRequestAdvice { } } DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedSpanContext); request.setAttribute(DD_SPAN_ATTRIBUTE, span); request.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); request.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); diff --git a/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java b/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java index 30c8d7980cc..679fcf5e1ce 100644 --- a/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java @@ -14,6 +14,7 @@ import com.ibm.ws.webcontainer.srt.SRTServletResponse; import com.ibm.ws.webcontainer.webapp.WebApp; import com.ibm.wsspi.webcontainer.webapp.IWebAppDispatcherContext; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.ClassloaderConfigurationOverrides; @@ -107,10 +108,12 @@ public static class HandleRequestAdvice { } catch (NullPointerException e) { } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); + final Context extractedContext = DECORATE.extract(request); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); - final AgentSpan span = DECORATE.startSpan(request, extractedContext); - scope = activateSpan(span); + final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); + scope = (AgentScope) extractedContext.with(span).attach(); if (Config.get().isJeeSplitByDeployment()) { final IWebAppDispatcherContext dispatcherContext = request.getWebAppDispatcherContext(); if (dispatcherContext != null) { @@ -124,7 +127,7 @@ public static class HandleRequestAdvice { } } DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedSpanContext); request.setAttribute(DD_SPAN_ATTRIBUTE, span); request.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); request.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); diff --git a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/HttpServerRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/HttpServerRequestTracingHandler.java index 20c685a581b..7219b9a01f8 100644 --- a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/HttpServerRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/HttpServerRequestTracingHandler.java @@ -3,6 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.netty38.server.NettyHttpServerDecorator.DECORATE; +import datadog.context.Context; import datadog.trace.api.gateway.Flow; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -44,15 +45,17 @@ public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent final HttpRequest request = (HttpRequest) msg.getMessage(); final HttpHeaders headers = request.headers(); - final AgentSpanContext.Extracted context = DECORATE.extract(headers); - final AgentSpan span = DECORATE.startSpan(headers, context); + final Context extractedContext = DECORATE.extract(headers); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpan span = DECORATE.startSpan(headers, extractedSpanContext); channelTraceContext.reset(); channelTraceContext.setRequestHeaders(headers); - try (final AgentScope scope = activateSpan(span)) { + try (final AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequest(span, ctx.getChannel(), request, context); + DECORATE.onRequest(span, ctx.getChannel(), request, extractedSpanContext); channelTraceContext.setServerSpan(span); diff --git a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/HttpServerRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/HttpServerRequestTracingHandler.java index d5b0aabd49e..a6e98f4be70 100644 --- a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/HttpServerRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/HttpServerRequestTracingHandler.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.netty40.AttributeKeys.SPAN_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty40.server.NettyHttpServerDecorator.DECORATE; +import datadog.context.Context; import datadog.trace.api.gateway.Flow; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -40,12 +41,14 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { final HttpRequest request = (HttpRequest) msg; final HttpHeaders headers = request.headers(); - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(headers); - final AgentSpan span = DECORATE.startSpan(headers, extractedContext); + final Context extractedContext = DECORATE.extract(headers); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpan span = DECORATE.startSpan(headers, extractedSpanContext); - try (final AgentScope scope = activateSpan(span)) { + try (final AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequest(span, channel, request, extractedContext); + DECORATE.onRequest(span, channel, request, extractedSpanContext); channel.attr(ANALYZED_RESPONSE_KEY).set(null); channel.attr(BLOCKED_RESPONSE_KEY).set(null); diff --git a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/HttpServerRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/HttpServerRequestTracingHandler.java index 3fd4e640d44..b0cc55c86bc 100644 --- a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/HttpServerRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/HttpServerRequestTracingHandler.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.netty41.AttributeKeys.SPAN_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty41.server.NettyHttpServerDecorator.DECORATE; +import datadog.context.Context; import datadog.trace.api.gateway.Flow; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -39,12 +40,14 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { final HttpRequest request = (HttpRequest) msg; final HttpHeaders headers = request.headers(); - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(headers); - final AgentSpan span = DECORATE.startSpan(headers, extractedContext); + final Context extractedContext = DECORATE.extract(headers); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpan span = DECORATE.startSpan(headers, extractedSpanContext); - try (final AgentScope scope = activateSpan(span)) { + try (final AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequest(span, channel, request, extractedContext); + DECORATE.onRequest(span, channel, request, extractedSpanContext); channel.attr(ANALYZED_RESPONSE_KEY).set(null); channel.attr(BLOCKED_RESPONSE_KEY).set(null); diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogWrapperHelper.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogWrapperHelper.java index 5c82e9bb020..ffefc2a3feb 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogWrapperHelper.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogWrapperHelper.java @@ -3,6 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpServerDecorator.DECORATE; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -11,12 +12,14 @@ public class DatadogWrapperHelper { public static AgentScope createSpan(final HttpRequest request) { - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); - final AgentSpan span = DECORATE.startSpan(request, extractedContext); + final Context extractedContext = DECORATE.extract(request); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedSpanContext); - return activateSpan(span); + return (AgentScope) extractedContext.with(span).attach(); } public static void finishSpan(final AgentSpan span, final HttpResponse response) { diff --git a/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java index f21f313ce19..a8d5949d4ab 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.PLAY_REQUEST; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.REPORT_HTTP_STATUS; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -21,18 +22,27 @@ public class PlayAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope onEnter(@Advice.Argument(0) final Request req) { final AgentSpan span; + final Context extractedContext; if (activeSpan() == null) { Headers headers = req.headers(); - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(headers); - span = DECORATE.startSpan(headers, extractedContext); + extractedContext = DECORATE.extract(headers); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(headers, extractedSpanContext); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. // Do not extract the context. span = startSpan(PLAY_REQUEST); span.setMeasured(true); + extractedContext = null; } - final AgentScope scope = activateSpan(span); + final AgentScope scope; + if(extractedContext == null){ + scope = activateSpan(span); + }else{ + scope = (AgentScope) extractedContext.with(span).attach(); + } DECORATE.afterStart(span); return scope; } diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java index 60b55add14f..0559ccbec1e 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.PLAY_REQUEST; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.REPORT_HTTP_STATUS; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -21,6 +22,7 @@ public class PlayAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope onEnter(@Advice.Argument(value = 0, readOnly = false) Request req) { final AgentSpan span; + final Context extractedContext; // If we have already added a `play.request` span, then don't do it again if (req.tags().contains("_dd_HasPlayRequestSpan")) { @@ -29,16 +31,24 @@ public static AgentScope onEnter(@Advice.Argument(value = 0, readOnly = false) R if (activeSpan() == null) { final Headers headers = req.headers(); - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(headers); - span = DECORATE.startSpan(headers, extractedContext); + extractedContext = DECORATE.extract(headers); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(headers, extractedSpanContext); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. // Do not extract the context. span = startSpan(PLAY_REQUEST); span.setMeasured(true); + extractedContext = null; } - final AgentScope scope = activateSpan(span); + final AgentScope scope; + if(extractedContext == null){ + scope = activateSpan(span); + } else{ + scope = (AgentScope) extractedContext.with(span).attach(); + } DECORATE.afterStart(span); req = RequestHelper.withTag(req, "_dd_HasPlayRequestSpan", "true"); diff --git a/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java index ecd5b903e19..dfea7998924 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java @@ -6,6 +6,7 @@ import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.PLAY_REQUEST; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -21,7 +22,7 @@ public class PlayAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope onEnter( @Advice.Argument(value = 0, readOnly = false) Request req, - @Advice.Local("extractedContext") AgentSpanContext.Extracted extractedContext) { + @Advice.Local("extractedContext") Context extractedContext) { final AgentSpan span; // If we have already added a `play.request` span, then don't do it again @@ -32,13 +33,22 @@ public static AgentScope onEnter( if (activeSpan() == null) { final Headers headers = req.headers(); extractedContext = DECORATE.extract(headers); - span = DECORATE.startSpan(headers, extractedContext); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(headers, extractedSpanContext); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. // Do not extract the context. span = startSpan(PLAY_REQUEST); + extractedContext = null; + } + + final AgentScope scope; + if(extractedContext == null){ + scope = activateSpan(span); + }else{ + scope = (AgentScope) extractedContext.with(span).attach(); } - final AgentScope scope = activateSpan(span); span.setMeasured(true); DECORATE.afterStart(span); diff --git a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java index 7b03f69eafc..0328b395e67 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java @@ -13,7 +13,6 @@ import com.google.auto.service.AutoService; import datadog.context.Context; -import datadog.context.ContextScope; import datadog.trace.agent.tooling.ExcludeFilterProvider; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; @@ -126,24 +125,21 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request return activateSpan((AgentSpan) existingSpan); } - final Context extractedContext = DECORATE.extract(req, true); - AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final Context extractedContext = DECORATE.extract(req); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedSpanContext); final AgentSpan span = DECORATE.startSpan(req, extractedSpanContext); - final Context finalContext = extractedContext.with(span); - final AgentScope scope = (AgentScope) finalContext.attach(); - // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); req.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); - return scope; + return (AgentScope) extractedContext.with(span).attach(); } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) From c7ba3d414e9d4bc727d5af6ecd38026579ff07bd Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 16 Apr 2025 15:03:54 -0400 Subject: [PATCH 07/18] adding support for generic context in instrumentation --- .../decorator/HttpServerDecorator.java | 1 - .../akkahttp/DatadogWrapperHelper.java | 4 +-- .../grpc/server/TracingServerInterceptor.java | 16 ++++++--- .../aws/v1/sqs/TracingIterator.java | 22 ++++++++---- .../aws/v2/sqs/TracingIterator.java | 22 ++++++++---- .../AzureFunctionsInstrumentation.java | 4 +-- .../GrizzlyHttpHandlerInstrumentation.java | 4 +-- .../grizzlyhttp232/GrizzlyDecorator.java | 5 ++- .../grpc/server/TracingServerInterceptor.java | 11 ++++-- .../jetty11/JettyServerAdvice.java | 3 +- .../jetty12/JettyServerAdvice.java | 3 +- .../jetty70/JettyServerInstrumentation.java | 3 +- .../jetty76/JettyServerInstrumentation.java | 3 +- .../jetty9/JettyServerInstrumentation.java | 3 +- .../instrumentation/jetty10/HandleAdvice.java | 3 +- .../jms/DatadogMessageListener.java | 14 ++++++-- .../JMSMessageConsumerInstrumentation.java | 17 +++++++-- .../MDBMessageConsumerInstrumentation.java | 12 ++++--- .../kafka_clients/TracingIterator.java | 14 ++++++-- .../kafka_clients38/TracingIterator.java | 14 ++++++-- .../KafkaStreamTaskInstrumentation.java | 36 +++++++++++++------ .../LibertyServerInstrumentation.java | 3 +- .../LibertyServerInstrumentation.java | 3 +- .../HttpServerRequestTracingHandler.java | 3 +- .../HttpServerRequestTracingHandler.java | 3 +- .../HttpServerRequestTracingHandler.java | 3 +- .../okhttp3/TracingInterceptor.java | 7 ++-- .../pekkohttp/DatadogWrapperHelper.java | 4 +-- .../instrumentation/play23/PlayAdvice.java | 9 ++--- .../instrumentation/play24/PlayAdvice.java | 7 ++-- .../instrumentation/play26/PlayAdvice.java | 7 ++-- .../rabbitmq/amqp/RabbitDecorator.java | 22 ++++++++---- .../restlet/RestletInstrumentation.java | 13 ++++--- .../servlet2/Servlet2Advice.java | 13 ++++--- .../servlet3/Servlet3Advice.java | 12 ++++--- .../SprayHttpServerRunSealedRouteAdvice.java | 11 +++--- .../SpringMessageHandlerInstrumentation.java | 13 +++++-- .../SynapseServerInstrumentation.java | 13 ++++--- .../tomcat/TomcatServerInstrumentation.java | 5 ++- .../undertow/HandlerInstrumentation.java | 13 ++++--- .../HttpRequestParserInstrumentation.java | 13 ++++--- .../main/java/datadog/trace/api/Config.java | 6 ++-- 42 files changed, 266 insertions(+), 131 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java index b0dfc039f40..1a5d0692157 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java @@ -3,7 +3,6 @@ import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS; import static datadog.trace.api.datastreams.DataStreamsContext.fromTags; import static datadog.trace.api.gateway.Events.EVENTS; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogWrapperHelper.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogWrapperHelper.java index 6f742756f19..18db4d44c0f 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogWrapperHelper.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogWrapperHelper.java @@ -1,6 +1,5 @@ package datadog.trace.instrumentation.akkahttp; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.akkahttp.AkkaHttpServerDecorator.DECORATE; import akka.http.scaladsl.model.HttpRequest; @@ -14,7 +13,8 @@ public class DatadogWrapperHelper { public static AgentScope createSpan(final HttpRequest request) { final Context extractedContext = DECORATE.extract(request); AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); DECORATE.afterStart(span); DECORATE.onRequest(span, request, request, extractedSpanContext); diff --git a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java index 2e3026f9cad..4654dcbcbc5 100644 --- a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java +++ b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java @@ -2,7 +2,6 @@ import static datadog.trace.api.datastreams.DataStreamsContext.fromTags; import static datadog.trace.api.gateway.Events.EVENTS; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.armeria.grpc.server.GrpcExtractAdapter.GETTER; @@ -11,6 +10,8 @@ import static datadog.trace.instrumentation.armeria.grpc.server.GrpcServerDecorator.GRPC_SERVER; import static datadog.trace.instrumentation.armeria.grpc.server.GrpcServerDecorator.SERVER_PATHWAY_EDGE_TAGS; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.function.TriConsumer; import datadog.trace.api.function.TriFunction; @@ -62,13 +63,18 @@ public ServerCall.Listener interceptCall( return next.startCall(call, headers); } - AgentSpanContext spanContext = extractContextAndGetSpanContext(headers, GETTER); + Context extractedContext = + Propagators.defaultPropagator().extract(Context.root(), headers, GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + AgentSpanContext extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); AgentTracer.TracerAPI tracer = tracer(); - spanContext = callIGCallbackRequestStarted(tracer, spanContext); + extractedSpanContext = callIGCallbackRequestStarted(tracer, extractedSpanContext); CallbackProvider cbp = tracer.getCallbackProvider(RequestContextSlot.APPSEC); final AgentSpan span = - startSpan(DECORATE.instrumentationNames()[0], GRPC_SERVER, spanContext).setMeasured(true); + startSpan(DECORATE.instrumentationNames()[0], GRPC_SERVER, extractedSpanContext) + .setMeasured(true); AgentTracer.get() .getDataStreamsMonitoring() @@ -85,7 +91,7 @@ public ServerCall.Listener interceptCall( DECORATE.onCall(span, call); final ServerCall.Listener result; - try (AgentScope scope = activateSpan(span)) { + try (AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { // Wrap the server call so that we can decorate the span // with the resulting status final TracingServerCall tracingServerCall = new TracingServerCall<>(span, call); diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java index 8eb154800c9..ca147a74919 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.aws.v1.sqs; import static datadog.trace.api.datastreams.DataStreamsContext.create; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -19,6 +18,8 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import com.amazonaws.services.sqs.model.Message; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -62,12 +63,17 @@ protected void startNewMessageSpan(Message message) { closePrevious(true); if (message != null) { AgentSpan queueSpan = null; + Context extractedContext = null; if (batchContext == null) { // first grab any incoming distributed context - AgentSpanContext spanContext = - Config.get().isSqsPropagationEnabled() - ? extractContextAndGetSpanContext(message, GETTER) - : null; + AgentSpanContext spanContext = null; + if (Config.get().isSqsPropagationEnabled()) { + extractedContext = + Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + spanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + } // next add a time-in-queue span for non-legacy SQS traces if (TIME_IN_QUEUE_ENABLED) { long timeInQueueStart = GETTER.extractTimeInQueueStart(message); @@ -97,7 +103,11 @@ protected void startNewMessageSpan(Message message) { CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, queueUrl); - activateNext(span); + if (extractedContext == null) { + activateNext(span); + } else { + extractedContext.with(span).attach(); + } if (queueSpan != null) { BROKER_DECORATE.beforeFinish(queueSpan); queueSpan.finish(); diff --git a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java index 2213ac64d6e..e05b7e59b3f 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.aws.v2.sqs; import static datadog.trace.api.datastreams.DataStreamsContext.create; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -18,6 +17,8 @@ import static datadog.trace.instrumentation.aws.v2.sqs.SqsDecorator.TIME_IN_QUEUE_ENABLED; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -64,12 +65,17 @@ protected void startNewMessageSpan(Message message) { closePrevious(true); if (message != null) { AgentSpan queueSpan = null; + Context extractedContext = null; if (batchContext == null) { // first grab any incoming distributed context - AgentSpanContext spanContext = - Config.get().isSqsPropagationEnabled() - ? extractContextAndGetSpanContext(message, GETTER) - : null; + AgentSpanContext spanContext = null; + if (Config.get().isSqsPropagationEnabled()) { + extractedContext = + Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + spanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + } // next add a time-in-queue span for non-legacy SQS traces if (TIME_IN_QUEUE_ENABLED) { long timeInQueueStart = GETTER.extractTimeInQueueStart(message); @@ -99,7 +105,11 @@ protected void startNewMessageSpan(Message message) { CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, queueUrl, requestId); - activateNext(span); + if (extractedContext == null) { + activateNext(span); + } else { + extractedContext.with(span).attach(); + } if (queueSpan != null) { BROKER_DECORATE.beforeFinish(queueSpan); queueSpan.finish(); diff --git a/dd-java-agent/instrumentation/azure-functions/src/main/java/datadog/trace/instrumentation/azure/functions/AzureFunctionsInstrumentation.java b/dd-java-agent/instrumentation/azure-functions/src/main/java/datadog/trace/instrumentation/azure/functions/AzureFunctionsInstrumentation.java index fd848c4466d..03133702412 100644 --- a/dd-java-agent/instrumentation/azure-functions/src/main/java/datadog/trace/instrumentation/azure/functions/AzureFunctionsInstrumentation.java +++ b/dd-java-agent/instrumentation/azure-functions/src/main/java/datadog/trace/instrumentation/azure/functions/AzureFunctionsInstrumentation.java @@ -3,7 +3,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresMethod; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.isAnnotatedWith; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; import static datadog.trace.instrumentation.azurefunctions.AzureFunctionsDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -70,7 +69,8 @@ public static AgentScope methodEnter( @Advice.Argument(1) final ExecutionContext context) { final Context extractedContext = DECORATE.extract(request); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); DECORATE.afterStart(span, context.getFunctionName()); diff --git a/dd-java-agent/instrumentation/grizzly-2/src/main/java/datadog/trace/instrumentation/grizzly/GrizzlyHttpHandlerInstrumentation.java b/dd-java-agent/instrumentation/grizzly-2/src/main/java/datadog/trace/instrumentation/grizzly/GrizzlyHttpHandlerInstrumentation.java index 9b4ecd59c0d..e39a52b027c 100644 --- a/dd-java-agent/instrumentation/grizzly-2/src/main/java/datadog/trace/instrumentation/grizzly/GrizzlyHttpHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly-2/src/main/java/datadog/trace/instrumentation/grizzly/GrizzlyHttpHandlerInstrumentation.java @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.grizzly; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.grizzly.GrizzlyDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -76,7 +75,8 @@ public static class HandleAdvice { final Context extractedContext = DECORATE.extract(request); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); DECORATE.afterStart(span); diff --git a/dd-java-agent/instrumentation/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java b/dd-java-agent/instrumentation/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java index cacc50e2171..9dadfc03a66 100644 --- a/dd-java-agent/instrumentation/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java +++ b/dd-java-agent/instrumentation/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java @@ -1,7 +1,5 @@ package datadog.trace.instrumentation.grizzlyhttp232; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; - import datadog.appsec.api.blocking.BlockingContentType; import datadog.context.Context; import datadog.trace.api.gateway.BlockResponseFunction; @@ -117,7 +115,8 @@ public static NextAction onHttpCodecFilterExit( HttpResponsePacket httpResponse = httpRequest.getResponse(); final Context extractedContext = DECORATE.extract(httpRequest); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); AgentSpan span = DECORATE.startSpan(httpRequest, extractedSpanContext); AgentScope scope = (AgentScope) extractedContext.with(span).attach(); diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java index 5be9e13a5a3..7181f1feec3 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java @@ -2,7 +2,6 @@ import static datadog.trace.api.datastreams.DataStreamsContext.fromTags; import static datadog.trace.api.gateway.Events.EVENTS; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.grpc.server.GrpcExtractAdapter.GETTER; @@ -11,6 +10,8 @@ import static datadog.trace.instrumentation.grpc.server.GrpcServerDecorator.GRPC_SERVER; import static datadog.trace.instrumentation.grpc.server.GrpcServerDecorator.SERVER_PATHWAY_EDGE_TAGS; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.function.TriConsumer; import datadog.trace.api.function.TriFunction; @@ -62,7 +63,11 @@ public ServerCall.Listener interceptCall( return next.startCall(call, headers); } - AgentSpanContext spanContext = extractContextAndGetSpanContext(headers, GETTER); + final Context extractedContext = + Propagators.defaultPropagator().extract(Context.root(), headers, GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + AgentSpanContext spanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); AgentTracer.TracerAPI tracer = tracer(); spanContext = callIGCallbackRequestStarted(tracer, spanContext); @@ -84,7 +89,7 @@ public ServerCall.Listener interceptCall( DECORATE.onCall(span, call); final ServerCall.Listener result; - try (AgentScope scope = activateSpan(span)) { + try (AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { // Wrap the server call so that we can decorate the span // with the resulting status final TracingServerCall tracingServerCall = new TracingServerCall<>(span, call); diff --git a/dd-java-agent/instrumentation/jetty-11/src/main/java11/datadog/trace/instrumentation/jetty11/JettyServerAdvice.java b/dd-java-agent/instrumentation/jetty-11/src/main/java11/datadog/trace/instrumentation/jetty11/JettyServerAdvice.java index 622f8b06b9d..0c9040b00f2 100644 --- a/dd-java-agent/instrumentation/jetty-11/src/main/java11/datadog/trace/instrumentation/jetty11/JettyServerAdvice.java +++ b/dd-java-agent/instrumentation/jetty-11/src/main/java11/datadog/trace/instrumentation/jetty11/JettyServerAdvice.java @@ -29,7 +29,8 @@ public static AgentScope onEnter( final Context extractedContext = DECORATE.extract(req); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(req, extractedSpanContext); final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); span.setMeasured(true); diff --git a/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/JettyServerAdvice.java b/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/JettyServerAdvice.java index 1af98be1801..39cf8e765e3 100644 --- a/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/JettyServerAdvice.java +++ b/dd-java-agent/instrumentation/jetty-12/src/main/java17/datadog/trace/instrumentation/jetty12/JettyServerAdvice.java @@ -31,7 +31,8 @@ public static void onExit( final Context extractedContext = JettyDecorator.DECORATE.extract(req); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); final AgentSpan span = JettyDecorator.DECORATE.startSpan(req, extractedSpanContext); try (final AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { span.setMeasured(true); diff --git a/dd-java-agent/instrumentation/jetty-7.0/src/main/java/datadog/trace/instrumentation/jetty70/JettyServerInstrumentation.java b/dd-java-agent/instrumentation/jetty-7.0/src/main/java/datadog/trace/instrumentation/jetty70/JettyServerInstrumentation.java index 0507f5b6594..16a235d5a83 100644 --- a/dd-java-agent/instrumentation/jetty-7.0/src/main/java/datadog/trace/instrumentation/jetty70/JettyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-7.0/src/main/java/datadog/trace/instrumentation/jetty70/JettyServerInstrumentation.java @@ -159,7 +159,8 @@ public static AgentScope onEnter( final Context extractedContext = DECORATE.extract(req); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(req, extractedSpanContext); final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); diff --git a/dd-java-agent/instrumentation/jetty-7.6/src/main/java/datadog/trace/instrumentation/jetty76/JettyServerInstrumentation.java b/dd-java-agent/instrumentation/jetty-7.6/src/main/java/datadog/trace/instrumentation/jetty76/JettyServerInstrumentation.java index 9cf034e96cc..8c9248f9df0 100644 --- a/dd-java-agent/instrumentation/jetty-7.6/src/main/java/datadog/trace/instrumentation/jetty76/JettyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-7.6/src/main/java/datadog/trace/instrumentation/jetty76/JettyServerInstrumentation.java @@ -160,7 +160,8 @@ public static AgentScope onEnter( final Context extractedContext = DECORATE.extract(req); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(req, extractedSpanContext); final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); diff --git a/dd-java-agent/instrumentation/jetty-9/src/main/java/datadog/trace/instrumentation/jetty9/JettyServerInstrumentation.java b/dd-java-agent/instrumentation/jetty-9/src/main/java/datadog/trace/instrumentation/jetty9/JettyServerInstrumentation.java index eb822c60dec..650711fa4fd 100644 --- a/dd-java-agent/instrumentation/jetty-9/src/main/java/datadog/trace/instrumentation/jetty9/JettyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-9/src/main/java/datadog/trace/instrumentation/jetty9/JettyServerInstrumentation.java @@ -174,7 +174,8 @@ public static AgentScope onEnter( final Context extractedContext = DECORATE.extract(req); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(req, extractedSpanContext); final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); diff --git a/dd-java-agent/instrumentation/jetty-9/src/main/java_jetty10/datadog/trace/instrumentation/jetty10/HandleAdvice.java b/dd-java-agent/instrumentation/jetty-9/src/main/java_jetty10/datadog/trace/instrumentation/jetty10/HandleAdvice.java index 1fe7ee0e176..274a5838900 100644 --- a/dd-java-agent/instrumentation/jetty-9/src/main/java_jetty10/datadog/trace/instrumentation/jetty10/HandleAdvice.java +++ b/dd-java-agent/instrumentation/jetty-9/src/main/java_jetty10/datadog/trace/instrumentation/jetty10/HandleAdvice.java @@ -28,7 +28,8 @@ public static AgentScope onEnter( final Context extractedContext = DECORATE.extract(req); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(req, extractedSpanContext); DECORATE.afterStart(span); DECORATE.onRequest(span, req, req, extractedSpanContext); diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/DatadogMessageListener.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/DatadogMessageListener.java index b58034f3d88..29dcf50eb33 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/DatadogMessageListener.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/DatadogMessageListener.java @@ -1,6 +1,5 @@ package datadog.trace.instrumentation.jms; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.jms.JMSDecorator.BROKER_DECORATE; @@ -11,6 +10,8 @@ import static datadog.trace.instrumentation.jms.MessageExtractAdapter.GETTER; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -38,9 +39,13 @@ public DatadogMessageListener( @Override public void onMessage(Message message) { AgentSpan span; + Context extractedContext = null; AgentSpanContext propagatedContext = null; if (!consumerState.isPropagationDisabled()) { - propagatedContext = extractContextAndGetSpanContext(message, GETTER); + extractedContext = Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + propagatedContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); } long startMillis = GETTER.extractTimeInQueueStart(message); if (startMillis == 0 || !TIME_IN_QUEUE_ENABLED) { @@ -70,7 +75,10 @@ public void onMessage(Message message) { // span will be finished by Session.commit/rollback/close sessionState.finishOnCommit(span); } - try (AgentScope scope = activateSpan(span)) { + try (AgentScope scope = + extractedContext == null + ? activateSpan(span) + : (AgentScope) extractedContext.with(span).attach()) { messageListener.onMessage(message); } catch (RuntimeException | Error thrown) { CONSUMER_DECORATE.onError(span, thrown); diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java index 446dc32897f..47a4afbe043 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java @@ -3,7 +3,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.hasInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -19,6 +18,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; @@ -118,9 +119,13 @@ public static void afterReceive( } AgentSpan span; + Context extractedContext = null; AgentSpanContext propagatedContext = null; if (!consumerState.isPropagationDisabled()) { - propagatedContext = extractContextAndGetSpanContext(message, GETTER); + extractedContext = Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + propagatedContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); } long startMillis = GETTER.extractTimeInQueueStart(message); if (startMillis == 0 || !TIME_IN_QUEUE_ENABLED) { @@ -145,7 +150,13 @@ public static void afterReceive( CONSUMER_DECORATE.onConsume(span, message, consumerState.getConsumerResourceName()); CONSUMER_DECORATE.onError(span, throwable); - activateNext(span); // scope is left open until next message or it times out + if (extractedContext == null) { + activateNext(span); + } else { + extractedContext + .with(span) + .attach(); // scope is left open until next message or it times out + } SessionState sessionState = consumerState.getSessionState(); if (sessionState.isClientAcknowledge()) { diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java index 6f2cb2c16e1..6743bcdf49e 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java @@ -4,8 +4,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.hasSuperType; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.jms.JMSDecorator.CONSUMER_DECORATE; import static datadog.trace.instrumentation.jms.JMSDecorator.JMS_CONSUME; @@ -16,6 +14,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -67,7 +67,11 @@ public static AgentScope methodEnter(@Advice.Argument(0) final Message message) if (CallDepthThreadLocalMap.incrementCallDepth(MessageListener.class) > 0) { return null; } - AgentSpanContext propagatedContext = extractContextAndGetSpanContext(message, GETTER); + final Context extractedContext = + Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext propagatedContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); AgentSpan span = startSpan(JMS_CONSUME, propagatedContext); CONSUMER_DECORATE.afterStart(span); CharSequence consumerResourceName; @@ -81,7 +85,7 @@ public static AgentScope methodEnter(@Advice.Argument(0) final Message message) consumerResourceName = "unknown JMS destination"; } CONSUMER_DECORATE.onConsume(span, message, consumerResourceName); - return activateSpan(span); + return (AgentScope) extractedContext.with(span).attach(); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java index 3c6f26995a3..a69d6475096 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java @@ -2,7 +2,6 @@ import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -21,6 +20,7 @@ import static datadog.trace.instrumentation.kafka_common.Utils.computePayloadSizeBytes; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; import datadog.trace.api.Config; @@ -83,9 +83,13 @@ protected void startNewRecordSpan(ConsumerRecord val) { closePrevious(true); AgentSpan span, queueSpan = null; if (val != null) { + Context extractedContext = null; if (!Config.get().isKafkaClientPropagationDisabledForTopic(val.topic())) { + extractedContext = + Propagators.defaultPropagator().extract(Context.root(), val.headers(), GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); final AgentSpanContext spanContext = - extractContextAndGetSpanContext(val.headers(), GETTER); + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); long timeInQueueStart = GETTER.extractTimeInQueueStart(val.headers()); if (timeInQueueStart == 0 || !TIME_IN_QUEUE_ENABLED) { span = startSpan(operationName, spanContext); @@ -135,7 +139,11 @@ protected void startNewRecordSpan(ConsumerRecord val) { } decorator.afterStart(span); decorator.onConsume(span, val, group, bootstrapServers); - activateNext(span); + if (extractedContext == null) { + activateNext(span); + } else { + extractedContext.with(span).attach(); + } if (null != queueSpan) { queueSpan.finish(); } diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java index 9a922d46ad0..a9cc6ee3874 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java @@ -2,7 +2,6 @@ import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -16,6 +15,7 @@ import static datadog.trace.instrumentation.kafka_clients38.TextMapInjectAdapter.SETTER; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; import datadog.trace.api.Config; @@ -80,9 +80,13 @@ protected void startNewRecordSpan(ConsumerRecord val) { closePrevious(true); AgentSpan span, queueSpan = null; if (val != null) { + Context extractedContext = null; if (!Config.get().isKafkaClientPropagationDisabledForTopic(val.topic())) { + extractedContext = + Propagators.defaultPropagator().extract(Context.root(), val.headers(), GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); final AgentSpanContext spanContext = - extractContextAndGetSpanContext(val.headers(), GETTER); + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); long timeInQueueStart = GETTER.extractTimeInQueueStart(val.headers()); if (timeInQueueStart == 0 || !KafkaDecorator.TIME_IN_QUEUE_ENABLED) { span = startSpan(operationName, spanContext); @@ -135,7 +139,11 @@ protected void startNewRecordSpan(ConsumerRecord val) { } decorator.afterStart(span); decorator.onConsume(span, val, group, bootstrapServers); - activateNext(span); + if (extractedContext == null) { + activateNext(span); + } else { + extractedContext.with(span).attach(); + } if (null != queueSpan) { queueSpan.finish(); } diff --git a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java index 10d15eb8486..2665e1e60bf 100644 --- a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java @@ -3,7 +3,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_IN; @@ -31,6 +30,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; @@ -233,15 +233,19 @@ public static void start( AgentSpan span, queueSpan = null; StreamTaskContext streamTaskContext = InstrumentationContext.get(StreamTask.class, StreamTaskContext.class).get(task); + Context extractedContext = null; if (!Config.get().isKafkaClientPropagationDisabledForTopic(record.topic())) { - final AgentSpanContext extractedContext = - extractContextAndGetSpanContext(record, SR_GETTER); + extractedContext = + Propagators.defaultPropagator().extract(Context.root(), record, SR_GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext spanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); long timeInQueueStart = SR_GETTER.extractTimeInQueueStart(record); if (timeInQueueStart == 0 || !TIME_IN_QUEUE_ENABLED) { - span = startSpan(KAFKA_CONSUME, extractedContext); + span = startSpan(KAFKA_CONSUME, spanContext); } else { queueSpan = - startSpan(KAFKA_DELIVER, extractedContext, MILLISECONDS.toMicros(timeInQueueStart)); + startSpan(KAFKA_DELIVER, spanContext, MILLISECONDS.toMicros(timeInQueueStart)); BROKER_DECORATE.afterStart(queueSpan); BROKER_DECORATE.onTimeInQueue(queueSpan, record); span = startSpan(KAFKA_CONSUME, queueSpan.context()); @@ -280,7 +284,10 @@ public static void start( CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, record, node); - AgentScope agentScope = activateSpan(span); + AgentScope agentScope = + extractedContext == null + ? activateSpan(span) + : (AgentScope) extractedContext.with(span).attach(); if (null != queueSpan) { queueSpan.finish(); } @@ -309,15 +316,19 @@ public static void start( AgentSpan span, queueSpan = null; StreamTaskContext streamTaskContext = InstrumentationContext.get(StreamTask.class, StreamTaskContext.class).get(task); + Context extractedContext = null; if (!Config.get().isKafkaClientPropagationDisabledForTopic(record.topic())) { - final AgentSpanContext extractedContext = - extractContextAndGetSpanContext(record, PR_GETTER); + extractedContext = + Propagators.defaultPropagator().extract(Context.root(), record, PR_GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext spanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); long timeInQueueStart = PR_GETTER.extractTimeInQueueStart(record); if (timeInQueueStart == 0 || !TIME_IN_QUEUE_ENABLED) { - span = startSpan(KAFKA_CONSUME, extractedContext); + span = startSpan(KAFKA_CONSUME, spanContext); } else { queueSpan = - startSpan(KAFKA_DELIVER, extractedContext, MILLISECONDS.toMicros(timeInQueueStart)); + startSpan(KAFKA_DELIVER, spanContext, MILLISECONDS.toMicros(timeInQueueStart)); BROKER_DECORATE.afterStart(queueSpan); BROKER_DECORATE.onTimeInQueue(queueSpan, record); span = startSpan(KAFKA_CONSUME, queueSpan.context()); @@ -363,7 +374,10 @@ public static void start( CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, record, node); - AgentScope agentScope = activateSpan(span); + AgentScope agentScope = + extractedContext == null + ? activateSpan(span) + : (AgentScope) extractedContext.with(span).attach(); if (null != queueSpan) { queueSpan.finish(); } diff --git a/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java b/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java index 8912fda5e6d..826d2cfb2d0 100644 --- a/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java @@ -108,7 +108,8 @@ public static class HandleRequestAdvice { final Context extractedContext = DECORATE.extract(request); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); scope = (AgentScope) extractedContext.with(span).attach(); diff --git a/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java b/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java index 679fcf5e1ce..63cc46154f2 100644 --- a/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java @@ -110,7 +110,8 @@ public static class HandleRequestAdvice { final Context extractedContext = DECORATE.extract(request); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); scope = (AgentScope) extractedContext.with(span).attach(); diff --git a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/HttpServerRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/HttpServerRequestTracingHandler.java index 7219b9a01f8..d78a85c5d42 100644 --- a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/HttpServerRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/HttpServerRequestTracingHandler.java @@ -47,7 +47,8 @@ public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent final HttpHeaders headers = request.headers(); final Context extractedContext = DECORATE.extract(headers); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); final AgentSpan span = DECORATE.startSpan(headers, extractedSpanContext); channelTraceContext.reset(); diff --git a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/HttpServerRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/HttpServerRequestTracingHandler.java index a6e98f4be70..9612bd9ca69 100644 --- a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/HttpServerRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/HttpServerRequestTracingHandler.java @@ -43,7 +43,8 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { final HttpHeaders headers = request.headers(); final Context extractedContext = DECORATE.extract(headers); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); final AgentSpan span = DECORATE.startSpan(headers, extractedSpanContext); try (final AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { diff --git a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/HttpServerRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/HttpServerRequestTracingHandler.java index b0cc55c86bc..92e7bc43cd8 100644 --- a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/HttpServerRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/HttpServerRequestTracingHandler.java @@ -42,7 +42,8 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { final HttpHeaders headers = request.headers(); final Context extractedContext = DECORATE.extract(headers); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); final AgentSpan span = DECORATE.startSpan(headers, extractedSpanContext); try (final AgentScope scope = (AgentScope) extractedContext.with(span).attach()) { diff --git a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java index 589f4a0703b..41f3ca402ba 100644 --- a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java +++ b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java @@ -13,10 +13,6 @@ import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; - -import datadog.trace.bootstrap.instrumentation.api.Baggage; -import datadog.trace.core.scopemanager.ContinuableScopeManager; - import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; @@ -37,7 +33,8 @@ public Response intercept(final Chain chain) throws IOException { final Request.Builder requestBuilder = chain.request().newBuilder(); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(Context.current().with(span).with(dsmContext), requestBuilder, SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), requestBuilder, SETTER); final Response response; try { diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogWrapperHelper.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogWrapperHelper.java index ffefc2a3feb..512ba2ec918 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogWrapperHelper.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogWrapperHelper.java @@ -1,6 +1,5 @@ package datadog.trace.instrumentation.pekkohttp; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpServerDecorator.DECORATE; import datadog.context.Context; @@ -14,7 +13,8 @@ public class DatadogWrapperHelper { public static AgentScope createSpan(final HttpRequest request) { final Context extractedContext = DECORATE.extract(request); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); final AgentSpan span = DECORATE.startSpan(request, extractedSpanContext); DECORATE.afterStart(span); DECORATE.onRequest(span, request, request, extractedSpanContext); diff --git a/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java index a8d5949d4ab..c3af8935a45 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java @@ -27,7 +27,8 @@ public static AgentScope onEnter(@Advice.Argument(0) final Request req) { Headers headers = req.headers(); extractedContext = DECORATE.extract(headers); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(headers, extractedSpanContext); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. @@ -38,10 +39,10 @@ public static AgentScope onEnter(@Advice.Argument(0) final Request req) { } final AgentScope scope; - if(extractedContext == null){ + if (extractedContext == null) { scope = activateSpan(span); - }else{ - scope = (AgentScope) extractedContext.with(span).attach(); + } else { + scope = (AgentScope) extractedContext.with(span).attach(); } DECORATE.afterStart(span); return scope; diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java index 0559ccbec1e..9a27a51ba37 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java @@ -33,7 +33,8 @@ public static AgentScope onEnter(@Advice.Argument(value = 0, readOnly = false) R final Headers headers = req.headers(); extractedContext = DECORATE.extract(headers); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(headers, extractedSpanContext); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. @@ -44,9 +45,9 @@ public static AgentScope onEnter(@Advice.Argument(value = 0, readOnly = false) R } final AgentScope scope; - if(extractedContext == null){ + if (extractedContext == null) { scope = activateSpan(span); - } else{ + } else { scope = (AgentScope) extractedContext.with(span).attach(); } DECORATE.afterStart(span); diff --git a/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java index dfea7998924..f6bf0eff975 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java @@ -34,7 +34,8 @@ public static AgentScope onEnter( final Headers headers = req.headers(); extractedContext = DECORATE.extract(headers); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(headers, extractedSpanContext); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. @@ -44,9 +45,9 @@ public static AgentScope onEnter( } final AgentScope scope; - if(extractedContext == null){ + if (extractedContext == null) { scope = activateSpan(span); - }else{ + } else { scope = (AgentScope) extractedContext.with(span).attach(); } span.setMeasured(true); diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java index c3d1797c4fc..29b76dbfd89 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.rabbitmq.amqp; import static datadog.trace.api.datastreams.DataStreamsContext.create; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.AMQP_COMMAND; @@ -18,6 +17,8 @@ import com.rabbitmq.client.Command; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.Envelope; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.naming.SpanNaming; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -205,10 +206,16 @@ public static AgentScope startReceivingSpan( String queue) { final Map headers = propagate && null != properties ? properties.getHeaders() : null; - AgentSpanContext parentContext = - null != headers - ? extractContextAndGetSpanContext(headers, ContextVisitors.objectValuesMap()) - : null; + Context extractedContext = null; + AgentSpanContext parentContext = null; + if (null != headers) { + extractedContext = + Propagators.defaultPropagator() + .extract(Context.root(), headers, ContextVisitors.objectValuesMap()); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + parentContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + } // TODO: check dynamically bound queues - // https://github.com/DataDog/dd-trace-java/pull/2955#discussion_r677787875 @@ -260,7 +267,10 @@ public static AgentScope startReceivingSpan( } CONSUMER_DECORATE.afterStart(span); - AgentScope scope = activateSpan(span); + AgentScope scope = + extractedContext == null + ? activateSpan(span) + : (AgentScope) extractedContext.with(span).attach(); if (null != queueSpan) { queueSpan.finish(spanStartMicros); } diff --git a/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/RestletInstrumentation.java b/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/RestletInstrumentation.java index 68b808ab66f..215dac683fa 100644 --- a/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/RestletInstrumentation.java +++ b/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/RestletInstrumentation.java @@ -1,13 +1,13 @@ package datadog.trace.instrumentation.restlet; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.restlet.RestletDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; import com.sun.net.httpserver.HttpExchange; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -54,11 +54,14 @@ public String[] helperClassNames() { public static class RestletHandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope beginRequest(@Advice.Argument(0) final HttpExchange exchange) { - AgentSpanContext.Extracted context = DECORATE.extract(exchange); - AgentSpan span = DECORATE.startSpan(exchange, context); - AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(req); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + AgentSpan span = DECORATE.startSpan(exchange, extractedSpanContext); + AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, exchange, exchange, context); + DECORATE.onRequest(span, exchange, exchange, extractedSpanContext); DECORATE.onPeerConnection(span, exchange.getRemoteAddress()); return scope; diff --git a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java index 27797f8ba8f..5a2d12b320b 100644 --- a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java +++ b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.servlet2; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.servlet2.Servlet2Decorator.DECORATE; +import datadog.context.Context; import datadog.trace.api.ClassloaderConfigurationOverrides; import datadog.trace.api.Config; import datadog.trace.api.CorrelationIdentifier; @@ -52,11 +52,14 @@ public static boolean onEnter( InstrumentationContext.get(ServletResponse.class, Integer.class).put(response, 200); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(httpServletRequest); - final AgentSpan span = DECORATE.startSpan(httpServletRequest, extractedContext); - scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(httpServletRequest); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpan span = DECORATE.startSpan(httpServletRequest, extractedSpanContext); + scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedContext); + DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedSpanContext); httpServletRequest.setAttribute(DD_SPAN_ATTRIBUTE, span); httpServletRequest.setAttribute( diff --git a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java index 00e57312bce..4d6af7fd3a6 100644 --- a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java +++ b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java @@ -7,6 +7,7 @@ import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.servlet3.Servlet3Decorator.DECORATE; +import datadog.context.Context; import datadog.trace.api.ClassloaderConfigurationOverrides; import datadog.trace.api.Config; import datadog.trace.api.CorrelationIdentifier; @@ -69,12 +70,15 @@ public static boolean onEnter( return false; } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(httpServletRequest); - final AgentSpan span = DECORATE.startSpan(httpServletRequest, extractedContext); - scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(httpServletRequest); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpan span = DECORATE.startSpan(httpServletRequest, extractedSpanContext); + scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedContext); + DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedSpanContext); httpServletRequest.setAttribute(DD_SPAN_ATTRIBUTE, span); httpServletRequest.setAttribute( diff --git a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java index 53df15ffd76..b0d7e8ca0bd 100644 --- a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java +++ b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java @@ -1,10 +1,10 @@ package datadog.trace.instrumentation.spray; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.spray.SprayHttpServerDecorator.DECORATE; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -16,18 +16,21 @@ public class SprayHttpServerRunSealedRouteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope enter(@Advice.Argument(value = 1, readOnly = false) RequestContext ctx) { final AgentSpan span; - final AgentSpanContext.Extracted extractedContext; + final Context extractedContext; if (activeSpan() == null) { // Propagate context in case income request was going through several routes // TODO: Add test for it final HttpRequest request = ctx.request(); extractedContext = DECORATE.extract(request); - span = DECORATE.startSpan(request, extractedContext); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(request, extractedSpanContext); } else { extractedContext = null; span = startSpan(DECORATE.spanName()); } - final AgentScope scope = activateSpan(span); + final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); diff --git a/dd-java-agent/instrumentation/spring-messaging-4/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java b/dd-java-agent/instrumentation/spring-messaging-4/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java index edc4bcfe589..c2ab2cb1fe0 100644 --- a/dd-java-agent/instrumentation/spring-messaging-4/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-messaging-4/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.springmessaging; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -12,6 +11,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; +import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -59,17 +60,23 @@ public static AgentScope onEnter( @Advice.This InvocableHandlerMethod thiz, @Advice.Argument(0) Message message) { AgentSpanContext parentContext; AgentSpan parent = activeSpan(); + Context extractedContext = null; if (null != parent) { // prefer existing context, assume it was already extracted from this message parentContext = parent.context(); } else { // otherwise try to re-extract the message context to avoid disconnected trace - parentContext = extractContextAndGetSpanContext(message, GETTER); + extractedContext = Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + parentContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); } AgentSpan span = startSpan(SPRING_INBOUND, parentContext); DECORATE.afterStart(span); span.setResourceName(DECORATE.spanNameForMethod(thiz.getMethod())); - return activateSpan(span); + return extractedContext == null + ? activateSpan(span) + : (AgentScope) extractedContext.with(span).attach(); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseServerInstrumentation.java b/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseServerInstrumentation.java index d95d4668d1e..a251a9334e9 100644 --- a/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseServerInstrumentation.java +++ b/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseServerInstrumentation.java @@ -10,6 +10,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -68,18 +69,20 @@ public static AgentScope beginRequest( // check incoming request for distributed trace ids HttpRequest request = connection.getHttpRequest(); - AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); - + final Context extractedContext = DECORATE.extract(request); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); AgentSpan span; if (null != extractedContext) { - span = DECORATE.startSpan(request, extractedContext); + span = DECORATE.startSpan(request, extractedSpanContext); } else { span = startSpan(DECORATE.spanName()); span.setMeasured(true); } - AgentScope scope = activateSpan(span); + AgentScope scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, connection, request, extractedContext); + DECORATE.onRequest(span, connection, request, extractedSpanContext); // capture span to be finished by one of the various server response advices connection.getContext().setAttribute(SYNAPSE_SPAN_KEY, span); diff --git a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java index 0328b395e67..e5df0886fa1 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java @@ -20,12 +20,10 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.api.gateway.Flow; -import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import datadog.trace.bootstrap.instrumentation.api.Baggage; import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter; import java.util.Arrays; import java.util.Collection; @@ -127,7 +125,8 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request final Context extractedContext = DECORATE.extract(req); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedSpanContext); diff --git a/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HandlerInstrumentation.java b/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HandlerInstrumentation.java index 8192c5a9840..71de644b83d 100644 --- a/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HandlerInstrumentation.java @@ -14,6 +14,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.gateway.Flow.Action.RequestBlockingAction; @@ -93,11 +94,15 @@ public static void onEnter( return; } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(exchange); - final AgentSpan span = DECORATE.startSpan(exchange, extractedContext).setMeasured(true); - scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(exchange); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + + final AgentSpan span = DECORATE.startSpan(exchange, extractedSpanContext).setMeasured(true); + scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, exchange, exchange, extractedContext); + DECORATE.onRequest(span, exchange, exchange, extractedSpanContext); exchange.putAttachment(DD_UNDERTOW_CONTINUATION, captureSpan(span)); diff --git a/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HttpRequestParserInstrumentation.java b/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HttpRequestParserInstrumentation.java index cd205d013ef..39bf5ca6932 100644 --- a/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HttpRequestParserInstrumentation.java +++ b/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HttpRequestParserInstrumentation.java @@ -2,13 +2,13 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.extendsClass; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.instrumentation.undertow.UndertowDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -75,11 +75,14 @@ public static void afterRequestParse( AgentScope scope = null; try { if (span == null) { - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(exchange); - span = DECORATE.startSpan(exchange, extractedContext).setMeasured(true); - scope = activateSpan(span); + final Context extractedContext = DECORATE.extract(exchange); + final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); + final AgentSpanContext.Extracted extractedSpanContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + span = DECORATE.startSpan(exchange, extractedSpanContext).setMeasured(true); + scope = (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, exchange, exchange, extractedContext); + DECORATE.onRequest(span, exchange, exchange, extractedSpanContext); } DECORATE.onError(span, throwable); // because we know that a http 400 will be thrown diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 6dcf1d9dfc0..c02fc18a85e 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -2369,11 +2369,13 @@ public boolean isTracePropagationExtractFirst() { } public boolean isBaggageExtract() { - return tracePropagationStylesToExtract.contains(TracePropagationStyle.BAGGAGE) && tracePropagationBehaviorExtract != TracePropagationBehaviorExtract.IGNORE; + return tracePropagationStylesToExtract.contains(TracePropagationStyle.BAGGAGE) + && tracePropagationBehaviorExtract != TracePropagationBehaviorExtract.IGNORE; } public boolean isBaggageInject() { - return tracePropagationStylesToInject.contains(TracePropagationStyle.BAGGAGE) && tracePropagationBehaviorExtract != TracePropagationBehaviorExtract.IGNORE; + return tracePropagationStylesToInject.contains(TracePropagationStyle.BAGGAGE) + && tracePropagationBehaviorExtract != TracePropagationBehaviorExtract.IGNORE; } public boolean isBaggagePropagationEnabled() { From 8ccb7b5edf31bd3deefb49d7ce6217767c2b3e51 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 16 Apr 2025 15:04:59 -0400 Subject: [PATCH 08/18] removing logs --- .../java/datadog/context/propagation/CompositePropagator.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java b/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java index 3a3ca6403f2..9484b2a8054 100644 --- a/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java +++ b/components/context/src/main/java/datadog/context/propagation/CompositePropagator.java @@ -27,9 +27,7 @@ public Context extract(Context context, C carrier, CarrierVisitor visitor // Run the multiple extractions on cache for (Propagator propagator : this.propagators) { context = propagator.extract(context, carrierCache, carrierCache); - System.out.println("Propagator: " + propagator + " context: " + context); } - System.out.println("Context after composite propagator: " + context); return context; } From cb6a6f930c149b621d1021c48b2cf6446865e731 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 16 Apr 2025 15:43:06 -0400 Subject: [PATCH 09/18] adding support for injection of generic context --- .../AkkaHttpSingleRequestInstrumentation.java | 3 ++- .../akkahttp106/SingleRequestAdvice.java | 9 +++++++-- .../DelegatingRequestProducer.java | 4 ++-- .../apachehttpclient/HelperMethods.java | 3 ++- .../apachehttpclient5/DelegatingRequestChannel.java | 3 ++- .../apachehttpclient5/HelperMethods.java | 3 ++- .../grpc/client/ClientCallImplInstrumentation.java | 4 +++- .../aws/v2/eventbridge/EventBridgeInterceptor.java | 2 +- .../instrumentation/aws/v0/TracingRequestHandler.java | 4 +++- .../aws/v2/TracingExecutionInterceptor.java | 3 ++- .../instrumentation/aws/v1/sns/SnsInterceptor.java | 2 +- .../instrumentation/aws/v2/sns/SnsInterceptor.java | 2 +- .../instrumentation/aws/v1/sqs/SqsInterceptor.java | 2 +- .../instrumentation/aws/v2/sqs/SqsInterceptor.java | 2 +- .../axis2/AxisTransportInstrumentation.java | 3 ++- .../CommonsHttpClientInstrumentation.java | 3 ++- .../googlehttpclient/GoogleHttpClientDecorator.java | 3 ++- .../googlepubsub/PublisherInstrumentation.java | 2 +- .../client/AsyncHttpClientInstrumentation.java | 2 +- .../grpc/client/ClientCallImplInstrumentation.java | 3 ++- .../HttpUrlConnectionInstrumentation.java | 3 ++- .../instrumentation/httpclient/HeadersAdvice.java | 2 +- .../jaxrs/v1/JaxRsClientV1Instrumentation.java | 4 +++- .../instrumentation/jaxrs/ClientTracingFilter.java | 5 ++++- .../instrumentation/jetty_client10/SendAdvice.java | 3 ++- .../instrumentation/jetty_client12/SendAdvice.java | 3 ++- .../jetty_client91/JettyClientInstrumentation.java | 3 ++- .../jms/JMSMessageProducerInstrumentation.java | 5 +++-- .../kafka_clients/KafkaProducerInstrumentation.java | 11 +++++++---- .../kafka_clients/TracingIterator.java | 3 ++- .../kafka_clients38/ProducerAdvice.java | 11 +++++++---- .../kafka_clients38/TracingIterator.java | 3 ++- .../kafka_streams/KafkaStreamTaskInstrumentation.java | 4 ++-- .../client/HttpClientRequestTracingHandler.java | 4 +++- .../client/HttpClientRequestTracingHandler.java | 4 +++- .../client/HttpClientRequestTracingHandler.java | 4 +++- .../instrumentation/okhttp2/TracingInterceptor.java | 4 +++- .../opentelemetry/OtelContextPropagators.java | 3 ++- .../trace/instrumentation/opentracing31/OTTracer.java | 4 +++- .../trace/instrumentation/opentracing32/OTTracer.java | 7 ++++++- .../PekkoHttpSingleRequestInstrumentation.java | 3 ++- .../playws1/PlayWSClientInstrumentation.java | 3 ++- .../playws21/PlayWSClientInstrumentation.java | 3 ++- .../playws2/PlayWSClientInstrumentation.java | 3 ++- .../rabbitmq/amqp/RabbitChannelInstrumentation.java | 3 ++- .../dispatcher/RequestDispatcherInstrumentation.java | 3 ++- .../synapse3/SynapseClientInstrumentation.java | 4 +++- .../datastreams/DefaultDataStreamsMonitoring.java | 5 ++++- .../src/main/java/datadog/opentracing/DDTracer.java | 4 +++- 49 files changed, 124 insertions(+), 59 deletions(-) diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java index a18d138c35e..345b5b007f5 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java @@ -15,6 +15,7 @@ import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; @@ -80,7 +81,7 @@ public static AgentScope methodEnter( if (request != null) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, headers); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java index 105ac824f93..b828ed349c4 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java @@ -8,6 +8,7 @@ import akka.http.scaladsl.HttpExt; import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -30,8 +31,12 @@ public static AgentScope methodEnter( if (request != null) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, headers); - // Request is immutable, so we have to assign new value once we update headers + defaultPropagator() + .inject( + Context.current().with(span).with(dsmContext), + request, + headers); // Request is immutable, so we have to assign new value once we update + // headers request = headers.getRequest(); } return activateSpan(span); diff --git a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java index 99dfee7ba3c..d75d7026d90 100644 --- a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java +++ b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java @@ -5,6 +5,7 @@ import static datadog.trace.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; @@ -36,8 +37,7 @@ public HttpRequest generateRequest() throws IOException, HttpException { DECORATE.onRequest(span, new HostAndRequestAsHttpUriRequest(delegate.getTarget(), request)); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); - + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); return request; } diff --git a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java index e9f726f6fdd..24f8f22238c 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java +++ b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java @@ -8,6 +8,7 @@ import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.apachehttpclient.HttpHeadersInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -47,7 +48,7 @@ private static AgentScope activateHttpSpan(final HttpUriRequest request) { // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); } return scope; diff --git a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java index 673656e75ea..b4beaa1b32f 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java +++ b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java @@ -5,6 +5,7 @@ import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; @@ -29,7 +30,7 @@ public void sendRequest(HttpRequest request, EntityDetails entityDetails, HttpCo DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); delegate.sendRequest(request, entityDetails, context); } } diff --git a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java index 01b8ea4814d..3fa46229ad3 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java +++ b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java @@ -8,6 +8,7 @@ import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -47,7 +48,7 @@ private static AgentScope activateHttpSpan(final HttpRequest request) { // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); } return scope; diff --git a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java index ab192c56df6..f0b90f3acd4 100644 --- a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java +++ b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java @@ -16,6 +16,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.muzzle.Reference; @@ -137,7 +138,8 @@ public static AgentScope before( span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), headers, SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), headers, SETTER); return activateSpan(span); } } diff --git a/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java b/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java index a7ca3e02bb7..8f2f8b8b184 100644 --- a/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java @@ -87,7 +87,7 @@ private String getTraceContextToInject( jsonBuilder.append('{'); // Inject context - datadog.context.Context context = span; + datadog.context.Context context = datadog.context.Context.current().with(span); if (traceConfig().isDataStreamsEnabled()) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(eventBusName)); context = context.with(dsmContext); diff --git a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/TracingRequestHandler.java b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/TracingRequestHandler.java index 04bd95b5bc8..817aa42f4fe 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/TracingRequestHandler.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/TracingRequestHandler.java @@ -17,6 +17,7 @@ import com.amazonaws.Response; import com.amazonaws.handlers.HandlerContextKey; import com.amazonaws.handlers.RequestHandler2; +import datadog.context.Context; import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; @@ -71,7 +72,8 @@ public void beforeRequest(final Request request) { request.addHandlerContext(SPAN_CONTEXT_KEY, span); if (Config.get().isAwsPropagationEnabled()) { try { - Propagators.forConcern(XRAY_TRACING_CONCERN).inject(span, request, DECORATE); + Propagators.forConcern(XRAY_TRACING_CONCERN) + .inject(Context.current().with(span), request, DECORATE); } catch (Throwable e) { log.warn("Unable to inject trace header", e); } diff --git a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/TracingExecutionInterceptor.java b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/TracingExecutionInterceptor.java index a739a7bb5de..e6e64084417 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/TracingExecutionInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/TracingExecutionInterceptor.java @@ -72,7 +72,8 @@ public SdkHttpRequest modifyHttpRequest( final AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); if (span != null) { SdkHttpRequest.Builder requestBuilder = context.httpRequest().toBuilder(); - Propagators.forConcern(XRAY_TRACING_CONCERN).inject(span, requestBuilder, DECORATE); + Propagators.forConcern(XRAY_TRACING_CONCERN) + .inject(datadog.context.Context.current().with(span), requestBuilder, DECORATE); return requestBuilder.build(); } } catch (Throwable e) { diff --git a/dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java index 3d1333a777f..29cd937f206 100644 --- a/dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java @@ -38,7 +38,7 @@ private ByteBuffer getMessageAttributeValueToInject( final AgentSpan span = newSpan(request); StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.append('{'); - Context context = span; + Context context = Context.current().with(span); if (traceConfig().isDataStreamsEnabled()) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(snsTopicName)); context = context.with(dsmContext); diff --git a/dd-java-agent/instrumentation/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java index 20143055b2a..d0208cacf77 100644 --- a/dd-java-agent/instrumentation/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java @@ -38,7 +38,7 @@ private SdkBytes getMessageAttributeValueToInject( final AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.append('{'); - datadog.context.Context context = span; + datadog.context.Context context = datadog.context.Context.current().with(span); if (traceConfig().isDataStreamsEnabled()) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(snsTopicName)); context = context.with(dsmContext); diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java index 4b353f12591..31cb350a897 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java @@ -84,7 +84,7 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request private Context newContext(AmazonWebServiceRequest request, String queueUrl) { AgentSpan span = newSpan(request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(queueUrl)); - return span.with(dsmContext); + return Context.current().with(span).with(dsmContext); } private AgentSpan newSpan(AmazonWebServiceRequest request) { diff --git a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java index bc5729e49c1..a308fbd8232 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java @@ -96,7 +96,7 @@ private datadog.context.Context getContext( ExecutionAttributes executionAttributes, String queueUrl) { AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(queueUrl)); - return span.with(dsmContext); + return datadog.context.Context.current().with(span).with(dsmContext); } private LinkedHashMap getTags(String queueUrl) { diff --git a/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java b/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java index 863b2c38009..0193ca8215d 100644 --- a/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java +++ b/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java @@ -12,6 +12,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; @@ -77,7 +78,7 @@ public static AgentScope beginTransport(@Advice.Argument(0) final MessageContext message.setProperty("TRANSPORT_HEADERS", headers); } try { - defaultPropagator().inject(span, headers, SETTER); + defaultPropagator().inject(Context.current().with(span), headers, SETTER); } catch (Throwable ignore) { } diff --git a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java index be1caba302d..fd3d683c536 100644 --- a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java @@ -70,7 +70,8 @@ public static AgentScope methodEnter(@Advice.Argument(1) final HttpMethod httpMe DECORATE.afterStart(span); DECORATE.onRequest(span, httpMethod); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), httpMethod, SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), httpMethod, SETTER); return scope; } catch (BlockingException e) { diff --git a/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java b/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java index 931924a9637..5e13bbdcaf3 100644 --- a/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java +++ b/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java @@ -5,6 +5,7 @@ import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpResponse; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.URIUtils; @@ -39,7 +40,7 @@ public AgentSpan prepareSpan(AgentSpan span, HttpRequest request) { DECORATE.afterStart(span); DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java index 87f8413d80b..69b87c274bc 100644 --- a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java +++ b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java @@ -82,7 +82,7 @@ public static AgentScope before( PubsubMessage.Builder builder = msg.toBuilder(); DataStreamsContext dsmContext = DataStreamsContext.fromTags(sortedTags); - defaultPropagator().inject(span.with(dsmContext), builder, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), builder, SETTER); msg = builder.build(); return activateSpan(span); } diff --git a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java index e21ca17dc43..172cbae72e1 100644 --- a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java @@ -70,7 +70,7 @@ public static void onEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); handler = new AsyncHandlerAdapter<>(span, parentSpan, handler); } } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java index 229064cd30b..0882cd78302 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java @@ -11,6 +11,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; @@ -94,7 +95,7 @@ public static AgentScope before( span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), headers, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), headers, SETTER); return activateSpan(span); } return null; diff --git a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java index 9d5dd1fc9d4..f59e38aecd5 100644 --- a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java +++ b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java @@ -11,6 +11,7 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; @@ -87,7 +88,7 @@ public static HttpUrlState methodEnter( final AgentSpan span = state.start(thiz); if (!connected) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), thiz, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), thiz, SETTER); } } return state; diff --git a/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java b/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java index 16e8630f7ec..fe16ea24e0f 100644 --- a/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java +++ b/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java @@ -20,7 +20,7 @@ public static void methodExit(@Advice.Return(readOnly = false) HttpHeaders heade final Map> headerMap = new HashMap<>(headers.map()); final AgentSpan span = activeSpan(); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), headerMap, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), headerMap, SETTER); headers = HttpHeaders.of(headerMap, KEEP); } } diff --git a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index b01be762333..5148c3acbab 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -18,6 +18,7 @@ import com.sun.jersey.api.client.ClientHandler; import com.sun.jersey.api.client.ClientRequest; import com.sun.jersey.api.client.ClientResponse; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; @@ -77,7 +78,8 @@ public static AgentScope onEnter( request.getProperties().put(DD_SPAN_ATTRIBUTE, span); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request.getHeaders(), SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), request.getHeaders(), SETTER); return activateSpan(span); } return null; diff --git a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java index 9e7963bf67d..8ec762ee5c2 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java +++ b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java @@ -8,6 +8,7 @@ import static datadog.trace.instrumentation.jaxrs.JaxRsClientDecorator.DECORATE; import static datadog.trace.instrumentation.jaxrs.JaxRsClientDecorator.JAX_RS_CLIENT_CALL; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -30,7 +31,9 @@ public void filter(final ClientRequestContext requestContext) { DECORATE.onRequest(span, requestContext); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), requestContext.getHeaders(), SETTER); + defaultPropagator() + .inject( + Context.current().with(span).with(dsmContext), requestContext.getHeaders(), SETTER); requestContext.setProperty(SPAN_PROPERTY_NAME, span); } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java index 58c64511ee9..1170e060ac0 100644 --- a/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java +++ b/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.jetty_client10.JettyClientDecorator.DECORATE; import static datadog.trace.instrumentation.jetty_client10.JettyClientDecorator.HTTP_REQUEST; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -27,7 +28,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java index 5575808b567..ec5e326b65c 100644 --- a/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java +++ b/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.jetty_client12.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.jetty_client12.JettyClientDecorator.HTTP_REQUEST; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -23,7 +24,7 @@ public static AgentScope methodEnter(@Advice.This final HttpRequest request) { JettyClientDecorator.DECORATE.afterStart(span); JettyClientDecorator.DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); return activateSpan(span); } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java index e6328faefcc..d8d58a1c920 100644 --- a/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java @@ -15,6 +15,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.ExcludeFilterProvider; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; @@ -93,7 +94,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java index 9c5ac41a4d0..68bfa5fbdb3 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java @@ -13,6 +13,7 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.Config; import datadog.trace.bootstrap.CallDepthThreadLocalMap; @@ -94,7 +95,7 @@ public static AgentScope beforeSend( if (JMSDecorator.canInject(message)) { if (Config.get().isJmsPropagationEnabled() && (null == producerState || !producerState.isPropagationDisabled())) { - defaultPropagator().inject(span, message, SETTER); + defaultPropagator().inject(Context.current().with(span), message, SETTER); } if (TIME_IN_QUEUE_ENABLED) { if (null != producerState) { @@ -141,7 +142,7 @@ public static AgentScope beforeSend( if (JMSDecorator.canInject(message)) { if (Config.get().isJmsPropagationEnabled() && !Config.get().isJmsPropagationDisabledForDestination(destinationName)) - defaultPropagator().inject(span, message, SETTER); + defaultPropagator().inject(Context.current().with(span), message, SETTER); if (TIME_IN_QUEUE_ENABLED) { MessageProducerState producerState = InstrumentationContext.get(MessageProducer.class, MessageProducerState.class) diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java index a85ee9ce95d..c5a3cdbaa8b 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java @@ -25,6 +25,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; @@ -153,7 +154,7 @@ public static AgentScope onEnter( sortedTags.put(TOPIC_TAG, record.topic()); sortedTags.put(TYPE_TAG, "kafka"); try { - defaultPropagator().inject(span, record.headers(), setter); + defaultPropagator().inject(Context.current().with(span), record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { // inject the context in the headers, but delay sending the stats until we know the @@ -161,7 +162,8 @@ public static AgentScope onEnter( // The stats are saved in the pathway context and sent in PayloadSizeAdvice. Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); - dsmPropagator.inject(span.with(dsmContext), record.headers(), setter); + dsmPropagator.inject( + Context.current().with(span).with(dsmContext), record.headers(), setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } catch (final IllegalStateException e) { @@ -175,12 +177,13 @@ record = record.value(), record.headers()); - defaultPropagator().inject(span, record.headers(), setter); + defaultPropagator().inject(Context.current().with(span), record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); - dsmPropagator.inject(span.with(dsmContext), record.headers(), setter); + dsmPropagator.inject( + Context.current().with(span).with(dsmContext), record.headers(), setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java index a69d6475096..7f76019d7f1 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java @@ -128,7 +128,8 @@ protected void startNewRecordSpan(ConsumerRecord val) { // for DSM users Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = create(sortedTags, val.timestamp(), payloadSize); - dsmPropagator.inject(span.with(dsmContext), val.headers(), SETTER); + dsmPropagator.inject( + Context.current().with(span).with(dsmContext), val.headers(), SETTER); } } } else { diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java index 0756f585b52..42522b0f586 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java @@ -16,6 +16,7 @@ import static datadog.trace.instrumentation.kafka_clients38.KafkaDecorator.TIME_IN_QUEUE_ENABLED; import static datadog.trace.instrumentation.kafka_common.StreamingContext.STREAMING_CONTEXT; +import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; import datadog.trace.api.Config; @@ -75,7 +76,7 @@ public static AgentScope onEnter( sortedTags.put(TOPIC_TAG, record.topic()); sortedTags.put(TYPE_TAG, "kafka"); try { - defaultPropagator().inject(span, record.headers(), setter); + defaultPropagator().inject(Context.current().with(span), record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { // inject the context in the headers, but delay sending the stats until we know the @@ -83,7 +84,8 @@ public static AgentScope onEnter( // The stats are saved in the pathway context and sent in PayloadSizeAdvice. Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); - dsmPropagator.inject(span.with(dsmContext), record.headers(), setter); + dsmPropagator.inject( + Context.current().with(span).with(dsmContext), record.headers(), setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } catch (final IllegalStateException e) { @@ -97,12 +99,13 @@ record = record.value(), record.headers()); - defaultPropagator().inject(span, record.headers(), setter); + defaultPropagator().inject(Context.current().with(span), record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); - dsmPropagator.inject(span.with(dsmContext), record.headers(), setter); + dsmPropagator.inject( + Context.current().with(span).with(dsmContext), record.headers(), setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java index a9cc6ee3874..b02f2796641 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java @@ -128,7 +128,8 @@ protected void startNewRecordSpan(ConsumerRecord val) { // for DSM users Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = create(sortedTags, val.timestamp(), payloadSize); - dsmPropagator.inject(span.with(dsmContext), val.headers(), SETTER); + dsmPropagator.inject( + Context.current().with(span).with(dsmContext), val.headers(), SETTER); } } } else { diff --git a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java index 2665e1e60bf..c8c4e3e00c6 100644 --- a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java @@ -275,7 +275,7 @@ public static void start( if (STREAMING_CONTEXT.isSourceTopic(record.topic())) { Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = create(sortedTags, record.timestamp, payloadSize); - dsmPropagator.inject(span.with(dsmContext), record, SR_SETTER); + dsmPropagator.inject(Context.current().with(span).with(dsmContext), record, SR_SETTER); } } } else { @@ -365,7 +365,7 @@ public static void start( if (STREAMING_CONTEXT.isSourceTopic(record.topic())) { Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = create(sortedTags, record.timestamp(), payloadSize); - dsmPropagator.inject(span.with(dsmContext), record, PR_SETTER); + dsmPropagator.inject(Context.current().with(span).with(dsmContext), record, PR_SETTER); } } } else { diff --git a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java index db47fba6bbd..555a7faf7fc 100644 --- a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java @@ -10,6 +10,7 @@ import static datadog.trace.instrumentation.netty38.client.NettyHttpClientDecorator.NETTY_CLIENT_REQUEST; import static datadog.trace.instrumentation.netty38.client.NettyResponseInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -67,7 +68,8 @@ public void writeRequested(final ChannelHandlerContext ctx, final MessageEvent m } DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), request.headers(), SETTER); channelTraceContext.setClientSpan(span); diff --git a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java index dfcbcb27ec4..4d1bc76c269 100644 --- a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java @@ -13,6 +13,7 @@ import static datadog.trace.instrumentation.netty40.client.NettyHttpClientDecorator.NETTY_CLIENT_REQUEST; import static datadog.trace.instrumentation.netty40.client.NettyResponseInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -90,7 +91,8 @@ public void write(final ChannelHandlerContext ctx, final Object msg, final Chann // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), request.headers(), SETTER); } ctx.channel().attr(SPAN_ATTRIBUTE_KEY).set(span); diff --git a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java index 3672e678054..609b41d10fa 100644 --- a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java @@ -13,6 +13,7 @@ import static datadog.trace.instrumentation.netty41.client.NettyHttpClientDecorator.NETTY_CLIENT_REQUEST; import static datadog.trace.instrumentation.netty41.client.NettyResponseInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -91,7 +92,8 @@ public void write(final ChannelHandlerContext ctx, final Object msg, final Chann // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), request.headers(), SETTER); } ctx.channel().attr(SPAN_ATTRIBUTE_KEY).set(span); diff --git a/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java index c68cdf00fe4..3ab224d9221 100644 --- a/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java +++ b/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java @@ -11,6 +11,7 @@ import com.squareup.okhttp.Interceptor; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -28,7 +29,8 @@ public Response intercept(final Chain chain) throws IOException { final Request.Builder requestBuilder = chain.request().newBuilder(); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), requestBuilder, SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), requestBuilder, SETTER); final Response response; try { diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelContextPropagators.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelContextPropagators.java index ad6042d0f0e..38eeb558dac 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelContextPropagators.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelContextPropagators.java @@ -45,7 +45,8 @@ public void inject(final Context context, final C carrier, final Setter s } AgentSpan agentSpan = converter.toAgentSpan(span); if (agentSpan != null) { - defaultPropagator().inject(agentSpan, carrier, setter::set); + defaultPropagator() + .inject(datadog.context.Context.current().with(agentSpan), carrier, setter::set); } } diff --git a/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTTracer.java b/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTTracer.java index 7074a62b377..aa2ed041201 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTTracer.java +++ b/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTTracer.java @@ -4,6 +4,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromSpanContext; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -53,7 +54,8 @@ public void inject(final SpanContext spanContext, final Format format, fi if (carrier instanceof TextMap) { final AgentSpanContext context = converter.toContext(spanContext); AgentSpan span = fromSpanContext(context); - defaultPropagator().inject(span, (TextMap) carrier, OTTextMapSetter.INSTANCE); + defaultPropagator() + .inject(Context.current().with(span), (TextMap) carrier, OTTextMapSetter.INSTANCE); } else { log.debug("Unsupported format for propagation - {}", format.getClass().getName()); } diff --git a/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTTracer.java b/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTTracer.java index 83094d05722..b8c738fa934 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTTracer.java +++ b/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTTracer.java @@ -4,6 +4,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromSpanContext; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -64,7 +65,11 @@ public void inject(final SpanContext spanContext, final Format format, fi if (carrier instanceof TextMapInject) { final AgentSpanContext context = converter.toContext(spanContext); AgentSpan span = fromSpanContext(context); - defaultPropagator().inject(span, (TextMapInject) carrier, OTTextMapInjectSetter.INSTANCE); + defaultPropagator() + .inject( + Context.current().with(span), + (TextMapInject) carrier, + OTTextMapInjectSetter.INSTANCE); } else { log.debug("Unsupported format for propagation - {}", format.getClass().getName()); } diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java index 7e22ecd660d..f3c8dcab64a 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java @@ -12,6 +12,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; @@ -81,7 +82,7 @@ public static AgentScope methodEnter( if (request != null) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, headers); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java index 556aa762cc6..4ed52cc5c9c 100644 --- a/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java +++ b/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java @@ -8,6 +8,7 @@ import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -31,7 +32,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java index 666b01c4bf4..400810121d9 100644 --- a/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java +++ b/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java @@ -8,6 +8,7 @@ import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -31,7 +32,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java index 668e7e1a47a..120b7412441 100644 --- a/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java +++ b/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java @@ -8,6 +8,7 @@ import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -31,7 +32,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java index 1c762039653..2c35e8552ab 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java @@ -37,6 +37,7 @@ import com.rabbitmq.client.Consumer; import com.rabbitmq.client.GetResponse; import com.rabbitmq.client.MessageProperties; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; @@ -197,7 +198,7 @@ public static AgentScope setResourceNameAddHeaders( HAS_ROUTING_KEY_TAG, routingKey == null || routingKey.isEmpty() ? "false" : "true"); sortedTags.put(TYPE_TAG, "rabbitmq"); DataStreamsContext dsmContext = DataStreamsContext.fromTags(sortedTags); - defaultPropagator().inject(span.with(dsmContext), headers, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), headers, SETTER); props = new AMQP.BasicProperties( props.getContentType(), diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java index d2e3df70436..d300139b64f 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java @@ -23,6 +23,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; @@ -123,7 +124,7 @@ public static AgentScope start( // In case we lose context, inject trace into to the request. DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); // temporarily replace from request to avoid spring resource name bubbling up: requestSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); diff --git a/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseClientInstrumentation.java b/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseClientInstrumentation.java index e860003559e..d2fae7a9dce 100644 --- a/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseClientInstrumentation.java +++ b/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseClientInstrumentation.java @@ -13,6 +13,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -86,7 +87,8 @@ public static AgentScope beginRequest( DECORATE.afterStart(span); // add trace id to client-side request before it gets submitted as an HttpRequest - defaultPropagator().inject(span, TargetContext.getRequest(connection), SETTER); + defaultPropagator() + .inject(Context.current().with(span), TargetContext.getRequest(connection), SETTER); // capture span to be finished by one of the various client response advices connection.getContext().setAttribute(SYNAPSE_SPAN_KEY, span); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java index fcf844baf0a..aa5ff7e803b 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java @@ -15,6 +15,7 @@ import datadog.communication.ddagent.DDAgentFeaturesDiscovery; import datadog.communication.ddagent.SharedCommunicationObjects; +import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.trace.api.Config; import datadog.trace.api.TraceConfig; @@ -294,7 +295,9 @@ public void setProduceCheckpoint( DataStreamsContext dsmContext = fromTags(sortedTags); this.propagator.inject( - span.with(dsmContext), carrier, DataStreamsContextCarrierAdapter.INSTANCE); + Context.current().with(span).with(dsmContext), + carrier, + DataStreamsContextCarrierAdapter.INSTANCE); } @Override diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java index fdea6629942..7ea71644eec 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java @@ -4,6 +4,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromSpanContext; +import datadog.context.Context; import datadog.context.propagation.CarrierSetter; import datadog.trace.api.Config; import datadog.trace.api.DDTags; @@ -486,7 +487,8 @@ public void inject(final SpanContext spanContext, final Format format, fi if (carrier instanceof TextMap) { final AgentSpanContext context = converter.toContext(spanContext); AgentSpan span = fromSpanContext(context); - defaultPropagator().inject(span, (TextMap) carrier, TextMapSetter.INSTANCE); + defaultPropagator() + .inject(Context.current().with(span), (TextMap) carrier, TextMapSetter.INSTANCE); } else { log.debug("Unsupported format for propagation - {}", format.getClass().getName()); } From 4d5ed09b742796395d19c9a5db49fc6851b092e6 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 16 Apr 2025 16:20:21 -0400 Subject: [PATCH 10/18] fixing errors --- .../decorator/HttpServerDecorator.java | 4 ++-- .../CommonsHttpClientInstrumentation.java | 1 + .../googlepubsub/PublisherInstrumentation.java | 1 + .../client/AsyncHttpClientInstrumentation.java | 1 + .../instrumentation/httpclient/HeadersAdvice.java | 1 + .../restlet/RestletInstrumentation.java | 2 +- .../spray/SprayHttpServerRunSealedRouteAdvice.java | 13 +++++++++---- 7 files changed, 16 insertions(+), 7 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java index 1a5d0692157..95a0a07fb1d 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java @@ -130,8 +130,8 @@ public Context extract(REQUEST_CARRIER carrier) { if (null == carrier || null == getter) { return null; } - Context context = Propagators.defaultPropagator().extract(Context.root(), carrier, getter); - return context; + + return Propagators.defaultPropagator().extract(Context.root(), carrier, getter); } /** Deprecated. Use {@link #startSpan(String, Object, AgentSpanContext.Extracted)} instead. */ diff --git a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java index fd3d683c536..fc74e84e0ba 100644 --- a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java @@ -14,6 +14,7 @@ import com.google.auto.service.AutoService; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; diff --git a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java index 69b87c274bc..ae19dd68601 100644 --- a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java +++ b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java @@ -19,6 +19,7 @@ import com.google.auto.service.AutoService; import com.google.cloud.pubsub.v1.Publisher; import com.google.pubsub.v1.PubsubMessage; +import datadog.context.Context; import datadog.trace.agent.tooling.ExcludeFilterProvider; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; diff --git a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java index 172cbae72e1..9a1d657204f 100644 --- a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java @@ -14,6 +14,7 @@ import com.google.auto.service.AutoService; import com.ning.http.client.AsyncHandler; import com.ning.http.client.Request; +import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; diff --git a/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java b/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java index fe16ea24e0f..aef3dc56e9e 100644 --- a/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java +++ b/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java @@ -6,6 +6,7 @@ import static datadog.trace.instrumentation.httpclient.HttpHeadersInjectAdapter.KEEP; import static datadog.trace.instrumentation.httpclient.HttpHeadersInjectAdapter.SETTER; +import datadog.context.Context; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.net.http.HttpHeaders; diff --git a/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/RestletInstrumentation.java b/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/RestletInstrumentation.java index 215dac683fa..ce6bba0f006 100644 --- a/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/RestletInstrumentation.java +++ b/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/RestletInstrumentation.java @@ -54,7 +54,7 @@ public String[] helperClassNames() { public static class RestletHandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope beginRequest(@Advice.Argument(0) final HttpExchange exchange) { - final Context extractedContext = DECORATE.extract(req); + final Context extractedContext = DECORATE.extract(exchange); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); final AgentSpanContext.Extracted extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java index b0d7e8ca0bd..b91311d99fc 100644 --- a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java +++ b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.spray; +import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.spray.SprayHttpServerDecorator.DECORATE; @@ -16,25 +17,29 @@ public class SprayHttpServerRunSealedRouteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope enter(@Advice.Argument(value = 1, readOnly = false) RequestContext ctx) { final AgentSpan span; - final Context extractedContext; + Context extractedContext = null; + AgentSpanContext.Extracted extractedSpanContext = null; if (activeSpan() == null) { // Propagate context in case income request was going through several routes // TODO: Add test for it final HttpRequest request = ctx.request(); extractedContext = DECORATE.extract(request); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); - final AgentSpanContext.Extracted extractedSpanContext = + extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); span = DECORATE.startSpan(request, extractedSpanContext); } else { extractedContext = null; span = startSpan(DECORATE.spanName()); } - final AgentScope scope = (AgentScope) extractedContext.with(span).attach(); + final AgentScope scope = + extractedContext == null + ? activateSpan(span) + : (AgentScope) extractedContext.with(span).attach(); DECORATE.afterStart(span); - ctx = SprayHelper.wrapRequestContext(ctx, span, extractedContext); + ctx = SprayHelper.wrapRequestContext(ctx, span, extractedSpanContext); return scope; } From 2dab3146ecbff3ba8d27d6e8998d1cdec4580e4f Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 21 Apr 2025 12:11:57 -0700 Subject: [PATCH 11/18] visibility --- .../client/AsyncHttpClientInstrumentation.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java index 9a1d657204f..8a94ee64a13 100644 --- a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java @@ -22,18 +22,20 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Collections; import net.bytebuddy.asm.Advice; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @AutoService(InstrumenterModule.class) public final class AsyncHttpClientInstrumentation extends InstrumenterModule.Tracing implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { - + private static final Logger LOGGER = LoggerFactory.getLogger(AsyncHttpClientInstrumentation.class); public AsyncHttpClientInstrumentation() { super("grizzly-client", "ning"); } @Override protected boolean defaultEnabled() { - return InstrumenterConfig.get().isIntegrationEnabled(Collections.singleton("mule"), false); + return InstrumenterConfig.get().isIntegrationEnabled(Collections.singleton("mule"), false); } @Override @@ -70,8 +72,15 @@ public static void onEnter( AgentSpan span = startSpan(HTTP_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); + System.err.println("why can I not see this message?"); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); + Context current = Context.current(); +// LOGGER.error("1" + current); +// current = current.with(span); +// LOGGER.error("2" + current); +// current = current.with(dsmContext); +// LOGGER.error("3" + current); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); handler = new AsyncHandlerAdapter<>(span, parentSpan, handler); } } From c78a5c8ed13395a463b2221e781f587f9ef1a843 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 24 Apr 2025 09:24:28 -0700 Subject: [PATCH 12/18] spotless --- .../client/AsyncHttpClientInstrumentation.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java index 8a94ee64a13..f154b670806 100644 --- a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java @@ -28,14 +28,16 @@ @AutoService(InstrumenterModule.class) public final class AsyncHttpClientInstrumentation extends InstrumenterModule.Tracing implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { - private static final Logger LOGGER = LoggerFactory.getLogger(AsyncHttpClientInstrumentation.class); + private static final Logger LOGGER = + LoggerFactory.getLogger(AsyncHttpClientInstrumentation.class); + public AsyncHttpClientInstrumentation() { super("grizzly-client", "ning"); } @Override protected boolean defaultEnabled() { - return InstrumenterConfig.get().isIntegrationEnabled(Collections.singleton("mule"), false); + return InstrumenterConfig.get().isIntegrationEnabled(Collections.singleton("mule"), false); } @Override @@ -75,11 +77,11 @@ public static void onEnter( System.err.println("why can I not see this message?"); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); Context current = Context.current(); -// LOGGER.error("1" + current); -// current = current.with(span); -// LOGGER.error("2" + current); -// current = current.with(dsmContext); -// LOGGER.error("3" + current); + // LOGGER.error("1" + current); + // current = current.with(span); + // LOGGER.error("2" + current); + // current = current.with(dsmContext); + // LOGGER.error("3" + current); defaultPropagator().inject(span.with(dsmContext), request, SETTER); handler = new AsyncHandlerAdapter<>(span, parentSpan, handler); } From 0487371d451abe996bdb09d5b9a432752abd669c Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 25 Apr 2025 09:00:47 -0700 Subject: [PATCH 13/18] benchmark visibility --- .../baggage/BaggagePropagatorBenchmark.java | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 dd-trace-core/src/jmh/java/datadog/trace/core/baggage/BaggagePropagatorBenchmark.java diff --git a/dd-trace-core/src/jmh/java/datadog/trace/core/baggage/BaggagePropagatorBenchmark.java b/dd-trace-core/src/jmh/java/datadog/trace/core/baggage/BaggagePropagatorBenchmark.java new file mode 100644 index 00000000000..b699a8d8a0e --- /dev/null +++ b/dd-trace-core/src/jmh/java/datadog/trace/core/baggage/BaggagePropagatorBenchmark.java @@ -0,0 +1,111 @@ +package datadog.trace.core.baggage; + +import static java.util.concurrent.TimeUnit.MICROSECONDS; +import static java.util.concurrent.TimeUnit.SECONDS; + +import datadog.context.Context; +import datadog.context.propagation.CarrierSetter; +import datadog.context.propagation.CarrierVisitor; +import java.util.HashMap; +import java.util.Map; +import java.util.function.BiConsumer; + +import datadog.trace.bootstrap.instrumentation.api.Baggage; +import datadog.trace.bootstrap.instrumentation.api.ContextVisitors; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.infra.Blackhole; + +import java.util.logging.Logger; + +@State(Scope.Benchmark) +@Warmup(iterations = 4, time = 30, timeUnit = SECONDS) +@Measurement(iterations = 4, time = 30, timeUnit = SECONDS) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(MICROSECONDS) +@Fork(value = 1) +public class BaggagePropagatorBenchmark { + // Simulates different baggage header values + + private static final Logger logger = Logger.getLogger(BaggagePropagatorBenchmark.class.getName()); + + @Param("ignore this value") + String baggageHeaderValue; + + private BaggagePropagator propagator; + private Context context; + private Map carrier; + private CarrierSetter> setter; + private CarrierVisitor> visitor; + private boolean test; + + static class MapCarrierAccessor + implements CarrierSetter>, CarrierVisitor> { + @Override + public void set(Map carrier, String key, String value) { + if (carrier != null && key != null && value != null) { + carrier.put(key, value); + } + } + + @Override + public void forEachKeyValue(Map carrier, BiConsumer visitor) { + carrier.forEach(visitor); + } + } + + @Setup(Level.Trial) + public void setUp() { + propagator = new BaggagePropagator(true, true); + context = Context.root(); + + StringBuilder sb = new StringBuilder(8192); + for (int i = 0; i < 8192; i++) { + sb.append('a'); + } + final String aKey = "key1=" + sb.toString(); +// final String aKey = "key1=Amélie"; + + baggageHeaderValue = aKey; + carrier = new HashMap<>(); + carrier.put(BaggagePropagator.BAGGAGE_KEY, baggageHeaderValue); + visitor = ContextVisitors.stringValuesMap(); + setter = new MapCarrierAccessor(); + test = false; + } + + @Benchmark + public void propagate(Blackhole blackhole) { + Context extractedContext = propagator.extract(context, carrier, visitor); + carrier = new HashMap<>(); +// blackhole.consume(baggage.getW3cHeader()); +// blackhole.consume(extractedContext); + propagator.inject(extractedContext, carrier, setter); +// if (!test){ +// Baggage baggage = Baggage.fromContext(extractedContext); +// System.out.println("w3c header: " + baggage.getW3cHeader()); +// Map baggageMap = baggage.asMap(); +// for(String key : baggageMap.keySet()){ +// System.out.println(key + ":" + baggageMap.get(key)); +// } +// System.out.println("Carrier.size: " + carrier.size()); +// for (String key : carrier.keySet()){ +// System.out.println("Carrier.keyset: " + key); +// System.out.println("Carrier: " + carrier.get(key)); +// } +// test = true; +// } + +// blackhole.consume(baggage); + } +} From ea197077916cb4cf84efd51d9544000f84f8d63e Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 30 Apr 2025 09:44:59 -0400 Subject: [PATCH 14/18] spotless --- .../baggage/BaggagePropagatorBenchmark.java | 47 +++++++++---------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/dd-trace-core/src/jmh/java/datadog/trace/core/baggage/BaggagePropagatorBenchmark.java b/dd-trace-core/src/jmh/java/datadog/trace/core/baggage/BaggagePropagatorBenchmark.java index b699a8d8a0e..f99f097cb6d 100644 --- a/dd-trace-core/src/jmh/java/datadog/trace/core/baggage/BaggagePropagatorBenchmark.java +++ b/dd-trace-core/src/jmh/java/datadog/trace/core/baggage/BaggagePropagatorBenchmark.java @@ -6,12 +6,11 @@ import datadog.context.Context; import datadog.context.propagation.CarrierSetter; import datadog.context.propagation.CarrierVisitor; +import datadog.trace.bootstrap.instrumentation.api.ContextVisitors; import java.util.HashMap; import java.util.Map; import java.util.function.BiConsumer; - -import datadog.trace.bootstrap.instrumentation.api.Baggage; -import datadog.trace.bootstrap.instrumentation.api.ContextVisitors; +import java.util.logging.Logger; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; @@ -26,8 +25,6 @@ import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; -import java.util.logging.Logger; - @State(Scope.Benchmark) @Warmup(iterations = 4, time = 30, timeUnit = SECONDS) @Measurement(iterations = 4, time = 30, timeUnit = SECONDS) @@ -74,13 +71,13 @@ public void setUp() { sb.append('a'); } final String aKey = "key1=" + sb.toString(); -// final String aKey = "key1=Amélie"; + // final String aKey = "key1=Amélie"; baggageHeaderValue = aKey; carrier = new HashMap<>(); carrier.put(BaggagePropagator.BAGGAGE_KEY, baggageHeaderValue); visitor = ContextVisitors.stringValuesMap(); - setter = new MapCarrierAccessor(); + setter = new MapCarrierAccessor(); test = false; } @@ -88,24 +85,24 @@ public void setUp() { public void propagate(Blackhole blackhole) { Context extractedContext = propagator.extract(context, carrier, visitor); carrier = new HashMap<>(); -// blackhole.consume(baggage.getW3cHeader()); -// blackhole.consume(extractedContext); + // blackhole.consume(baggage.getW3cHeader()); + // blackhole.consume(extractedContext); propagator.inject(extractedContext, carrier, setter); -// if (!test){ -// Baggage baggage = Baggage.fromContext(extractedContext); -// System.out.println("w3c header: " + baggage.getW3cHeader()); -// Map baggageMap = baggage.asMap(); -// for(String key : baggageMap.keySet()){ -// System.out.println(key + ":" + baggageMap.get(key)); -// } -// System.out.println("Carrier.size: " + carrier.size()); -// for (String key : carrier.keySet()){ -// System.out.println("Carrier.keyset: " + key); -// System.out.println("Carrier: " + carrier.get(key)); -// } -// test = true; -// } + // if (!test){ + // Baggage baggage = Baggage.fromContext(extractedContext); + // System.out.println("w3c header: " + baggage.getW3cHeader()); + // Map baggageMap = baggage.asMap(); + // for(String key : baggageMap.keySet()){ + // System.out.println(key + ":" + baggageMap.get(key)); + // } + // System.out.println("Carrier.size: " + carrier.size()); + // for (String key : carrier.keySet()){ + // System.out.println("Carrier.keyset: " + key); + // System.out.println("Carrier: " + carrier.get(key)); + // } + // test = true; + // } -// blackhole.consume(baggage); + // blackhole.consume(baggage); } -} +} From 7b258fcdca1cc4773007b40f46f77edfc731644f Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 1 May 2025 15:19:07 -0400 Subject: [PATCH 15/18] using Bytecode bridge for instrumentations --- .../AkkaHttpSingleRequestInstrumentation.java | 8 ++++++-- .../aws/v1/sqs/SqsInterceptor.java | 3 ++- .../aws/v2/sqs/SqsInterceptor.java | 3 ++- .../CommonsHttpClientInstrumentation.java | 7 +++++-- .../client/AsyncHttpClientInstrumentation.java | 11 +++-------- .../jms/JMSMessageProducerInstrumentation.java | 8 +++++--- .../KafkaProducerInstrumentation.java | 16 +++++++++++----- .../kafka_clients/TracingIterator.java | 5 ++++- .../PekkoHttpSingleRequestInstrumentation.java | 8 ++++++-- .../RequestDispatcherInstrumentation.java | 6 ++++-- 10 files changed, 48 insertions(+), 27 deletions(-) diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java index 345b5b007f5..39c478baf18 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java @@ -15,12 +15,12 @@ import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; import com.google.auto.service.AutoService; -import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import net.bytebuddy.asm.Advice; import scala.concurrent.Future; @@ -81,7 +81,11 @@ public static AgentScope methodEnter( if (request != null) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, headers); + defaultPropagator() + .inject( + Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext), + request, + headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java index 31cb350a897..c602bbc54ba 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java @@ -23,6 +23,7 @@ import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; @@ -84,7 +85,7 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request private Context newContext(AmazonWebServiceRequest request, String queueUrl) { AgentSpan span = newSpan(request); DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(queueUrl)); - return Context.current().with(span).with(dsmContext); + return Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext); } private AgentSpan newSpan(AmazonWebServiceRequest request) { diff --git a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java index a308fbd8232..af06d06e70c 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java @@ -14,6 +14,7 @@ import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstanceStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; @@ -96,7 +97,7 @@ private datadog.context.Context getContext( ExecutionAttributes executionAttributes, String queueUrl) { AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(queueUrl)); - return datadog.context.Context.current().with(span).with(dsmContext); + return Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext); } private LinkedHashMap getTags(String queueUrl) { diff --git a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java index fc74e84e0ba..9112b9b7fdd 100644 --- a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java @@ -14,13 +14,13 @@ import com.google.auto.service.AutoService; import datadog.appsec.api.blocking.BlockingException; -import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import net.bytebuddy.asm.Advice; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; @@ -72,7 +72,10 @@ public static AgentScope methodEnter(@Advice.Argument(1) final HttpMethod httpMe DECORATE.onRequest(span, httpMethod); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); defaultPropagator() - .inject(Context.current().with(span).with(dsmContext), httpMethod, SETTER); + .inject( + Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext), + httpMethod, + SETTER); return scope; } catch (BlockingException e) { diff --git a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java index f154b670806..9483372c4a2 100644 --- a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java @@ -20,6 +20,7 @@ import datadog.trace.api.InstrumenterConfig; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import java.util.Collections; import net.bytebuddy.asm.Advice; import org.slf4j.Logger; @@ -74,15 +75,9 @@ public static void onEnter( AgentSpan span = startSpan(HTTP_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - System.err.println("why can I not see this message?"); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - Context current = Context.current(); - // LOGGER.error("1" + current); - // current = current.with(span); - // LOGGER.error("2" + current); - // current = current.with(dsmContext); - // LOGGER.error("3" + current); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + Context current = Java8BytecodeBridge.getCurrentContext(); + defaultPropagator().inject(current.with(span).with(dsmContext), request, SETTER); handler = new AsyncHandlerAdapter<>(span, parentSpan, handler); } } diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java index 68bfa5fbdb3..6a07d70b1fb 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java @@ -13,13 +13,13 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.Config; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.bootstrap.instrumentation.jms.MessageProducerState; import javax.jms.Destination; import javax.jms.Message; @@ -95,7 +95,8 @@ public static AgentScope beforeSend( if (JMSDecorator.canInject(message)) { if (Config.get().isJmsPropagationEnabled() && (null == producerState || !producerState.isPropagationDisabled())) { - defaultPropagator().inject(Context.current().with(span), message, SETTER); + defaultPropagator() + .inject(Java8BytecodeBridge.getCurrentContext().with(span), message, SETTER); } if (TIME_IN_QUEUE_ENABLED) { if (null != producerState) { @@ -142,7 +143,8 @@ public static AgentScope beforeSend( if (JMSDecorator.canInject(message)) { if (Config.get().isJmsPropagationEnabled() && !Config.get().isJmsPropagationDisabledForDestination(destinationName)) - defaultPropagator().inject(Context.current().with(span), message, SETTER); + defaultPropagator() + .inject(Java8BytecodeBridge.getCurrentContext().with(span), message, SETTER); if (TIME_IN_QUEUE_ENABLED) { MessageProducerState producerState = InstrumentationContext.get(MessageProducer.class, MessageProducerState.class) diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java index c5a3cdbaa8b..cd0e12a063c 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java @@ -25,7 +25,6 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; -import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; @@ -38,6 +37,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import java.util.LinkedHashMap; import java.util.Map; import net.bytebuddy.asm.Advice; @@ -154,7 +154,8 @@ public static AgentScope onEnter( sortedTags.put(TOPIC_TAG, record.topic()); sortedTags.put(TYPE_TAG, "kafka"); try { - defaultPropagator().inject(Context.current().with(span), record.headers(), setter); + defaultPropagator() + .inject(Java8BytecodeBridge.getCurrentContext().with(span), record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { // inject the context in the headers, but delay sending the stats until we know the @@ -163,7 +164,9 @@ public static AgentScope onEnter( Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); dsmPropagator.inject( - Context.current().with(span).with(dsmContext), record.headers(), setter); + Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext), + record.headers(), + setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } catch (final IllegalStateException e) { @@ -177,13 +180,16 @@ record = record.value(), record.headers()); - defaultPropagator().inject(Context.current().with(span), record.headers(), setter); + defaultPropagator() + .inject(Java8BytecodeBridge.getCurrentContext().with(span), record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); dsmPropagator.inject( - Context.current().with(span).with(dsmContext), record.headers(), setter); + Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext), + record.headers(), + setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java index 7f76019d7f1..47a0ca946c9 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java @@ -29,6 +29,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import java.util.Iterator; import java.util.LinkedHashMap; import org.apache.kafka.clients.consumer.ConsumerRecord; @@ -129,7 +130,9 @@ protected void startNewRecordSpan(ConsumerRecord val) { Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); DataStreamsContext dsmContext = create(sortedTags, val.timestamp(), payloadSize); dsmPropagator.inject( - Context.current().with(span).with(dsmContext), val.headers(), SETTER); + Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext), + val.headers(), + SETTER); } } } else { diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java index f3c8dcab64a..a89b7a55473 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java @@ -12,12 +12,12 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; -import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import net.bytebuddy.asm.Advice; import org.apache.pekko.http.scaladsl.HttpExt; import org.apache.pekko.http.scaladsl.model.HttpRequest; @@ -82,7 +82,11 @@ public static AgentScope methodEnter( if (request != null) { DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, headers); + defaultPropagator() + .inject( + Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext), + request, + headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java index d300139b64f..10d9d8fe8a8 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java @@ -23,7 +23,6 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; -import datadog.context.Context; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.datastreams.DataStreamsContext; @@ -32,6 +31,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.ServletRequest; @@ -124,7 +124,9 @@ public static AgentScope start( // In case we lose context, inject trace into to the request. DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(Context.current().with(span).with(dsmContext), request, SETTER); + defaultPropagator() + .inject( + Java8BytecodeBridge.getCurrentContext().with(span).with(dsmContext), request, SETTER); // temporarily replace from request to avoid spring resource name bubbling up: requestSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); From 882611bdc76a8684c10b71eb8af7dbaae57b4329 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 2 May 2025 13:03:09 -0400 Subject: [PATCH 16/18] reverting activateNext changes --- .../instrumentation/aws/v1/sqs/TracingIterator.java | 6 +----- .../jms/JMSMessageConsumerInstrumentation.java | 10 +--------- .../instrumentation/kafka_clients/TracingIterator.java | 6 +----- .../kafka_clients38/TracingIterator.java | 6 +----- 4 files changed, 4 insertions(+), 24 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java index ca147a74919..d6f3a585687 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java @@ -103,11 +103,7 @@ protected void startNewMessageSpan(Message message) { CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, queueUrl); - if (extractedContext == null) { - activateNext(span); - } else { - extractedContext.with(span).attach(); - } + activateNext(span); if (queueSpan != null) { BROKER_DECORATE.beforeFinish(queueSpan); queueSpan.finish(); diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java index 47a4afbe043..4cba281dc4b 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java @@ -149,15 +149,7 @@ public static void afterReceive( CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, message, consumerState.getConsumerResourceName()); CONSUMER_DECORATE.onError(span, throwable); - - if (extractedContext == null) { - activateNext(span); - } else { - extractedContext - .with(span) - .attach(); // scope is left open until next message or it times out - } - + activateNext(span); SessionState sessionState = consumerState.getSessionState(); if (sessionState.isClientAcknowledge()) { // consumed spans will be finished by a call to Message.acknowledge diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java index 47a0ca946c9..72940f43146 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java @@ -143,11 +143,7 @@ protected void startNewRecordSpan(ConsumerRecord val) { } decorator.afterStart(span); decorator.onConsume(span, val, group, bootstrapServers); - if (extractedContext == null) { - activateNext(span); - } else { - extractedContext.with(span).attach(); - } + activateNext(span); if (null != queueSpan) { queueSpan.finish(); } diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java index b02f2796641..5928ecd6762 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java @@ -140,11 +140,7 @@ protected void startNewRecordSpan(ConsumerRecord val) { } decorator.afterStart(span); decorator.onConsume(span, val, group, bootstrapServers); - if (extractedContext == null) { - activateNext(span); - } else { - extractedContext.with(span).attach(); - } + activateNext(span); if (null != queueSpan) { queueSpan.finish(); } From f3e8a5fd0da63b7701c8d27fd35b580c65828da6 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 2 May 2025 13:17:29 -0400 Subject: [PATCH 17/18] attempt to use BytecodeBridge in extract --- .../instrumentation/decorator/HttpServerDecorator.java | 4 +++- .../armeria/grpc/server/TracingServerInterceptor.java | 4 +++- .../trace/instrumentation/aws/v1/sqs/TracingIterator.java | 4 +++- .../trace/instrumentation/aws/v2/sqs/TracingIterator.java | 4 +++- .../grpc/server/TracingServerInterceptor.java | 4 +++- .../trace/instrumentation/jms/DatadogMessageListener.java | 5 ++++- .../jms/JMSMessageConsumerInstrumentation.java | 5 ++++- .../jms/MDBMessageConsumerInstrumentation.java | 4 +++- .../instrumentation/kafka_clients/TracingIterator.java | 3 ++- .../instrumentation/kafka_clients38/TracingIterator.java | 4 +++- .../kafka_streams/KafkaStreamTaskInstrumentation.java | 7 +++++-- .../instrumentation/rabbitmq/amqp/RabbitDecorator.java | 5 ++++- .../SpringMessageHandlerInstrumentation.java | 5 ++++- 13 files changed, 44 insertions(+), 14 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java index 95a0a07fb1d..518475fc853 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java @@ -27,6 +27,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.TagContext; import datadog.trace.bootstrap.instrumentation.api.Tags; @@ -131,7 +132,8 @@ public Context extract(REQUEST_CARRIER carrier) { return null; } - return Propagators.defaultPropagator().extract(Context.root(), carrier, getter); + return Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getRootContext(), carrier, getter); } /** Deprecated. Use {@link #startSpan(String, Object, AgentSpanContext.Extracted)} instead. */ diff --git a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java index 4654dcbcbc5..6a1bd4bb879 100644 --- a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java +++ b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java @@ -24,6 +24,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.bootstrap.instrumentation.api.TagContext; import io.grpc.ForwardingServerCall; import io.grpc.ForwardingServerCallListener; @@ -64,7 +65,8 @@ public ServerCall.Listener interceptCall( } Context extractedContext = - Propagators.defaultPropagator().extract(Context.root(), headers, GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), headers, GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); AgentSpanContext extractedSpanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java index d6f3a585687..98168f606e1 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java @@ -24,6 +24,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import java.util.Iterator; import java.util.LinkedHashMap; import org.slf4j.Logger; @@ -69,7 +70,8 @@ protected void startNewMessageSpan(Message message) { AgentSpanContext spanContext = null; if (Config.get().isSqsPropagationEnabled()) { extractedContext = - Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), message, GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); spanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java index e05b7e59b3f..42f740392e4 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java @@ -23,6 +23,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import java.util.Iterator; import java.util.LinkedHashMap; import org.slf4j.Logger; @@ -71,7 +72,8 @@ protected void startNewMessageSpan(Message message) { AgentSpanContext spanContext = null; if (Config.get().isSqsPropagationEnabled()) { extractedContext = - Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), message, GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); spanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java index 7181f1feec3..2d763cfb7b9 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java @@ -24,6 +24,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.bootstrap.instrumentation.api.TagContext; import io.grpc.ForwardingServerCall; import io.grpc.ForwardingServerCallListener; @@ -64,7 +65,8 @@ public ServerCall.Listener interceptCall( } final Context extractedContext = - Propagators.defaultPropagator().extract(Context.root(), headers, GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), headers, GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); AgentSpanContext spanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/DatadogMessageListener.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/DatadogMessageListener.java index 29dcf50eb33..dbd5d254929 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/DatadogMessageListener.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/DatadogMessageListener.java @@ -16,6 +16,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.bootstrap.instrumentation.jms.MessageConsumerState; import datadog.trace.bootstrap.instrumentation.jms.SessionState; import javax.jms.Message; @@ -42,7 +43,9 @@ public void onMessage(Message message) { Context extractedContext = null; AgentSpanContext propagatedContext = null; if (!consumerState.isPropagationDisabled()) { - extractedContext = Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + extractedContext = + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), message, GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); propagatedContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java index 4cba281dc4b..7b882af4549 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java @@ -25,6 +25,7 @@ import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.bootstrap.instrumentation.jms.MessageConsumerState; import datadog.trace.bootstrap.instrumentation.jms.SessionState; import javax.jms.Message; @@ -122,7 +123,9 @@ public static void afterReceive( Context extractedContext = null; AgentSpanContext propagatedContext = null; if (!consumerState.isPropagationDisabled()) { - extractedContext = Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + extractedContext = + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), message, GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); propagatedContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java index 6743bcdf49e..58acfdf2a43 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java @@ -21,6 +21,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; @@ -68,7 +69,8 @@ public static AgentScope methodEnter(@Advice.Argument(0) final Message message) return null; } final Context extractedContext = - Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), message, GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); final AgentSpanContext propagatedContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java index 72940f43146..4f37b14df64 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java @@ -87,7 +87,8 @@ protected void startNewRecordSpan(ConsumerRecord val) { Context extractedContext = null; if (!Config.get().isKafkaClientPropagationDisabledForTopic(val.topic())) { extractedContext = - Propagators.defaultPropagator().extract(Context.root(), val.headers(), GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), val.headers(), GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); final AgentSpanContext spanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java index 5928ecd6762..2a90f3460c1 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java @@ -24,6 +24,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.instrumentation.kafka_common.StreamingContext; import datadog.trace.instrumentation.kafka_common.Utils; import java.util.Iterator; @@ -83,7 +84,8 @@ protected void startNewRecordSpan(ConsumerRecord val) { Context extractedContext = null; if (!Config.get().isKafkaClientPropagationDisabledForTopic(val.topic())) { extractedContext = - Propagators.defaultPropagator().extract(Context.root(), val.headers(), GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), val.headers(), GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); final AgentSpanContext spanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java index c8c4e3e00c6..00686d825e3 100644 --- a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java @@ -42,6 +42,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.instrumentation.kafka_clients.TracingIterableDelegator; import java.util.LinkedHashMap; import java.util.Map; @@ -236,7 +237,8 @@ public static void start( Context extractedContext = null; if (!Config.get().isKafkaClientPropagationDisabledForTopic(record.topic())) { extractedContext = - Propagators.defaultPropagator().extract(Context.root(), record, SR_GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), record, SR_GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); final AgentSpanContext spanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); @@ -319,7 +321,8 @@ public static void start( Context extractedContext = null; if (!Config.get().isKafkaClientPropagationDisabledForTopic(record.topic())) { extractedContext = - Propagators.defaultPropagator().extract(Context.root(), record, PR_GETTER); + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), record, PR_GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); final AgentSpanContext spanContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java index 29b76dbfd89..43b9bcd64b4 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java @@ -211,7 +211,10 @@ public static AgentScope startReceivingSpan( if (null != headers) { extractedContext = Propagators.defaultPropagator() - .extract(Context.root(), headers, ContextVisitors.objectValuesMap()); + .extract( + Java8BytecodeBridge.getCurrentContext(), + headers, + ContextVisitors.objectValuesMap()); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); parentContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); diff --git a/dd-java-agent/instrumentation/spring-messaging-4/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java b/dd-java-agent/instrumentation/spring-messaging-4/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java index c2ab2cb1fe0..1a90ced4c94 100644 --- a/dd-java-agent/instrumentation/spring-messaging-4/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-messaging-4/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java @@ -18,6 +18,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import net.bytebuddy.asm.Advice; import org.springframework.messaging.Message; import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; @@ -66,7 +67,9 @@ public static AgentScope onEnter( parentContext = parent.context(); } else { // otherwise try to re-extract the message context to avoid disconnected trace - extractedContext = Propagators.defaultPropagator().extract(Context.root(), message, GETTER); + extractedContext = + Propagators.defaultPropagator() + .extract(Java8BytecodeBridge.getCurrentContext(), message, GETTER); final AgentSpan extractedSpan = AgentSpan.fromContext(extractedContext); parentContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); From 6d2a2616016d27fb4ade0100577e691ee60b2df2 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 2 May 2025 14:53:53 -0400 Subject: [PATCH 18/18] updating import for rabbit decorator --- .../trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java index 43b9bcd64b4..8df6f3fe335 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java @@ -27,6 +27,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.ContextVisitors; import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.bootstrap.instrumentation.api.Tags; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.MessagingClientDecorator;