diff --git a/.circleci/config.continue.yml.j2 b/.circleci/config.continue.yml.j2 index 18d9f57a538..b36da51f940 100644 --- a/.circleci/config.continue.yml.j2 +++ b/.circleci/config.continue.yml.j2 @@ -767,7 +767,7 @@ jobs: muzzle: <<: *defaults - resource_class: medium + resource_class: medium+ parallelism: 4 steps: - setup_code @@ -798,7 +798,7 @@ jobs: name: Verify Muzzle command: >- SKIP_BUILDSCAN="true" - GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" + GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx3G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" ./gradlew `circleci tests split --split-by=timings workspace/build/muzzleTasks | xargs` << pipeline.parameters.gradle_flags >> --max-workers=4 diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/httpurlconnection/HeadersInjectAdapter.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/httpurlconnection/HeadersInjectAdapter.java index 66cd1e7487b..d89d42faafb 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/httpurlconnection/HeadersInjectAdapter.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/httpurlconnection/HeadersInjectAdapter.java @@ -2,7 +2,9 @@ import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import java.net.HttpURLConnection; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class HeadersInjectAdapter implements AgentPropagation.Setter { public static final HeadersInjectAdapter SETTER = new HeadersInjectAdapter(); diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPayload.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPayload.java index 8395631b9f3..a08aca5b9f5 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPayload.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPayload.java @@ -1,6 +1,6 @@ package datadog.trace.bootstrap.instrumentation.rmi; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; +import static datadog.context.propagation.Propagators.defaultPropagator; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -9,6 +9,7 @@ import java.io.ObjectOutput; import java.util.HashMap; import java.util.Map; +import javax.annotation.ParametersAreNonnullByDefault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,7 +34,7 @@ public Map getContext() { public static ContextPayload from(final AgentSpan span) { final ContextPayload payload = new ContextPayload(); - propagate().inject(span, payload, SETTER); + defaultPropagator().inject(span, payload, SETTER); return payload; } @@ -54,6 +55,7 @@ public void write(final ObjectOutput out) throws IOException { out.writeObject(context); } + @ParametersAreNonnullByDefault public static class InjectAdapter implements AgentPropagation.Setter { @Override public void set(final ContextPayload carrier, final String key, final String value) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java index 4ae85422ace..9332e20b8f5 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java @@ -1,6 +1,6 @@ package datadog.trace.civisibility.domain.buildsystem; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; +import static datadog.context.propagation.Propagators.defaultPropagator; import datadog.communication.ddagent.TracerVersion; import datadog.trace.api.Config; @@ -33,10 +33,15 @@ import datadog.trace.util.Strings; import java.net.InetSocketAddress; import java.nio.file.Path; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; import java.util.concurrent.atomic.LongAdder; import java.util.function.Consumer; import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; public class BuildSystemModuleImpl extends AbstractTestModule implements BuildSystemModule { @@ -105,6 +110,7 @@ public BuildSystemModuleImpl( setTag(Tags.TEST_COMMAND, startCommand); } + @ParametersAreNonnullByDefault private static final class ChildProcessPropertiesPropagationSetter implements AgentPropagation.Setter> { static final AgentPropagation.Setter> INSTANCE = @@ -221,7 +227,7 @@ private Map getPropertiesPropagatedToChildProcess( } // propagate module span context to child processes - propagate() + defaultPropagator() .inject(span, propagatedSystemProperties, ChildProcessPropertiesPropagationSetter.INSTANCE); return propagatedSystemProperties; diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/AgentTextMapPropagator.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/AgentTextMapPropagator.java index 6f38be0d30b..f571dd10f32 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/AgentTextMapPropagator.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/AgentTextMapPropagator.java @@ -1,5 +1,6 @@ package datadog.opentelemetry.shim.context.propagation; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.opentelemetry.shim.trace.OtelSpanContext.fromRemote; import static datadog.trace.api.TracePropagationStyle.TRACECONTEXT; @@ -7,6 +8,7 @@ import datadog.opentelemetry.shim.trace.OtelExtractedContext; import datadog.opentelemetry.shim.trace.OtelSpan; import datadog.trace.api.TracePropagationStyle; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext.Extracted; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -36,11 +38,7 @@ public void inject(Context context, @Nullable C carrier, TextMapSetter se if (carrier == null) { return; } - Span span = Span.fromContext(context); - if (span.getSpanContext().isValid()) { - AgentSpanContext agentSpanContext = OtelExtractedContext.extract(context); - AgentTracer.propagate().inject(agentSpanContext, carrier, setter::set); - } + defaultPropagator().inject(convertContext(context), carrier, setter::set); } @Override @@ -66,6 +64,14 @@ public Context extract(Context context, @Nullable C carrier, TextMapGetter AgentSpan delegate --> with() to inflate as full + // context if baggage + AgentSpanContext extract = OtelExtractedContext.extract(context); + return AgentSpan.fromSpanContext(extract); + } + /** * Extracts tracestate if {@code tracestate} header is present and extracted context comes from * {@link TracePropagationStyle#TRACECONTEXT} @@ -73,8 +79,8 @@ public Context extract(Context context, @Nullable C carrier, TextMapGetter The carrier type. + * @return The extracted tracestate, or an empty tracestate otherwise. */ private static TraceState extractTraceState( Extracted extracted, C carrier, TextMapGetter getter) { diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java index da3ae4906ea..095801ef95e 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java @@ -172,7 +172,7 @@ public AgentSpanContext getAgentSpanContext() { @Override public AgentSpan asAgentSpan() { - return delegate; + return this.delegate; } private static class NoopSpan implements Span { diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpClientHelpers.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpClientHelpers.java index 80e473c3820..52fa1f31f04 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpClientHelpers.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpClientHelpers.java @@ -8,6 +8,7 @@ import akka.http.scaladsl.model.headers.CustomHeader; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import javax.annotation.ParametersAreNonnullByDefault; import scala.runtime.AbstractFunction1; import scala.util.Try; @@ -35,7 +36,7 @@ public Void apply(final Try result) { public static class AkkaHttpHeaders implements AgentPropagation.Setter { private HttpRequest request; // Did this request have a span when the AkkaHttpHeaders object was created? - private boolean hadSpan; + private final boolean hadSpan; public AkkaHttpHeaders(final HttpRequest request) { hadSpan = request != null && request.getHeader(HasSpanHeader.class).isPresent(); @@ -51,6 +52,7 @@ public boolean hadSpan() { return hadSpan; } + @ParametersAreNonnullByDefault @Override public void set(final HttpRequest carrier, final String key, final String value) { // Coerce a Scala trait Self type into the correct type 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 ed5c35e7ced..36679f4b767 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.akkahttp; +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.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -78,7 +79,7 @@ public static AgentScope methodEnter( DECORATE.onRequest(span, request); if (request != null) { - propagate().inject(span, request, headers); + defaultPropagator().inject(span, request, headers); propagate() .injectPathwayContext( span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 8e987bc8ec8..15d27bd7fed 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.akkahttp106; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -28,7 +29,7 @@ public static AgentScope methodEnter( AkkaHttpClientDecorator.DECORATE.onRequest(span, request); if (request != null) { - propagate().inject(span, request, headers); + defaultPropagator().inject(span, request, headers); propagate() .injectPathwayContext( span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 c39f1d54fa3..be5d0ab2956 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,5 +1,6 @@ package datadog.trace.instrumentation.apachehttpasyncclient; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInjectAdapter.SETTER; @@ -34,7 +35,7 @@ public HttpRequest generateRequest() throws IOException, HttpException { final HttpRequest request = delegate.generateRequest(); DECORATE.onRequest(span, new HostAndRequestAsHttpUriRequest(delegate.getTarget(), request)); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/HttpHeadersInjectAdapter.java b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/HttpHeadersInjectAdapter.java index f7ab3e98d9f..8c9f111f13a 100644 --- a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/HttpHeadersInjectAdapter.java +++ b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/HttpHeadersInjectAdapter.java @@ -1,8 +1,10 @@ package datadog.trace.instrumentation.apachehttpasyncclient; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import org.apache.http.HttpRequest; +@ParametersAreNonnullByDefault public class HttpHeadersInjectAdapter implements AgentPropagation.Setter { public static final HttpHeadersInjectAdapter SETTER = new HttpHeadersInjectAdapter(); 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 ea4064a1cc0..c87e544a2c9 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.apachehttpclient; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -45,7 +46,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) { - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext( span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HttpHeadersInjectAdapter.java b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HttpHeadersInjectAdapter.java index 8e3dddaa500..42f4866932d 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HttpHeadersInjectAdapter.java +++ b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HttpHeadersInjectAdapter.java @@ -1,8 +1,10 @@ package datadog.trace.instrumentation.apachehttpclient; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import org.apache.http.client.methods.HttpUriRequest; +@ParametersAreNonnullByDefault public class HttpHeadersInjectAdapter implements AgentPropagation.Setter { public static final HttpHeadersInjectAdapter SETTER = new HttpHeadersInjectAdapter(); 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 36ae6cfc5c6..8a2acce10d9 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,5 +1,6 @@ package datadog.trace.instrumentation.apachehttpclient5; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER; @@ -27,7 +28,7 @@ public void sendRequest(HttpRequest request, EntityDetails entityDetails, HttpCo throws HttpException, IOException { DECORATE.onRequest(span, request); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 64e03fd1b94..0fa694ffc76 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.apachehttpclient5; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -45,7 +46,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) { - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext( span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HttpHeadersInjectAdapter.java b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HttpHeadersInjectAdapter.java index 2b05ecb3f45..598526f990d 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HttpHeadersInjectAdapter.java +++ b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HttpHeadersInjectAdapter.java @@ -1,8 +1,10 @@ package datadog.trace.instrumentation.apachehttpclient5; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import org.apache.hc.core5.http.HttpRequest; +@ParametersAreNonnullByDefault public class HttpHeadersInjectAdapter implements AgentPropagation.Setter { public static final HttpHeadersInjectAdapter SETTER = new HttpHeadersInjectAdapter(); 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 7c44904aa0c..90addc59fea 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.armeria.grpc.client; +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.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -120,7 +121,7 @@ public static AgentScope before( if (null != responseListener && null != headers) { span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { - propagate().inject(span, headers, SETTER); + defaultPropagator().inject(span, headers, SETTER); propagate().injectPathwayContext(span, headers, SETTER, CLIENT_PATHWAY_EDGE_TAGS); return activateSpan(span); } diff --git a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java index 829035ae383..332c5cf0f12 100644 --- a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java +++ b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java @@ -2,7 +2,9 @@ import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import io.grpc.Metadata; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public final class GrpcInjectAdapter implements AgentPropagation.Setter { public static final GrpcInjectAdapter SETTER = new GrpcInjectAdapter(); diff --git a/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java b/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java index a1a975d8491..ba00ad7a4f8 100644 --- a/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v2.eventbridge; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.core.datastreams.TagsProcessor.BUS_TAG; @@ -86,7 +87,7 @@ private String getTraceContextToInject( jsonBuilder.append('{'); // Inject trace context - propagate().inject(span, jsonBuilder, SETTER); + defaultPropagator().inject(span, jsonBuilder, SETTER); if (traceConfig().isDataStreamsEnabled()) { propagate().injectPathwayContext(span, jsonBuilder, SETTER, getTags(eventBusName)); diff --git a/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/TextMapInjectAdapter.java b/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/TextMapInjectAdapter.java index dd03362ca55..ff7f760b933 100644 --- a/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/TextMapInjectAdapter.java +++ b/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/TextMapInjectAdapter.java @@ -1,7 +1,9 @@ package datadog.trace.instrumentation.aws.v2.eventbridge; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class TextMapInjectAdapter implements AgentPropagation.Setter { public static final TextMapInjectAdapter SETTER = new TextMapInjectAdapter(); diff --git a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/AwsSdkClientDecorator.java b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/AwsSdkClientDecorator.java index 6ac29370dd6..088649206c2 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/AwsSdkClientDecorator.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/AwsSdkClientDecorator.java @@ -28,6 +28,7 @@ import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.annotation.ParametersAreNonnullByDefault; public class AwsSdkClientDecorator extends HttpClientDecorator implements AgentPropagation.Setter> { @@ -332,6 +333,7 @@ protected int status(final Response response) { return response.getHttpResponse().getStatusCode(); } + @ParametersAreNonnullByDefault @Override public void set(Request carrier, String key, String value) { carrier.addHeader(key, value); diff --git a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/TracingRequestHandler.java b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/TracingRequestHandler.java index 4773c2090bd..023a1b53085 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/TracingRequestHandler.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/TracingRequestHandler.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.aws.v0; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.XRAY_TRACING_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.blackholeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_IN; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; @@ -16,8 +16,8 @@ import com.amazonaws.Response; import com.amazonaws.handlers.HandlerContextKey; import com.amazonaws.handlers.RequestHandler2; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; -import datadog.trace.api.TracePropagationStyle; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -69,7 +69,7 @@ public void beforeRequest(final Request request) { request.addHandlerContext(SPAN_CONTEXT_KEY, span); if (Config.get().isAwsPropagationEnabled()) { try { - propagate().inject(span, request, DECORATE, TracePropagationStyle.XRAY); + Propagators.forConcern(XRAY_TRACING_CONCERN).inject(span, request, DECORATE); } catch (Throwable e) { log.warn("Unable to inject trace header", e); } diff --git a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsSdkClientDecorator.java b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsSdkClientDecorator.java index 94227b68124..ebd52e3e35f 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsSdkClientDecorator.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsSdkClientDecorator.java @@ -37,6 +37,7 @@ import java.util.Optional; import java.util.Set; import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; import software.amazon.awssdk.awscore.AwsResponse; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.core.SdkField; @@ -443,6 +444,7 @@ protected int status(final SdkHttpResponse response) { return response.statusCode(); } + @ParametersAreNonnullByDefault @Override public void set(SdkHttpRequest.Builder carrier, String key, String value) { carrier.putHeader(key, value); diff --git a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/TracingExecutionInterceptor.java b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/TracingExecutionInterceptor.java index 6234af389cc..f2c8a267cbb 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/TracingExecutionInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/TracingExecutionInterceptor.java @@ -1,14 +1,14 @@ package datadog.trace.instrumentation.aws.v2; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.XRAY_TRACING_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.blackholeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.aws.v2.AwsSdkClientDecorator.AWS_LEGACY_TRACING; import static datadog.trace.instrumentation.aws.v2.AwsSdkClientDecorator.DECORATE; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; -import datadog.trace.api.TracePropagationStyle; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstanceStore; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -71,7 +71,7 @@ public SdkHttpRequest modifyHttpRequest( final AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); if (span != null) { SdkHttpRequest.Builder requestBuilder = context.httpRequest().toBuilder(); - propagate().inject(span, requestBuilder, DECORATE, TracePropagationStyle.XRAY); + Propagators.forConcern(XRAY_TRACING_CONCERN).inject(span, requestBuilder, DECORATE); return requestBuilder.build(); } } catch (Throwable e) { diff --git a/dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java index c0521bbea5e..ecf76bec16e 100644 --- a/dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v1.sns; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; @@ -14,7 +15,6 @@ import com.amazonaws.services.sns.model.PublishBatchRequest; import com.amazonaws.services.sns.model.PublishBatchRequestEntry; import com.amazonaws.services.sns.model.PublishRequest; -import datadog.trace.api.TracePropagationStyle; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -37,7 +37,7 @@ private ByteBuffer getMessageAttributeValueToInject( final AgentSpan span = newSpan(request); StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.append('{'); - propagate().inject(span, jsonBuilder, SETTER, TracePropagationStyle.DATADOG); + defaultPropagator().inject(span, jsonBuilder, SETTER); if (traceConfig().isDataStreamsEnabled()) { propagate().injectPathwayContext(span, jsonBuilder, SETTER, getTags(snsTopicName)); } diff --git a/dd-java-agent/instrumentation/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java index e85295ce4cd..1b44762a692 100644 --- a/dd-java-agent/instrumentation/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v2.sns; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; @@ -37,7 +38,7 @@ private SdkBytes getMessageAttributeValueToInject( final AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.append('{'); - propagate().inject(span, jsonBuilder, SETTER); + defaultPropagator().inject(span, jsonBuilder, SETTER); if (traceConfig().isDataStreamsEnabled()) { propagate().injectPathwayContext(span, jsonBuilder, SETTER, getTags(snsTopicName)); } diff --git a/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java b/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java index 695e1525860..863b2c38009 100644 --- a/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java +++ b/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.axis2; +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.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.axis2.AxisMessageDecorator.AXIS2_ASYNC_SPAN_KEY; import static datadog.trace.instrumentation.axis2.AxisMessageDecorator.AXIS2_TRANSPORT; @@ -77,7 +77,7 @@ public static AgentScope beginTransport(@Advice.Argument(0) final MessageContext message.setProperty("TRANSPORT_HEADERS", headers); } try { - propagate().inject(span, headers, SETTER); + defaultPropagator().inject(span, headers, SETTER); } catch (Throwable ignore) { } diff --git a/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/TextMapInjectAdapter.java b/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/TextMapInjectAdapter.java index 8b589743d85..40682fb0696 100644 --- a/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/TextMapInjectAdapter.java +++ b/dd-java-agent/instrumentation/axis-2/src/main/java/datadog/trace/instrumentation/axis2/TextMapInjectAdapter.java @@ -2,7 +2,9 @@ import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import java.util.Map; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class TextMapInjectAdapter implements AgentPropagation.Setter> { public static final TextMapInjectAdapter SETTER = new TextMapInjectAdapter(); 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 7490ca1d39a..da06efdd80d 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.commonshttpclient; +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.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -68,7 +69,7 @@ public static AgentScope methodEnter(@Advice.Argument(1) final HttpMethod httpMe DECORATE.afterStart(span); DECORATE.onRequest(span, httpMethod); - propagate().inject(span, httpMethod, SETTER); + defaultPropagator().inject(span, httpMethod, SETTER); propagate() .injectPathwayContext( span, httpMethod, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/HttpHeadersInjectAdapter.java b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/HttpHeadersInjectAdapter.java index 2f9472487bd..5e24cd98fba 100644 --- a/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/HttpHeadersInjectAdapter.java +++ b/dd-java-agent/instrumentation/commons-httpclient-2/src/main/java/datadog/trace/instrumentation/commonshttpclient/HttpHeadersInjectAdapter.java @@ -1,9 +1,11 @@ package datadog.trace.instrumentation.commonshttpclient; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpMethod; +@ParametersAreNonnullByDefault public class HttpHeadersInjectAdapter implements AgentPropagation.Setter { public static final HttpHeadersInjectAdapter SETTER = new HttpHeadersInjectAdapter(); 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 2bbf86d63a6..f0c084ea137 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.googlehttpclient; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.instrumentation.googlehttpclient.HeadersInjectAdapter.SETTER; @@ -37,7 +38,7 @@ protected URI url(final HttpRequest httpRequest) throws URISyntaxException { public AgentSpan prepareSpan(AgentSpan span, HttpRequest request) { DECORATE.afterStart(span); DECORATE.onRequest(span, request); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); return span; diff --git a/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/HeadersInjectAdapter.java b/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/HeadersInjectAdapter.java index 629369ad920..c65da9c0cbc 100644 --- a/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/HeadersInjectAdapter.java +++ b/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/HeadersInjectAdapter.java @@ -2,7 +2,9 @@ import com.google.api.client.http.HttpRequest; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class HeadersInjectAdapter implements AgentPropagation.Setter { public static final HeadersInjectAdapter SETTER = new HeadersInjectAdapter(); diff --git a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java index 88f76e103ce..be2f188796b 100644 --- a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java +++ b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.googlepubsub; +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.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -80,7 +81,7 @@ public static AgentScope before( sortedTags.put(TYPE_TAG, "google-pubsub"); PubsubMessage.Builder builder = msg.toBuilder(); - propagate().inject(span, builder, SETTER); + defaultPropagator().inject(span, builder, SETTER); propagate().injectPathwayContext(span, builder, SETTER, sortedTags); msg = builder.build(); return activateSpan(span); diff --git a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/TextMapInjectAdapter.java b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/TextMapInjectAdapter.java index f1ee1e0f7a2..46245ce4b04 100644 --- a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/TextMapInjectAdapter.java +++ b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/TextMapInjectAdapter.java @@ -2,7 +2,9 @@ import com.google.pubsub.v1.PubsubMessage; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class TextMapInjectAdapter implements AgentPropagation.Setter { public static final TextMapInjectAdapter SETTER = new TextMapInjectAdapter(); 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 9ba181b0f4e..6900f77797c 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.grizzly.client; +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.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -68,7 +69,7 @@ public static void onEnter( AgentSpan span = startSpan(HTTP_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext( span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/InjectAdapter.java b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/InjectAdapter.java index c541b03c9b8..946d4b4d4e3 100644 --- a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/InjectAdapter.java +++ b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/InjectAdapter.java @@ -2,9 +2,10 @@ import com.ning.http.client.Request; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class InjectAdapter implements AgentPropagation.Setter { - public static final InjectAdapter SETTER = new InjectAdapter(); @Override 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 a2bc91720f1..decfe0f1f85 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.grpc.client; +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.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -92,7 +93,7 @@ public static AgentScope before( @Advice.Local("$$ddSpan") AgentSpan span) { span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { - propagate().inject(span, headers, SETTER); + defaultPropagator().inject(span, headers, SETTER); propagate().injectPathwayContext(span, headers, SETTER, CLIENT_PATHWAY_EDGE_TAGS); return activateSpan(span); } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcInjectAdapter.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcInjectAdapter.java index a7910e43445..70cd03568f4 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcInjectAdapter.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcInjectAdapter.java @@ -2,9 +2,10 @@ import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import io.grpc.Metadata; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public final class GrpcInjectAdapter implements AgentPropagation.Setter { - public static final GrpcInjectAdapter SETTER = new GrpcInjectAdapter(); @Override 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 3a18e2fd759..d54025f4537 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.http_url_connection; +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.api.AgentTracer.propagate; @@ -85,7 +86,7 @@ public static HttpUrlState methodEnter( if (!state.hasSpan() && !state.isFinished()) { final AgentSpan span = state.start(thiz); if (!connected) { - propagate().inject(span, thiz, SETTER); + defaultPropagator().inject(span, thiz, SETTER); propagate() .injectPathwayContext( span, thiz, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 fb625651681..2bed5ea86dd 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.httpclient; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.instrumentation.httpclient.HttpHeadersInjectAdapter.KEEP; @@ -18,7 +19,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(); - propagate().inject(span, headerMap, SETTER); + defaultPropagator().inject(span, headerMap, SETTER); propagate() .injectPathwayContext( span, headerMap, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java index b0c36b30c26..692f4653bca 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java +++ b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java @@ -1,14 +1,18 @@ package datadog.trace.instrumentation.jaxrs.v1; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import javax.ws.rs.core.MultivaluedMap; -public final class InjectAdapter implements AgentPropagation.Setter { +@ParametersAreNonnullByDefault +public final class InjectAdapter + implements AgentPropagation.Setter> { public static final InjectAdapter SETTER = new InjectAdapter(); @Override - public void set(final MultivaluedMap headers, final String key, final String value) { + public void set( + final MultivaluedMap headers, final String key, final String value) { // Don't allow duplicates. headers.putSingle(key, value); } 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 b90cbf3bf27..deeb2e18328 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.jaxrs.v1; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.extendsClass; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; @@ -75,7 +76,7 @@ public static AgentScope onEnter( DECORATE.onRequest(span, request); request.getProperties().put(DD_SPAN_ATTRIBUTE, span); - propagate().inject(span, request.getHeaders(), SETTER); + defaultPropagator().inject(span, request.getHeaders(), SETTER); propagate() .injectPathwayContext( span, request.getHeaders(), SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 22b9373a8fd..526671beedd 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.jaxrs; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -28,7 +29,7 @@ public void filter(final ClientRequestContext requestContext) { DECORATE.afterStart(span); DECORATE.onRequest(span, requestContext); - propagate().inject(span, requestContext.getHeaders(), SETTER); + defaultPropagator().inject(span, requestContext.getHeaders(), SETTER); propagate() .injectPathwayContext( span, diff --git a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java index 70c8cf828f0..dc555d8acc8 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java +++ b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java @@ -1,14 +1,18 @@ package datadog.trace.instrumentation.jaxrs; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import javax.ws.rs.core.MultivaluedMap; -public final class InjectAdapter implements AgentPropagation.Setter { +@ParametersAreNonnullByDefault +public final class InjectAdapter + implements AgentPropagation.Setter> { public static final InjectAdapter SETTER = new InjectAdapter(); @Override - public void set(final MultivaluedMap headers, final String key, final String value) { + public void set( + final MultivaluedMap headers, final String key, final String value) { // Don't allow duplicates. headers.putSingle(key, value); } 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 fb6073f9c40..47c9137b8fc 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.jetty_client10; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.jetty_client.HeadersInjectAdapter.SETTER; @@ -25,7 +26,7 @@ public static AgentSpan methodEnter( responseListeners.add(0, new SpanFinishingCompleteListener(span)); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 2e09929c4a6..8efd2e309d5 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.jetty_client12; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -20,7 +21,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); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 5d0349002e6..94445e169b1 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.jetty_client91; +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.api.AgentTracer.propagate; @@ -91,7 +92,7 @@ public static AgentSpan methodEnter( responseListeners.add(0, new SpanFinishingCompleteListener(span)); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext( span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-common/src/main/java/datadog/trace/instrumentation/jetty_client/HeadersInjectAdapter.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-common/src/main/java/datadog/trace/instrumentation/jetty_client/HeadersInjectAdapter.java index 94a91b61d56..d4bc2cf0b78 100644 --- a/dd-java-agent/instrumentation/jetty-client/jetty-client-common/src/main/java/datadog/trace/instrumentation/jetty_client/HeadersInjectAdapter.java +++ b/dd-java-agent/instrumentation/jetty-client/jetty-client-common/src/main/java/datadog/trace/instrumentation/jetty_client/HeadersInjectAdapter.java @@ -1,8 +1,10 @@ package datadog.trace.instrumentation.jetty_client; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import org.eclipse.jetty.client.api.Request; +@ParametersAreNonnullByDefault public class HeadersInjectAdapter implements AgentPropagation.Setter { public static final HeadersInjectAdapter SETTER = new HeadersInjectAdapter(); diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java index e65eb41726b..9c5ac41a4d0 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java @@ -1,10 +1,10 @@ package datadog.trace.instrumentation.jms; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.hasInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.jms.JMSDecorator.JMS_PRODUCE; import static datadog.trace.instrumentation.jms.JMSDecorator.PRODUCER_DECORATE; @@ -94,7 +94,7 @@ public static AgentScope beforeSend( if (JMSDecorator.canInject(message)) { if (Config.get().isJmsPropagationEnabled() && (null == producerState || !producerState.isPropagationDisabled())) { - propagate().inject(span, message, SETTER); + defaultPropagator().inject(span, message, SETTER); } if (TIME_IN_QUEUE_ENABLED) { if (null != producerState) { @@ -140,9 +140,8 @@ public static AgentScope beforeSend( PRODUCER_DECORATE.onProduce(span, resourceName); if (JMSDecorator.canInject(message)) { if (Config.get().isJmsPropagationEnabled() - && !Config.get().isJmsPropagationDisabledForDestination(destinationName)) { - propagate().inject(span, message, SETTER); - } + && !Config.get().isJmsPropagationDisabledForDestination(destinationName)) + defaultPropagator().inject(span, message, SETTER); if (TIME_IN_QUEUE_ENABLED) { MessageProducerState producerState = InstrumentationContext.get(MessageProducer.class, MessageProducerState.class) diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MessageInjectAdapter.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MessageInjectAdapter.java index 3a6ac3a62ca..d63cc4d6a6a 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MessageInjectAdapter.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MessageInjectAdapter.java @@ -7,6 +7,7 @@ import datadog.trace.bootstrap.instrumentation.jms.MessageBatchState; import datadog.trace.bootstrap.instrumentation.jms.MessageProducerState; import de.thetaphi.forbiddenapis.SuppressForbidden; +import javax.annotation.ParametersAreNonnullByDefault; import javax.jms.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,6 +17,7 @@ public class MessageInjectAdapter implements AgentPropagation.Setter { public static final MessageInjectAdapter SETTER = new MessageInjectAdapter(); + @ParametersAreNonnullByDefault @SuppressForbidden @Override public void set(final Message carrier, final String key, final String value) { diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java index db90d8cae1a..691b47d4842 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.kafka_clients; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.agent.tooling.bytebuddy.matcher.ClassLoaderMatchers.hasClassNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; @@ -148,7 +149,7 @@ public static AgentScope onEnter( sortedTags.put(TOPIC_TAG, record.topic()); sortedTags.put(TYPE_TAG, "kafka"); try { - propagate().inject(span, record.headers(), setter); + defaultPropagator().inject(span, record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { // inject the context in the headers, but delay sending the stats until we know the @@ -169,7 +170,7 @@ record = record.value(), record.headers()); - propagate().inject(span, record.headers(), setter); + defaultPropagator().inject(span, record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { propagate() diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/NoopTextMapInjectAdapter.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/NoopTextMapInjectAdapter.java index 2723ad8f2bd..afd4e89a561 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/NoopTextMapInjectAdapter.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/NoopTextMapInjectAdapter.java @@ -1,7 +1,9 @@ package datadog.trace.instrumentation.kafka_clients; +import javax.annotation.ParametersAreNonnullByDefault; import org.apache.kafka.common.header.Headers; +@ParametersAreNonnullByDefault public class NoopTextMapInjectAdapter implements TextMapInjectAdapterInterface { public static final NoopTextMapInjectAdapter NOOP_SETTER = new NoopTextMapInjectAdapter(); diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TextMapInjectAdapter.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TextMapInjectAdapter.java index dd5622ab47a..d1ce9a000bf 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TextMapInjectAdapter.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TextMapInjectAdapter.java @@ -4,8 +4,10 @@ import static java.nio.charset.StandardCharsets.UTF_8; import java.nio.ByteBuffer; +import javax.annotation.ParametersAreNonnullByDefault; import org.apache.kafka.common.header.Headers; +@ParametersAreNonnullByDefault public class TextMapInjectAdapter implements TextMapInjectAdapterInterface { public static final TextMapInjectAdapter SETTER = new TextMapInjectAdapter(); diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java index 0d245d16bf4..bb6dc038669 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.kafka_clients38; +import static datadog.context.propagation.Propagators.defaultPropagator; 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.propagate; @@ -72,7 +73,7 @@ public static AgentScope onEnter( sortedTags.put(TOPIC_TAG, record.topic()); sortedTags.put(TYPE_TAG, "kafka"); try { - propagate().inject(span, record.headers(), setter); + defaultPropagator().inject(span, record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { // inject the context in the headers, but delay sending the stats until we know the @@ -93,7 +94,7 @@ record = record.value(), record.headers()); - propagate().inject(span, record.headers(), setter); + defaultPropagator().inject(span, record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { propagate() 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 9c6adf8aba6..6fae33f91ef 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.netty38.client; +import static datadog.context.propagation.Propagators.defaultPropagator; 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.propagate; @@ -65,7 +66,7 @@ public void writeRequested(final ChannelHandlerContext ctx, final MessageEvent m decorate.onPeerConnection(span, (InetSocketAddress) socketAddress); } - propagate().inject(span, request.headers(), SETTER); + defaultPropagator().inject(span, request.headers(), SETTER); propagate() .injectPathwayContext( span, request.headers(), SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/NettyResponseInjectAdapter.java b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/NettyResponseInjectAdapter.java index 7f4dc69580f..11974e69656 100644 --- a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/NettyResponseInjectAdapter.java +++ b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/NettyResponseInjectAdapter.java @@ -1,8 +1,10 @@ package datadog.trace.instrumentation.netty38.client; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import org.jboss.netty.handler.codec.http.HttpHeaders; +@ParametersAreNonnullByDefault public class NettyResponseInjectAdapter implements AgentPropagation.Setter { public static final NettyResponseInjectAdapter SETTER = new NettyResponseInjectAdapter(); 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 c6ee72f517d..a6649163db1 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.netty40.client; +import static datadog.context.propagation.Propagators.defaultPropagator; 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.propagate; @@ -88,7 +89,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) { - propagate().inject(span, request.headers(), SETTER); + defaultPropagator().inject(span, request.headers(), SETTER); propagate() .injectPathwayContext( span, request.headers(), SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/NettyResponseInjectAdapter.java b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/NettyResponseInjectAdapter.java index c14f0688014..e279e489055 100644 --- a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/NettyResponseInjectAdapter.java +++ b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/NettyResponseInjectAdapter.java @@ -2,7 +2,9 @@ import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import io.netty.handler.codec.http.HttpHeaders; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class NettyResponseInjectAdapter implements AgentPropagation.Setter { public static final NettyResponseInjectAdapter SETTER = new NettyResponseInjectAdapter(); 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 a21522f1a45..b0212d60cee 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.netty41.client; +import static datadog.context.propagation.Propagators.defaultPropagator; 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.propagate; @@ -89,7 +90,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) { - propagate().inject(span, request.headers(), SETTER); + defaultPropagator().inject(span, request.headers(), SETTER); propagate() .injectPathwayContext( span, request.headers(), SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/NettyResponseInjectAdapter.java b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/NettyResponseInjectAdapter.java index a8e3ba929de..37c0b3b90b2 100644 --- a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/NettyResponseInjectAdapter.java +++ b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/NettyResponseInjectAdapter.java @@ -2,7 +2,9 @@ import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import io.netty.handler.codec.http.HttpHeaders; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class NettyResponseInjectAdapter implements AgentPropagation.Setter { public static final NettyResponseInjectAdapter SETTER = new NettyResponseInjectAdapter(); diff --git a/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/RequestBuilderInjectAdapter.java b/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/RequestBuilderInjectAdapter.java index 61ffcd1c7ce..f563715ca4b 100644 --- a/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/RequestBuilderInjectAdapter.java +++ b/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/RequestBuilderInjectAdapter.java @@ -2,7 +2,9 @@ import com.squareup.okhttp.Request; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class RequestBuilderInjectAdapter implements AgentPropagation.Setter { public static final RequestBuilderInjectAdapter SETTER = new RequestBuilderInjectAdapter(); 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 dcea94a5cd7..bde08ea6005 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.okhttp2; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -26,7 +27,7 @@ public Response intercept(final Chain chain) throws IOException { DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); - propagate().inject(span, requestBuilder, SETTER); + defaultPropagator().inject(span, requestBuilder, SETTER); propagate() .injectPathwayContext( span, requestBuilder, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/RequestBuilderInjectAdapter.java b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/RequestBuilderInjectAdapter.java index 4ec53d7d0b1..8677f8a3e23 100644 --- a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/RequestBuilderInjectAdapter.java +++ b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/RequestBuilderInjectAdapter.java @@ -1,6 +1,7 @@ package datadog.trace.instrumentation.okhttp3; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import okhttp3.Request; /** @@ -8,6 +9,7 @@ * * @author Pavol Loffay */ +@ParametersAreNonnullByDefault public class RequestBuilderInjectAdapter implements AgentPropagation.Setter { public static final RequestBuilderInjectAdapter SETTER = new RequestBuilderInjectAdapter(); 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 b2862aa9f73..be9043bf38c 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.okhttp3; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -29,7 +30,7 @@ public Response intercept(final Chain chain) throws IOException { DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); - propagate().inject(span, requestBuilder, SETTER); + defaultPropagator().inject(span, requestBuilder, SETTER); propagate() .injectPathwayContext( span, requestBuilder, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OpenTelemetryInstrumentation.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OpenTelemetryInstrumentation.java index 8372add61d9..223c6d76d84 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OpenTelemetryInstrumentation.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OpenTelemetryInstrumentation.java @@ -44,7 +44,6 @@ public String[] helperClassNames() { packageName + ".OtelContextPropagators", packageName + ".OtelContextPropagators$1", // switch statement packageName + ".OtelContextPropagators$OtelHttpTextFormat", - packageName + ".OtelContextPropagators$OtelSetter", packageName + ".OtelContextPropagators$OtelGetter", packageName + ".TypeConverter", }; diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelContextPropagators.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelContextPropagators.java index 98259733809..0c8936f7a19 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelContextPropagators.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelContextPropagators.java @@ -1,6 +1,9 @@ package datadog.trace.instrumentation.opentelemetry; +import static datadog.context.propagation.Propagators.defaultPropagator; + 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.AgentTracer; import io.grpc.Context; @@ -39,7 +42,10 @@ public void inject(final Context context, final C carrier, final Setter s if (span == null || !span.getContext().isValid()) { return; } - tracer.propagate().inject(converter.toAgentSpan(span), carrier, new OtelSetter<>(setter)); + AgentSpan agentSpan = converter.toAgentSpan(span); + if (agentSpan != null) { + defaultPropagator().inject(agentSpan, carrier, setter::set); + } } @Override @@ -51,19 +57,6 @@ public Context extract(final Context context, final C carrier, final Getter< } } - private static class OtelSetter implements AgentPropagation.Setter { - private final HttpTextFormat.Setter setter; - - private OtelSetter(final HttpTextFormat.Setter setter) { - this.setter = setter; - } - - @Override - public void set(final C carrier, final String key, final String value) { - setter.set(carrier, key, value); - } - } - private static class OtelGetter implements AgentPropagation.ContextVisitor { private static final String DD_TRACE_ID_KEY = "x-datadog-trace-id"; private static final String DD_SPAN_ID_KEY = "x-datadog-parent-id"; diff --git a/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTTracer.java b/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTTracer.java index c49815fadb4..6cc2828e66d 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTTracer.java +++ b/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTTracer.java @@ -1,5 +1,8 @@ package datadog.trace.instrumentation.opentracing31; +import static datadog.context.propagation.Propagators.defaultPropagator; +import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromSpanContext; + import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -49,8 +52,8 @@ public SpanBuilder buildSpan(final String operationName) { public void inject(final SpanContext spanContext, final Format format, final C carrier) { if (carrier instanceof TextMap) { final AgentSpanContext context = converter.toContext(spanContext); - - tracer.propagate().inject(context, (TextMap) carrier, OTTextMapSetter.INSTANCE); + AgentSpan span = fromSpanContext(context); + defaultPropagator().inject(span, (TextMap) carrier, OTTextMapSetter.INSTANCE); } else { log.debug("Unsupported format for propagation - {}", format.getClass().getName()); } diff --git a/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTTracer.java b/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTTracer.java index 5f642be86fd..dfd3703d049 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTTracer.java +++ b/dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTTracer.java @@ -1,5 +1,8 @@ package datadog.trace.instrumentation.opentracing32; +import static datadog.context.propagation.Propagators.defaultPropagator; +import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromSpanContext; + import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -61,8 +64,8 @@ public SpanBuilder buildSpan(final String operationName) { public void inject(final SpanContext spanContext, final Format format, final C carrier) { if (carrier instanceof TextMapInject) { final AgentSpanContext context = converter.toContext(spanContext); - - tracer.propagate().inject(context, (TextMapInject) carrier, OTTextMapInjectSetter.INSTANCE); + AgentSpan span = fromSpanContext(context); + defaultPropagator().inject(span, (TextMapInject) carrier, OTTextMapInjectSetter.INSTANCE); } else { log.debug("Unsupported format for propagation - {}", format.getClass().getName()); } diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpClientHelpers.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpClientHelpers.java index 24b3c55fded..54412feb6b7 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpClientHelpers.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpClientHelpers.java @@ -4,6 +4,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import javax.annotation.ParametersAreNonnullByDefault; import org.apache.pekko.http.javadsl.model.headers.RawHeader; import org.apache.pekko.http.scaladsl.model.HttpRequest; import org.apache.pekko.http.scaladsl.model.HttpResponse; @@ -35,7 +36,7 @@ public Void apply(final Try result) { public static class PekkoHttpHeaders implements AgentPropagation.Setter { private HttpRequest request; // Did this request have a span when the PekkoHttpHeaders object was created? - private boolean hadSpan; + private final boolean hadSpan; public PekkoHttpHeaders(final HttpRequest request) { hadSpan = request != null && request.getHeader(HasSpanHeader.class).isPresent(); @@ -51,6 +52,7 @@ public boolean hadSpan() { return hadSpan; } + @ParametersAreNonnullByDefault @Override public void set(final HttpRequest carrier, final String key, final String value) { // Coerce a Scala trait Self type into the correct type 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 2dc9e4c9bd6..9bdb72960e8 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.pekkohttp; +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.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -79,7 +80,7 @@ public static AgentScope methodEnter( DECORATE.onRequest(span, request); if (request != null) { - propagate().inject(span, request, headers); + defaultPropagator().inject(span, request, headers); propagate() .injectPathwayContext( span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 4f7401034b8..c802ac71f70 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.playws1; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; @@ -29,7 +30,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext( span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 796e1f049dd..c174f730563 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.playws21; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; @@ -29,7 +30,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext( span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); 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 e795667d7f3..48a9c23fadf 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.playws2; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; @@ -29,7 +30,7 @@ public static AgentSpan methodEnter( DECORATE.afterStart(span); DECORATE.onRequest(span, request); - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext( span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/play-ws/src/main/java/datadog/trace/instrumentation/playws/HeadersInjectAdapter.java b/dd-java-agent/instrumentation/play-ws/src/main/java/datadog/trace/instrumentation/playws/HeadersInjectAdapter.java index 92f6a7f232b..2034b320641 100644 --- a/dd-java-agent/instrumentation/play-ws/src/main/java/datadog/trace/instrumentation/playws/HeadersInjectAdapter.java +++ b/dd-java-agent/instrumentation/play-ws/src/main/java/datadog/trace/instrumentation/playws/HeadersInjectAdapter.java @@ -1,8 +1,10 @@ package datadog.trace.instrumentation.playws; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import play.shaded.ahc.org.asynchttpclient.Request; +@ParametersAreNonnullByDefault public class HeadersInjectAdapter implements AgentPropagation.Setter { public static final HeadersInjectAdapter SETTER = new HeadersInjectAdapter(); diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java index c25d332a150..4ac4aeb1b57 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.rabbitmq.amqp; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.extendsClass; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.nameEndsWith; @@ -189,7 +190,7 @@ public static AgentScope setResourceNameAddHeaders( if (TIME_IN_QUEUE_ENABLED) { RabbitDecorator.injectTimeInQueueStart(headers); } - propagate().inject(span, headers, SETTER); + defaultPropagator().inject(span, headers, SETTER); LinkedHashMap sortedTags = new LinkedHashMap<>(); sortedTags.put(DIRECTION_TAG, DIRECTION_OUT); sortedTags.put(EXCHANGE_TAG, exchange); diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/TextMapInjectAdapter.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/TextMapInjectAdapter.java index 2f6c29f403d..7b68605f1f4 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/TextMapInjectAdapter.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/TextMapInjectAdapter.java @@ -2,7 +2,9 @@ import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import java.util.Map; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class TextMapInjectAdapter implements AgentPropagation.Setter> { public static final TextMapInjectAdapter SETTER = new TextMapInjectAdapter(); diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/ServletRequestSetter.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/ServletRequestSetter.java index dbe2e0bf79f..e16c7b0fa89 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/ServletRequestSetter.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/ServletRequestSetter.java @@ -1,9 +1,11 @@ package datadog.trace.instrumentation.servlet; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import javax.servlet.ServletRequest; /** Inject into request attributes since the request headers can't be modified. */ +@ParametersAreNonnullByDefault public class ServletRequestSetter implements AgentPropagation.Setter { public static final ServletRequestSetter SETTER = new ServletRequestSetter(); 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 82f5f47c374..0e05beb9743 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.servlet.dispatcher; +import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; @@ -121,7 +122,7 @@ public static AgentScope start( span.setSpanType(InternalSpanTypes.HTTP_SERVER); // In case we lose context, inject trace into to the request. - propagate().inject(span, request, SETTER); + defaultPropagator().inject(span, request, SETTER); propagate() .injectPathwayContext( span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); diff --git a/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseClientInstrumentation.java b/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseClientInstrumentation.java index 14a6376b974..e860003559e 100644 --- a/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseClientInstrumentation.java +++ b/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/SynapseClientInstrumentation.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.synapse3; +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.api.AgentTracer.activateSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.synapse3.SynapseClientDecorator.DECORATE; import static datadog.trace.instrumentation.synapse3.SynapseClientDecorator.SYNAPSE_REQUEST; @@ -86,7 +86,7 @@ public static AgentScope beginRequest( DECORATE.afterStart(span); // add trace id to client-side request before it gets submitted as an HttpRequest - propagate().inject(span, TargetContext.getRequest(connection), SETTER); + defaultPropagator().inject(span, TargetContext.getRequest(connection), SETTER); // capture span to be finished by one of the various client response advices connection.getContext().setAttribute(SYNAPSE_SPAN_KEY, span); diff --git a/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/TargetRequestInjectAdapter.java b/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/TargetRequestInjectAdapter.java index ed33141b637..f5345ad836d 100644 --- a/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/TargetRequestInjectAdapter.java +++ b/dd-java-agent/instrumentation/synapse-3/src/main/java/datadog/trace/instrumentation/synapse3/TargetRequestInjectAdapter.java @@ -1,8 +1,10 @@ package datadog.trace.instrumentation.synapse3; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; +import javax.annotation.ParametersAreNonnullByDefault; import org.apache.synapse.transport.passthru.TargetRequest; +@ParametersAreNonnullByDefault public final class TargetRequestInjectAdapter implements AgentPropagation.Setter { public static final TargetRequestInjectAdapter SETTER = new TargetRequestInjectAdapter(); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index 2832cdfdcf5..1c21645e5d2 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -5,7 +5,9 @@ import static datadog.trace.api.DDTags.DJM_ENABLED; import static datadog.trace.api.DDTags.DSM_ENABLED; import static datadog.trace.api.DDTags.PROFILING_CONTEXT_ENGINE; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.STANDALONE_ASM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.TRACING_CONCERN; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.XRAY_TRACING_CONCERN; import static datadog.trace.common.metrics.MetricsAggregatorFactory.createMetricsAggregator; import static datadog.trace.util.AgentThreadFactory.AGENT_THREAD_GROUP; import static datadog.trace.util.CollectionUtils.tryMakeImmutableMap; @@ -89,7 +91,9 @@ import datadog.trace.core.propagation.ExtractedContext; import datadog.trace.core.propagation.HttpCodec; import datadog.trace.core.propagation.PropagationTags; +import datadog.trace.core.propagation.StandaloneAsmPropagator; import datadog.trace.core.propagation.TracingPropagator; +import datadog.trace.core.propagation.XRayPropagator; import datadog.trace.core.scopemanager.ContinuableScopeManager; import datadog.trace.core.taginterceptor.RuleFlags; import datadog.trace.core.taginterceptor.TagInterceptor; @@ -723,7 +727,15 @@ private CoreTracer( this.propagation = new CorePropagation(builtExtractor, injector, injectors, dataStreamContextInjector); - Propagators.register(TRACING_CONCERN, new TracingPropagator(injector, extractor)); + // Check if standalone AppSec is enabled: + // If enabled, use the standalone AppSec propagator by default that will limit tracing concern + // injection and delegate to the tracing propagator if needed, + // If disabled, the most common case, use the usual tracing propagator by default. + boolean standaloneAppSec = config.isAppSecStandaloneEnabled(); + Propagators.register(STANDALONE_ASM_CONCERN, new StandaloneAsmPropagator(), standaloneAppSec); + Propagators.register( + TRACING_CONCERN, new TracingPropagator(injector, extractor), !standaloneAppSec); + Propagators.register(XRAY_TRACING_CONCERN, new XRayPropagator(config), false); this.tagInterceptor = null == tagInterceptor ? new TagInterceptor(new RuleFlags(config)) : tagInterceptor; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/StandaloneAsmPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/StandaloneAsmPropagator.java new file mode 100644 index 00000000000..fc208c5de80 --- /dev/null +++ b/dd-trace-core/src/main/java/datadog/trace/core/propagation/StandaloneAsmPropagator.java @@ -0,0 +1,40 @@ +package datadog.trace.core.propagation; + +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.TRACING_CONCERN; +import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromContext; + +import datadog.context.Context; +import datadog.context.propagation.CarrierSetter; +import datadog.context.propagation.CarrierVisitor; +import datadog.context.propagation.Propagator; +import datadog.context.propagation.Propagators; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.core.DDSpanContext; +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +public class StandaloneAsmPropagator implements Propagator { + @Override + public void inject(Context context, C carrier, CarrierSetter setter) { + // Stop propagation if appsec propagation is disabled (no ASM events), stop propagation + AgentSpan span; + if ((span = fromContext(context)) != null) { + AgentSpanContext spanContext = span.context(); + if (spanContext instanceof DDSpanContext) { + DDSpanContext ddSpanContext = (DDSpanContext) spanContext; + if (!ddSpanContext.getPropagationTags().isAppsecPropagationEnabled()) { + return; + } + } + // Only propagate tracing for appsec standalone product + Propagators.forConcern(TRACING_CONCERN).inject(span, carrier, setter); + } + } + + @Override + public Context extract(Context context, C carrier, CarrierVisitor visitor) { + // Only propagate tracing for appsec standalone product + return Propagators.forConcern(TRACING_CONCERN).extract(context, carrier, visitor); + } +} diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/XRayPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/XRayPropagator.java new file mode 100644 index 00000000000..e8ddd4831ec --- /dev/null +++ b/dd-trace-core/src/main/java/datadog/trace/core/propagation/XRayPropagator.java @@ -0,0 +1,58 @@ +package datadog.trace.core.propagation; + +import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromContext; + +import datadog.context.Context; +import datadog.context.propagation.CarrierSetter; +import datadog.context.propagation.CarrierVisitor; +import datadog.context.propagation.Propagator; +import datadog.trace.api.Config; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.core.DDSpanContext; +import javax.annotation.ParametersAreNonnullByDefault; + +/** + * AWS X-Ray Tracking context propagator. + * + *

Only injection is supported. For full-fledged context propagation support, use the default + * {@link TracingPropagator} instead. + * + * @see XRayHttpCodec + */ +@ParametersAreNonnullByDefault +public class XRayPropagator implements Propagator { + private final HttpCodec.Injector injector; + + /** + * Constructor. + * + * @param config the config get the baggage mapping from. + */ + public XRayPropagator(Config config) { + this.injector = XRayHttpCodec.newInjector(config.getBaggageMapping()); + } + + @Override + public void inject(Context context, C carrier, CarrierSetter setter) { + AgentSpan span; + //noinspection ConstantValue + if (context == null + || carrier == null + || setter == null + || (span = fromContext(context)) == null) { + return; + } + AgentSpanContext spanContext = span.context(); + if (spanContext instanceof DDSpanContext) { + DDSpanContext ddSpanContext = (DDSpanContext) spanContext; + ddSpanContext.getTraceCollector().setSamplingPriorityIfNecessary(); + this.injector.inject(ddSpanContext, carrier, setter::set); + } + } + + @Override + public Context extract(Context context, C carrier, CarrierVisitor visitor) { + return context; + } +} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/TracingPropagatorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/TracingPropagatorTest.groovy index d581e983839..7c26cbc7e16 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/TracingPropagatorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/TracingPropagatorTest.groovy @@ -11,6 +11,7 @@ import datadog.trace.core.test.DDCoreSpecification import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_KEEP import static datadog.trace.api.sampling.PrioritySampling.USER_DROP +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.XRAY_TRACING_CONCERN class TracingPropagatorTest extends DDCoreSpecification { HttpCodec.Injector injector @@ -136,4 +137,49 @@ class TracingPropagatorTest extends DDCoreSpecification { root.finish() tracer.close() } + + def 'test AWS X-Ray propagator'() { + setup: + def tracer = tracerBuilder().build() + def span = tracer.buildSpan('test', 'operation').start() + def propagator = Propagators.forConcerns(XRAY_TRACING_CONCERN) + def setter = Mock(CarrierSetter) + def carrier = new Object() + + when: + propagator.inject(span, carrier, setter) + + then: + 1 * setter.set(carrier, 'X-Amzn-Trace-Id', _) + + cleanup: + span.finish() + tracer.close() + } + + def 'test ASM standalone billing propagator stop propagation'() { + setup: + injectSysConfig('experimental.appsec.standalone.enabled', standaloneAsmEnabled.toString()) + def tracer = tracerBuilder().build() + def span = tracer.buildSpan('test', 'operation').start() + def setter = Mock(CarrierSetter) + def carrier = new Object() + + when: + Propagators.defaultPropagator().inject(span, carrier, setter) + + then: + if (standaloneAsmEnabled) { + 0 * setter.set(_, _, _) + } else { + (1.._) * setter.set(_, _, _) + } + + cleanup: + span.finish() + tracer.close() + + where: + standaloneAsmEnabled << [true, false] + } } diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java index 7dc452bef89..0c3df7900d0 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java @@ -1,5 +1,8 @@ package datadog.opentracing; +import static datadog.context.propagation.Propagators.defaultPropagator; +import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromSpanContext; + import datadog.trace.api.Config; import datadog.trace.api.DDTags; import datadog.trace.api.GlobalTracer; @@ -475,8 +478,8 @@ public DDSpanBuilder buildSpan(final String operationName) { public void inject(final SpanContext spanContext, final Format format, final C carrier) { if (carrier instanceof TextMap) { final AgentSpanContext context = converter.toContext(spanContext); - - tracer.propagate().inject(context, (TextMap) carrier, TextMapSetter.INSTANCE); + AgentSpan span = fromSpanContext(context); + defaultPropagator().inject(span, (TextMap) carrier, TextMapSetter.INSTANCE); } else { log.debug("Unsupported format for propagation - {}", format.getClass().getName()); } diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java index b574dc35038..1ed21c3840f 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java @@ -1,5 +1,7 @@ package datadog.trace.bootstrap.instrumentation.api; +import static datadog.context.propagation.Concern.named; + import datadog.context.propagation.CarrierSetter; import datadog.context.propagation.CarrierVisitor; import datadog.context.propagation.Concern; @@ -9,7 +11,9 @@ import javax.annotation.ParametersAreNonnullByDefault; public interface AgentPropagation { - Concern TRACING_CONCERN = Concern.named("tracing"); + Concern TRACING_CONCERN = named("tracing"); + Concern XRAY_TRACING_CONCERN = named("tracing-xray"); + Concern STANDALONE_ASM_CONCERN = named("asm-standalone"); void inject(AgentSpan span, C carrier, Setter setter); diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java index dd04f806850..412ac7c85cc 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java @@ -25,7 +25,7 @@ public interface AgentSpan * @return the span if existing, {@code null} otherwise. */ static AgentSpan fromContext(Context context) { - return context.get(SPAN_KEY); + return context == null ? null : context.get(SPAN_KEY); } /**