From 14f01f33870cf712b4c1f1ab0f092077855949fb Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Wed, 7 May 2025 07:34:53 +0200 Subject: [PATCH 1/3] feat(dsm): Clean up context injection --- .../decorator/HttpClientDecorator.java | 9 ---- .../AkkaHttpSingleRequestInstrumentation.java | 5 +-- .../akkahttp106/SingleRequestAdvice.java | 5 +-- .../DelegatingRequestProducer.java | 7 +-- .../apachehttpclient/HelperMethods.java | 5 +-- .../DelegatingRequestChannel.java | 6 +-- .../apachehttpclient5/HelperMethods.java | 5 +-- .../client/ClientCallImplInstrumentation.java | 5 +-- .../grpc/client/GrpcClientDecorator.java | 14 ------ .../CommonsHttpClientInstrumentation.java | 5 +-- .../GoogleHttpClientDecorator.java | 4 +- .../AsyncHttpClientInstrumentation.java | 5 +-- .../client/ClientCallImplInstrumentation.java | 5 +-- .../grpc/client/GrpcClientDecorator.java | 14 ------ .../HttpUrlConnectionInstrumentation.java | 5 +-- .../httpclient/HeadersAdvice.java | 5 +-- .../v1/JaxRsClientV1Instrumentation.java | 6 +-- .../jaxrs/ClientTracingFilter.java | 7 +-- .../jetty_client10/SendAdvice.java | 5 +-- .../jetty_client12/SendAdvice.java | 5 +-- .../JettyClientInstrumentation.java | 5 +-- .../HttpClientRequestTracingHandler.java | 5 +-- .../HttpClientRequestTracingHandler.java | 5 +-- .../HttpClientRequestTracingHandler.java | 5 +-- .../okhttp2/TracingInterceptor.java | 5 +-- .../okhttp3/TracingInterceptor.java | 5 +-- ...PekkoHttpSingleRequestInstrumentation.java | 5 +-- .../playws1/PlayWSClientInstrumentation.java | 5 +-- .../playws21/PlayWSClientInstrumentation.java | 5 +-- .../playws2/PlayWSClientInstrumentation.java | 5 +-- .../RequestDispatcherInstrumentation.java | 5 +-- .../agent/test/base/HttpClientTest.groovy | 4 +- .../datastreams/DataStreamsPropagator.java | 43 +++++++++++++++++-- .../api/datastreams/DataStreamsContext.java | 17 ++++++++ 34 files changed, 86 insertions(+), 160 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpClientDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpClientDecorator.java index e4c8cf4138f..924c5311078 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpClientDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpClientDecorator.java @@ -26,21 +26,12 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.BitSet; -import java.util.LinkedHashMap; import java.util.Map; import java.util.function.BiFunction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class HttpClientDecorator extends UriBasedClientDecorator { - public static final LinkedHashMap CLIENT_PATHWAY_EDGE_TAGS; - - static { - CLIENT_PATHWAY_EDGE_TAGS = new LinkedHashMap<>(2); - // TODO: Refactor TagsProcessor to move it into a package that we can link the constants for. - CLIENT_PATHWAY_EDGE_TAGS.put("direction", "out"); - CLIENT_PATHWAY_EDGE_TAGS.put("type", "http"); - } private static final Logger log = LoggerFactory.getLogger(HttpClientDecorator.class); diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java index a18d138c35e..0fbc505be50 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java @@ -4,7 +4,6 @@ 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.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.AKKA_CLIENT_REQUEST; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientHelpers.AkkaHttpHeaders; @@ -17,7 +16,6 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -79,8 +77,7 @@ public static AgentScope methodEnter( DECORATE.onRequest(span, request); if (request != null) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, headers); + defaultPropagator().inject(span, request, headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java index 105ac824f93..c3a2af13f1f 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java @@ -3,12 +3,10 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import akka.http.scaladsl.HttpExt; import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -29,8 +27,7 @@ public static AgentScope methodEnter( AkkaHttpClientDecorator.DECORATE.onRequest(span, request); if (request != null) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, headers); + defaultPropagator().inject(span, request, headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java index 99dfee7ba3c..e094ae2efec 100644 --- a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java +++ b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java @@ -1,11 +1,9 @@ package datadog.trace.instrumentation.apachehttpasyncclient; import static datadog.context.propagation.Propagators.defaultPropagator; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInjectAdapter.SETTER; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; import org.apache.http.HttpException; @@ -34,10 +32,7 @@ public HttpHost getTarget() { public HttpRequest generateRequest() throws IOException, HttpException { final HttpRequest request = delegate.generateRequest(); DECORATE.onRequest(span, new HostAndRequestAsHttpUriRequest(delegate.getTarget(), request)); - - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); - + defaultPropagator().inject(span, request, SETTER); return request; } diff --git a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java index e9f726f6fdd..573507fa60d 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java +++ b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java @@ -3,12 +3,10 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.apachehttpclient.HttpHeadersInjectAdapter.SETTER; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -46,8 +44,7 @@ private static AgentScope activateHttpSpan(final HttpUriRequest request) { // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); } return scope; diff --git a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java index 673656e75ea..74bd793f410 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java +++ b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java @@ -1,11 +1,9 @@ package datadog.trace.instrumentation.apachehttpclient5; import static datadog.context.propagation.Propagators.defaultPropagator; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; import org.apache.hc.core5.http.EntityDetails; @@ -27,9 +25,7 @@ public DelegatingRequestChannel(RequestChannel requestChannel, AgentSpan span) { public void sendRequest(HttpRequest request, EntityDetails entityDetails, HttpContext context) throws HttpException, IOException { DECORATE.onRequest(span, request); - - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); delegate.sendRequest(request, entityDetails, context); } } diff --git a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java index 01b8ea4814d..9369debd25c 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java +++ b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java @@ -3,12 +3,10 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -46,8 +44,7 @@ private static AgentScope activateHttpSpan(final HttpRequest request) { final boolean awsClientCall = request.containsHeader("amz-sdk-invocation-id"); // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); } return scope; diff --git a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java index ab192c56df6..562ad80d79f 100644 --- a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java +++ b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java @@ -5,7 +5,6 @@ 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.armeria.grpc.client.GrpcClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.DECORATE; import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.GRPC_MESSAGE; import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.OPERATION_NAME; @@ -20,7 +19,6 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.muzzle.Reference; import datadog.trace.api.InstrumenterConfig; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -136,8 +134,7 @@ public static AgentScope before( if (null != responseListener && null != headers) { span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), headers, SETTER); + defaultPropagator().inject(span, headers, SETTER); return activateSpan(span); } } diff --git a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcClientDecorator.java b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcClientDecorator.java index 060f88eaa43..2c0f402b9df 100644 --- a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcClientDecorator.java +++ b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcClientDecorator.java @@ -1,9 +1,6 @@ package datadog.trace.instrumentation.armeria.grpc.client; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; -import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; -import static datadog.trace.core.datastreams.TagsProcessor.TYPE_TAG; import datadog.trace.api.Config; import datadog.trace.api.GenericClassValue; @@ -18,7 +15,6 @@ import io.grpc.MethodDescriptor; import io.grpc.Status; import java.util.BitSet; -import java.util.LinkedHashMap; import java.util.Set; import java.util.function.Function; @@ -29,16 +25,6 @@ public class GrpcClientDecorator extends ClientDecorator { public static final CharSequence COMPONENT_NAME = UTF8BytesString.create("armeria-grpc-client"); public static final CharSequence GRPC_MESSAGE = UTF8BytesString.create("grpc.message"); - private static LinkedHashMap createClientPathwaySortedTags() { - LinkedHashMap result = new LinkedHashMap<>(); - result.put(DIRECTION_TAG, DIRECTION_OUT); - result.put(TYPE_TAG, "grpc"); - return result; - } - - public static final LinkedHashMap CLIENT_PATHWAY_EDGE_TAGS = - createClientPathwaySortedTags(); - public static final GrpcClientDecorator DECORATE = new GrpcClientDecorator(); private static final Set IGNORED_METHODS = Config.get().getGrpcIgnoredOutboundMethods(); diff --git a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java index be1caba302d..ab402334fb5 100644 --- a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java @@ -4,7 +4,6 @@ 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.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.commonshttpclient.CommonsHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.commonshttpclient.CommonsHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.commonshttpclient.HttpHeadersInjectAdapter.SETTER; @@ -16,7 +15,6 @@ import datadog.appsec.api.blocking.BlockingException; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -69,8 +67,7 @@ public static AgentScope methodEnter(@Advice.Argument(1) final HttpMethod httpMe DECORATE.afterStart(span); DECORATE.onRequest(span, httpMethod); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), httpMethod, SETTER); + defaultPropagator().inject(span, httpMethod, SETTER); return scope; } catch (BlockingException e) { diff --git a/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java b/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java index 931924a9637..be1461de471 100644 --- a/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java +++ b/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java @@ -5,7 +5,6 @@ import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpResponse; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.URIUtils; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; @@ -38,8 +37,7 @@ protected URI url(final HttpRequest httpRequest) throws URISyntaxException { public AgentSpan prepareSpan(AgentSpan span, HttpRequest request) { DECORATE.afterStart(span); DECORATE.onRequest(span, request); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java index e21ca17dc43..b97bf998466 100644 --- a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java @@ -4,7 +4,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.grizzly.client.ClientDecorator.DECORATE; import static datadog.trace.instrumentation.grizzly.client.ClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.grizzly.client.InjectAdapter.SETTER; @@ -17,7 +16,6 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Collections; import net.bytebuddy.asm.Advice; @@ -69,8 +67,7 @@ public static void onEnter( AgentSpan span = startSpan(HTTP_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); handler = new AsyncHandlerAdapter<>(span, parentSpan, handler); } } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java index 229064cd30b..d566f702e0c 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java @@ -3,7 +3,6 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; -import static datadog.trace.instrumentation.grpc.client.GrpcClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.grpc.client.GrpcClientDecorator.DECORATE; import static datadog.trace.instrumentation.grpc.client.GrpcInjectAdapter.SETTER; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; @@ -13,7 +12,6 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -93,8 +91,7 @@ public static AgentScope before( @Advice.Local("$$ddSpan") AgentSpan span) { span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), headers, SETTER); + defaultPropagator().inject(span, headers, SETTER); return activateSpan(span); } return null; diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcClientDecorator.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcClientDecorator.java index cded71d6c8f..c980e124b65 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcClientDecorator.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcClientDecorator.java @@ -1,9 +1,6 @@ package datadog.trace.instrumentation.grpc.client; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; -import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; -import static datadog.trace.core.datastreams.TagsProcessor.TYPE_TAG; import datadog.trace.api.Config; import datadog.trace.api.GenericClassValue; @@ -18,7 +15,6 @@ import io.grpc.MethodDescriptor; import io.grpc.Status; import java.util.BitSet; -import java.util.LinkedHashMap; import java.util.Set; import java.util.function.Function; @@ -29,16 +25,6 @@ public class GrpcClientDecorator extends ClientDecorator { public static final CharSequence COMPONENT_NAME = UTF8BytesString.create("grpc-client"); public static final CharSequence GRPC_MESSAGE = UTF8BytesString.create("grpc.message"); - private static LinkedHashMap createClientPathwaySortedTags() { - LinkedHashMap result = new LinkedHashMap<>(); - result.put(DIRECTION_TAG, DIRECTION_OUT); - result.put(TYPE_TAG, "grpc"); - return result; - } - - public static final LinkedHashMap CLIENT_PATHWAY_EDGE_TAGS = - createClientPathwaySortedTags(); - public static final GrpcClientDecorator DECORATE = new GrpcClientDecorator(); private static final Set IGNORED_METHODS = Config.get().getGrpcIgnoredOutboundMethods(); diff --git a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java index 9d5dd1fc9d4..b9a6f9c9574 100644 --- a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java +++ b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java @@ -3,7 +3,6 @@ import static datadog.context.propagation.Propagators.defaultPropagator; 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.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.bootstrap.instrumentation.httpurlconnection.HeadersInjectAdapter.SETTER; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -14,7 +13,6 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; @@ -86,8 +84,7 @@ public static HttpUrlState methodEnter( if (!state.hasSpan() && !state.isFinished()) { final AgentSpan span = state.start(thiz); if (!connected) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), thiz, SETTER); + defaultPropagator().inject(span, thiz, SETTER); } } return state; diff --git a/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java b/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java index 16e8630f7ec..13559c8ddf2 100644 --- a/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java +++ b/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java @@ -2,11 +2,9 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.httpclient.HttpHeadersInjectAdapter.KEEP; import static datadog.trace.instrumentation.httpclient.HttpHeadersInjectAdapter.SETTER; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.net.http.HttpHeaders; import java.util.HashMap; @@ -19,8 +17,7 @@ public class HeadersAdvice { public static void methodExit(@Advice.Return(readOnly = false) HttpHeaders headers) { final Map> headerMap = new HashMap<>(headers.map()); final AgentSpan span = activeSpan(); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), headerMap, SETTER); + defaultPropagator().inject(span, headerMap, SETTER); headers = HttpHeaders.of(headerMap, KEEP); } } diff --git a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index b01be762333..dabd4575224 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -6,7 +6,6 @@ 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.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.jaxrs.v1.InjectAdapter.SETTER; import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; @@ -20,7 +19,6 @@ import com.sun.jersey.api.client.ClientResponse; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -75,9 +73,7 @@ public static AgentScope onEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); request.getProperties().put(DD_SPAN_ATTRIBUTE, span); - - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request.getHeaders(), SETTER); + defaultPropagator().inject(span, request.getHeaders(), SETTER); return activateSpan(span); } return null; diff --git a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java index 9e7963bf67d..470863474f9 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java +++ b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java @@ -3,12 +3,10 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.jaxrs.InjectAdapter.SETTER; import static datadog.trace.instrumentation.jaxrs.JaxRsClientDecorator.DECORATE; import static datadog.trace.instrumentation.jaxrs.JaxRsClientDecorator.JAX_RS_CLIENT_CALL; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import javax.annotation.Priority; @@ -28,10 +26,7 @@ public void filter(final ClientRequestContext requestContext) { try (final AgentScope scope = activateSpan(span)) { DECORATE.afterStart(span); DECORATE.onRequest(span, requestContext); - - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), requestContext.getHeaders(), SETTER); - + defaultPropagator().inject(span, requestContext.getHeaders(), SETTER); requestContext.setProperty(SPAN_PROPERTY_NAME, span); } } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java index 58c64511ee9..6cdbbdfa190 100644 --- a/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java +++ b/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java @@ -2,12 +2,10 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.jetty_client.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.jetty_client10.JettyClientDecorator.DECORATE; import static datadog.trace.instrumentation.jetty_client10.JettyClientDecorator.HTTP_REQUEST; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.List; @@ -26,8 +24,7 @@ public static AgentSpan methodEnter( responseListeners.add(0, new SpanFinishingCompleteListener(span)); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java index 5575808b567..8fbbb4f335c 100644 --- a/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java +++ b/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java @@ -3,11 +3,9 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.jetty_client12.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.jetty_client12.JettyClientDecorator.HTTP_REQUEST; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -22,8 +20,7 @@ public static AgentScope methodEnter(@Advice.This final HttpRequest request) { InstrumentationContext.get(Request.class, AgentSpan.class).put(request, span); JettyClientDecorator.DECORATE.afterStart(span); JettyClientDecorator.DECORATE.onRequest(span, request); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); return activateSpan(span); } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java index e6328faefcc..67d4b9cdc0b 100644 --- a/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java @@ -4,7 +4,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.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE; import static datadog.trace.instrumentation.jetty_client.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.jetty_client91.JettyClientDecorator.DECORATE; @@ -18,7 +17,6 @@ import datadog.trace.agent.tooling.ExcludeFilterProvider; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter; @@ -92,8 +90,7 @@ public static AgentSpan methodEnter( responseListeners.add(0, new SpanFinishingCompleteListener(span)); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java index db47fba6bbd..24db8a76f38 100644 --- a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java @@ -4,13 +4,11 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.netty38.client.NettyHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.netty38.client.NettyHttpClientDecorator.DECORATE_SECURE; import static datadog.trace.instrumentation.netty38.client.NettyHttpClientDecorator.NETTY_CLIENT_REQUEST; import static datadog.trace.instrumentation.netty38.client.NettyResponseInjectAdapter.SETTER; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -66,8 +64,7 @@ public void writeRequested(final ChannelHandlerContext ctx, final MessageEvent m decorate.onPeerConnection(span, (InetSocketAddress) socketAddress); } - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); + defaultPropagator().inject(span, request.headers(), SETTER); channelTraceContext.setClientSpan(span); diff --git a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java index dfcbcb27ec4..5f760d5606c 100644 --- a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java @@ -4,7 +4,6 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.netty40.AttributeKeys.CLIENT_PARENT_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty40.AttributeKeys.CONNECT_PARENT_CONTINUATION_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty40.AttributeKeys.SPAN_ATTRIBUTE_KEY; @@ -14,7 +13,6 @@ import static datadog.trace.instrumentation.netty40.client.NettyResponseInjectAdapter.SETTER; import datadog.trace.api.Config; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.netty.channel.ChannelHandler; @@ -89,8 +87,7 @@ public void write(final ChannelHandlerContext ctx, final Object msg, final Chann // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); + defaultPropagator().inject(span, request.headers(), SETTER); } ctx.channel().attr(SPAN_ATTRIBUTE_KEY).set(span); diff --git a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java index 3672e678054..cbe3184b233 100644 --- a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java +++ b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java @@ -4,7 +4,6 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.netty41.AttributeKeys.CLIENT_PARENT_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty41.AttributeKeys.CONNECT_PARENT_CONTINUATION_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty41.AttributeKeys.SPAN_ATTRIBUTE_KEY; @@ -14,7 +13,6 @@ import static datadog.trace.instrumentation.netty41.client.NettyResponseInjectAdapter.SETTER; import datadog.trace.api.Config; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.netty.channel.ChannelHandler; @@ -90,8 +88,7 @@ public void write(final ChannelHandlerContext ctx, final Object msg, final Chann // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); + defaultPropagator().inject(span, request.headers(), SETTER); } ctx.channel().attr(SPAN_ATTRIBUTE_KEY).set(span); diff --git a/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java index c68cdf00fe4..ff668a28b52 100644 --- a/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java +++ b/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java @@ -3,7 +3,6 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.okhttp2.OkHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.okhttp2.OkHttpClientDecorator.OKHTTP_REQUEST; import static datadog.trace.instrumentation.okhttp2.RequestBuilderInjectAdapter.SETTER; @@ -11,7 +10,6 @@ import com.squareup.okhttp.Interceptor; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; @@ -27,8 +25,7 @@ public Response intercept(final Chain chain) throws IOException { DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), requestBuilder, SETTER); + defaultPropagator().inject(span, requestBuilder, SETTER); final Response response; try { 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..0d04bee257b 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 @@ -3,12 +3,10 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.okhttp3.OkHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.okhttp3.OkHttpClientDecorator.OKHTTP_REQUEST; import static datadog.trace.instrumentation.okhttp3.RequestBuilderInjectAdapter.SETTER; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; @@ -30,8 +28,7 @@ public Response intercept(final Chain chain) throws IOException { DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), requestBuilder, SETTER); + defaultPropagator().inject(span, requestBuilder, SETTER); final Response response; try { diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java index 7e22ecd660d..22f1d011c1e 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java @@ -4,7 +4,6 @@ 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.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientDecorator.PEKKO_CLIENT_REQUEST; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientHelpers.OnCompleteHandler; @@ -14,7 +13,6 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -80,8 +78,7 @@ public static AgentScope methodEnter( DECORATE.onRequest(span, request); if (request != null) { - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, headers); + defaultPropagator().inject(span, request, headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java index 556aa762cc6..f549896e2a8 100644 --- a/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java +++ b/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java @@ -2,14 +2,12 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.DECORATE; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.playws.BasePlayWSClientInstrumentation; import net.bytebuddy.asm.Advice; @@ -30,8 +28,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java index 666b01c4bf4..4c33568c34d 100644 --- a/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java +++ b/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java @@ -2,14 +2,12 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.DECORATE; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.playws.BasePlayWSClientInstrumentation; import net.bytebuddy.asm.Advice; @@ -30,8 +28,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java index 668e7e1a47a..b02ea6b2670 100644 --- a/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java +++ b/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java @@ -2,14 +2,12 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.DECORATE; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.playws.BasePlayWSClientInstrumentation; import net.bytebuddy.asm.Advice; @@ -30,8 +28,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java index d2e3df70436..ab81a193a01 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java @@ -9,7 +9,6 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.SERVLET_CONTEXT; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.SERVLET_PATH; -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.servlet.ServletRequestSetter.SETTER; import static datadog.trace.instrumentation.servlet.SpanNameCache.SERVLET_PREFIX; @@ -25,7 +24,6 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -122,8 +120,7 @@ public static AgentScope start( span.setSpanType(InternalSpanTypes.HTTP_SERVER); // In case we lose context, inject trace into to the request. - DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); - defaultPropagator().inject(span.with(dsmContext), request, SETTER); + defaultPropagator().inject(span, request, SETTER); // temporarily replace from request to avoid spring resource name bubbling up: requestSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy index 228db2cd8e3..51c965aab90 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy @@ -6,6 +6,7 @@ import datadog.trace.agent.test.server.http.HttpProxy import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.TracerConfig +import datadog.trace.api.datastreams.DataStreamsContext import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.bootstrap.instrumentation.api.URIUtils import datadog.trace.core.DDSpan @@ -27,7 +28,6 @@ import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_CLIENT_TA import static datadog.trace.api.config.TracerConfig.HEADER_TAGS import static datadog.trace.api.config.TracerConfig.REQUEST_HEADER_TAGS import static datadog.trace.api.config.TracerConfig.RESPONSE_HEADER_TAGS -import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS import static org.junit.Assume.assumeTrue abstract class HttpClientTest extends VersionedNamingTestBase { @@ -36,7 +36,7 @@ abstract class HttpClientTest extends VersionedNamingTestBase { protected static final int READ_TIMEOUT_MS = TimeUnit.SECONDS.toMillis(5) as int protected static final BASIC_AUTH_KEY = "custom_authorization_header" protected static final BASIC_AUTH_VAL = "plain text auth token" - protected static final DSM_EDGE_TAGS = CLIENT_PATHWAY_EDGE_TAGS.collect { key, value -> + protected static final DSM_EDGE_TAGS = DataStreamsContext.client().sortedTags().collect { key, value -> return key + ":" + value } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java index fd9b7b9dd7b..d595cc1e8a7 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java @@ -2,6 +2,12 @@ import static datadog.trace.api.DDTags.PATHWAY_HASH; import static datadog.trace.api.datastreams.PathwayContext.PROPAGATION_KEY_BASE64; +import static datadog.trace.bootstrap.instrumentation.api.Tags.COMPONENT; +import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND; +import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_CLIENT; +import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; +import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; +import static datadog.trace.core.datastreams.TagsProcessor.TYPE_TAG; import datadog.context.Context; import datadog.context.propagation.CarrierSetter; @@ -14,8 +20,11 @@ import datadog.trace.api.time.TimeSource; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; import datadog.trace.bootstrap.instrumentation.api.TagContext; +import datadog.trace.core.DDSpanContext; import java.io.IOException; +import java.util.LinkedHashMap; import java.util.function.Consumer; import java.util.function.Supplier; import javax.annotation.Nullable; @@ -46,14 +55,20 @@ public DataStreamsPropagator( public void inject(Context context, C carrier, CarrierSetter setter) { // TODO Pathway context needs to be stored into its own context element instead of span context AgentSpan span = AgentSpan.fromContext(context); - DataStreamsContext dsmContext = DataStreamsContext.fromContext(context); PathwayContext pathwayContext; if (span == null - || dsmContext == null || (pathwayContext = span.context().getPathwayContext()) == null || (span.traceConfig() != null && !span.traceConfig().isDataStreamsEnabled())) { return; } + // Get current DSM context, or try to create a new one to inject if missing from context + DataStreamsContext dsmContext = DataStreamsContext.fromContext(context); + if (dsmContext == null) { + dsmContext = createDataStreamsContext(span); + } + if (dsmContext == null) { + return; + } Consumer pointConsumer = dsmContext.sendCheckpoint() ? this.dataStreamsMonitoring::add : pathwayContext::saveStats; @@ -64,17 +79,37 @@ public void inject(Context context, C carrier, CarrierSetter setter) { } } + private static DataStreamsContext createDataStreamsContext(AgentSpan span) { + if (span.getTag(SPAN_KIND).equals(SPAN_KIND_CLIENT)) { + LinkedHashMap tags = new LinkedHashMap<>(2); + tags.put(DIRECTION_TAG, DIRECTION_OUT); + Object componentTag = span.getTag(COMPONENT); + String component = componentTag instanceof String ? (String) componentTag : ""; + CharSequence spanType = + span.context() instanceof DDSpanContext + ? ((DDSpanContext) span.context()).getSpanType() + : ""; + if (spanType == InternalSpanTypes.HTTP_CLIENT) { + tags.put(TYPE_TAG, "http"); + } else if (spanType == InternalSpanTypes.RPC && component.startsWith("grpc")) { + tags.put(TYPE_TAG, "grpc"); + } + return DataStreamsContext.fromTags(tags); + } + return null; + } + private boolean injectPathwayContext( PathwayContext pathwayContext, C carrier, CarrierSetter setter) { try { String encodedContext = pathwayContext.encode(); if (encodedContext != null) { - // LOGGER.debug("Injecting pathway context {}", pathwayContext); + // LOGGER.debug("Injecting pathway context {}", pathwayContext); setter.set(carrier, PROPAGATION_KEY_BASE64, encodedContext); return true; } } catch (IOException e) { - // LOGGER.debug("Unable to set encode pathway context", e); + // LOGGER.debug("Unable to set encode pathway context", e); } return false; } diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java b/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java index ff9118df05d..84500bc7431 100644 --- a/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java @@ -8,16 +8,33 @@ public class DataStreamsContext implements ImplicitContextKeyed { private static final ContextKey CONTEXT_KEY = ContextKey.named("dsm-context-key"); + private static final LinkedHashMap CLIENT_PATHWAY_EDGE_TAGS; final LinkedHashMap sortedTags; final long defaultTimestamp; final long payloadSizeBytes; final boolean sendCheckpoint; + static { + CLIENT_PATHWAY_EDGE_TAGS = new LinkedHashMap<>(2); + // TODO: Refactor TagsProcessor to move it into a package that we can link the constants for. + CLIENT_PATHWAY_EDGE_TAGS.put("direction", "out"); + CLIENT_PATHWAY_EDGE_TAGS.put("type", "http"); + } + public static DataStreamsContext fromContext(Context context) { return context.get(CONTEXT_KEY); } + /** + * Return default DSM context for HTTP clients. + * + * @return The default DSM context for HTTP clients. + */ + public static DataStreamsContext client() { + return fromTags(CLIENT_PATHWAY_EDGE_TAGS); + } + /** * Creates a DSM context. * From b8f9cd9a10a92220544fd6bd88c4b5929f409296 Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Wed, 7 May 2025 09:02:54 +0200 Subject: [PATCH 2/3] feat(dsm): Clean up context injection --- .../datastreams/DataStreamsPropagator.java | 20 +++++++++++---- .../trace/core/datastreams/StatsBucket.java | 25 ++++++++----------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java index d595cc1e8a7..32644e3c2a4 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java @@ -2,6 +2,8 @@ import static datadog.trace.api.DDTags.PATHWAY_HASH; import static datadog.trace.api.datastreams.PathwayContext.PROPAGATION_KEY_BASE64; +import static datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes.HTTP_CLIENT; +import static datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes.RPC; import static datadog.trace.bootstrap.instrumentation.api.Tags.COMPONENT; import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND; import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_CLIENT; @@ -20,7 +22,6 @@ import datadog.trace.api.time.TimeSource; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; -import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; import datadog.trace.bootstrap.instrumentation.api.TagContext; import datadog.trace.core.DDSpanContext; import java.io.IOException; @@ -80,22 +81,31 @@ public void inject(Context context, C carrier, CarrierSetter setter) { } private static DataStreamsContext createDataStreamsContext(AgentSpan span) { - if (span.getTag(SPAN_KIND).equals(SPAN_KIND_CLIENT)) { + if (SPAN_KIND_CLIENT.equals(span.getTag(SPAN_KIND))) { LinkedHashMap tags = new LinkedHashMap<>(2); tags.put(DIRECTION_TAG, DIRECTION_OUT); Object componentTag = span.getTag(COMPONENT); - String component = componentTag instanceof String ? (String) componentTag : ""; + String component = + componentTag instanceof CharSequence ? ((CharSequence) componentTag).toString() : ""; CharSequence spanType = span.context() instanceof DDSpanContext ? ((DDSpanContext) span.context()).getSpanType() : ""; - if (spanType == InternalSpanTypes.HTTP_CLIENT) { + // System.out.println(">>> component: " + component); + // System.out.println(">>> type: " + spanType); + if (spanType == HTTP_CLIENT) { tags.put(TYPE_TAG, "http"); - } else if (spanType == InternalSpanTypes.RPC && component.startsWith("grpc")) { + } else if (spanType == RPC && component.contains("grpc")) { tags.put(TYPE_TAG, "grpc"); } return DataStreamsContext.fromTags(tags); } + if (span.getTag("servlet.context") != null + && span.getTag(COMPONENT) instanceof CharSequence + && "java-web-servlet-dispatcher" + .equals(((CharSequence) span.getTag(COMPONENT)).toString())) { + return DataStreamsContext.client(); + } return null; } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/StatsBucket.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/StatsBucket.java index fab6d57a312..26bdd9ba105 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/StatsBucket.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/StatsBucket.java @@ -22,21 +22,16 @@ public void addPoint(StatsPoint statsPoint) { // we want to perform aggregation per dataset, to allow // lower-level granularity and unblock dataset name manipulations on the backend // without affecting the precision. - StatsGroup statsGroup = hashToGroup.get(statsPoint.getAggregationHash()); - - // FIXME Java 7 - if (statsGroup == null) { - // stats group remains the same - statsGroup = - new StatsGroup( - statsPoint.getEdgeTags(), statsPoint.getHash(), statsPoint.getParentHash()); - hashToGroup.put(statsPoint.getAggregationHash(), statsGroup); - } - - statsGroup.add( - statsPoint.getPathwayLatencyNano(), - statsPoint.getEdgeLatencyNano(), - statsPoint.getPayloadSizeBytes()); + hashToGroup + .computeIfAbsent( + statsPoint.getAggregationHash(), + hash -> + new StatsGroup( + statsPoint.getEdgeTags(), statsPoint.getHash(), statsPoint.getParentHash())) + .add( + statsPoint.getPathwayLatencyNano(), + statsPoint.getEdgeLatencyNano(), + statsPoint.getPayloadSizeBytes()); } public void addBacklog(Backlog backlog) { From 5f1247d86673e815294e61206371d59ce901d246 Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Wed, 7 May 2025 15:02:07 +0200 Subject: [PATCH 3/3] feat(dsm): Clean up context injection --- .../decorator/HttpServerDecorator.java | 14 ++------------ .../agent/test/base/HttpClientTest.groovy | 2 +- .../agent/test/base/HttpServerTest.groovy | 4 ++-- .../datastreams/DataStreamsPropagator.java | 2 +- .../api/datastreams/DataStreamsContext.java | 18 ++++++++++++++++-- 5 files changed, 22 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 29e33a3dd8c..79cbd6285a5 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,7 @@ package datadog.trace.bootstrap.instrumentation.decorator; import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS; -import static datadog.trace.api.datastreams.DataStreamsContext.fromTags; +import static datadog.trace.api.datastreams.DataStreamsContext.forHttpServer; import static datadog.trace.api.gateway.Events.EVENTS; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; @@ -35,7 +35,6 @@ import datadog.trace.bootstrap.instrumentation.decorator.http.ClientIpAddressResolver; import java.net.InetAddress; import java.util.BitSet; -import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -59,15 +58,6 @@ public abstract class HttpServerDecorator SERVER_PATHWAY_EDGE_TAGS; - - static { - SERVER_PATHWAY_EDGE_TAGS = new LinkedHashMap<>(2); - // TODO: Refactor TagsProcessor to move it into a package that we can link the constants for. - SERVER_PATHWAY_EDGE_TAGS.put("direction", "in"); - SERVER_PATHWAY_EDGE_TAGS.put("type", "http"); - } - private static final UTF8BytesString DEFAULT_RESOURCE_NAME = UTF8BytesString.create("/"); protected static final UTF8BytesString NOT_FOUND_RESOURCE_NAME = UTF8BytesString.create("404"); private static final boolean SHOULD_SET_404_RESOURCE_NAME = @@ -150,7 +140,7 @@ public AgentSpan startSpan( } AgentPropagation.ContextVisitor getter = getter(); if (null != carrier && null != getter) { - tracer().getDataStreamsMonitoring().setCheckpoint(span, fromTags(SERVER_PATHWAY_EDGE_TAGS)); + tracer().getDataStreamsMonitoring().setCheckpoint(span, forHttpServer()); } return span; } diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy index 51c965aab90..47b8e02ee42 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy @@ -36,7 +36,7 @@ abstract class HttpClientTest extends VersionedNamingTestBase { protected static final int READ_TIMEOUT_MS = TimeUnit.SECONDS.toMillis(5) as int protected static final BASIC_AUTH_KEY = "custom_authorization_header" protected static final BASIC_AUTH_VAL = "plain text auth token" - protected static final DSM_EDGE_TAGS = DataStreamsContext.client().sortedTags().collect { key, value -> + protected static final DSM_EDGE_TAGS = DataStreamsContext.forHttpClient().sortedTags().collect { key, value -> return key + ":" + value } 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 d13e9cc2544..ab172e868bf 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 @@ -14,6 +14,7 @@ import datadog.trace.api.DDTags import datadog.trace.api.ProductActivation import datadog.trace.api.config.GeneralConfig import datadog.trace.api.config.TracerConfig +import datadog.trace.api.datastreams.DataStreamsContext import datadog.trace.api.env.CapturedEnvironment import datadog.trace.api.function.TriConsumer import datadog.trace.api.function.TriFunction @@ -98,14 +99,13 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.get import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.isAsyncPropagationEnabled import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan -import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.SERVER_PATHWAY_EDGE_TAGS import static java.nio.charset.StandardCharsets.UTF_8 import static org.junit.Assume.assumeTrue abstract class HttpServerTest extends WithHttpServer { public static final Logger SERVER_LOGGER = LoggerFactory.getLogger("http-server") - protected static final DSM_EDGE_TAGS = SERVER_PATHWAY_EDGE_TAGS.collect { + protected static final DSM_EDGE_TAGS = DataStreamsContext.forHttpServer().sortedTags().collect { key, value -> return key + ":" + value } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java index 32644e3c2a4..b8f93afd178 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java @@ -104,7 +104,7 @@ private static DataStreamsContext createDataStreamsContext(AgentSpan span) { && span.getTag(COMPONENT) instanceof CharSequence && "java-web-servlet-dispatcher" .equals(((CharSequence) span.getTag(COMPONENT)).toString())) { - return DataStreamsContext.client(); + return DataStreamsContext.forHttpClient(); } return null; } diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java b/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java index 84500bc7431..92d8c8a3b38 100644 --- a/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java @@ -9,6 +9,7 @@ public class DataStreamsContext implements ImplicitContextKeyed { private static final ContextKey CONTEXT_KEY = ContextKey.named("dsm-context-key"); private static final LinkedHashMap CLIENT_PATHWAY_EDGE_TAGS; + private static final LinkedHashMap SERVER_PATHWAY_EDGE_TAGS; final LinkedHashMap sortedTags; final long defaultTimestamp; @@ -20,6 +21,10 @@ public class DataStreamsContext implements ImplicitContextKeyed { // TODO: Refactor TagsProcessor to move it into a package that we can link the constants for. CLIENT_PATHWAY_EDGE_TAGS.put("direction", "out"); CLIENT_PATHWAY_EDGE_TAGS.put("type", "http"); + SERVER_PATHWAY_EDGE_TAGS = new LinkedHashMap<>(2); + // TODO: Refactor TagsProcessor to move it into a package that we can link the constants for. + SERVER_PATHWAY_EDGE_TAGS.put("direction", "in"); + SERVER_PATHWAY_EDGE_TAGS.put("type", "http"); } public static DataStreamsContext fromContext(Context context) { @@ -27,14 +32,23 @@ public static DataStreamsContext fromContext(Context context) { } /** - * Return default DSM context for HTTP clients. + * Gets default DSM context for HTTP clients. * * @return The default DSM context for HTTP clients. */ - public static DataStreamsContext client() { + public static DataStreamsContext forHttpClient() { return fromTags(CLIENT_PATHWAY_EDGE_TAGS); } + /** + * Gets default DSM context for HTTP servers. + * + * @return The default DSM context for HTTP servers. + */ + public static DataStreamsContext forHttpServer() { + return fromTags(SERVER_PATHWAY_EDGE_TAGS); + } + /** * Creates a DSM context. *