From 54cdafc3a2799aa3bb994868b6d04f03ee248be4 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 6 May 2025 15:44:16 -0400 Subject: [PATCH 01/33] supporting baggage in weblog related instrumentations resolve merge conflicts --- .../decorator/HttpServerDecorator.java | 42 +++++++++++++++++++ .../okhttp3/TracingInterceptor.java | 4 +- .../tomcat/TomcatServerInstrumentation.java | 13 +++--- 3 files changed, 52 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 29e33a3dd8c..d6f5c2e08f2 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 @@ -4,10 +4,14 @@ 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.traceConfig; 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.ContextScope; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.DDTags; import datadog.trace.api.function.TriConsumer; @@ -24,6 +28,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.Baggage; import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; @@ -132,6 +137,15 @@ public AgentSpanContext.Extracted extract(REQUEST_CARRIER carrier) { return extractContextAndGetSpanContext(carrier, getter); } + public Context extractContext(REQUEST_CARRIER carrier) { + AgentPropagation.ContextVisitor getter = getter(); + if (null == carrier || null == getter) { + return null; + } + Context context = Propagators.defaultPropagator().extract(Context.root(), carrier, getter); + return context; + } + /** Deprecated. Use {@link #startSpan(String, Object, AgentSpanContext.Extracted)} instead. */ @Deprecated public AgentSpan startSpan(REQUEST_CARRIER carrier, AgentSpanContext.Extracted context) { @@ -155,6 +169,34 @@ public AgentSpan startSpan( return span; } + public AgentSpan startSpan( + String instrumentationName, REQUEST_CARRIER carrier, Context context) { + AgentSpan extractedSpan = AgentSpan.fromContext(context); + AgentSpanContext.Extracted extractedContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + AgentSpan span = + tracer() + .startSpan(instrumentationName, spanName(), callIGCallbackStart(extractedContext)) + .setMeasured(true); + Flow flow = callIGCallbackRequestHeaders(span, carrier); + if (flow.getAction() instanceof Flow.Action.RequestBlockingAction) { + span.setRequestBlockingAction((Flow.Action.RequestBlockingAction) flow.getAction()); + } + AgentPropagation.ContextVisitor getter = getter(); + if (null != carrier && null != getter) { + tracer().getDataStreamsMonitoring().setCheckpoint(span, fromTags(SERVER_PATHWAY_EDGE_TAGS)); + } + return span; + } + + /* Verify whether we have only span contexts or more contexts */ + public ContextScope activateScope(Context context, AgentSpan span){ + Baggage baggage = Baggage.fromContext(context); + if (baggage == null) { + return span.attach(); + } + return context.with(span).attach(); + } + public AgentSpan onRequest( final AgentSpan span, final CONNECTION connection, 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..0a6494fb854 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,6 +8,7 @@ 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; @@ -31,7 +32,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); + Context context = Context.current(); + defaultPropagator().inject(context.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..00062586e31 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,7 +21,6 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.api.gateway.Flow; -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; @@ -114,7 +115,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ServiceAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request req) { + public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Request req) { Object existingSpan = req.getAttribute(DD_SPAN_ATTRIBUTE); if (existingSpan instanceof AgentSpan) { @@ -122,11 +123,11 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request return activateSpan((AgentSpan) existingSpan); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); + final Context extractedContext = DECORATE.extractContext(req); req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); - final AgentSpan span = DECORATE.startSpan(req, extractedContext); - final AgentScope scope = activateSpan(span); + final AgentSpan span = DECORATE.startSpan("http-server", req, extractedContext); + final ContextScope scope = DECORATE.activateScope(extractedContext, span); // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); @@ -137,7 +138,7 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) - public static void closeScope(@Advice.Enter final AgentScope scope) { + public static void closeScope(@Advice.Enter final ContextScope scope) { scope.close(); } From 16094c942c77de7b155821bb17bab0a1a874dead Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 6 May 2025 16:07:46 -0400 Subject: [PATCH 02/33] simplifying startSpan --- .../decorator/HttpServerDecorator.java | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 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 d6f5c2e08f2..3525a6f5718 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 @@ -4,7 +4,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.traceConfig; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -169,27 +168,15 @@ public AgentSpan startSpan( return span; } - public AgentSpan startSpan( - String instrumentationName, REQUEST_CARRIER carrier, Context context) { + public AgentSpan startSpan(String instrumentationName, REQUEST_CARRIER carrier, Context context) { AgentSpan extractedSpan = AgentSpan.fromContext(context); - AgentSpanContext.Extracted extractedContext = extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); - AgentSpan span = - tracer() - .startSpan(instrumentationName, spanName(), callIGCallbackStart(extractedContext)) - .setMeasured(true); - Flow flow = callIGCallbackRequestHeaders(span, carrier); - if (flow.getAction() instanceof Flow.Action.RequestBlockingAction) { - span.setRequestBlockingAction((Flow.Action.RequestBlockingAction) flow.getAction()); - } - AgentPropagation.ContextVisitor getter = getter(); - if (null != carrier && null != getter) { - tracer().getDataStreamsMonitoring().setCheckpoint(span, fromTags(SERVER_PATHWAY_EDGE_TAGS)); - } - return span; + AgentSpanContext.Extracted extractedContext = + extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + return startSpan(instrumentationName, carrier, extractedContext); } /* Verify whether we have only span contexts or more contexts */ - public ContextScope activateScope(Context context, AgentSpan span){ + public ContextScope activateScope(Context context, AgentSpan span) { Baggage baggage = Baggage.fromContext(context); if (baggage == null) { return span.attach(); From ed234d3d239b35d7b4cbd17242d6043cf1564f79 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 6 May 2025 16:20:28 -0400 Subject: [PATCH 03/33] adding support for AzureFunctionsInstrumentation --- .../decorator/HttpServerDecorator.java | 6 ++--- .../AzureFunctionsInstrumentation.java | 23 +++++++++++-------- .../tomcat/TomcatServerInstrumentation.java | 4 +++- 3 files changed, 18 insertions(+), 15 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 3525a6f5718..e3abfe80cb1 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 @@ -168,11 +168,9 @@ public AgentSpan startSpan( return span; } - public AgentSpan startSpan(String instrumentationName, REQUEST_CARRIER carrier, Context context) { + public AgentSpanContext.Extracted getExtractedSpanContext(Context context) { AgentSpan extractedSpan = AgentSpan.fromContext(context); - AgentSpanContext.Extracted extractedContext = - extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); - return startSpan(instrumentationName, carrier, extractedContext); + return extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); } /* Verify whether we have only span contexts or more contexts */ 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..abe348ba0b8 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; @@ -14,11 +13,11 @@ import com.microsoft.azure.functions.ExecutionContext; import com.microsoft.azure.functions.HttpRequestMessage; import com.microsoft.azure.functions.HttpResponseMessage; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -64,24 +63,28 @@ public void methodAdvice(MethodTransformer transformer) { public static class AzureFunctionsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope 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.extractContext(request); + final AgentSpan span = + DECORATE.startSpan( + "http-server", request, DECORATE.getExtractedSpanContext(extractedContext)); DECORATE.afterStart(span, context.getFunctionName()); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequest( + span, request, request, DECORATE.getExtractedSpanContext(extractedContext)); HTTP_RESOURCE_DECORATOR.withRoute( span, request.getHttpMethod().name(), request.getUri().getPath()); - return activateSpan(span); + return DECORATE.activateScope(extractedContext, span); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final HttpResponseMessage response, @Advice.Thrown final Throwable throwable) { - final AgentSpan span = scope.span(); + final Context context = scope.context(); + final AgentSpan span = AgentSpan.fromContext(context); DECORATE.onError(span, throwable); DECORATE.onResponse(span, response); DECORATE.beforeFinish(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 00062586e31..72676a9b79d 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 @@ -126,7 +126,9 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque final Context extractedContext = DECORATE.extractContext(req); req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); - final AgentSpan span = DECORATE.startSpan("http-server", req, extractedContext); + final AgentSpan span = + DECORATE.startSpan( + "http-server", req, DECORATE.getExtractedSpanContext(extractedContext)); final ContextScope scope = DECORATE.activateScope(extractedContext, span); // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); From a7a35a62c622549d96cedff9e0e7b9468705c134 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 6 May 2025 16:25:08 -0400 Subject: [PATCH 04/33] cleanup --- .../instrumentation/decorator/HttpServerDecorator.java | 3 +-- .../trace/instrumentation/okhttp3/TracingInterceptor.java | 4 ++-- 2 files changed, 3 insertions(+), 4 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 e3abfe80cb1..0bd57313bf3 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 @@ -141,8 +141,7 @@ public Context extractContext(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/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 0a6494fb854..3732f695486 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 @@ -32,8 +32,8 @@ public Response intercept(final Chain chain) throws IOException { final Request.Builder requestBuilder = chain.request().newBuilder(); DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - Context context = Context.current(); - defaultPropagator().inject(context.with(span).with(dsmContext), requestBuilder, SETTER); + defaultPropagator() + .inject(Context.current().with(span).with(dsmContext), requestBuilder, SETTER); final Response response; try { From 8a5c90f5d765dd4df5d13f056af248097339ddf1 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 6 May 2025 16:50:03 -0400 Subject: [PATCH 05/33] updateing grizzly instrumentations --- .../GrizzlyHttpHandlerInstrumentation.java | 20 +++++++++---------- .../grizzlyhttp232/GrizzlyDecorator.java | 14 ++++++------- 2 files changed, 16 insertions(+), 18 deletions(-) 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..45a3a0be8d3 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,21 +1,20 @@ 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; 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.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.api.gateway.Flow; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.glassfish.grizzly.http.server.Request; import org.glassfish.grizzly.http.server.Response; @@ -66,19 +65,19 @@ public static class HandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, skipOn = Advice.OnNonDefaultValue.class) public static boolean /* skip body */ methodEnter( - @Advice.Local("agentScope") AgentScope scope, + @Advice.Local("contextScope") ContextScope scope, @Advice.Argument(0) final Request request, @Advice.Argument(1) final Response response) { if (request.getAttribute(DD_SPAN_ATTRIBUTE) != null) { return false; } - final AgentSpanContext.Extracted parentContext = DECORATE.extract(request); - final AgentSpan span = DECORATE.startSpan(request, parentContext); + final Context context = DECORATE.extractContext(request); + final AgentSpan span = DECORATE.startSpan(request, DECORATE.getExtractedSpanContext(context)); DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, parentContext); + DECORATE.onRequest(span, request, request, DECORATE.getExtractedSpanContext(context)); - scope = activateSpan(span); + scope = DECORATE.activateScope(context, span); request.setAttribute(DD_SPAN_ATTRIBUTE, span); request.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); @@ -101,14 +100,15 @@ public static class HandleAdvice { public static void methodExit( @Advice.Enter boolean skippedBody, @Advice.Return(readOnly = false) boolean retVal, - @Advice.Local("agentScope") AgentScope scope, + @Advice.Local("contextScope") ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } if (throwable != null) { - final AgentSpan span = scope.span(); + final Context context = scope.context(); + final AgentSpan span = AgentSpan.fromContext(context); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); span.finish(); 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..cbba815f080 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,17 +1,15 @@ 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.context.ContextScope; import datadog.trace.api.gateway.BlockResponseFunction; import datadog.trace.api.gateway.Flow; import datadog.trace.api.gateway.RequestContext; import datadog.trace.api.internal.TraceSegment; import datadog.trace.bootstrap.ActiveSubsystems; 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.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -114,13 +112,13 @@ 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); + Context context = DECORATE.extractContext(httpRequest); + AgentSpan span = DECORATE.startSpan(httpRequest, DECORATE.getExtractedSpanContext(context)); + ContextScope scope = DECORATE.activateScope(context, span); 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, DECORATE.getExtractedSpanContext(context)); Flow.Action.RequestBlockingAction rba = span.getRequestBlockingAction(); if (rba != null && thiz instanceof HttpServerFilter) { From aacc0a068734535bb9058529c4a314323270a925 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 7 May 2025 13:04:01 -0400 Subject: [PATCH 06/33] updating PR comments and addressing failing unit tests --- .../decorator/HttpServerDecorator.java | 18 +++++---------- .../AzureFunctionsInstrumentation.java | 23 ++++++++----------- .../GrizzlyHttpHandlerInstrumentation.java | 20 ++++++++-------- .../grizzlyhttp232/GrizzlyDecorator.java | 14 ++++++----- .../tomcat/TomcatServerInstrumentation.java | 11 +++++---- 5 files changed, 40 insertions(+), 46 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 0bd57313bf3..4b77d83440e 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 @@ -9,7 +9,6 @@ import datadog.appsec.api.blocking.BlockingException; import datadog.context.Context; -import datadog.context.ContextScope; import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.DDTags; @@ -27,7 +26,6 @@ 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.api.ErrorPriorities; import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; @@ -128,6 +126,7 @@ protected AgentTracer.TracerAPI tracer() { return AgentTracer.get(); } + /** Deprecated. Use {@link #extractContext(REQUEST_CARRIER)} instead. */ public AgentSpanContext.Extracted extract(REQUEST_CARRIER carrier) { AgentPropagation.ContextVisitor getter = getter(); if (null == carrier || null == getter) { @@ -144,7 +143,7 @@ public Context extractContext(REQUEST_CARRIER carrier) { return Propagators.defaultPropagator().extract(Context.root(), carrier, getter); } - /** Deprecated. Use {@link #startSpan(String, Object, AgentSpanContext.Extracted)} instead. */ + /** Deprecated. Use {@link #startSpan(String, Object, Context)} instead. */ @Deprecated public AgentSpan startSpan(REQUEST_CARRIER carrier, AgentSpanContext.Extracted context) { return startSpan("http-server", carrier, context); @@ -167,20 +166,15 @@ public AgentSpan startSpan( return span; } + public AgentSpan startSpan(String instrumentationName, REQUEST_CARRIER carrier, Context context) { + return startSpan(instrumentationName, carrier, getExtractedSpanContext(context)); + } + public AgentSpanContext.Extracted getExtractedSpanContext(Context context) { AgentSpan extractedSpan = AgentSpan.fromContext(context); return extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); } - /* Verify whether we have only span contexts or more contexts */ - public ContextScope activateScope(Context context, AgentSpan span) { - Baggage baggage = Baggage.fromContext(context); - if (baggage == null) { - return span.attach(); - } - return context.with(span).attach(); - } - public AgentSpan onRequest( final AgentSpan span, final CONNECTION connection, 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 abe348ba0b8..604b5d77c42 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,6 +3,7 @@ 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; @@ -13,11 +14,11 @@ import com.microsoft.azure.functions.ExecutionContext; import com.microsoft.azure.functions.HttpRequestMessage; import com.microsoft.azure.functions.HttpResponseMessage; -import datadog.context.Context; -import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -63,28 +64,24 @@ public void methodAdvice(MethodTransformer transformer) { public static class AzureFunctionsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static ContextScope methodEnter( + public static AgentScope methodEnter( @Advice.Argument(0) final HttpRequestMessage request, @Advice.Argument(1) final ExecutionContext context) { - final Context extractedContext = DECORATE.extractContext(request); - final AgentSpan span = - DECORATE.startSpan( - "http-server", request, DECORATE.getExtractedSpanContext(extractedContext)); + final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); + final AgentSpan span = DECORATE.startSpan(request, extractedContext); DECORATE.afterStart(span, context.getFunctionName()); - DECORATE.onRequest( - span, request, request, DECORATE.getExtractedSpanContext(extractedContext)); + DECORATE.onRequest(span, request, request, extractedContext); HTTP_RESOURCE_DECORATOR.withRoute( span, request.getHttpMethod().name(), request.getUri().getPath()); - return DECORATE.activateScope(extractedContext, span); + return activateSpan(span); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final ContextScope scope, + @Advice.Enter final AgentScope scope, @Advice.Return final HttpResponseMessage response, @Advice.Thrown final Throwable throwable) { - final Context context = scope.context(); - final AgentSpan span = AgentSpan.fromContext(context); + final AgentSpan span = scope.span(); DECORATE.onError(span, throwable); DECORATE.onResponse(span, response); DECORATE.beforeFinish(span); 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 45a3a0be8d3..f556f9bf920 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,20 +1,21 @@ 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; 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.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.api.gateway.Flow; +import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.glassfish.grizzly.http.server.Request; import org.glassfish.grizzly.http.server.Response; @@ -65,19 +66,19 @@ public static class HandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, skipOn = Advice.OnNonDefaultValue.class) public static boolean /* skip body */ methodEnter( - @Advice.Local("contextScope") ContextScope scope, + @Advice.Local("agentScope") AgentScope scope, @Advice.Argument(0) final Request request, @Advice.Argument(1) final Response response) { if (request.getAttribute(DD_SPAN_ATTRIBUTE) != null) { return false; } - final Context context = DECORATE.extractContext(request); - final AgentSpan span = DECORATE.startSpan(request, DECORATE.getExtractedSpanContext(context)); + final AgentSpanContext.Extracted parentContext = DECORATE.extract(request); + final AgentSpan span = DECORATE.startSpan(request, parentContext); DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, DECORATE.getExtractedSpanContext(context)); + DECORATE.onRequest(span, request, request, parentContext); - scope = DECORATE.activateScope(context, span); + scope = activateSpan(span); request.setAttribute(DD_SPAN_ATTRIBUTE, span); request.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); @@ -100,15 +101,14 @@ public static class HandleAdvice { public static void methodExit( @Advice.Enter boolean skippedBody, @Advice.Return(readOnly = false) boolean retVal, - @Advice.Local("contextScope") ContextScope scope, + @Advice.Local("agentScope") AgentScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } if (throwable != null) { - final Context context = scope.context(); - final AgentSpan span = AgentSpan.fromContext(context); + final AgentSpan span = scope.span(); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); span.finish(); 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 cbba815f080..1f8029a0940 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,15 +1,17 @@ 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.context.ContextScope; import datadog.trace.api.gateway.BlockResponseFunction; import datadog.trace.api.gateway.Flow; import datadog.trace.api.gateway.RequestContext; import datadog.trace.api.internal.TraceSegment; import datadog.trace.bootstrap.ActiveSubsystems; 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.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -112,13 +114,13 @@ public static NextAction onHttpCodecFilterExit( } HttpRequestPacket httpRequest = (HttpRequestPacket) httpHeader; HttpResponsePacket httpResponse = httpRequest.getResponse(); - Context context = DECORATE.extractContext(httpRequest); - AgentSpan span = DECORATE.startSpan(httpRequest, DECORATE.getExtractedSpanContext(context)); - ContextScope scope = DECORATE.activateScope(context, span); + AgentSpanContext.Extracted context = DECORATE.extract(httpRequest); + AgentSpan span = DECORATE.startSpan(httpRequest, context); + AgentScope scope = activateSpan(span); DECORATE.afterStart(span); ctx.getAttributes().setAttribute(DD_SPAN_ATTRIBUTE, span); ctx.getAttributes().setAttribute(DD_RESPONSE_ATTRIBUTE, httpResponse); - DECORATE.onRequest(span, httpRequest, httpRequest, DECORATE.getExtractedSpanContext(context)); + DECORATE.onRequest(span, httpRequest, httpRequest, context); Flow.Action.RequestBlockingAction rba = span.getRequestBlockingAction(); if (rba != null && thiz instanceof HttpServerFilter) { 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 72676a9b79d..f67419f81da 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 @@ -124,12 +124,13 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque } final Context extractedContext = DECORATE.extractContext(req); - req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); + // TODO: Migrate setting DD_EXTRACTED_CONTEXT_ATTRIBUTE from AgentSpanContext.Extracted to + // Context + req.setAttribute( + DD_EXTRACTED_CONTEXT_ATTRIBUTE, DECORATE.getExtractedSpanContext(extractedContext)); - final AgentSpan span = - DECORATE.startSpan( - "http-server", req, DECORATE.getExtractedSpanContext(extractedContext)); - final ContextScope scope = DECORATE.activateScope(extractedContext, span); + final AgentSpan span = DECORATE.startSpan("http-server", req, extractedContext); + final ContextScope scope = extractedContext.with(span).attach(); // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); From 2d3aed6b6af71ac1294bd96f6eaacc5b44ad802a Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 7 May 2025 15:16:55 -0400 Subject: [PATCH 07/33] fixing ambiguous overloading tests --- .../instrumentation/decorator/HttpServerDecorator.java | 5 +++-- .../instrumentation/tomcat/TomcatServerInstrumentation.java | 2 +- 2 files changed, 4 insertions(+), 3 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 4b77d83440e..511cb899dce 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 @@ -143,7 +143,7 @@ public Context extractContext(REQUEST_CARRIER carrier) { return Propagators.defaultPropagator().extract(Context.root(), carrier, getter); } - /** Deprecated. Use {@link #startSpan(String, Object, Context)} instead. */ + /** Deprecated. Use {@link #startSpanFromContext(String, Object, Context)} instead. */ @Deprecated public AgentSpan startSpan(REQUEST_CARRIER carrier, AgentSpanContext.Extracted context) { return startSpan("http-server", carrier, context); @@ -166,7 +166,8 @@ public AgentSpan startSpan( return span; } - public AgentSpan startSpan(String instrumentationName, REQUEST_CARRIER carrier, Context context) { + public AgentSpan startSpanFromContext( + String instrumentationName, REQUEST_CARRIER carrier, Context context) { return startSpan(instrumentationName, carrier, getExtractedSpanContext(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 f67419f81da..f3aa751ab62 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 @@ -129,7 +129,7 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque req.setAttribute( DD_EXTRACTED_CONTEXT_ATTRIBUTE, DECORATE.getExtractedSpanContext(extractedContext)); - final AgentSpan span = DECORATE.startSpan("http-server", req, extractedContext); + final AgentSpan span = DECORATE.startSpanFromContext("http-server", req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); From 0968d402803851e34a8816d5902145a21ba93ca8 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 8 May 2025 09:33:13 -0400 Subject: [PATCH 08/33] logging --- .../tomcat/TomcatServerInstrumentation.java | 1 + .../agent/test/base/HttpServerTest.groovy | 3 ++- .../scopemanager/ContinuableScopeManager.java | 24 +++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) 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 f3aa751ab62..297b199f8a4 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 @@ -131,6 +131,7 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque final AgentSpan span = DECORATE.startSpanFromContext("http-server", req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); +// final ContextScope scope = activateSpan(span); // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy index 97c1ef36b83..eea22ea2f00 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy @@ -1044,7 +1044,8 @@ abstract class HttpServerTest extends WithHttpServer { if (isDataStreamsEnabled()) { TEST_DATA_STREAMS_WRITER.waitForGroups(1) } - + println(request) + println(response) expect: if (bubblesResponse()) { assert response.code() == REDIRECT.status 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 5f75a9bd644..41d91399739 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 @@ -36,6 +36,8 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; + +import de.thetaphi.forbiddenapis.SuppressForbidden; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -122,6 +124,7 @@ private AgentScope.Continuation captureSpan(Context context, byte source, AgentS return new ScopeContinuation(this, context, source, traceCollector).register(); } + @SuppressForbidden private AgentScope activate( final AgentSpan span, final byte source, @@ -155,12 +158,20 @@ private AgentScope activate( final ContinuableScope scope = new ContinuableScope(this, context, source, asyncPropagation, createScopeState(context)); + System.out.println("Scope size prior: " + scopeStack.depth()); scopeStack.push(scope); + System.out.println("Scope size prior: " + scopeStack.depth()); healthMetrics.onActivateScope(); + if (iterationKeepAlive > 0 && currentDepth == 0) { + // For context-based scopes, only add them if they're going to be long-lived + scheduleRootIterationScopeCleanup(scopeStack, scope); + } + return scope; } + @SuppressForbidden private AgentScope activate(final Context context) { ScopeStack scopeStack = scopeStack(); @@ -185,9 +196,17 @@ private AgentScope activate(final Context context) { final ContinuableScope scope = new ContinuableScope(this, context, CONTEXT, asyncPropagation, createScopeState(context)); + System.out.println("Context: " + context); + System.out.println("Scope size prior: " + scopeStack.depth()); scopeStack.push(scope); + System.out.println("Scope size prior: " + scopeStack.depth()); healthMetrics.onActivateScope(); + if (iterationKeepAlive > 0 && currentDepth == 0) { + // For context-based scopes, only add them if they're going to be long-lived + scheduleRootIterationScopeCleanup(scopeStack, scope); + } + return scope; } @@ -304,8 +323,13 @@ public void rollbackActiveToCheckpoint() { } } + @SuppressForbidden public AgentSpan activeSpan() { final ContinuableScope active = scopeStack().active(); + + System.out.println("Scope size prior: " + scopeStack().depth()); + System.out.println("scopeStack(): " + scopeStack()); + System.out.println("active: " + active); return active == null ? null : active.span(); } From 7a956f70b8c7df4a46d17f6a93899913a17efb25 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 8 May 2025 09:33:25 -0400 Subject: [PATCH 09/33] logging 2 --- .../datadog/trace/agent/test/base/HttpServerTest.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy index eea22ea2f00..a546c2d365c 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy @@ -1044,8 +1044,8 @@ abstract class HttpServerTest extends WithHttpServer { if (isDataStreamsEnabled()) { TEST_DATA_STREAMS_WRITER.waitForGroups(1) } - println(request) - println(response) +// println(request) +// println(response) expect: if (bubblesResponse()) { assert response.code() == REDIRECT.status From e2fb44cbd5e16fc4580b9ea9d17528964ccaa3c2 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 8 May 2025 10:05:29 -0400 Subject: [PATCH 10/33] spotless --- .../instrumentation/decorator/HttpServerDecorator.java | 1 + .../instrumentation/tomcat/TomcatServerInstrumentation.java | 2 +- .../datadog/trace/agent/test/base/HttpServerTest.groovy | 4 ++-- .../trace/core/scopemanager/ContinuableScopeManager.java | 3 +-- 4 files changed, 5 insertions(+), 5 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 511cb899dce..28a3d1ecd7e 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 @@ -9,6 +9,7 @@ import datadog.appsec.api.blocking.BlockingException; import datadog.context.Context; +import datadog.context.InferredProxyContext; import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.DDTags; 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 297b199f8a4..27db8ea11d3 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 @@ -131,7 +131,7 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque final AgentSpan span = DECORATE.startSpanFromContext("http-server", req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); -// final ContextScope scope = activateSpan(span); + // final ContextScope scope = activateSpan(span); // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy index a546c2d365c..1d061150ba2 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy @@ -1044,8 +1044,8 @@ abstract class HttpServerTest extends WithHttpServer { if (isDataStreamsEnabled()) { TEST_DATA_STREAMS_WRITER.waitForGroups(1) } -// println(request) -// println(response) + // println(request) + // println(response) expect: if (bubblesResponse()) { assert response.code() == REDIRECT.status 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 41d91399739..ad184cdb37a 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 @@ -29,6 +29,7 @@ import datadog.trace.core.monitor.HealthMetrics; import datadog.trace.relocate.api.RatelimitedLogger; import datadog.trace.util.AgentTaskScheduler; +import de.thetaphi.forbiddenapis.SuppressForbidden; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -36,8 +37,6 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; - -import de.thetaphi.forbiddenapis.SuppressForbidden; import org.slf4j.Logger; import org.slf4j.LoggerFactory; From 6b9b6e1bb9e881684030eb3f0236f48805cd2d3e Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 12 May 2025 12:48:00 -0400 Subject: [PATCH 11/33] spotlesS --- .../bootstrap/instrumentation/decorator/HttpServerDecorator.java | 1 - 1 file changed, 1 deletion(-) 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 28a3d1ecd7e..511cb899dce 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 @@ -9,7 +9,6 @@ import datadog.appsec.api.blocking.BlockingException; import datadog.context.Context; -import datadog.context.InferredProxyContext; import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.DDTags; From 0bb7df6225e0a6d58f2388caf904e80c4c27a904 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 12 May 2025 15:23:00 -0400 Subject: [PATCH 12/33] updating tests --- .../tomcat/TomcatServerInstrumentation.java | 2 +- .../agent/test/base/HttpServerTest.groovy | 3 +-- .../scopemanager/ContinuableScopeManager.java | 23 ------------------- 3 files changed, 2 insertions(+), 26 deletions(-) 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 27db8ea11d3..ad9c1f98830 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 @@ -131,7 +131,7 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque final AgentSpan span = DECORATE.startSpanFromContext("http-server", req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); - // final ContextScope scope = activateSpan(span); + // This span is finished when Request.recycle() is called by RequestInstrumentation. DECORATE.afterStart(span); diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy index 1d061150ba2..97c1ef36b83 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy @@ -1044,8 +1044,7 @@ abstract class HttpServerTest extends WithHttpServer { if (isDataStreamsEnabled()) { TEST_DATA_STREAMS_WRITER.waitForGroups(1) } - // println(request) - // println(response) + expect: if (bubblesResponse()) { assert response.code() == REDIRECT.status 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 ad184cdb37a..5f75a9bd644 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 @@ -29,7 +29,6 @@ import datadog.trace.core.monitor.HealthMetrics; import datadog.trace.relocate.api.RatelimitedLogger; import datadog.trace.util.AgentTaskScheduler; -import de.thetaphi.forbiddenapis.SuppressForbidden; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -123,7 +122,6 @@ private AgentScope.Continuation captureSpan(Context context, byte source, AgentS return new ScopeContinuation(this, context, source, traceCollector).register(); } - @SuppressForbidden private AgentScope activate( final AgentSpan span, final byte source, @@ -157,20 +155,12 @@ private AgentScope activate( final ContinuableScope scope = new ContinuableScope(this, context, source, asyncPropagation, createScopeState(context)); - System.out.println("Scope size prior: " + scopeStack.depth()); scopeStack.push(scope); - System.out.println("Scope size prior: " + scopeStack.depth()); healthMetrics.onActivateScope(); - if (iterationKeepAlive > 0 && currentDepth == 0) { - // For context-based scopes, only add them if they're going to be long-lived - scheduleRootIterationScopeCleanup(scopeStack, scope); - } - return scope; } - @SuppressForbidden private AgentScope activate(final Context context) { ScopeStack scopeStack = scopeStack(); @@ -195,17 +185,9 @@ private AgentScope activate(final Context context) { final ContinuableScope scope = new ContinuableScope(this, context, CONTEXT, asyncPropagation, createScopeState(context)); - System.out.println("Context: " + context); - System.out.println("Scope size prior: " + scopeStack.depth()); scopeStack.push(scope); - System.out.println("Scope size prior: " + scopeStack.depth()); healthMetrics.onActivateScope(); - if (iterationKeepAlive > 0 && currentDepth == 0) { - // For context-based scopes, only add them if they're going to be long-lived - scheduleRootIterationScopeCleanup(scopeStack, scope); - } - return scope; } @@ -322,13 +304,8 @@ public void rollbackActiveToCheckpoint() { } } - @SuppressForbidden public AgentSpan activeSpan() { final ContinuableScope active = scopeStack().active(); - - System.out.println("Scope size prior: " + scopeStack().depth()); - System.out.println("scopeStack(): " + scopeStack()); - System.out.println("active: " + active); return active == null ? null : active.span(); } From e4a63f2a1ba4cc3f1f954a5ea33c271fd6aa78eb Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 13 May 2025 15:28:35 -0400 Subject: [PATCH 13/33] updating akkahttp --- .../decorator/HttpServerDecorator.java | 13 ++++++--- .../akkahttp/DatadogAsyncHandlerWrapper.java | 8 +++--- ...tadogServerRequestResponseFlowWrapper.java | 27 ++++++++++--------- .../akkahttp/DatadogWrapperHelper.java | 15 +++++------ .../tomcat/TomcatServerInstrumentation.java | 2 +- 5 files changed, 37 insertions(+), 28 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 511cb899dce..2e4a7da6996 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 @@ -166,9 +166,8 @@ public AgentSpan startSpan( return span; } - public AgentSpan startSpanFromContext( - String instrumentationName, REQUEST_CARRIER carrier, Context context) { - return startSpan(instrumentationName, carrier, getExtractedSpanContext(context)); + public AgentSpan startSpanFromContext(REQUEST_CARRIER carrier, Context context) { + return startSpan("http-server", carrier, getExtractedSpanContext(context)); } public AgentSpanContext.Extracted getExtractedSpanContext(Context context) { @@ -176,6 +175,14 @@ public AgentSpanContext.Extracted getExtractedSpanContext(Context context) { return extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); } + public AgentSpan onRequestWithContext( + final AgentSpan span, + final CONNECTION connection, + final REQUEST request, + final Context context) { + return onRequest(span, connection, request, getExtractedSpanContext(context)); + } + public AgentSpan onRequest( final AgentSpan span, final CONNECTION connection, diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogAsyncHandlerWrapper.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogAsyncHandlerWrapper.java index 56f0e5c44a0..8dde14fcbdb 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogAsyncHandlerWrapper.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogAsyncHandlerWrapper.java @@ -4,8 +4,9 @@ import akka.http.scaladsl.model.HttpResponse; import akka.http.scaladsl.util.FastFuture$; import akka.stream.Materializer; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.api.gateway.Flow; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.akkahttp.appsec.BlockingResponseHelper; import scala.Function1; @@ -26,8 +27,9 @@ public DatadogAsyncHandlerWrapper( @Override public Future apply(final HttpRequest request) { - final AgentScope scope = DatadogWrapperHelper.createSpan(request); - AgentSpan span = scope.span(); + final ContextScope scope = DatadogWrapperHelper.createSpan(request); + Context context = scope.context(); + final AgentSpan span = AgentSpan.fromContext(context); Future futureResponse; // handle blocking in the beginning of the request diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogServerRequestResponseFlowWrapper.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogServerRequestResponseFlowWrapper.java index b1bbd3683b4..f0c211e86bd 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogServerRequestResponseFlowWrapper.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogServerRequestResponseFlowWrapper.java @@ -13,8 +13,8 @@ import akka.stream.stage.AbstractOutHandler; import akka.stream.stage.GraphStage; import akka.stream.stage.GraphStageLogic; +import datadog.context.ContextScope; import datadog.trace.api.gateway.RequestContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.akkahttp.appsec.BlockingResponseHelper; import java.util.Queue; @@ -56,7 +56,7 @@ public GraphStageLogic createLogic(final Attributes inheritedAttributes) throws // that this connection was created with. This means that we can safely // close the span at the front of the queue when we receive the response // from the user code, since it will match up to the request for that span. - final Queue scopes = new ArrayBlockingQueue<>(pipeliningLimit); + final Queue scopes = new ArrayBlockingQueue<>(pipeliningLimit); boolean[] skipNextPull = new boolean[] {false}; // This is where the request comes in from the server and TCP layer @@ -66,8 +66,8 @@ public GraphStageLogic createLogic(final Attributes inheritedAttributes) throws @Override public void onPush() throws Exception { final HttpRequest request = grab(requestInlet); - final AgentScope scope = DatadogWrapperHelper.createSpan(request); - AgentSpan span = scope.span(); + final ContextScope scope = DatadogWrapperHelper.createSpan(request); + final AgentSpan span = AgentSpan.fromContext(scope.context()); RequestContext requestContext = span.getRequestContext(); if (requestContext != null) { HttpResponse response = @@ -77,7 +77,7 @@ public void onPush() throws Exception { skipNextPull[0] = true; requestContext.getTraceSegment().effectivelyBlocked(); emit(responseOutlet, response); - DatadogWrapperHelper.finishSpan(scope.span(), response); + DatadogWrapperHelper.finishSpan(span, response); pull(requestInlet); scope.close(); return; @@ -131,9 +131,9 @@ public void onDownstreamFinish() throws Exception { @Override public void onPush() throws Exception { HttpResponse response = grab(responseInlet); - final AgentScope scope = scopes.poll(); + final ContextScope scope = scopes.poll(); if (scope != null) { - AgentSpan span = scope.span(); + AgentSpan span = AgentSpan.fromContext(scope.context()); HttpResponse newResponse = BlockingResponseHelper.handleFinishForWaf(span, response); if (newResponse != response) { @@ -146,7 +146,7 @@ public void onPush() throws Exception { // and close it. If it's not, then it will be cleaned up actor message // processing instrumentation that drives this state machine AgentSpan activeSpan = activeSpan(); - if (activeSpan == scope.span()) { + if (activeSpan == span) { scope.close(); } } @@ -157,9 +157,9 @@ public void onPush() throws Exception { public void onUpstreamFinish() throws Exception { // We will not receive any more responses from the user code, so clean up any // remaining spans - AgentScope scope = scopes.poll(); + ContextScope scope = scopes.poll(); while (scope != null) { - scope.span().finish(); + AgentSpan.fromContext(scope.context()).finish(); scope = scopes.poll(); } completeStage(); @@ -167,16 +167,17 @@ public void onUpstreamFinish() throws Exception { @Override public void onUpstreamFailure(final Throwable ex) throws Exception { - AgentScope scope = scopes.poll(); + ContextScope scope = scopes.poll(); + AgentSpan span = AgentSpan.fromContext(scope.context()); if (scope != null) { // Mark the span as failed - DatadogWrapperHelper.finishSpan(scope.span(), ex); + DatadogWrapperHelper.finishSpan(span, ex); } // We will not receive any more responses from the user code, so clean up any // remaining spans scope = scopes.poll(); while (scope != null) { - scope.span().finish(); + span.finish(); scope = scopes.poll(); } fail(responseOutlet, ex); 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..4b06d8f5187 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,22 +1,21 @@ 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; import akka.http.scaladsl.model.HttpResponse; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.Context; +import datadog.context.ContextScope; 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); + public static ContextScope createSpan(final HttpRequest request) { + final Context extractedContext = DECORATE.extractContext(request); + final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequestWithContext(span, request, request, extractedContext); - return activateSpan(span); + return extractedContext.with(span).attach(); } public static void finishSpan(final AgentSpan span, final HttpResponse 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 ad9c1f98830..e01e320acde 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 @@ -129,7 +129,7 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque req.setAttribute( DD_EXTRACTED_CONTEXT_ATTRIBUTE, DECORATE.getExtractedSpanContext(extractedContext)); - final AgentSpan span = DECORATE.startSpanFromContext("http-server", req, extractedContext); + final AgentSpan span = DECORATE.startSpanFromContext(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); // This span is finished when Request.recycle() is called by RequestInstrumentation. From ebdeafd40d06ead4761848330f2e895613ed6495 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 13 May 2025 17:18:15 -0400 Subject: [PATCH 14/33] migrating all http server instrumentations to use Context and ContextScope --- .../decorator/BaseDecorator.java | 6 +++++ .../decorator/HttpServerDecorator.java | 2 +- .../AzureFunctionsInstrumentation.java | 19 +++++++------ .../GrizzlyHttpHandlerInstrumentation.java | 19 +++++++------ .../grizzlyhttp232/GrizzlyDecorator.java | 14 +++++----- .../jetty11/JettyServerAdvice.java | 16 +++++------ .../jetty12/JettyServerAdvice.java | 15 +++++------ .../jetty70/JettyServerInstrumentation.java | 19 +++++++------ .../jetty76/JettyServerInstrumentation.java | 19 +++++++------ .../jetty9/JettyServerInstrumentation.java | 19 +++++++------ .../instrumentation/jetty10/HandleAdvice.java | 19 +++++++------ .../LibertyServerInstrumentation.java | 21 +++++++-------- .../LibertyServerInstrumentation.java | 21 +++++++-------- .../HttpServerRequestTracingHandler.java | 15 +++++------ .../HttpServerRequestTracingHandler.java | 15 +++++------ .../HttpServerRequestTracingHandler.java | 15 +++++------ .../pekkohttp/DatadogAsyncHandlerWrapper.java | 12 +++++---- ...tadogServerRequestResponseFlowWrapper.java | 24 +++++++++-------- .../pekkohttp/DatadogWrapperHelper.java | 15 +++++------ .../instrumentation/play23/PlayAdvice.java | 19 ++++++------- .../instrumentation/play24/PlayAdvice.java | 19 ++++++------- .../instrumentation/play26/PlayAdvice.java | 26 +++++++++--------- .../restlet/RestletInstrumentation.java | 19 +++++++------ .../servlet2/Servlet2Advice.java | 19 +++++++------ .../servlet3/Servlet3Advice.java | 21 +++++++-------- .../SprayHttpServerRunSealedRouteAdvice.java | 20 +++++++------- .../SynapseServerInstrumentation.java | 27 ++++++++++--------- .../undertow/HandlerInstrumentation.java | 19 ++++++------- .../HttpRequestParserInstrumentation.java | 15 +++++------ 29 files changed, 254 insertions(+), 255 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java index 9bcec9e8aec..d5bc9b56550 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java @@ -3,6 +3,7 @@ import static datadog.trace.api.cache.RadixTreeCache.PORTS; import static datadog.trace.api.cache.RadixTreeCache.UNSET_PORT; +import datadog.context.ContextScope; import datadog.trace.api.Config; import datadog.trace.api.DDTags; import datadog.trace.api.Functions; @@ -105,6 +106,11 @@ public AgentSpan onError(final AgentSpan span, final Throwable throwable, byte e return span; } + public ContextScope onError(final ContextScope scope, final Throwable throwable) { + onError(AgentSpan.fromContext(scope.context()), throwable); + return scope; + } + public AgentSpan onPeerConnection( final AgentSpan span, final InetSocketAddress remoteConnection) { if (remoteConnection != null) { 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 2e4a7da6996..5233b7abc84 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 @@ -143,7 +143,7 @@ public Context extractContext(REQUEST_CARRIER carrier) { return Propagators.defaultPropagator().extract(Context.root(), carrier, getter); } - /** Deprecated. Use {@link #startSpanFromContext(String, Object, Context)} instead. */ + /** Deprecated. Use {@link #startSpanFromContext(Object, Context)} instead. */ @Deprecated public AgentSpan startSpan(REQUEST_CARRIER carrier, AgentSpanContext.Extracted context) { return startSpan("http-server", carrier, context); 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..a434c70bfef 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; @@ -14,11 +13,11 @@ import com.microsoft.azure.functions.ExecutionContext; import com.microsoft.azure.functions.HttpRequestMessage; import com.microsoft.azure.functions.HttpResponseMessage; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -64,24 +63,24 @@ public void methodAdvice(MethodTransformer transformer) { public static class AzureFunctionsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope 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.extractContext(request); + final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); DECORATE.afterStart(span, context.getFunctionName()); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequestWithContext(span, request, request, extractedContext); HTTP_RESOURCE_DECORATOR.withRoute( span, request.getHttpMethod().name(), request.getUri().getPath()); - return activateSpan(span); + return extractedContext.with(span).attach(); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final HttpResponseMessage response, @Advice.Thrown final Throwable throwable) { - final AgentSpan span = scope.span(); + final AgentSpan span = AgentSpan.fromContext(scope.context()); DECORATE.onError(span, throwable); DECORATE.onResponse(span, response); DECORATE.beforeFinish(span); 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..c8e6091c1d8 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,21 +1,20 @@ 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; 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.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.api.gateway.Flow; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.glassfish.grizzly.http.server.Request; import org.glassfish.grizzly.http.server.Response; @@ -66,19 +65,19 @@ public static class HandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, skipOn = Advice.OnNonDefaultValue.class) public static boolean /* skip body */ methodEnter( - @Advice.Local("agentScope") AgentScope scope, + @Advice.Local("contextScope") ContextScope scope, @Advice.Argument(0) final Request request, @Advice.Argument(1) final Response response) { if (request.getAttribute(DD_SPAN_ATTRIBUTE) != null) { return false; } - final AgentSpanContext.Extracted parentContext = DECORATE.extract(request); - final AgentSpan span = DECORATE.startSpan(request, parentContext); + final Context parentContext = DECORATE.extractContext(request); + final AgentSpan span = DECORATE.startSpanFromContext(request, parentContext); DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, parentContext); + DECORATE.onRequestWithContext(span, request, request, parentContext); - scope = activateSpan(span); + scope = parentContext.with(span).attach(); request.setAttribute(DD_SPAN_ATTRIBUTE, span); request.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); @@ -101,14 +100,14 @@ public static class HandleAdvice { public static void methodExit( @Advice.Enter boolean skippedBody, @Advice.Return(readOnly = false) boolean retVal, - @Advice.Local("agentScope") AgentScope scope, + @Advice.Local("contextScope") ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } if (throwable != null) { - final AgentSpan span = scope.span(); + final AgentSpan span = AgentSpan.fromContext(scope.context()); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); span.finish(); 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..7e59c0a6fe4 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,17 +1,15 @@ 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.context.ContextScope; import datadog.trace.api.gateway.BlockResponseFunction; import datadog.trace.api.gateway.Flow; import datadog.trace.api.gateway.RequestContext; import datadog.trace.api.internal.TraceSegment; import datadog.trace.bootstrap.ActiveSubsystems; 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.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -114,13 +112,13 @@ 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); + Context context = DECORATE.extractContext(httpRequest); + AgentSpan span = DECORATE.startSpanFromContext(httpRequest, context); + ContextScope scope = context.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.onRequestWithContext(span, httpRequest, httpRequest, context); 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..a7530dedc44 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,11 +4,11 @@ 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.context.ContextScope; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.eclipse.jetty.server.HttpChannel; import org.eclipse.jetty.server.Request; @@ -17,7 +17,7 @@ public class JettyServerAdvice { public static class HandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final HttpChannel channel, @Advice.Local("agentSpan") AgentSpan span) { Request req = channel.getRequest(); @@ -26,12 +26,12 @@ 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.extractContext(req); + span = DECORATE.startSpanFromContext(req, extractedContext); + final ContextScope scope = extractedContext.with(span).attach(); span.setMeasured(true); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequestWithContext(span, req, req, extractedContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); @@ -40,7 +40,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) - public static void closeScope(@Advice.Enter final AgentScope scope) { + public static void closeScope(@Advice.Enter final ContextScope scope) { scope.close(); } 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..9534e40fb7d 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 @@ -1,13 +1,12 @@ package datadog.trace.instrumentation.jetty12; -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.context.ContextScope; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.internal.HttpChannelState; @@ -22,18 +21,18 @@ public static void onExit( Request req = channel.getRequest(); Object existingSpan = req.getAttribute(DD_SPAN_ATTRIBUTE); if (existingSpan instanceof AgentSpan) { - try (final AgentScope scope = activateSpan((AgentSpan) existingSpan)) { + try (final ContextScope scope = ((AgentSpan) existingSpan).attach()) { ret = JettyRunnableWrapper.wrapIfNeeded(ret); return; } } - 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.extractContext(req); + final AgentSpan span = JettyDecorator.DECORATE.startSpanFromContext(req, extractedContext); + try (final ContextScope scope = extractedContext.with(span).attach()) { span.setMeasured(true); JettyDecorator.DECORATE.afterStart(span); - JettyDecorator.DECORATE.onRequest(span, req, req, extractedContext); + JettyDecorator.DECORATE.onRequestWithContext(span, req, req, extractedContext); 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..5ee48bf1434 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 @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.jetty70; 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.jetty70.JettyDecorator.DECORATE; import static java.util.Collections.singletonMap; @@ -10,6 +9,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; @@ -17,9 +18,7 @@ import datadog.trace.api.GlobalTracer; import datadog.trace.api.ProductActivation; 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.AgentSpanContext; import datadog.trace.instrumentation.jetty.ConnectionHandleRequestVisitor; import java.util.Map; import net.bytebuddy.asm.Advice; @@ -146,21 +145,21 @@ public static void link( public static class HandleRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final HttpConnection connection, @Advice.Local("agentSpan") AgentSpan span) { Request req = connection.getRequest(); Object existingSpan = req.getAttribute(DD_SPAN_ATTRIBUTE); if (existingSpan instanceof AgentSpan) { // Request already gone through initial processing, so just activate the span. - return activateSpan((AgentSpan) existingSpan); + return ((AgentSpan) existingSpan).attach(); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); - final AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extractContext(req); + span = DECORATE.startSpanFromContext(req, extractedContext); + final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequestWithContext(span, req, req, extractedContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); @@ -169,7 +168,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) - public static void closeScope(@Advice.Enter final AgentScope scope) { + public static void closeScope(@Advice.Enter final ContextScope scope) { // Span is finished when the connection is reset, so we only need to close the scope here. scope.close(); } 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..983ea7516a8 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 @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.jetty76; 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_FIN_DISP_LIST_SPAN_ATTRIBUTE; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.jetty76.JettyDecorator.DECORATE; @@ -10,6 +9,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; @@ -17,9 +18,7 @@ import datadog.trace.api.GlobalTracer; import datadog.trace.api.ProductActivation; 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.AgentSpanContext; import datadog.trace.instrumentation.jetty.ConnectionHandleRequestVisitor; import java.util.Map; import net.bytebuddy.asm.Advice; @@ -146,7 +145,7 @@ public static void link( public static class HandleRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final AbstractHttpConnection connection, @Advice.Local("newSpan") AgentSpan span) { Request req = connection.getRequest(); @@ -154,14 +153,14 @@ public static AgentScope onEnter( Object existingSpan = req.getAttribute(DD_SPAN_ATTRIBUTE); if (existingSpan instanceof AgentSpan) { // Request already gone through initial processing, so just activate the span. - return activateSpan((AgentSpan) existingSpan); + return ((AgentSpan) existingSpan).attach(); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); - final AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extractContext(req); + span = DECORATE.startSpanFromContext(req, extractedContext); + final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequestWithContext(span, req, req, extractedContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); @@ -170,7 +169,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) - public static void closeScope(@Advice.Enter final AgentScope scope) { + public static void closeScope(@Advice.Enter final ContextScope scope) { // Span is finished when the connection is reset, so we only need to close the scope here. scope.close(); } 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..dc369cff745 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 @@ -3,7 +3,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresMethod; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE; import static datadog.trace.instrumentation.jetty9.JettyDecorator.DECORATE; @@ -15,6 +14,8 @@ import com.google.auto.service.AutoService; import datadog.appsec.api.blocking.BlockingException; +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; @@ -22,9 +23,7 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; import datadog.trace.api.ProductActivation; -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.java.concurrent.ExcludeFilter; import java.util.Arrays; @@ -162,20 +161,20 @@ public ClassVisitor wrap( public static class HandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final HttpChannel channel, @Advice.Local("agentSpan") AgentSpan span) { Request req = channel.getRequest(); Object existingSpan = req.getAttribute(DD_SPAN_ATTRIBUTE); if (existingSpan instanceof AgentSpan) { - return activateSpan((AgentSpan) existingSpan); + return ((AgentSpan) existingSpan).attach(); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); - final AgentScope scope = activateSpan(span); + final Context extractedContext = DECORATE.extractContext(req); + span = DECORATE.startSpanFromContext(req, extractedContext); + final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequestWithContext(span, req, req, extractedContext); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); @@ -184,7 +183,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) - public static void closeScope(@Advice.Enter final AgentScope scope) { + public static void closeScope(@Advice.Enter final ContextScope scope) { scope.close(); } } 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..21b1cb6aceb 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 @@ -1,14 +1,13 @@ package datadog.trace.instrumentation.jetty10; -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.jetty10.JettyDecorator.DECORATE; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.GlobalTracer; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.eclipse.jetty.server.HttpChannel; import org.eclipse.jetty.server.Request; @@ -16,21 +15,21 @@ public class HandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final HttpChannel channel, @Advice.Local("agentSpan") AgentSpan span) { Request req = channel.getRequest(); Object existingSpan = req.getAttribute(DD_SPAN_ATTRIBUTE); if (existingSpan instanceof AgentSpan) { - return activateSpan((AgentSpan) existingSpan); + return ((AgentSpan) existingSpan).attach(); } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req); - span = DECORATE.startSpan(req, extractedContext); + final Context extractedContext = DECORATE.extractContext(req); + span = DECORATE.startSpanFromContext(req, extractedContext); DECORATE.afterStart(span); - DECORATE.onRequest(span, req, req, extractedContext); + DECORATE.onRequestWithContext(span, req, req, extractedContext); - final AgentScope scope = activateSpan(span); + final ContextScope scope = extractedContext.with(span).attach(); req.setAttribute(DD_SPAN_ATTRIBUTE, span); req.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); req.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); @@ -38,7 +37,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) - public static void closeScope(@Advice.Enter final AgentScope scope) { + public static void closeScope(@Advice.Enter final ContextScope scope) { scope.close(); } 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..d1a90496e1e 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 @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.liberty20; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.liberty20.HttpInboundServiceContextImplInstrumentation.REQUEST_MSG_TYPE; import static datadog.trace.instrumentation.liberty20.LibertyDecorator.DD_EXTRACTED_CONTEXT_ATTRIBUTE; import static datadog.trace.instrumentation.liberty20.LibertyDecorator.DD_SPAN_ATTRIBUTE; @@ -14,6 +13,8 @@ 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.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.ClassloaderConfigurationOverrides; @@ -24,9 +25,7 @@ import datadog.trace.bootstrap.ActiveSubsystems; import datadog.trace.bootstrap.ContextStore; 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.AgentSpanContext; import datadog.trace.instrumentation.servlet.ServletBlockingHelper; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collections; @@ -88,7 +87,7 @@ public static class HandleRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, skipOn = Advice.OnNonDefaultValue.class) public static boolean /* skip */ onEnter( - @Advice.Local("agentScope") AgentScope scope, + @Advice.Local("contextScope") ContextScope scope, @Advice.Argument(0) ServletRequest req, @Advice.Argument(1) ServletResponse resp) { if (!(req instanceof SRTServletRequest)) return false; @@ -99,16 +98,16 @@ public static class HandleRequestAdvice { try { Object existingSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); if (existingSpan instanceof AgentSpan) { - scope = activateSpan((AgentSpan) existingSpan); + scope = ((AgentSpan) existingSpan).attach(); return false; } } catch (NullPointerException e) { } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); + final Context extractedContext = DECORATE.extractContext(request); request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); - final AgentSpan span = DECORATE.startSpan(request, extractedContext); - scope = activateSpan(span); + final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); + scope = extractedContext.with(span).attach(); if (Config.get().isJeeSplitByDeployment()) { final IWebAppDispatcherContext dispatcherContext = request.getWebAppDispatcherContext(); if (dispatcherContext != null) { @@ -122,7 +121,7 @@ public static class HandleRequestAdvice { } } DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequestWithContext(span, request, request, extractedContext); request.setAttribute(DD_SPAN_ATTRIBUTE, span); request.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); request.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); @@ -152,7 +151,7 @@ public static class HandleRequestAdvice { @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) public static void closeScope( - @Advice.Local("agentScope") final AgentScope scope, + @Advice.Local("contextScope") final ContextScope scope, @Advice.Argument(value = 0) ServletRequest req) { if (!(req instanceof SRTServletRequest)) return; SRTServletRequest request = (SRTServletRequest) req; @@ -163,7 +162,7 @@ public static void closeScope( // this has the unfortunate consequence that service name (as set via the tag interceptor) // of the top span won't match that of its child spans, because it's instead the original // one that will propagate - DECORATE.getPath(scope.span(), request); + DECORATE.getPath(AgentSpan.fromContext(scope.context()), request); scope.close(); } } 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..ef7f685c459 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 @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.liberty23; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.liberty23.HttpInboundServiceContextImplInstrumentation.REQUEST_MSG_TYPE; import static datadog.trace.instrumentation.liberty23.LibertyDecorator.DD_EXTRACTED_CONTEXT_ATTRIBUTE; import static datadog.trace.instrumentation.liberty23.LibertyDecorator.DD_SPAN_ATTRIBUTE; @@ -14,6 +13,8 @@ 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.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.ClassloaderConfigurationOverrides; @@ -24,9 +25,7 @@ import datadog.trace.bootstrap.ActiveSubsystems; import datadog.trace.bootstrap.ContextStore; 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.AgentSpanContext; import datadog.trace.instrumentation.servlet5.JakartaServletBlockingHelper; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import jakarta.servlet.ServletRequest; @@ -88,7 +87,7 @@ public static class HandleRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, skipOn = Advice.OnNonDefaultValue.class) public static boolean /* skip */ onEnter( - @Advice.Local("agentScope") AgentScope scope, + @Advice.Local("contextScope") ContextScope scope, @Advice.Argument(0) ServletRequest req, @Advice.Argument(1) ServletResponse resp) { if (!(req instanceof SRTServletRequest)) { @@ -101,16 +100,16 @@ public static class HandleRequestAdvice { try { Object existingSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); if (existingSpan instanceof AgentSpan) { - scope = activateSpan((AgentSpan) existingSpan); + scope = ((AgentSpan) existingSpan).attach(); return false; } } catch (NullPointerException e) { } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); + final Context extractedContext = DECORATE.extractContext(request); request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); - final AgentSpan span = DECORATE.startSpan(request, extractedContext); - scope = activateSpan(span); + final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); + scope = extractedContext.with(span).attach(); if (Config.get().isJeeSplitByDeployment()) { final IWebAppDispatcherContext dispatcherContext = request.getWebAppDispatcherContext(); if (dispatcherContext != null) { @@ -124,7 +123,7 @@ public static class HandleRequestAdvice { } } DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequestWithContext(span, request, request, extractedContext); request.setAttribute(DD_SPAN_ATTRIBUTE, span); request.setAttribute(CorrelationIdentifier.getTraceIdKey(), GlobalTracer.get().getTraceId()); request.setAttribute(CorrelationIdentifier.getSpanIdKey(), GlobalTracer.get().getSpanId()); @@ -152,7 +151,7 @@ public static class HandleRequestAdvice { @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) public static void closeScope( - @Advice.Local("agentScope") final AgentScope scope, + @Advice.Local("contextScope") final ContextScope scope, @Advice.Argument(value = 0) ServletRequest req) { if (!(req instanceof SRTServletRequest)) { return; @@ -165,7 +164,7 @@ public static void closeScope( // this has the unfortunate consequence that service name (as set via the tag interceptor) // of the top span won't match that of its child spans, because it's instead the original // one that will propagate - DECORATE.getPath(scope.span(), request); + DECORATE.getPath(AgentSpan.fromContext(scope.context()), request); scope.close(); } } 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..f62ce1d095f 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 @@ -1,13 +1,12 @@ package datadog.trace.instrumentation.netty38.server; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.netty38.server.NettyHttpServerDecorator.DECORATE; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.api.gateway.Flow; import datadog.trace.bootstrap.ContextStore; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.instrumentation.netty38.ChannelTraceContext; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; @@ -35,7 +34,7 @@ public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent if (span == null) { ctx.sendUpstream(msg); // superclass does not throw } else { - try (final AgentScope scope = activateSpan(span)) { + try (final ContextScope scope = span.attach()) { ctx.sendUpstream(msg); // superclass does not throw } } @@ -44,15 +43,15 @@ 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 context = DECORATE.extractContext(headers); + final AgentSpan span = DECORATE.startSpanFromContext(headers, context); channelTraceContext.reset(); channelTraceContext.setRequestHeaders(headers); - try (final AgentScope scope = activateSpan(span)) { + try (final ContextScope scope = context.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequest(span, ctx.getChannel(), request, context); + DECORATE.onRequestWithContext(span, ctx.getChannel(), request, context); 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..e77824e1ee5 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 @@ -1,16 +1,15 @@ package datadog.trace.instrumentation.netty40.server; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.netty40.AttributeKeys.ANALYZED_RESPONSE_KEY; import static datadog.trace.instrumentation.netty40.AttributeKeys.BLOCKED_RESPONSE_KEY; import static datadog.trace.instrumentation.netty40.AttributeKeys.REQUEST_HEADERS_ATTRIBUTE_KEY; 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.context.ContextScope; import datadog.trace.api.gateway.Flow; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; @@ -31,7 +30,7 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { if (span == null) { ctx.fireChannelRead(msg); // superclass does not throw } else { - try (final AgentScope scope = activateSpan(span)) { + try (final ContextScope scope = span.attach()) { ctx.fireChannelRead(msg); // superclass does not throw } } @@ -40,12 +39,12 @@ 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.extractContext(headers); + final AgentSpan span = DECORATE.startSpanFromContext(headers, extractedContext); - try (final AgentScope scope = activateSpan(span)) { + try (final ContextScope scope = extractedContext.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequest(span, channel, request, extractedContext); + DECORATE.onRequestWithContext(span, channel, request, extractedContext); 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..566f0cae172 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 @@ -1,16 +1,15 @@ package datadog.trace.instrumentation.netty41.server; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.netty41.AttributeKeys.ANALYZED_RESPONSE_KEY; import static datadog.trace.instrumentation.netty41.AttributeKeys.BLOCKED_RESPONSE_KEY; import static datadog.trace.instrumentation.netty41.AttributeKeys.REQUEST_HEADERS_ATTRIBUTE_KEY; 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.context.ContextScope; import datadog.trace.api.gateway.Flow; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; @@ -30,7 +29,7 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { if (span == null) { ctx.fireChannelRead(msg); // superclass does not throw } else { - try (final AgentScope scope = activateSpan(span)) { + try (final ContextScope scope = span.attach()) { ctx.fireChannelRead(msg); // superclass does not throw } } @@ -39,12 +38,12 @@ 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.extractContext(headers); + final AgentSpan span = DECORATE.startSpanFromContext(headers, extractedContext); - try (final AgentScope scope = activateSpan(span)) { + try (final ContextScope scope = extractedContext.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequest(span, channel, request, extractedContext); + DECORATE.onRequestWithContext(span, channel, request, extractedContext); 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/DatadogAsyncHandlerWrapper.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogAsyncHandlerWrapper.java index e79c2e21838..46fc8e56bd5 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogAsyncHandlerWrapper.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogAsyncHandlerWrapper.java @@ -1,6 +1,7 @@ package datadog.trace.instrumentation.pekkohttp; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import org.apache.pekko.http.scaladsl.model.HttpRequest; import org.apache.pekko.http.scaladsl.model.HttpResponse; import scala.Function1; @@ -22,13 +23,14 @@ public DatadogAsyncHandlerWrapper( @Override public Future apply(final HttpRequest request) { - final AgentScope scope = DatadogWrapperHelper.createSpan(request); + final ContextScope scope = DatadogWrapperHelper.createSpan(request); + AgentSpan span = AgentSpan.fromContext(scope.context()); Future futureResponse = null; try { futureResponse = userHandler.apply(request); } catch (final Throwable t) { scope.close(); - DatadogWrapperHelper.finishSpan(scope.span(), t); + DatadogWrapperHelper.finishSpan(span, t); throw t; } final Future wrapped = @@ -36,14 +38,14 @@ public Future apply(final HttpRequest request) { new AbstractFunction1() { @Override public HttpResponse apply(final HttpResponse response) { - DatadogWrapperHelper.finishSpan(scope.span(), response); + DatadogWrapperHelper.finishSpan(span, response); return response; } }, new AbstractFunction1() { @Override public Throwable apply(final Throwable t) { - DatadogWrapperHelper.finishSpan(scope.span(), t); + DatadogWrapperHelper.finishSpan(span, t); return t; } }, diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java index 06dc60cf723..0e8a603e899 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java @@ -2,7 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; @@ -54,7 +54,7 @@ public GraphStageLogic createLogic(final Attributes inheritedAttributes) throws // that this connection was created with. This means that we can safely // close the span at the front of the queue when we receive the response // from the user code, since it will match up to the request for that span. - final Queue scopes = new ArrayBlockingQueue<>(pipeliningLimit); + final Queue scopes = new ArrayBlockingQueue<>(pipeliningLimit); // This is where the request comes in from the server and TCP layer setHandler( @@ -63,7 +63,7 @@ public GraphStageLogic createLogic(final Attributes inheritedAttributes) throws @Override public void onPush() throws Exception { final HttpRequest request = grab(requestInlet); - final AgentScope scope = DatadogWrapperHelper.createSpan(request); + final ContextScope scope = DatadogWrapperHelper.createSpan(request); scopes.add(scope); push(requestOutlet, request); // Since we haven't instrumented the pekko stream state machine, we can't rely @@ -111,14 +111,15 @@ public void onDownstreamFinish() throws Exception { @Override public void onPush() throws Exception { final HttpResponse response = grab(responseInlet); - final AgentScope scope = scopes.poll(); + final ContextScope scope = scopes.poll(); + AgentSpan span = AgentSpan.fromContext(scope.context()); if (scope != null) { - DatadogWrapperHelper.finishSpan(scope.span(), response); + DatadogWrapperHelper.finishSpan(span, response); // Check if the active span matches the scope from when the request came in, // and close it. If it's not, then it will be cleaned up actor message // processing instrumentation that drives this state machine AgentSpan activeSpan = activeSpan(); - if (activeSpan == scope.span()) { + if (activeSpan == span) { scope.close(); } } @@ -129,9 +130,9 @@ public void onPush() throws Exception { public void onUpstreamFinish() throws Exception { // We will not receive any more responses from the user code, so clean up any // remaining spans - AgentScope scope = scopes.poll(); + ContextScope scope = scopes.poll(); while (scope != null) { - scope.span().finish(); + AgentSpan.fromContext(scope.context()).finish(); scope = scopes.poll(); } completeStage(); @@ -139,16 +140,17 @@ public void onUpstreamFinish() throws Exception { @Override public void onUpstreamFailure(final Throwable ex) throws Exception { - AgentScope scope = scopes.poll(); + ContextScope scope = scopes.poll(); + AgentSpan span = AgentSpan.fromContext(scope.context()); if (scope != null) { // Mark the span as failed - DatadogWrapperHelper.finishSpan(scope.span(), ex); + DatadogWrapperHelper.finishSpan(span, ex); } // We will not receive any more responses from the user code, so clean up any // remaining spans scope = scopes.poll(); while (scope != null) { - scope.span().finish(); + span.finish(); scope = scopes.poll(); } fail(responseOutlet, ex); 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..d3278486c72 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,22 +1,21 @@ package datadog.trace.instrumentation.pekkohttp; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpServerDecorator.DECORATE; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import org.apache.pekko.http.scaladsl.model.HttpRequest; import org.apache.pekko.http.scaladsl.model.HttpResponse; public class DatadogWrapperHelper { - public static AgentScope createSpan(final HttpRequest request) { - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); - final AgentSpan span = DECORATE.startSpan(request, extractedContext); + public static ContextScope createSpan(final HttpRequest request) { + final Context extractedContext = DECORATE.extractContext(request); + final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); DECORATE.afterStart(span); - DECORATE.onRequest(span, request, request, extractedContext); + DECORATE.onRequestWithContext(span, request, request, extractedContext); - return activateSpan(span); + return 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..cec24dde8e0 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 @@ -1,15 +1,14 @@ package datadog.trace.instrumentation.play23; -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.play23.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.PLAY_REQUEST; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.REPORT_HTTP_STATUS; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import play.api.mvc.Action; import play.api.mvc.Headers; @@ -19,32 +18,34 @@ public class PlayAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.Argument(0) final Request req) { + public static ContextScope onEnter(@Advice.Argument(0) final Request req) { final AgentSpan span; + final ContextScope scope; if (activeSpan() == null) { Headers headers = req.headers(); - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(headers); - span = DECORATE.startSpan(headers, extractedContext); + final Context extractedContext = DECORATE.extractContext(headers); + span = DECORATE.startSpanFromContext(headers, extractedContext); + scope = extractedContext.with(span).attach(); } 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); + scope = span.attach(); } - final AgentScope scope = activateSpan(span); DECORATE.afterStart(span); return scope; } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopTraceOnResponse( - @Advice.Enter final AgentScope playControllerScope, + @Advice.Enter final ContextScope playControllerScope, @Advice.This final Object thisAction, @Advice.Thrown final Throwable throwable, @Advice.Argument(0) final Request req, @Advice.Return(readOnly = false) final Future responseFuture) { - final AgentSpan playControllerSpan = playControllerScope.span(); + final AgentSpan playControllerSpan = AgentSpan.fromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. DECORATE.onRequest(playControllerSpan, req, req, null); 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..96e476a2e49 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 @@ -1,15 +1,14 @@ package datadog.trace.instrumentation.play24; -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.play24.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.PLAY_REQUEST; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.REPORT_HTTP_STATUS; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import play.api.mvc.Action; import play.api.mvc.Headers; @@ -19,8 +18,9 @@ public class PlayAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.Argument(value = 0, readOnly = false) Request req) { + public static ContextScope onEnter(@Advice.Argument(value = 0, readOnly = false) Request req) { final AgentSpan span; + final ContextScope scope; // If we have already added a `play.request` span, then don't do it again if (req.tags().contains("_dd_HasPlayRequestSpan")) { @@ -29,16 +29,17 @@ 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); + final Context extractedContext = DECORATE.extractContext(headers); + span = DECORATE.startSpanFromContext(headers, extractedContext); + scope = extractedContext.with(span).attach(); } 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); + scope = span.attach(); } - final AgentScope scope = activateSpan(span); DECORATE.afterStart(span); req = RequestHelper.withTag(req, "_dd_HasPlayRequestSpan", "true"); @@ -48,7 +49,7 @@ public static AgentScope onEnter(@Advice.Argument(value = 0, readOnly = false) R @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopTraceOnResponse( - @Advice.Enter final AgentScope playControllerScope, + @Advice.Enter final ContextScope playControllerScope, @Advice.This final Object thisAction, @Advice.Thrown final Throwable throwable, @Advice.Argument(0) final Request req, @@ -58,7 +59,7 @@ public static void stopTraceOnResponse( return; } - final AgentSpan playControllerSpan = playControllerScope.span(); + final AgentSpan playControllerSpan = AgentSpan.fromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. DECORATE.onRequest(playControllerSpan, req, req, null); 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..720fa3b9ba7 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 @@ -1,14 +1,13 @@ package datadog.trace.instrumentation.play26; -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.play26.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.PLAY_REQUEST; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import net.bytebuddy.asm.Advice; import play.api.mvc.Action; @@ -19,10 +18,11 @@ public class PlayAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(value = 0, readOnly = false) Request req, - @Advice.Local("extractedContext") AgentSpanContext.Extracted extractedContext) { + @Advice.Local("extractedContext") Context extractedContext) { final AgentSpan span; + final ContextScope scope; // If we have already added a `play.request` span, then don't do it again if (req.attrs().contains(HasPlayRequestSpan.KEY)) { @@ -31,14 +31,16 @@ public static AgentScope onEnter( if (activeSpan() == null) { final Headers headers = req.headers(); - extractedContext = DECORATE.extract(headers); - span = DECORATE.startSpan(headers, extractedContext); + extractedContext = DECORATE.extractContext(headers); + span = DECORATE.startSpanFromContext(headers, extractedContext); + scope = extractedContext.with(span).attach(); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. // Do not extract the context. span = startSpan(PLAY_REQUEST); + scope = span.attach(); } - final AgentScope scope = activateSpan(span); + span.setMeasured(true); DECORATE.afterStart(span); @@ -49,8 +51,8 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopTraceOnResponse( - @Advice.Enter final AgentScope playControllerScope, - @Advice.Local("extractedContext") AgentSpanContext.Extracted extractedContext, + @Advice.Enter final ContextScope playControllerScope, + @Advice.Local("extractedContext") Context extractedContext, @Advice.This final Object thisAction, @Advice.Thrown final Throwable throwable, @Advice.Argument(0) final Request req, @@ -60,10 +62,10 @@ public static void stopTraceOnResponse( return; } - final AgentSpan playControllerSpan = playControllerScope.span(); + final AgentSpan playControllerSpan = AgentSpan.fromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. - DECORATE.onRequest(playControllerSpan, req, req, extractedContext); + DECORATE.onRequestWithContext(playControllerSpan, req, req, extractedContext); if (throwable == null) { responseFuture.onComplete( 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..fcc9221ae1b 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,18 +1,17 @@ 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.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; @AutoService(InstrumenterModule.class) @@ -53,12 +52,12 @@ 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); + public static ContextScope beginRequest(@Advice.Argument(0) final HttpExchange exchange) { + Context context = DECORATE.extractContext(exchange); + AgentSpan span = DECORATE.startSpanFromContext(exchange, context); + ContextScope scope = context.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, exchange, exchange, context); + DECORATE.onRequestWithContext(span, exchange, exchange, context); DECORATE.onPeerConnection(span, exchange.getRemoteAddress()); return scope; @@ -66,14 +65,14 @@ public static AgentScope beginRequest(@Advice.Argument(0) final HttpExchange exc @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishRequest( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Argument(0) final HttpExchange exchange, @Advice.Thrown final Throwable error) { if (null == scope) { return; } - AgentSpan span = scope.span(); + AgentSpan span = AgentSpan.fromContext(scope.context()); DECORATE.onResponse(span, exchange); if (null != error) { 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..94cf0cbeb8f 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,10 @@ 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.context.ContextScope; import datadog.trace.api.ClassloaderConfigurationOverrides; import datadog.trace.api.Config; import datadog.trace.api.CorrelationIdentifier; @@ -11,9 +12,7 @@ import datadog.trace.api.GlobalTracer; import datadog.trace.api.gateway.Flow; 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.AgentSpanContext; import datadog.trace.instrumentation.servlet.ServletBlockingHelper; import java.security.Principal; import javax.servlet.ServletRequest; @@ -30,7 +29,7 @@ public static boolean onEnter( @Advice.This final Object servlet, @Advice.Argument(value = 0, readOnly = false) ServletRequest request, @Advice.Argument(value = 1, typing = Assigner.Typing.DYNAMIC) final ServletResponse response, - @Advice.Local("agentScope") AgentScope scope) { + @Advice.Local("contextScope") ContextScope scope) { final boolean invalidRequest = !(request instanceof HttpServletRequest); if (invalidRequest) { @@ -52,11 +51,11 @@ 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.extractContext(httpServletRequest); + final AgentSpan span = DECORATE.startSpanFromContext(httpServletRequest, extractedContext); + scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedContext); + DECORATE.onRequestWithContext(span, httpServletRequest, httpServletRequest, extractedContext); httpServletRequest.setAttribute(DD_SPAN_ATTRIBUTE, span); httpServletRequest.setAttribute( @@ -82,7 +81,7 @@ public static boolean onEnter( public static void stopSpan( @Advice.Argument(0) final ServletRequest request, @Advice.Argument(1) final ServletResponse response, - @Advice.Local("agentScope") final AgentScope scope, + @Advice.Local("contextScope") final ContextScope scope, @Advice.Thrown final Throwable throwable) { // Set user.principal regardless of who created this span. final Object spanAttr = request.getAttribute(DD_SPAN_ATTRIBUTE); @@ -98,7 +97,7 @@ public static void stopSpan( if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = AgentSpan.fromContext(scope.context()); if (response instanceof HttpServletResponse) { DECORATE.onResponse( 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..b0cd29ba193 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 @@ -1,21 +1,20 @@ package datadog.trace.instrumentation.servlet3; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_DISPATCH_SPAN_ATTRIBUTE; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_FIN_DISP_LIST_SPAN_ATTRIBUTE; 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.context.ContextScope; import datadog.trace.api.ClassloaderConfigurationOverrides; import datadog.trace.api.Config; import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.DDTags; import datadog.trace.api.GlobalTracer; import datadog.trace.api.gateway.Flow; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.instrumentation.servlet.ServletBlockingHelper; import java.security.Principal; import java.util.concurrent.atomic.AtomicBoolean; @@ -33,7 +32,7 @@ public static boolean onEnter( @Advice.Argument(value = 1) ServletResponse response, @Advice.Local("isDispatch") boolean isDispatch, @Advice.Local("finishSpan") boolean finishSpan, - @Advice.Local("agentScope") AgentScope scope) { + @Advice.Local("contextScope") ContextScope scope) { final boolean invalidRequest = !(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse); if (invalidRequest) { @@ -53,7 +52,7 @@ public static boolean onEnter( // the dispatch span was already activated in Jetty's HandleAdvice. We let it finish the span // to avoid trying to finish twice finishSpan = activeSpan() != dispatchSpan; - scope = activateSpan(castDispatchSpan); + scope = castDispatchSpan.attach(); return false; } @@ -69,12 +68,12 @@ 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.extractContext(httpServletRequest); + final AgentSpan span = DECORATE.startSpanFromContext(httpServletRequest, extractedContext); + scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedContext); + DECORATE.onRequestWithContext(span, httpServletRequest, httpServletRequest, extractedContext); httpServletRequest.setAttribute(DD_SPAN_ATTRIBUTE, span); httpServletRequest.setAttribute( @@ -97,7 +96,7 @@ public static boolean onEnter( public static void stopSpan( @Advice.Argument(0) final ServletRequest request, @Advice.Argument(1) final ServletResponse response, - @Advice.Local("agentScope") final AgentScope scope, + @Advice.Local("contextScope") final ContextScope scope, @Advice.Local("isDispatch") boolean isDispatch, @Advice.Local("finishSpan") boolean finishSpan, @Advice.Thrown final Throwable throwable) { @@ -119,7 +118,7 @@ public static void stopSpan( if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { final HttpServletResponse resp = (HttpServletResponse) response; - final AgentSpan span = scope.span(); + final AgentSpan span = AgentSpan.fromContext(scope.context()); if (request.isAsyncStarted()) { AtomicBoolean activated = new AtomicBoolean(); 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..efd37c80aaa 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,33 +1,35 @@ 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.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import spray.http.HttpRequest; import spray.routing.RequestContext; public class SprayHttpServerRunSealedRouteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter(@Advice.Argument(value = 1, readOnly = false) RequestContext ctx) { + public static ContextScope enter( + @Advice.Argument(value = 1, readOnly = false) RequestContext ctx) { final AgentSpan span; - final AgentSpanContext.Extracted extractedContext; + final Context extractedContext; + final ContextScope scope; 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); + extractedContext = DECORATE.extractContext(request); + span = DECORATE.startSpanFromContext(request, extractedContext); + scope = extractedContext.with(span).attach(); } else { extractedContext = null; span = startSpan(DECORATE.spanName()); + scope = span.attach(); } - final AgentScope scope = activateSpan(span); DECORATE.afterStart(span); @@ -37,7 +39,7 @@ public static AgentScope enter(@Advice.Argument(value = 1, readOnly = false) Req @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (throwable != null) { DECORATE.onError(scope, throwable); } 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..4789508078d 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 @@ -2,7 +2,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.synapse3.SynapseServerDecorator.DECORATE; import static datadog.trace.instrumentation.synapse3.SynapseServerDecorator.SYNAPSE_SPAN_KEY; @@ -10,11 +9,11 @@ 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.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.apache.http.HttpRequest; import org.apache.http.nio.NHttpServerConnection; @@ -63,23 +62,25 @@ public void methodAdvice(final MethodTransformer transformer) { public static final class ServerRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest( + public static ContextScope beginRequest( @Advice.Argument(0) final NHttpServerConnection connection) { // check incoming request for distributed trace ids HttpRequest request = connection.getHttpRequest(); - AgentSpanContext.Extracted extractedContext = DECORATE.extract(request); + Context extractedContext = DECORATE.extractContext(request); + ContextScope scope; AgentSpan span; if (null != extractedContext) { - span = DECORATE.startSpan(request, extractedContext); + span = DECORATE.startSpanFromContext(request, extractedContext); + scope = extractedContext.with(span).attach(); } else { span = startSpan(DECORATE.spanName()); span.setMeasured(true); + scope = span.attach(); } - AgentScope scope = activateSpan(span); DECORATE.afterStart(span); - DECORATE.onRequest(span, connection, request, extractedContext); + DECORATE.onRequestWithContext(span, connection, request, extractedContext); // capture span to be finished by one of the various server response advices connection.getContext().setAttribute(SYNAPSE_SPAN_KEY, span); @@ -88,19 +89,19 @@ public static AgentScope beginRequest( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void requestReceived(@Advice.Enter final AgentScope scope) { + public static void requestReceived(@Advice.Enter final ContextScope scope) { scope.close(); } } public static final class ServerResponseAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginResponse( + public static ContextScope beginResponse( @Advice.Argument(0) final NHttpServerConnection connection) { // check and remove span from context so it won't be finished twice AgentSpan span = (AgentSpan) connection.getContext().removeAttribute(SYNAPSE_SPAN_KEY); if (null != span) { - return activateSpan(span); + return span.attach(); } return null; } @@ -108,12 +109,12 @@ public static AgentScope beginResponse( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void responseReady( @Advice.Argument(0) final NHttpServerConnection connection, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable error) { if (null == scope) { return; } - AgentSpan span = scope.span(); + AgentSpan span = AgentSpan.fromContext(scope.context()); DECORATE.onResponse(span, connection.getHttpResponse()); if (null != error) { DECORATE.onError(span, error); 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..868ea6c1e69 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 @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.undertow; 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.captureSpan; import static datadog.trace.instrumentation.undertow.UndertowBlockingHandler.REQUEST_BLOCKING_DATA; import static datadog.trace.instrumentation.undertow.UndertowBlockingHandler.TRACE_SEGMENT; @@ -14,12 +13,13 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.gateway.Flow.Action.RequestBlockingAction; 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 io.undertow.server.HttpHandler; import io.undertow.server.HttpServerExchange; @@ -71,7 +71,7 @@ public static class ExecuteRootHandlerAdvice { public static void onEnter( @Advice.Argument(value = 0, readOnly = false) HttpHandler handler, @Advice.Argument(1) final HttpServerExchange exchange, - @Advice.Local("agentScope") AgentScope scope) { + @Advice.Local("contextScope") ContextScope scope) { AgentSpan activeSpan = AgentTracer.activeSpan(); if (activeSpan != null) { AgentSpan localRootSpan = activeSpan.getLocalRootSpan(); @@ -89,15 +89,16 @@ public static void onEnter( AgentScope.Continuation continuation = exchange.getAttachment(DD_UNDERTOW_CONTINUATION); if (continuation != null) { // not yet complete, not ready to do final activation of continuation - scope = activateSpan(continuation.span()); + scope = continuation.span().attach(); return; } - final AgentSpanContext.Extracted extractedContext = DECORATE.extract(exchange); - final AgentSpan span = DECORATE.startSpan(exchange, extractedContext).setMeasured(true); - scope = activateSpan(span); + final Context extractedContext = DECORATE.extractContext(exchange); + final AgentSpan span = + DECORATE.startSpanFromContext(exchange, extractedContext).setMeasured(true); + scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, exchange, exchange, extractedContext); + DECORATE.onRequestWithContext(span, exchange, exchange, extractedContext); exchange.putAttachment(DD_UNDERTOW_CONTINUATION, captureSpan(span)); @@ -118,7 +119,7 @@ public static void onEnter( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void closeScope(@Advice.Local("agentScope") final AgentScope scope) { + public static void closeScope(@Advice.Local("contextScope") final ContextScope scope) { if (scope == null) { return; } 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..bf1f9ab5e1d 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,18 +2,17 @@ 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.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import io.undertow.server.HttpServerExchange; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -72,14 +71,14 @@ public static void afterRequestParse( // this because undertow will just write down a http 400 raw response over the net channel. // Here we try to create a span to record this AgentSpan span = activeSpan(); - AgentScope scope = null; + ContextScope 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.extractContext(exchange); + span = DECORATE.startSpanFromContext(exchange, extractedContext).setMeasured(true); + scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequest(span, exchange, exchange, extractedContext); + DECORATE.onRequestWithContext(span, exchange, exchange, extractedContext); } DECORATE.onError(span, throwable); // because we know that a http 400 will be thrown From 187f65c9a61b95d6ad929cea93e2bec2e20312a3 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 13 May 2025 17:23:45 -0400 Subject: [PATCH 15/33] update spray compilation error --- .../spray/SprayHttpServerRunSealedRouteAdvice.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 efd37c80aaa..04984608b1d 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 @@ -33,7 +33,9 @@ public static ContextScope enter( DECORATE.afterStart(span); - ctx = SprayHelper.wrapRequestContext(ctx, span, extractedContext); + ctx = + SprayHelper.wrapRequestContext( + ctx, span, DECORATE.getExtractedSpanContext(extractedContext)); return scope; } From 7f36c74c2edd0c093c4b1d1d4c39d1836af508fc Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Thu, 15 May 2025 15:59:08 +0200 Subject: [PATCH 16/33] feat: Add more helpers to bytecode bridge --- .../bootstrap/instrumentation/api/Java8BytecodeBridge.java | 5 +++++ .../trace/instrumentation/servlet2/Servlet2Advice.java | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java index 72728c6c94f..867473b5d30 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java @@ -29,4 +29,9 @@ public static Context getContextFrom(Object carrier) { public static Context detachContextFrom(Object carrier) { return Context.detachFrom(carrier); } + + /** @see AgentSpan#fromContext(Context) */ + public static AgentSpan spanFromContext(Context context) { + return AgentSpan.fromContext(context); + } } 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 94cf0cbeb8f..0929e884069 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,5 +1,6 @@ package datadog.trace.instrumentation.servlet2; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.servlet2.Servlet2Decorator.DECORATE; @@ -97,7 +98,7 @@ public static void stopSpan( if (scope == null) { return; } - final AgentSpan span = AgentSpan.fromContext(scope.context()); + final AgentSpan span = spanFromContext(scope.context()); if (response instanceof HttpServletResponse) { DECORATE.onResponse( From f36ba8dbbcc48a4a6f6fbaac8e95dd404bb82dfa Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 15 May 2025 16:35:11 -0400 Subject: [PATCH 17/33] applying advice to static calls to fromContext --- .../azure/functions/AzureFunctionsInstrumentation.java | 3 ++- .../grizzly/GrizzlyHttpHandlerInstrumentation.java | 3 ++- .../liberty20/LibertyServerInstrumentation.java | 3 ++- .../liberty23/LibertyServerInstrumentation.java | 3 ++- .../java/datadog/trace/instrumentation/play23/PlayAdvice.java | 3 ++- .../java/datadog/trace/instrumentation/play24/PlayAdvice.java | 3 ++- .../java/datadog/trace/instrumentation/play26/PlayAdvice.java | 3 ++- .../trace/instrumentation/restlet/RestletInstrumentation.java | 2 +- .../datadog/trace/instrumentation/servlet3/Servlet3Advice.java | 3 ++- .../instrumentation/synapse3/SynapseServerInstrumentation.java | 2 +- 10 files changed, 18 insertions(+), 10 deletions(-) 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 a434c70bfef..f209ad33b35 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,6 +3,7 @@ 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.Java8BytecodeBridge.spanFromContext; 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; @@ -80,7 +81,7 @@ public static void methodExit( @Advice.Enter final ContextScope scope, @Advice.Return final HttpResponseMessage response, @Advice.Thrown final Throwable throwable) { - final AgentSpan span = AgentSpan.fromContext(scope.context()); + final AgentSpan span = spanFromContext(scope.context()); DECORATE.onError(span, throwable); DECORATE.onResponse(span, response); DECORATE.beforeFinish(span); 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 c8e6091c1d8..4ec862e1aa3 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,6 +1,7 @@ package datadog.trace.instrumentation.grizzly; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; 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; @@ -107,7 +108,7 @@ public static void methodExit( } if (throwable != null) { - final AgentSpan span = AgentSpan.fromContext(scope.context()); + final AgentSpan span = spanFromContext(scope.context()); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); span.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 d1a90496e1e..d69f720922f 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 @@ -1,6 +1,7 @@ package datadog.trace.instrumentation.liberty20; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.liberty20.HttpInboundServiceContextImplInstrumentation.REQUEST_MSG_TYPE; import static datadog.trace.instrumentation.liberty20.LibertyDecorator.DD_EXTRACTED_CONTEXT_ATTRIBUTE; import static datadog.trace.instrumentation.liberty20.LibertyDecorator.DD_SPAN_ATTRIBUTE; @@ -162,7 +163,7 @@ public static void closeScope( // this has the unfortunate consequence that service name (as set via the tag interceptor) // of the top span won't match that of its child spans, because it's instead the original // one that will propagate - DECORATE.getPath(AgentSpan.fromContext(scope.context()), request); + DECORATE.getPath(spanFromContext(scope.context()), request); scope.close(); } } 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 ef7f685c459..ad8a34a3c97 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 @@ -1,6 +1,7 @@ package datadog.trace.instrumentation.liberty23; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.liberty23.HttpInboundServiceContextImplInstrumentation.REQUEST_MSG_TYPE; import static datadog.trace.instrumentation.liberty23.LibertyDecorator.DD_EXTRACTED_CONTEXT_ATTRIBUTE; import static datadog.trace.instrumentation.liberty23.LibertyDecorator.DD_SPAN_ATTRIBUTE; @@ -164,7 +165,7 @@ public static void closeScope( // this has the unfortunate consequence that service name (as set via the tag interceptor) // of the top span won't match that of its child spans, because it's instead the original // one that will propagate - DECORATE.getPath(AgentSpan.fromContext(scope.context()), request); + DECORATE.getPath(spanFromContext(scope.context()), request); scope.close(); } } 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 cec24dde8e0..0d8db777dfc 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 @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.PLAY_REQUEST; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.REPORT_HTTP_STATUS; @@ -45,7 +46,7 @@ public static void stopTraceOnResponse( @Advice.Thrown final Throwable throwable, @Advice.Argument(0) final Request req, @Advice.Return(readOnly = false) final Future responseFuture) { - final AgentSpan playControllerSpan = AgentSpan.fromContext(playControllerScope.context()); + final AgentSpan playControllerSpan = spanFromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. DECORATE.onRequest(playControllerSpan, req, req, null); 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 96e476a2e49..24503504f7e 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 @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.PLAY_REQUEST; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.REPORT_HTTP_STATUS; @@ -59,7 +60,7 @@ public static void stopTraceOnResponse( return; } - final AgentSpan playControllerSpan = AgentSpan.fromContext(playControllerScope.context()); + final AgentSpan playControllerSpan = spanFromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. DECORATE.onRequest(playControllerSpan, req, req, null); 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 720fa3b9ba7..f5d739d899f 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 @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.PLAY_REQUEST; @@ -62,7 +63,7 @@ public static void stopTraceOnResponse( return; } - final AgentSpan playControllerSpan = AgentSpan.fromContext(playControllerScope.context()); + final AgentSpan playControllerSpan = spanFromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. DECORATE.onRequestWithContext(playControllerSpan, req, req, extractedContext); 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 fcc9221ae1b..2f25e0179b8 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 @@ -72,7 +72,7 @@ public static void finishRequest( return; } - AgentSpan span = AgentSpan.fromContext(scope.context()); + AgentSpan span = spanFromContext(scope.context()); DECORATE.onResponse(span, exchange); if (null != error) { 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 b0cd29ba193..5925e60c7d6 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 @@ -1,6 +1,7 @@ package datadog.trace.instrumentation.servlet3; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_DISPATCH_SPAN_ATTRIBUTE; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_FIN_DISP_LIST_SPAN_ATTRIBUTE; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; @@ -118,7 +119,7 @@ public static void stopSpan( if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { final HttpServletResponse resp = (HttpServletResponse) response; - final AgentSpan span = AgentSpan.fromContext(scope.context()); + final AgentSpan span = spanFromContext(scope.context()); if (request.isAsyncStarted()) { AtomicBoolean activated = new AtomicBoolean(); 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 4789508078d..b1b3523a4dd 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 @@ -114,7 +114,7 @@ public static void responseReady( if (null == scope) { return; } - AgentSpan span = AgentSpan.fromContext(scope.context()); + AgentSpan span = spanFromContext(scope.context()); DECORATE.onResponse(span, connection.getHttpResponse()); if (null != error) { DECORATE.onError(span, error); From ddf872cb175e8e2e34ac47927344e0e58735e682 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 15 May 2025 16:50:35 -0400 Subject: [PATCH 18/33] adding import --- .../trace/instrumentation/restlet/RestletInstrumentation.java | 1 + 1 file changed, 1 insertion(+) 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 2f25e0179b8..8b644490fb3 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,6 +1,7 @@ package datadog.trace.instrumentation.restlet; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.restlet.RestletDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; From 4e94f29e7f5eacb42b72f8067f4a537a38d92daa Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 15 May 2025 17:01:54 -0400 Subject: [PATCH 19/33] final import --- .../instrumentation/synapse3/SynapseServerInstrumentation.java | 1 + 1 file changed, 1 insertion(+) 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 b1b3523a4dd..8c42c45c9eb 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 @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.synapse3.SynapseServerDecorator.DECORATE; import static datadog.trace.instrumentation.synapse3.SynapseServerDecorator.SYNAPSE_SPAN_KEY; import static net.bytebuddy.matcher.ElementMatchers.isMethod; From 2fb55576c0a45d7ce3a1040927767b880c3ad744 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 19 May 2025 10:41:24 +0200 Subject: [PATCH 20/33] change name to onrequest --- .../instrumentation/decorator/HttpServerDecorator.java | 2 +- .../trace/instrumentation/akkahttp/DatadogWrapperHelper.java | 2 +- .../azure/functions/AzureFunctionsInstrumentation.java | 2 +- .../grizzly/GrizzlyHttpHandlerInstrumentation.java | 2 +- .../trace/instrumentation/grizzlyhttp232/GrizzlyDecorator.java | 2 +- .../trace/instrumentation/jetty11/JettyServerAdvice.java | 2 +- .../trace/instrumentation/jetty12/JettyServerAdvice.java | 2 +- .../instrumentation/jetty70/JettyServerInstrumentation.java | 2 +- .../instrumentation/jetty76/JettyServerInstrumentation.java | 2 +- .../instrumentation/jetty9/JettyServerInstrumentation.java | 2 +- .../datadog/trace/instrumentation/jetty10/HandleAdvice.java | 2 +- .../instrumentation/liberty20/LibertyServerInstrumentation.java | 2 +- .../instrumentation/liberty23/LibertyServerInstrumentation.java | 2 +- .../netty38/server/HttpServerRequestTracingHandler.java | 2 +- .../netty40/server/HttpServerRequestTracingHandler.java | 2 +- .../netty41/server/HttpServerRequestTracingHandler.java | 2 +- .../trace/instrumentation/pekkohttp/DatadogWrapperHelper.java | 2 +- .../java/datadog/trace/instrumentation/play26/PlayAdvice.java | 2 +- .../trace/instrumentation/restlet/RestletInstrumentation.java | 2 +- .../datadog/trace/instrumentation/servlet2/Servlet2Advice.java | 2 +- .../datadog/trace/instrumentation/servlet3/Servlet3Advice.java | 2 +- .../instrumentation/synapse3/SynapseServerInstrumentation.java | 2 +- .../trace/instrumentation/undertow/HandlerInstrumentation.java | 2 +- .../undertow/HttpRequestParserInstrumentation.java | 2 +- 24 files changed, 24 insertions(+), 24 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 5233b7abc84..f6819dd4009 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 @@ -175,7 +175,7 @@ public AgentSpanContext.Extracted getExtractedSpanContext(Context context) { return extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); } - public AgentSpan onRequestWithContext( + public AgentSpan onRequest( final AgentSpan span, final CONNECTION connection, final REQUEST request, 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 4b06d8f5187..2abc146b56e 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 @@ -13,7 +13,7 @@ public static ContextScope createSpan(final HttpRequest request) { final Context extractedContext = DECORATE.extractContext(request); final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedContext); return extractedContext.with(span).attach(); } 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 f209ad33b35..2a8dfed9779 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 @@ -70,7 +70,7 @@ public static ContextScope methodEnter( final Context extractedContext = DECORATE.extractContext(request); final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); DECORATE.afterStart(span, context.getFunctionName()); - DECORATE.onRequestWithContext(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedContext); HTTP_RESOURCE_DECORATOR.withRoute( span, request.getHttpMethod().name(), request.getUri().getPath()); return extractedContext.with(span).attach(); 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 4ec862e1aa3..554db7b16bb 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 @@ -76,7 +76,7 @@ public static class HandleAdvice { final Context parentContext = DECORATE.extractContext(request); final AgentSpan span = DECORATE.startSpanFromContext(request, parentContext); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, request, request, parentContext); + DECORATE.onRequest(span, request, request, parentContext); scope = parentContext.with(span).attach(); 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 7e59c0a6fe4..53522e282d3 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 @@ -118,7 +118,7 @@ public static NextAction onHttpCodecFilterExit( DECORATE.afterStart(span); ctx.getAttributes().setAttribute(DD_SPAN_ATTRIBUTE, span); ctx.getAttributes().setAttribute(DD_RESPONSE_ATTRIBUTE, httpResponse); - DECORATE.onRequestWithContext(span, httpRequest, httpRequest, context); + DECORATE.onRequest(span, httpRequest, httpRequest, context); 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 a7530dedc44..79bbda2f52f 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 @@ -31,7 +31,7 @@ public static ContextScope onEnter( final ContextScope scope = extractedContext.with(span).attach(); span.setMeasured(true); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedContext); 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 9534e40fb7d..6034e1867d5 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 @@ -32,7 +32,7 @@ public static void onExit( try (final ContextScope scope = extractedContext.with(span).attach()) { span.setMeasured(true); JettyDecorator.DECORATE.afterStart(span); - JettyDecorator.DECORATE.onRequestWithContext(span, req, req, extractedContext); + JettyDecorator.DECORATE.onRequest(span, req, req, extractedContext); 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 5ee48bf1434..330109df4a1 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,7 @@ public static ContextScope onEnter( span = DECORATE.startSpanFromContext(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedContext); 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 983ea7516a8..342ff4e0abc 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,7 @@ public static ContextScope onEnter( span = DECORATE.startSpanFromContext(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedContext); 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 dc369cff745..39be46e13db 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,7 @@ public static ContextScope onEnter( span = DECORATE.startSpanFromContext(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedContext); 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 21b1cb6aceb..7a3b359a1e7 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 @@ -27,7 +27,7 @@ public static ContextScope onEnter( final Context extractedContext = DECORATE.extractContext(req); span = DECORATE.startSpanFromContext(req, extractedContext); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, req, req, extractedContext); + DECORATE.onRequest(span, req, req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); req.setAttribute(DD_SPAN_ATTRIBUTE, span); 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 d69f720922f..0dd5d7773fd 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 @@ -122,7 +122,7 @@ public static class HandleRequestAdvice { } } DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedContext); 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 ad8a34a3c97..e104caaf4c5 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 @@ -124,7 +124,7 @@ public static class HandleRequestAdvice { } } DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedContext); 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 f62ce1d095f..7dea5184b45 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 @@ -51,7 +51,7 @@ public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent try (final ContextScope scope = context.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, ctx.getChannel(), request, context); + DECORATE.onRequest(span, ctx.getChannel(), request, context); 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 e77824e1ee5..d9d7d39745c 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 @@ -44,7 +44,7 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { try (final ContextScope scope = extractedContext.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, channel, request, extractedContext); + DECORATE.onRequest(span, channel, request, extractedContext); 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 566f0cae172..f8849c978f8 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 @@ -43,7 +43,7 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { try (final ContextScope scope = extractedContext.with(span).attach()) { DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, channel, request, extractedContext); + DECORATE.onRequest(span, channel, request, extractedContext); 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 d3278486c72..2a186fb1bb6 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 @@ -13,7 +13,7 @@ public static ContextScope createSpan(final HttpRequest request) { final Context extractedContext = DECORATE.extractContext(request); final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, request, request, extractedContext); + DECORATE.onRequest(span, request, request, extractedContext); return extractedContext.with(span).attach(); } 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 f5d739d899f..cd4599a34e9 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 @@ -66,7 +66,7 @@ public static void stopTraceOnResponse( final AgentSpan playControllerSpan = spanFromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. - DECORATE.onRequestWithContext(playControllerSpan, req, req, extractedContext); + DECORATE.onRequest(playControllerSpan, req, req, extractedContext); if (throwable == null) { responseFuture.onComplete( 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 8b644490fb3..d7def680909 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 @@ -58,7 +58,7 @@ public static ContextScope beginRequest(@Advice.Argument(0) final HttpExchange e AgentSpan span = DECORATE.startSpanFromContext(exchange, context); ContextScope scope = context.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, exchange, exchange, context); + DECORATE.onRequest(span, exchange, exchange, context); 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 0929e884069..f024e43d14c 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 @@ -56,7 +56,7 @@ public static boolean onEnter( final AgentSpan span = DECORATE.startSpanFromContext(httpServletRequest, extractedContext); scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, httpServletRequest, httpServletRequest, extractedContext); + DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedContext); 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 5925e60c7d6..7d7e3893ec0 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 @@ -74,7 +74,7 @@ public static boolean onEnter( scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, httpServletRequest, httpServletRequest, extractedContext); + DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedContext); httpServletRequest.setAttribute(DD_SPAN_ATTRIBUTE, span); httpServletRequest.setAttribute( 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 8c42c45c9eb..ca9d647b89f 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 @@ -81,7 +81,7 @@ public static ContextScope beginRequest( scope = span.attach(); } DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, connection, request, extractedContext); + DECORATE.onRequest(span, connection, request, extractedContext); // 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/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 868ea6c1e69..44d9314b8c5 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 @@ -98,7 +98,7 @@ public static void onEnter( DECORATE.startSpanFromContext(exchange, extractedContext).setMeasured(true); scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, exchange, exchange, extractedContext); + DECORATE.onRequest(span, exchange, exchange, extractedContext); 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 bf1f9ab5e1d..e15dd193c67 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 @@ -78,7 +78,7 @@ public static void afterRequestParse( span = DECORATE.startSpanFromContext(exchange, extractedContext).setMeasured(true); scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); - DECORATE.onRequestWithContext(span, exchange, exchange, extractedContext); + DECORATE.onRequest(span, exchange, exchange, extractedContext); } DECORATE.onError(span, throwable); // because we know that a http 400 will be thrown From 5d4f0a89988828ed2a15ad79088a4fbf5ea7a1c5 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 19 May 2025 11:19:15 +0200 Subject: [PATCH 21/33] adding casting to null --- .../trace/instrumentation/axway/HTTPPluginAdvice.java | 4 +++- .../datadog/trace/instrumentation/play23/PlayAdvice.java | 5 +++-- .../datadog/trace/instrumentation/play24/PlayAdvice.java | 5 +++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/HTTPPluginAdvice.java b/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/HTTPPluginAdvice.java index fc54e83d966..44fe2bce995 100644 --- a/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/HTTPPluginAdvice.java +++ b/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/HTTPPluginAdvice.java @@ -8,6 +8,7 @@ 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.AgentSpanContext; import net.bytebuddy.asm.Advice; public class HTTPPluginAdvice { @@ -17,7 +18,8 @@ public static AgentScope onEnter(@Advice.Argument(value = 2) final Object server final AgentSpan span = startSpan(DECORATE.spanName()).setMeasured(true); DECORATE.afterStart(span); // serverTransaction is like request + connection in one object: - DECORATE.onRequest(span, serverTransaction, serverTransaction, null); + DECORATE.onRequest( + span, serverTransaction, serverTransaction, (AgentSpanContext.Extracted) null); final AgentScope scope = activateSpan(span); return scope; } 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 0d8db777dfc..e2bcd9fe606 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 @@ -10,6 +10,7 @@ import datadog.context.Context; import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import play.api.mvc.Action; import play.api.mvc.Headers; @@ -49,7 +50,7 @@ public static void stopTraceOnResponse( final AgentSpan playControllerSpan = spanFromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. - DECORATE.onRequest(playControllerSpan, req, req, null); + DECORATE.onRequest(playControllerSpan, req, req, (AgentSpanContext.Extracted) null); if (throwable == null) { responseFuture.onComplete( @@ -69,7 +70,7 @@ public static void stopTraceOnResponse( final AgentSpan rootSpan = activeSpan(); // set the resource name on the upstream akka/netty span if there is one if (rootSpan != null) { - DECORATE.onRequest(rootSpan, req, req, null); + DECORATE.onRequest(rootSpan, req, req, (AgentSpanContext.Extracted) null); } } } 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 24503504f7e..fed6ee154b0 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 @@ -10,6 +10,7 @@ import datadog.context.Context; import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import play.api.mvc.Action; import play.api.mvc.Headers; @@ -63,7 +64,7 @@ public static void stopTraceOnResponse( final AgentSpan playControllerSpan = spanFromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. - DECORATE.onRequest(playControllerSpan, req, req, null); + DECORATE.onRequest(playControllerSpan, req, req, (AgentSpanContext.Extracted) null); if (throwable == null) { responseFuture.onComplete( @@ -83,7 +84,7 @@ public static void stopTraceOnResponse( final AgentSpan rootSpan = activeSpan(); // set the resource name on the upstream akka/netty span if there is one if (rootSpan != null) { - DECORATE.onRequest(rootSpan, req, req, null); + DECORATE.onRequest(rootSpan, req, req, (AgentSpanContext.Extracted) null); } } From 0120c2b9d3474ebee28fa4ea277c2c5f9eb847e8 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 19 May 2025 11:31:22 +0200 Subject: [PATCH 22/33] casting all null context calls to onRequest --- .../Elasticsearch5RestClientInstrumentation.java | 3 ++- .../trace/instrumentation/ratpack/TracingHandler.java | 3 ++- .../springweb/HandlerAdapterInstrumentation.java | 4 +++- .../springweb/HandlerMappingResourceNameFilter.java | 7 ++++++- .../trace/instrumentation/springweb6/ControllerAdvice.java | 4 +++- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/dd-java-agent/instrumentation/elasticsearch/rest-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5RestClientInstrumentation.java b/dd-java-agent/instrumentation/elasticsearch/rest-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5RestClientInstrumentation.java index cba605edf38..83e59a1c530 100644 --- a/dd-java-agent/instrumentation/elasticsearch/rest-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5RestClientInstrumentation.java +++ b/dd-java-agent/instrumentation/elasticsearch/rest-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5RestClientInstrumentation.java @@ -15,6 +15,7 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.elasticsearch.client.ResponseListener; @@ -61,7 +62,7 @@ public static AgentScope onEnter( final AgentSpan span = startSpan(OPERATION_NAME); DECORATE.afterStart(span); - DECORATE.onRequest(span, method, endpoint, null, null); + DECORATE.onRequest(span, method, endpoint, null, (AgentSpanContext.Extracted) null); responseListener = new RestResponseListener(responseListener, span); diff --git a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java index 898bf6b9230..3398cdff034 100644 --- a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java +++ b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java @@ -9,6 +9,7 @@ import datadog.trace.api.gateway.Flow; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import io.netty.util.Attribute; import io.netty.util.AttributeKey; import ratpack.handling.Context; @@ -37,7 +38,7 @@ public void handle(final Context ctx) { // Relying on executor instrumentation to assume the netty span is in context as the parent. final AgentSpan ratpackSpan = startSpan(DECORATE.spanName()).setMeasured(true); DECORATE.afterStart(ratpackSpan); - DECORATE.onRequest(ratpackSpan, request, request, null); + DECORATE.onRequest(ratpackSpan, request, request, (AgentSpanContext.Extracted) null); ctx.getExecution().add(ratpackSpan); boolean setFinalizer = false; diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java index 60e8e4944ef..48103d52600 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java @@ -20,6 +20,7 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import javax.servlet.http.HttpServletRequest; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -74,7 +75,8 @@ public static AgentScope nameResourceAndStartSpan( // Name the parent span based on the matching pattern Object parentSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); if (parentSpan instanceof AgentSpan) { - DECORATE.onRequest((AgentSpan) parentSpan, request, request, null); + DECORATE.onRequest( + (AgentSpan) parentSpan, request, request, (AgentSpanContext.Extracted) null); } if (activeSpan() == null) { diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerMappingResourceNameFilter.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerMappingResourceNameFilter.java index 40e2441af6b..90dff2df129 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerMappingResourceNameFilter.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerMappingResourceNameFilter.java @@ -4,6 +4,7 @@ import static datadog.trace.instrumentation.springweb.SpringWebHttpServerDecorator.DECORATE; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import java.io.IOException; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -40,7 +41,11 @@ protected void doFilterInternal( if (findMapping(wrappedRequest)) { // Name the parent span based on the matching pattern // Let the parent span resource name be set with the attribute set in findMapping. - DECORATE.onRequest((AgentSpan) parentSpan, wrappedRequest, wrappedRequest, null); + DECORATE.onRequest( + (AgentSpan) parentSpan, + wrappedRequest, + wrappedRequest, + (AgentSpanContext.Extracted) null); } } catch (final Exception ignored) { // mapping.getHandler() threw exception. Ignore diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/ControllerAdvice.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/ControllerAdvice.java index 4753681acd7..b85449e17ce 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/ControllerAdvice.java +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/ControllerAdvice.java @@ -10,6 +10,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import jakarta.servlet.http.HttpServletRequest; import net.bytebuddy.asm.Advice; import org.springframework.web.method.HandlerMethod; @@ -25,7 +26,8 @@ public static AgentScope nameResourceAndStartSpan( // Name the parent span based on the matching pattern Object parentSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); if (parentSpan instanceof AgentSpan) { - DECORATE.onRequest((AgentSpan) parentSpan, request, request, null); + DECORATE.onRequest( + (AgentSpan) parentSpan, request, request, (AgentSpanContext.Extracted) null); } if (activeSpan() == null) { From 2ce18b12b961eb503c3565babc6160baf214413e Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 19 May 2025 11:42:45 +0200 Subject: [PATCH 23/33] final casting --- .../Elasticsearch5RestClientInstrumentation.java | 3 +-- .../datadog/trace/instrumentation/spray/SprayHelper.scala | 2 +- .../springweb6/HandlerMappingResourceNameFilter.java | 6 +++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/instrumentation/elasticsearch/rest-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5RestClientInstrumentation.java b/dd-java-agent/instrumentation/elasticsearch/rest-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5RestClientInstrumentation.java index 83e59a1c530..cba605edf38 100644 --- a/dd-java-agent/instrumentation/elasticsearch/rest-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5RestClientInstrumentation.java +++ b/dd-java-agent/instrumentation/elasticsearch/rest-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5RestClientInstrumentation.java @@ -15,7 +15,6 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import org.elasticsearch.client.ResponseListener; @@ -62,7 +61,7 @@ public static AgentScope onEnter( final AgentSpan span = startSpan(OPERATION_NAME); DECORATE.afterStart(span); - DECORATE.onRequest(span, method, endpoint, null, (AgentSpanContext.Extracted) null); + DECORATE.onRequest(span, method, endpoint, null, null); responseListener = new RestResponseListener(responseListener, span); diff --git a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala index f93e0c83a82..60a11b6183f 100644 --- a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala +++ b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala @@ -30,7 +30,7 @@ object SprayHelper { def wrapRoute(route: Route): Route = { ctx => { - DECORATE.onRequest(activeSpan(), ctx, ctx.request, null) + DECORATE.onRequest(activeSpan(), ctx, ctx.request, (AgentSpanContext.Extracted) null) try route(ctx) catch { case NonFatal(e) => diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.java index e821362e432..a75bee6ff98 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.java +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.java @@ -3,6 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -40,7 +41,10 @@ protected void doFilterInternal( // Name the parent span based on the matching pattern // Let the parent span resource name be set with the attribute set in findMapping. SpringWebHttpServerDecorator.DECORATE.onRequest( - (AgentSpan) parentSpan, wrappedRequest, wrappedRequest, null); + (AgentSpan) parentSpan, + wrappedRequest, + wrappedRequest, + (AgentSpanContext.Extracted) null); } } catch (final Exception ignored) { // mapping.getHandler() threw exception. Ignore From cfa274d3f9e9d82f196a04d1031bdadd67512b2d Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 19 May 2025 11:52:13 +0200 Subject: [PATCH 24/33] fixing scala syntax --- .../scala/datadog/trace/instrumentation/spray/SprayHelper.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala index 60a11b6183f..1c9ddeb47e4 100644 --- a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala +++ b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala @@ -30,7 +30,7 @@ object SprayHelper { def wrapRoute(route: Route): Route = { ctx => { - DECORATE.onRequest(activeSpan(), ctx, ctx.request, (AgentSpanContext.Extracted) null) + DECORATE.onRequest(activeSpan(), ctx, ctx.request, null.asInstanceOf[AgentSpanContext.Extracted]) try route(ctx) catch { case NonFatal(e) => From 6cb87c5ea74f4cb06ede9a05d385361454499d3c Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 19 May 2025 12:46:45 +0200 Subject: [PATCH 25/33] fixing null --- .../decorator/HttpServerDecoratorBenchmark.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java b/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java index 3446c8aa575..0ea4511acf4 100644 --- a/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java +++ b/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java @@ -6,6 +6,7 @@ import datadog.trace.api.GlobalTracer; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.ContextVisitors; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.URIDefaultDataAdapter; @@ -61,7 +62,7 @@ public void setUp() { @Benchmark public AgentSpan onRequest() { - return decorator.onRequest(span, null, request, null); + return decorator.onRequest(span, null, request, (AgentSpanContext.Extracted) null); } public static class Request { From 712c64b754e9bd6bfa9854c73f6b9ec155c120af Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 20 May 2025 11:53:34 +0200 Subject: [PATCH 26/33] casting null parameters in server decorator test --- .../decorator/HttpServerDecoratorTest.groovy | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy b/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy index aefddc1a1c3..daf09cad3e4 100644 --- a/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy +++ b/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy @@ -51,7 +51,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def decorator = newDecorator() when: - decorator.onRequest(this.span, null, req, null) + decorator.onRequest(this.span, null, req, (AgentSpanContext.Extracted) null) then: if (req) { @@ -84,7 +84,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def decorator = newDecorator() when: - decorator.onRequest(this.span, null, req, null) + decorator.onRequest(this.span, null, req, (AgentSpanContext.Extracted) null) then: if (expectedUrl) { @@ -135,7 +135,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def decorator = newDecorator() when: - decorator.onRequest(this.span, null, req, null) + decorator.onRequest(this.span, null, req, (AgentSpanContext.Extracted) null) then: 1 * this.span.setTag(Tags.HTTP_URL, {it.toString() == expectedUrl}) @@ -165,7 +165,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def decorator = newDecorator() when: - decorator.onRequest(this.span, null, [url: new URI('http://host/p%20ath')], null) + decorator.onRequest(this.span, null, [url: new URI('http://host/p%20ath')], (AgentSpanContext.Extracted) null) then: 1 * this.span.setResourceName({ it as String == '/path' }, ResourceNamePriorities.HTTP_PATH_NORMALIZER) From 80529d3a40949adea27e1fff400dc849d9223d9b Mon Sep 17 00:00:00 2001 From: Santiago Mola Date: Tue, 20 May 2025 14:42:39 +0200 Subject: [PATCH 27/33] fix appsec jetty visitor --- .../datadog/trace/instrumentation/jetty9/HandleVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java b/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java index 66e8d9e4dfc..2370712061a 100644 --- a/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java +++ b/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java @@ -102,7 +102,7 @@ public void visitMethodInsn( lookForStore = !lookForStore && opcode == Opcodes.INVOKEVIRTUAL - && name.equals("startSpan") + && name.equals("startSpanFromContext") && descriptor.endsWith("Ldatadog/trace/bootstrap/instrumentation/api/AgentSpan;"); } else if (!success && opcode == Opcodes.INVOKEVIRTUAL From 8893c3f01cf0648ec44c29d98c3c26d2cd43ea56 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 20 May 2025 15:42:59 +0200 Subject: [PATCH 28/33] modifying jetty-common Method insn --- .../trace/instrumentation/jetty/HandleRequestVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty/HandleRequestVisitor.java b/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty/HandleRequestVisitor.java index a1924d4a4b5..1f0fecaa466 100644 --- a/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty/HandleRequestVisitor.java +++ b/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty/HandleRequestVisitor.java @@ -57,7 +57,7 @@ public void visitMethodInsn( lookForStore = !lookForStore && opcode == Opcodes.INVOKEVIRTUAL - && name.equals("startSpan") + && name.equals("startSpanFromContext") && descriptor.endsWith("Ldatadog/trace/bootstrap/instrumentation/api/AgentSpan;"); } else if (opcode == Opcodes.INVOKEVIRTUAL && owner.equals("org/eclipse/jetty/server/Server") From c355d8405ea366f0b1cf2cbd850dc943e4e46ef6 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 20 May 2025 18:18:00 +0200 Subject: [PATCH 29/33] spotless --- .../instrumentation/decorator/HttpServerDecorator.java | 3 --- 1 file changed, 3 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 d08e4092810..f6819dd4009 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 @@ -1,7 +1,5 @@ package datadog.trace.bootstrap.instrumentation.decorator; -import static datadog.context.Context.root; -import static datadog.context.propagation.Propagators.defaultPropagator; 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; @@ -146,7 +144,6 @@ public Context extractContext(REQUEST_CARRIER carrier) { } /** Deprecated. Use {@link #startSpanFromContext(Object, Context)} instead. */ - @Deprecated public AgentSpan startSpan(REQUEST_CARRIER carrier, AgentSpanContext.Extracted context) { return startSpan("http-server", carrier, context); From 4a43c8fdac86a684c723e77a9e846c4ca722d788 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 21 May 2025 16:54:38 +0200 Subject: [PATCH 30/33] responding PR comments --- .../decorator/HttpServerDecorator.java | 12 ++++++++---- .../akkahttp/DatadogWrapperHelper.java | 2 +- .../functions/AzureFunctionsInstrumentation.java | 2 +- .../grizzly/GrizzlyHttpHandlerInstrumentation.java | 2 +- .../grizzlyhttp232/GrizzlyDecorator.java | 2 +- .../instrumentation/jetty11/JettyServerAdvice.java | 2 +- .../instrumentation/jetty12/JettyServerAdvice.java | 2 +- .../jetty70/JettyServerInstrumentation.java | 2 +- .../jetty76/JettyServerInstrumentation.java | 2 +- .../jetty9/JettyServerInstrumentation.java | 2 +- .../trace/instrumentation/jetty10/HandleAdvice.java | 2 +- .../liberty20/LibertyServerInstrumentation.java | 2 +- .../liberty23/LibertyServerInstrumentation.java | 2 +- .../server/HttpServerRequestTracingHandler.java | 2 +- .../server/HttpServerRequestTracingHandler.java | 2 +- .../server/HttpServerRequestTracingHandler.java | 2 +- .../pekkohttp/DatadogWrapperHelper.java | 2 +- .../trace/instrumentation/play23/PlayAdvice.java | 2 +- .../trace/instrumentation/play24/PlayAdvice.java | 2 +- .../trace/instrumentation/play26/PlayAdvice.java | 2 +- .../restlet/RestletInstrumentation.java | 2 +- .../instrumentation/servlet2/Servlet2Advice.java | 2 +- .../instrumentation/servlet3/Servlet3Advice.java | 2 +- .../spray/SprayHttpServerRunSealedRouteAdvice.java | 2 +- .../synapse3/SynapseServerInstrumentation.java | 2 +- .../tomcat/TomcatServerInstrumentation.java | 2 +- .../undertow/HandlerInstrumentation.java | 3 +-- .../undertow/HttpRequestParserInstrumentation.java | 2 +- 28 files changed, 35 insertions(+), 32 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 f6819dd4009..f4b118130c6 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 @@ -1,5 +1,6 @@ package datadog.trace.bootstrap.instrumentation.decorator; +import static datadog.context.Context.root; 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; @@ -135,15 +136,18 @@ public AgentSpanContext.Extracted extract(REQUEST_CARRIER carrier) { return extractContextAndGetSpanContext(carrier, getter); } + /** + * Will be renamed to #extract(REQUEST_CARRIER) when refactoring of instrumentations is complete + */ public Context extractContext(REQUEST_CARRIER carrier) { AgentPropagation.ContextVisitor getter = getter(); if (null == carrier || null == getter) { - return null; + return root(); } - return Propagators.defaultPropagator().extract(Context.root(), carrier, getter); + return Propagators.defaultPropagator().extract(root(), carrier, getter); } - /** Deprecated. Use {@link #startSpanFromContext(Object, Context)} instead. */ + /** Deprecated. Use {@link #startSpan(Object, Context)} instead. */ @Deprecated public AgentSpan startSpan(REQUEST_CARRIER carrier, AgentSpanContext.Extracted context) { return startSpan("http-server", carrier, context); @@ -166,7 +170,7 @@ public AgentSpan startSpan( return span; } - public AgentSpan startSpanFromContext(REQUEST_CARRIER carrier, Context context) { + public AgentSpan startSpan(REQUEST_CARRIER carrier, Context context) { return startSpan("http-server", carrier, getExtractedSpanContext(context)); } 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 2abc146b56e..85be099be8c 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 @@ -11,7 +11,7 @@ public class DatadogWrapperHelper { public static ContextScope createSpan(final HttpRequest request) { final Context extractedContext = DECORATE.extractContext(request); - final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); + final AgentSpan span = DECORATE.startSpan(request, extractedContext); DECORATE.afterStart(span); DECORATE.onRequest(span, request, request, extractedContext); 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 2a8dfed9779..1a6f8bb301a 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 @@ -68,7 +68,7 @@ public static ContextScope methodEnter( @Advice.Argument(0) final HttpRequestMessage request, @Advice.Argument(1) final ExecutionContext context) { final Context extractedContext = DECORATE.extractContext(request); - final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); + final AgentSpan span = DECORATE.startSpan(request, extractedContext); DECORATE.afterStart(span, context.getFunctionName()); DECORATE.onRequest(span, request, request, extractedContext); HTTP_RESOURCE_DECORATOR.withRoute( 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 554db7b16bb..620d3133e4f 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 @@ -74,7 +74,7 @@ public static class HandleAdvice { } final Context parentContext = DECORATE.extractContext(request); - final AgentSpan span = DECORATE.startSpanFromContext(request, parentContext); + final AgentSpan span = DECORATE.startSpan(request, parentContext); DECORATE.afterStart(span); DECORATE.onRequest(span, request, request, parentContext); 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 53522e282d3..b757c242e31 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 @@ -113,7 +113,7 @@ public static NextAction onHttpCodecFilterExit( HttpRequestPacket httpRequest = (HttpRequestPacket) httpHeader; HttpResponsePacket httpResponse = httpRequest.getResponse(); Context context = DECORATE.extractContext(httpRequest); - AgentSpan span = DECORATE.startSpanFromContext(httpRequest, context); + AgentSpan span = DECORATE.startSpan(httpRequest, context); ContextScope scope = context.with(span).attach(); DECORATE.afterStart(span); ctx.getAttributes().setAttribute(DD_SPAN_ATTRIBUTE, span); 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 79bbda2f52f..3ace86c53f2 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 @@ -27,7 +27,7 @@ public static ContextScope onEnter( } final Context extractedContext = DECORATE.extractContext(req); - span = DECORATE.startSpanFromContext(req, extractedContext); + span = DECORATE.startSpan(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); span.setMeasured(true); DECORATE.afterStart(span); 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 6034e1867d5..5fc610ba5ea 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 @@ -28,7 +28,7 @@ public static void onExit( } final Context extractedContext = JettyDecorator.DECORATE.extractContext(req); - final AgentSpan span = JettyDecorator.DECORATE.startSpanFromContext(req, extractedContext); + final AgentSpan span = JettyDecorator.DECORATE.startSpan(req, extractedContext); try (final ContextScope scope = extractedContext.with(span).attach()) { span.setMeasured(true); JettyDecorator.DECORATE.afterStart(span); 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 330109df4a1..ed3970d174b 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 @@ -156,7 +156,7 @@ public static ContextScope onEnter( } final Context extractedContext = DECORATE.extractContext(req); - span = DECORATE.startSpanFromContext(req, extractedContext); + span = DECORATE.startSpan(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); DECORATE.onRequest(span, req, req, extractedContext); 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 342ff4e0abc..03f25109d87 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 @@ -157,7 +157,7 @@ public static ContextScope onEnter( } final Context extractedContext = DECORATE.extractContext(req); - span = DECORATE.startSpanFromContext(req, extractedContext); + span = DECORATE.startSpan(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); DECORATE.onRequest(span, req, req, extractedContext); 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 39be46e13db..31e696eb8f3 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 @@ -171,7 +171,7 @@ public static ContextScope onEnter( } final Context extractedContext = DECORATE.extractContext(req); - span = DECORATE.startSpanFromContext(req, extractedContext); + span = DECORATE.startSpan(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); DECORATE.onRequest(span, req, req, extractedContext); 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 7a3b359a1e7..5c555eea68c 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 @@ -25,7 +25,7 @@ public static ContextScope onEnter( } final Context extractedContext = DECORATE.extractContext(req); - span = DECORATE.startSpanFromContext(req, extractedContext); + span = DECORATE.startSpan(req, extractedContext); DECORATE.afterStart(span); DECORATE.onRequest(span, req, req, extractedContext); 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 0dd5d7773fd..8df47198b60 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 @@ -107,7 +107,7 @@ public static class HandleRequestAdvice { final Context extractedContext = DECORATE.extractContext(request); request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); - final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); + final AgentSpan span = DECORATE.startSpan(request, extractedContext); scope = extractedContext.with(span).attach(); if (Config.get().isJeeSplitByDeployment()) { final IWebAppDispatcherContext dispatcherContext = request.getWebAppDispatcherContext(); 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 e104caaf4c5..9cc0f3e814f 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 @@ -109,7 +109,7 @@ public static class HandleRequestAdvice { final Context extractedContext = DECORATE.extractContext(request); request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext); - final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); + final AgentSpan span = DECORATE.startSpan(request, extractedContext); scope = extractedContext.with(span).attach(); if (Config.get().isJeeSplitByDeployment()) { final IWebAppDispatcherContext dispatcherContext = request.getWebAppDispatcherContext(); 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 7dea5184b45..cae5febef94 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 @@ -44,7 +44,7 @@ public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent final HttpRequest request = (HttpRequest) msg.getMessage(); final HttpHeaders headers = request.headers(); final Context context = DECORATE.extractContext(headers); - final AgentSpan span = DECORATE.startSpanFromContext(headers, context); + final AgentSpan span = DECORATE.startSpan(headers, context); channelTraceContext.reset(); channelTraceContext.setRequestHeaders(headers); 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 d9d7d39745c..63501d855c9 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 @@ -40,7 +40,7 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { final HttpRequest request = (HttpRequest) msg; final HttpHeaders headers = request.headers(); final Context extractedContext = DECORATE.extractContext(headers); - final AgentSpan span = DECORATE.startSpanFromContext(headers, extractedContext); + final AgentSpan span = DECORATE.startSpan(headers, extractedContext); try (final ContextScope scope = extractedContext.with(span).attach()) { DECORATE.afterStart(span); 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 f8849c978f8..31236ee482e 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 @@ -39,7 +39,7 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { final HttpRequest request = (HttpRequest) msg; final HttpHeaders headers = request.headers(); final Context extractedContext = DECORATE.extractContext(headers); - final AgentSpan span = DECORATE.startSpanFromContext(headers, extractedContext); + final AgentSpan span = DECORATE.startSpan(headers, extractedContext); try (final ContextScope scope = extractedContext.with(span).attach()) { DECORATE.afterStart(span); 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 2a186fb1bb6..67112021c5d 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 @@ -11,7 +11,7 @@ public class DatadogWrapperHelper { public static ContextScope createSpan(final HttpRequest request) { final Context extractedContext = DECORATE.extractContext(request); - final AgentSpan span = DECORATE.startSpanFromContext(request, extractedContext); + final AgentSpan span = DECORATE.startSpan(request, extractedContext); DECORATE.afterStart(span); DECORATE.onRequest(span, request, request, extractedContext); 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 e2bcd9fe606..2ad8ab35e27 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 @@ -26,7 +26,7 @@ public static ContextScope onEnter(@Advice.Argument(0) final Request req) { if (activeSpan() == null) { Headers headers = req.headers(); final Context extractedContext = DECORATE.extractContext(headers); - span = DECORATE.startSpanFromContext(headers, extractedContext); + span = DECORATE.startSpan(headers, extractedContext); scope = extractedContext.with(span).attach(); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. 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 fed6ee154b0..985867ba9b0 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 @@ -32,7 +32,7 @@ public static ContextScope onEnter(@Advice.Argument(value = 0, readOnly = false) if (activeSpan() == null) { final Headers headers = req.headers(); final Context extractedContext = DECORATE.extractContext(headers); - span = DECORATE.startSpanFromContext(headers, extractedContext); + span = DECORATE.startSpan(headers, extractedContext); scope = extractedContext.with(span).attach(); } else { // An upstream framework (e.g. akka-http, netty) has already started the 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 cd4599a34e9..76249a2e955 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 @@ -33,7 +33,7 @@ public static ContextScope onEnter( if (activeSpan() == null) { final Headers headers = req.headers(); extractedContext = DECORATE.extractContext(headers); - span = DECORATE.startSpanFromContext(headers, extractedContext); + span = DECORATE.startSpan(headers, extractedContext); scope = extractedContext.with(span).attach(); } else { // An upstream framework (e.g. akka-http, netty) has already started the span. 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 d7def680909..6e5ca6ac19a 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 @@ -55,7 +55,7 @@ public static class RestletHandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static ContextScope beginRequest(@Advice.Argument(0) final HttpExchange exchange) { Context context = DECORATE.extractContext(exchange); - AgentSpan span = DECORATE.startSpanFromContext(exchange, context); + AgentSpan span = DECORATE.startSpan(exchange, context); ContextScope scope = context.with(span).attach(); DECORATE.afterStart(span); DECORATE.onRequest(span, exchange, exchange, context); 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 f024e43d14c..05ab205b723 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 @@ -53,7 +53,7 @@ public static boolean onEnter( } final Context extractedContext = DECORATE.extractContext(httpServletRequest); - final AgentSpan span = DECORATE.startSpanFromContext(httpServletRequest, extractedContext); + final AgentSpan span = DECORATE.startSpan(httpServletRequest, extractedContext); scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); DECORATE.onRequest(span, httpServletRequest, httpServletRequest, extractedContext); 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 7d7e3893ec0..98d42161905 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 @@ -70,7 +70,7 @@ public static boolean onEnter( } final Context extractedContext = DECORATE.extractContext(httpServletRequest); - final AgentSpan span = DECORATE.startSpanFromContext(httpServletRequest, extractedContext); + final AgentSpan span = DECORATE.startSpan(httpServletRequest, extractedContext); scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); 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 04984608b1d..4c7821f4a07 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 @@ -23,7 +23,7 @@ public static ContextScope enter( // TODO: Add test for it final HttpRequest request = ctx.request(); extractedContext = DECORATE.extractContext(request); - span = DECORATE.startSpanFromContext(request, extractedContext); + span = DECORATE.startSpan(request, extractedContext); scope = extractedContext.with(span).attach(); } else { extractedContext = null; 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 ca9d647b89f..a627b02d1e0 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 @@ -73,7 +73,7 @@ public static ContextScope beginRequest( AgentSpan span; if (null != extractedContext) { - span = DECORATE.startSpanFromContext(request, extractedContext); + span = DECORATE.startSpan(request, extractedContext); scope = extractedContext.with(span).attach(); } else { span = startSpan(DECORATE.spanName()); 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 e01e320acde..7b2288b869d 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 @@ -129,7 +129,7 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque req.setAttribute( DD_EXTRACTED_CONTEXT_ATTRIBUTE, DECORATE.getExtractedSpanContext(extractedContext)); - final AgentSpan span = DECORATE.startSpanFromContext(req, extractedContext); + final AgentSpan span = DECORATE.startSpan(req, extractedContext); final ContextScope scope = extractedContext.with(span).attach(); // This span is finished when Request.recycle() is called by RequestInstrumentation. 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 44d9314b8c5..291cc95bec1 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 @@ -94,8 +94,7 @@ public static void onEnter( } final Context extractedContext = DECORATE.extractContext(exchange); - final AgentSpan span = - DECORATE.startSpanFromContext(exchange, extractedContext).setMeasured(true); + final AgentSpan span = DECORATE.startSpan(exchange, extractedContext).setMeasured(true); scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); DECORATE.onRequest(span, exchange, exchange, extractedContext); 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 e15dd193c67..f1057d6d28c 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 @@ -75,7 +75,7 @@ public static void afterRequestParse( try { if (span == null) { final Context extractedContext = DECORATE.extractContext(exchange); - span = DECORATE.startSpanFromContext(exchange, extractedContext).setMeasured(true); + span = DECORATE.startSpan(exchange, extractedContext).setMeasured(true); scope = extractedContext.with(span).attach(); DECORATE.afterStart(span); DECORATE.onRequest(span, exchange, exchange, extractedContext); From daebabd46d13521503f2615fb647a38ee714681a Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 21 May 2025 17:17:55 +0200 Subject: [PATCH 31/33] removing null reference --- .../decorator/HttpServerDecoratorBenchmark.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java b/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java index 0ea4511acf4..64ef5377364 100644 --- a/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java +++ b/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java @@ -3,6 +3,7 @@ import static java.util.concurrent.TimeUnit.MICROSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; +import datadog.context.Context; import datadog.trace.api.GlobalTracer; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -57,7 +58,7 @@ public void setUp() { .build(); GlobalTracer.forceRegister(tracer); decorator = new BenchmarkHttpServerDecorator(); - span = decorator.startSpan(Collections.emptyMap(), null); + span = decorator.startSpan(Collections.emptyMap(), (Context) null); } @Benchmark From 27d88b206b439c1a0da9a4488a98877902dcfe0f Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 21 May 2025 18:17:18 +0200 Subject: [PATCH 32/33] updating jetty visitors --- .../trace/instrumentation/jetty/HandleRequestVisitor.java | 2 +- .../datadog/trace/instrumentation/jetty9/HandleVisitor.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty/HandleRequestVisitor.java b/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty/HandleRequestVisitor.java index 1f0fecaa466..a1924d4a4b5 100644 --- a/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty/HandleRequestVisitor.java +++ b/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty/HandleRequestVisitor.java @@ -57,7 +57,7 @@ public void visitMethodInsn( lookForStore = !lookForStore && opcode == Opcodes.INVOKEVIRTUAL - && name.equals("startSpanFromContext") + && name.equals("startSpan") && descriptor.endsWith("Ldatadog/trace/bootstrap/instrumentation/api/AgentSpan;"); } else if (opcode == Opcodes.INVOKEVIRTUAL && owner.equals("org/eclipse/jetty/server/Server") diff --git a/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java b/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java index 2370712061a..66e8d9e4dfc 100644 --- a/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java +++ b/dd-java-agent/instrumentation/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java @@ -102,7 +102,7 @@ public void visitMethodInsn( lookForStore = !lookForStore && opcode == Opcodes.INVOKEVIRTUAL - && name.equals("startSpanFromContext") + && name.equals("startSpan") && descriptor.endsWith("Ldatadog/trace/bootstrap/instrumentation/api/AgentSpan;"); } else if (!success && opcode == Opcodes.INVOKEVIRTUAL From e0e508cc72ef12c1337b9ad6d7651f8ad7e95698 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 22 May 2025 16:20:28 +0200 Subject: [PATCH 33/33] checking for NPE --- .../pekkohttp/DatadogServerRequestResponseFlowWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java index 0e8a603e899..466f6657372 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java @@ -112,8 +112,8 @@ public void onDownstreamFinish() throws Exception { public void onPush() throws Exception { final HttpResponse response = grab(responseInlet); final ContextScope scope = scopes.poll(); - AgentSpan span = AgentSpan.fromContext(scope.context()); if (scope != null) { + AgentSpan span = AgentSpan.fromContext(scope.context()); DatadogWrapperHelper.finishSpan(span, response); // Check if the active span matches the scope from when the request came in, // and close it. If it's not, then it will be cleaned up actor message