From fd8f491af04c139aa68d08eb93efabd5bff4d7a2 Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Thu, 30 Jan 2025 14:17:57 +0100 Subject: [PATCH 1/7] feat(dsm): Implement DSM context injection --- ...agator.java => DataStreamsPropagator.java} | 53 +++++++++++++-- .../DefaultDataStreamsMonitoring.java | 4 +- .../api/datastreams/DataStreamsContext.java | 67 +++++++++++++++++++ .../datastreams/DataStreamsContextTest.groovy | 52 ++++++++++++++ 4 files changed, 170 insertions(+), 6 deletions(-) rename dd-trace-core/src/main/java/datadog/trace/core/datastreams/{DataStreamPropagator.java => DataStreamsPropagator.java} (59%) create mode 100644 internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java create mode 100644 internal-api/src/test/groovy/datadog/trace/api/datastreams/DataStreamsContextTest.groovy diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java similarity index 59% rename from dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamPropagator.java rename to dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java index 8807066cb0b..28f42619601 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamPropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java @@ -1,32 +1,40 @@ package datadog.trace.core.datastreams; +import static datadog.trace.api.DDTags.PATHWAY_HASH; +import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.PROPAGATION_KEY_BASE64; + import datadog.context.Context; import datadog.context.propagation.CarrierSetter; import datadog.context.propagation.CarrierVisitor; import datadog.context.propagation.Propagator; import datadog.trace.api.TraceConfig; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.time.TimeSource; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import datadog.trace.bootstrap.instrumentation.api.TagContext; +import java.io.IOException; import java.util.function.Supplier; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; // TODO Javadoc @ParametersAreNonnullByDefault -public class DataStreamPropagator implements Propagator { +public class DataStreamsPropagator implements Propagator { + private final DataStreamsMonitoring dataStreamsMonitoring; private final Supplier traceConfigSupplier; private final TimeSource timeSource; private final long hashOfKnownTags; private final ThreadLocal serviceNameOverride; - public DataStreamPropagator( + public DataStreamsPropagator( + DataStreamsMonitoring dataStreamsMonitoring, Supplier traceConfigSupplier, TimeSource timeSource, long hashOfKnownTags, ThreadLocal serviceNameOverride) { + this.dataStreamsMonitoring = dataStreamsMonitoring; this.traceConfigSupplier = traceConfigSupplier; this.timeSource = timeSource; this.hashOfKnownTags = hashOfKnownTags; @@ -35,12 +43,49 @@ public DataStreamPropagator( @Override public void inject(Context context, C carrier, CarrierSetter setter) { - // TODO Still in CorePropagation, not migrated yet + // TODO Pathway context needs to be stored into its own context element instead of span context + AgentSpan span = AgentSpan.fromContext(context); + DataStreamsContext dsmContext = DataStreamsContext.fromContext(context); + PathwayContext pathwayContext; + if (span == null + || dsmContext == null + || (pathwayContext = span.context().getPathwayContext()) == null + || (span.traceConfig() != null && !span.traceConfig().isDataStreamsEnabled())) { + return; + } + + // TODO Allow set checkpoint to use DsmContext as parameter? + pathwayContext.setCheckpoint( + dsmContext.sortedTags(), + dsmContext.sendCheckpoint() ? dataStreamsMonitoring::add : pathwayContext::saveStats, + dsmContext.defaultTimestamp(), + dsmContext.payloadSizeBytes()); + + boolean injected = injectPathwayContext(pathwayContext, carrier, setter); + + if (injected && pathwayContext.getHash() != 0) { + span.setTag(PATHWAY_HASH, Long.toUnsignedString(pathwayContext.getHash())); + } + } + + private boolean injectPathwayContext( + PathwayContext pathwayContext, C carrier, CarrierSetter setter) { + try { + String encodedContext = pathwayContext.encode(); + if (encodedContext != null) { + // LOGGER.debug("Injecting pathway context {}", pathwayContext); + setter.set(carrier, PROPAGATION_KEY_BASE64, encodedContext); + return true; + } + } catch (IOException e) { + // LOGGER.debug("Unable to set encode pathway context", e); + } + return false; } @Override public Context extract(Context context, C carrier, CarrierVisitor visitor) { - // TODO Pathway context needs to be stored into its own context element + // TODO Pathway context needs to be stored into its own context element instead of span context // Get span context to store pathway context into TagContext spanContext = getSpanContextOrNull(context); PathwayContext pathwayContext; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java index 29794266c32..1a8f16f0e38 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java @@ -203,8 +203,8 @@ public PathwayContext newPathwayContext() { @Override public Propagator propagator() { - return new DataStreamPropagator( - this.traceConfigSupplier, this.timeSource, this.hashOfKnownTags, serviceNameOverride); + return new DataStreamsPropagator( + this, this.traceConfigSupplier, this.timeSource, this.hashOfKnownTags, serviceNameOverride); } @Override diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java b/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java new file mode 100644 index 00000000000..8cd0d6c33e0 --- /dev/null +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java @@ -0,0 +1,67 @@ +package datadog.trace.api.datastreams; + +import datadog.context.Context; +import datadog.context.ContextKey; +import datadog.context.ImplicitContextKeyed; +import java.util.LinkedHashMap; + +public class DataStreamsContext implements ImplicitContextKeyed { + private static final ContextKey CONTEXT_KEY = + ContextKey.named("dsm-context-key"); + + final LinkedHashMap sortedTags; + final long defaultTimestamp; + final long payloadSizeBytes; + final boolean sendCheckpoint; + + public static DataStreamsContext fromContext(Context context) { + return context.get(CONTEXT_KEY); + } + + public static DataStreamsContext fromTags(LinkedHashMap sortedTags) { + return new DataStreamsContext(sortedTags, 0, 0, true); + } + + public static DataStreamsContext fromKafka( + LinkedHashMap sortedTags, long defaultTimestamp, long payloadSizeBytes) { + return new DataStreamsContext(sortedTags, defaultTimestamp, payloadSizeBytes, true); + } + + public static DataStreamsContext fromTagsWithoutCheckpoint( + LinkedHashMap sortedTags) { + return new DataStreamsContext(sortedTags, 0, 0, false); + } + + // That's basically a record for now + private DataStreamsContext( + LinkedHashMap sortedTags, + long defaultTimestamp, + long payloadSizeBytes, + boolean sendCheckpoint) { + this.sortedTags = sortedTags; + this.defaultTimestamp = defaultTimestamp; + this.payloadSizeBytes = payloadSizeBytes; + this.sendCheckpoint = sendCheckpoint; + } + + public LinkedHashMap sortedTags() { + return this.sortedTags; + } + + public long defaultTimestamp() { + return this.defaultTimestamp; + } + + public long payloadSizeBytes() { + return this.payloadSizeBytes; + } + + public boolean sendCheckpoint() { + return this.sendCheckpoint; + } + + @Override + public Context storeInto(Context context) { + return context.with(CONTEXT_KEY, this); + } +} diff --git a/internal-api/src/test/groovy/datadog/trace/api/datastreams/DataStreamsContextTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/datastreams/DataStreamsContextTest.groovy new file mode 100644 index 00000000000..8d3240ff8b4 --- /dev/null +++ b/internal-api/src/test/groovy/datadog/trace/api/datastreams/DataStreamsContextTest.groovy @@ -0,0 +1,52 @@ +package datadog.trace.api.datastreams + +import datadog.context.Context +import spock.lang.Specification + +class DataStreamsContextTest extends Specification { + def 'test constructor'() { + setup: + def tags = new LinkedHashMap() + + when: + def dsmContext = DataStreamsContext.fromTags(tags) + + then: + dsmContext.sortedTags() == tags + dsmContext.defaultTimestamp() == 0 + dsmContext.payloadSizeBytes() == 0 + dsmContext.sendCheckpoint() + + when: + dsmContext = DataStreamsContext.fromTagsWithoutCheckpoint(tags) + + then: + dsmContext.sortedTags() == tags + dsmContext.defaultTimestamp() == 0 + dsmContext.payloadSizeBytes() == 0 + !dsmContext.sendCheckpoint() + + when: + def timestamp = 123L + def payloadSize = 456L + dsmContext = DataStreamsContext.fromKafka(tags, timestamp, payloadSize) + + then: + dsmContext.sortedTags() == tags + dsmContext.defaultTimestamp() == timestamp + dsmContext.payloadSizeBytes() == payloadSize + dsmContext.sendCheckpoint() + } + + def 'test context store'() { + setup: + def tags = new LinkedHashMap() + + when: + def dsmContext = DataStreamsContext.fromTags(tags) + def context = dsmContext.storeInto(Context.root()) + + then: + DataStreamsContext.fromContext(context) == dsmContext + } +} From 9dcd23292a2bcd904571f71ca0b2faef583cca41 Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Thu, 30 Jan 2025 14:18:25 +0100 Subject: [PATCH 2/7] feat(dsm): Migrate DSM injection call to propagator API 1/3 --- .../AkkaHttpSingleRequestInstrumentation.java | 10 ++--- .../akkahttp106/SingleRequestAdvice.java | 10 ++--- .../DelegatingRequestProducer.java | 9 ++-- .../apachehttpclient/HelperMethods.java | 10 ++--- .../DelegatingRequestChannel.java | 9 ++-- .../apachehttpclient5/HelperMethods.java | 10 ++--- .../client/ClientCallImplInstrumentation.java | 6 +-- .../eventbridge/EventBridgeInterceptor.java | 11 ++--- .../aws/v1/sns/SnsInterceptor.java | 9 ++-- .../aws/v2/sns/SnsInterceptor.java | 8 ++-- .../aws/v1/sqs/SqsInterceptor.java | 28 ++++++++----- .../aws/v2/sqs/SqsInterceptor.java | 41 ++++++++++++------- .../CommonsHttpClientInstrumentation.java | 10 ++--- .../GoogleHttpClientDecorator.java | 7 ++-- .../PublisherInstrumentation.java | 6 +-- .../AsyncHttpClientInstrumentation.java | 10 ++--- .../client/ClientCallImplInstrumentation.java | 6 +-- .../HttpUrlConnectionInstrumentation.java | 10 ++--- .../httpclient/HeadersAdvice.java | 10 ++--- .../v1/JaxRsClientV1Instrumentation.java | 10 ++--- .../jaxrs/ClientTracingFilter.java | 15 +++---- .../jetty_client10/SendAdvice.java | 11 +++-- .../jetty_client12/SendAdvice.java | 12 +++--- .../JettyClientInstrumentation.java | 12 +++--- .../HttpClientRequestTracingHandler.java | 12 +++--- .../HttpClientRequestTracingHandler.java | 12 +++--- .../HttpClientRequestTracingHandler.java | 12 +++--- .../okhttp2/TracingInterceptor.java | 12 +++--- .../okhttp3/TracingInterceptor.java | 12 +++--- ...PekkoHttpSingleRequestInstrumentation.java | 12 +++--- .../playws1/PlayWSClientInstrumentation.java | 12 +++--- .../playws21/PlayWSClientInstrumentation.java | 12 +++--- .../playws2/PlayWSClientInstrumentation.java | 12 +++--- .../amqp/RabbitChannelInstrumentation.java | 8 ++-- .../RequestDispatcherInstrumentation.java | 12 +++--- 35 files changed, 192 insertions(+), 216 deletions(-) diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java index 36679f4b767..a18d138c35e 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 @@ -3,8 +3,8 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.AKKA_CLIENT_REQUEST; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientHelpers.AkkaHttpHeaders; @@ -17,9 +17,9 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import net.bytebuddy.asm.Advice; import scala.concurrent.Future; @@ -79,10 +79,8 @@ public static AgentScope methodEnter( DECORATE.onRequest(span, request); if (request != null) { - defaultPropagator().inject(span, request, headers); - propagate() - .injectPathwayContext( - span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java index 15d27bd7fed..105ac824f93 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 @@ -2,15 +2,15 @@ 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; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import akka.http.scaladsl.HttpExt; import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import net.bytebuddy.asm.Advice; import scala.concurrent.Future; @@ -29,10 +29,8 @@ public static AgentScope methodEnter( AkkaHttpClientDecorator.DECORATE.onRequest(span, request); if (request != null) { - defaultPropagator().inject(span, request, headers); - propagate() - .injectPathwayContext( - span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java index be5d0ab2956..99dfee7ba3c 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,12 +1,12 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import java.io.IOException; import org.apache.http.HttpException; import org.apache.http.HttpHost; @@ -35,9 +35,8 @@ public HttpRequest generateRequest() throws IOException, HttpException { final HttpRequest request = delegate.generateRequest(); DECORATE.onRequest(span, new HostAndRequestAsHttpUriRequest(delegate.getTarget(), request)); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); return request; } diff --git a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java index c87e544a2c9..e9f726f6fdd 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 @@ -2,16 +2,16 @@ 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; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.apachehttpclient.HttpHeadersInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; @@ -46,10 +46,8 @@ private static AgentScope activateHttpSpan(final HttpUriRequest request) { // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext( - span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); } return scope; diff --git a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java index 8a2acce10d9..673656e75ea 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,12 +1,12 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import java.io.IOException; import org.apache.hc.core5.http.EntityDetails; import org.apache.hc.core5.http.HttpException; @@ -28,9 +28,8 @@ public void sendRequest(HttpRequest request, EntityDetails entityDetails, HttpCo throws HttpException, IOException { DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); delegate.sendRequest(request, entityDetails, context); } } diff --git a/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java b/dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java index 0fa694ffc76..01b8ea4814d 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 @@ -2,16 +2,16 @@ 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; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.core5.http.HttpHost; import org.apache.hc.core5.http.HttpRequest; @@ -46,10 +46,8 @@ 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) { - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext( - span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); } return scope; diff --git a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java index 90addc59fea..d2af437afa2 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 @@ -4,7 +4,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.DECORATE; @@ -21,6 +20,7 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.muzzle.Reference; import datadog.trace.api.InstrumenterConfig; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -121,8 +121,8 @@ public static AgentScope before( if (null != responseListener && null != headers) { span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { - defaultPropagator().inject(span, headers, SETTER); - propagate().injectPathwayContext(span, headers, SETTER, CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), headers, SETTER); return activateSpan(span); } } diff --git a/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java b/dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java index ba00ad7a4f8..1d9450ad175 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,7 +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; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; @@ -9,6 +8,7 @@ import static datadog.trace.core.datastreams.TagsProcessor.TYPE_TAG; import static datadog.trace.instrumentation.aws.v2.eventbridge.TextMapInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstanceStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.PathwayContext; @@ -86,12 +86,13 @@ private String getTraceContextToInject( StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.append('{'); - // Inject trace context - defaultPropagator().inject(span, jsonBuilder, SETTER); - + // Inject context + datadog.context.Context context = span; if (traceConfig().isDataStreamsEnabled()) { - propagate().injectPathwayContext(span, jsonBuilder, SETTER, getTags(eventBusName)); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(eventBusName)); + context = context.with(dsmContext); } + defaultPropagator().inject(context, jsonBuilder, SETTER); // Add bus name and start time jsonBuilder 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 ecf76bec16e..3d1333a777f 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,7 +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; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; @@ -15,6 +14,8 @@ import com.amazonaws.services.sns.model.PublishBatchRequest; import com.amazonaws.services.sns.model.PublishBatchRequestEntry; import com.amazonaws.services.sns.model.PublishRequest; +import datadog.context.Context; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -37,10 +38,12 @@ private ByteBuffer getMessageAttributeValueToInject( final AgentSpan span = newSpan(request); StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.append('{'); - defaultPropagator().inject(span, jsonBuilder, SETTER); + Context context = span; if (traceConfig().isDataStreamsEnabled()) { - propagate().injectPathwayContext(span, jsonBuilder, SETTER, getTags(snsTopicName)); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(snsTopicName)); + context = context.with(dsmContext); } + defaultPropagator().inject(context, jsonBuilder, SETTER); jsonBuilder.setLength(jsonBuilder.length() - 1); // Remove the last comma jsonBuilder.append('}'); return ByteBuffer.wrap(jsonBuilder.toString().getBytes(StandardCharsets.UTF_8)); 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 1b44762a692..20143055b2a 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,7 +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; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; @@ -9,6 +8,7 @@ import static datadog.trace.core.datastreams.TagsProcessor.TYPE_TAG; import static datadog.trace.instrumentation.aws.v2.sns.TextMapInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstanceStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.nio.charset.StandardCharsets; @@ -38,10 +38,12 @@ private SdkBytes getMessageAttributeValueToInject( final AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.append('{'); - defaultPropagator().inject(span, jsonBuilder, SETTER); + datadog.context.Context context = span; if (traceConfig().isDataStreamsEnabled()) { - propagate().injectPathwayContext(span, jsonBuilder, SETTER, getTags(snsTopicName)); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(snsTopicName)); + context = context.with(dsmContext); } + defaultPropagator().inject(context, jsonBuilder, SETTER); jsonBuilder.setLength(jsonBuilder.length() - 1); // Remove the last comma jsonBuilder.append('}'); return SdkBytes.fromString(jsonBuilder.toString(), StandardCharsets.UTF_8); diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java index 1195eb058f0..084c8cae2f3 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.aws.v1.sqs; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.DATADOG_KEY; import static datadog.trace.bootstrap.instrumentation.api.URIUtils.urlFileName; @@ -16,6 +16,10 @@ import com.amazonaws.services.sqs.model.SendMessageBatchRequest; import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry; import com.amazonaws.services.sqs.model.SendMessageRequest; +import datadog.context.Context; +import datadog.context.propagation.Propagator; +import datadog.context.propagation.Propagators; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.LinkedHashMap; @@ -36,23 +40,21 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request String queueUrl = smRequest.getQueueUrl(); if (queueUrl == null) return request; - LinkedHashMap sortedTags = getTags(queueUrl); - - final AgentSpan span = newSpan(request); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + Context context = newContext(request, queueUrl); // note: modifying message attributes has to be done before marshalling, otherwise the changes // are not reflected in the actual request (and the MD5 check on send will fail). - propagate().injectPathwayContext(span, smRequest.getMessageAttributes(), SETTER, sortedTags); + dsmPropagator.inject(context, smRequest.getMessageAttributes(), SETTER); } else if (request instanceof SendMessageBatchRequest) { SendMessageBatchRequest smbRequest = (SendMessageBatchRequest) request; String queueUrl = smbRequest.getQueueUrl(); if (queueUrl == null) return request; - LinkedHashMap sortedTags = getTags(queueUrl); - - final AgentSpan span = newSpan(request); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + Context context = newContext(request, queueUrl); for (SendMessageBatchRequestEntry entry : smbRequest.getEntries()) { - propagate().injectPathwayContext(span, entry.getMessageAttributes(), SETTER, sortedTags); + dsmPropagator.inject(context, entry.getMessageAttributes(), SETTER); } } else if (request instanceof ReceiveMessageRequest) { ReceiveMessageRequest rmRequest = (ReceiveMessageRequest) request; @@ -64,8 +66,14 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request return request; } + private Context newContext(AmazonWebServiceRequest request, String queueUrl) { + AgentSpan span = newSpan(request); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(queueUrl)); + return span.with(dsmContext); + } + private AgentSpan newSpan(AmazonWebServiceRequest request) { - final AgentSpan span = startSpan("aws.sqs.send"); + final AgentSpan span = startSpan("sqs", "aws.sqs.send"); // pass the span to TracingRequestHandler in the sdk instrumentation where it'll be enriched & // activated contextStore.put(request, span); diff --git a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java index 2ac1479c904..41d8146eb02 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.aws.v2.sqs; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.DATADOG_KEY; import static datadog.trace.bootstrap.instrumentation.api.URIUtils.urlFileName; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; @@ -9,6 +9,9 @@ import static datadog.trace.core.datastreams.TagsProcessor.TYPE_TAG; import static datadog.trace.instrumentation.aws.v2.sqs.MessageAttributeInjector.SETTER; +import datadog.context.propagation.Propagator; +import datadog.context.propagation.Propagators; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstanceStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.ArrayList; @@ -45,16 +48,13 @@ public SdkRequest modifyRequest( if (!optionalQueueUrl.isPresent()) { return request; } - String queueUrl = optionalQueueUrl.get(); - AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); - LinkedHashMap sortedTags = new LinkedHashMap<>(); - sortedTags.put(DIRECTION_TAG, DIRECTION_OUT); - sortedTags.put(TOPIC_TAG, urlFileName(queueUrl)); - sortedTags.put(TYPE_TAG, "sqs"); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + datadog.context.Context ctx = getContext(executionAttributes, optionalQueueUrl.get()); Map messageAttributes = new HashMap<>(request.messageAttributes()); - propagate().injectPathwayContext(span, messageAttributes, SETTER, sortedTags); + dsmPropagator.inject(ctx, messageAttributes, SETTER); + return request.toBuilder().messageAttributes(messageAttributes).build(); } else if (context.request() instanceof SendMessageBatchRequest) { @@ -63,19 +63,15 @@ public SdkRequest modifyRequest( if (!optionalQueueUrl.isPresent()) { return request; } - String queueUrl = optionalQueueUrl.get(); - AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); - LinkedHashMap sortedTags = new LinkedHashMap<>(); - sortedTags.put(DIRECTION_TAG, DIRECTION_OUT); - sortedTags.put(TOPIC_TAG, urlFileName(queueUrl)); - sortedTags.put(TYPE_TAG, "sqs"); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + datadog.context.Context ctx = getContext(executionAttributes, optionalQueueUrl.get()); List entries = new ArrayList<>(); for (SendMessageBatchRequestEntry entry : request.entries()) { Map messageAttributes = new HashMap<>(entry.messageAttributes()); - propagate().injectPathwayContext(span, messageAttributes, SETTER, sortedTags); + dsmPropagator.inject(ctx, messageAttributes, SETTER); entries.add(entry.toBuilder().messageAttributes(messageAttributes).build()); } @@ -95,4 +91,19 @@ public SdkRequest modifyRequest( return context.request(); } } + + private datadog.context.Context getContext( + ExecutionAttributes executionAttributes, String queueUrl) { + AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(queueUrl)); + return span.with(dsmContext); + } + + private LinkedHashMap getTags(String queueUrl) { + LinkedHashMap sortedTags = new LinkedHashMap<>(); + sortedTags.put(DIRECTION_TAG, DIRECTION_OUT); + sortedTags.put(TOPIC_TAG, urlFileName(queueUrl)); + sortedTags.put(TYPE_TAG, "sqs"); + return sortedTags; + } } 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 da06efdd80d..be1caba302d 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 @@ -3,8 +3,8 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.commonshttpclient.CommonsHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.commonshttpclient.CommonsHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.commonshttpclient.HttpHeadersInjectAdapter.SETTER; @@ -16,10 +16,10 @@ import datadog.appsec.api.blocking.BlockingException; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import net.bytebuddy.asm.Advice; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; @@ -69,10 +69,8 @@ public static AgentScope methodEnter(@Advice.Argument(1) final HttpMethod httpMe DECORATE.afterStart(span); DECORATE.onRequest(span, httpMethod); - defaultPropagator().inject(span, httpMethod, SETTER); - propagate() - .injectPathwayContext( - span, httpMethod, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), httpMethod, SETTER); return scope; } catch (BlockingException e) { diff --git a/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java b/dd-java-agent/instrumentation/google-http-client/src/main/java/datadog/trace/instrumentation/googlehttpclient/GoogleHttpClientDecorator.java index f0c084ea137..931924a9637 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,11 +1,11 @@ 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; import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpResponse; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.URIUtils; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; @@ -38,9 +38,8 @@ protected URI url(final HttpRequest httpRequest) throws URISyntaxException { public AgentSpan prepareSpan(AgentSpan span, HttpRequest request) { DECORATE.afterStart(span); DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PublisherInstrumentation.java index be2f188796b..87f8413d80b 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 @@ -3,7 +3,6 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; @@ -23,6 +22,7 @@ import datadog.trace.agent.tooling.ExcludeFilterProvider; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter; @@ -81,8 +81,8 @@ public static AgentScope before( sortedTags.put(TYPE_TAG, "google-pubsub"); PubsubMessage.Builder builder = msg.toBuilder(); - defaultPropagator().inject(span, builder, SETTER); - propagate().injectPathwayContext(span, builder, SETTER, sortedTags); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(sortedTags); + defaultPropagator().inject(span.with(dsmContext), builder, SETTER); msg = builder.build(); return activateSpan(span); } diff --git a/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java b/dd-java-agent/instrumentation/grizzly-client-1.9/src/main/java/datadog/trace/instrumentation/grizzly/client/AsyncHttpClientInstrumentation.java index 6900f77797c..e21ca17dc43 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 @@ -3,8 +3,8 @@ 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; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.grizzly.client.ClientDecorator.DECORATE; import static datadog.trace.instrumentation.grizzly.client.ClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.grizzly.client.InjectAdapter.SETTER; @@ -17,8 +17,8 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import java.util.Collections; import net.bytebuddy.asm.Advice; @@ -69,10 +69,8 @@ public static void onEnter( AgentSpan span = startSpan(HTTP_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext( - span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); handler = new AsyncHandlerAdapter<>(span, parentSpan, handler); } } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java index decfe0f1f85..229064cd30b 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java @@ -3,7 +3,6 @@ import static datadog.context.propagation.Propagators.defaultPropagator; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.instrumentation.grpc.client.GrpcClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.grpc.client.GrpcClientDecorator.DECORATE; import static datadog.trace.instrumentation.grpc.client.GrpcInjectAdapter.SETTER; @@ -14,6 +13,7 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -93,8 +93,8 @@ public static AgentScope before( @Advice.Local("$$ddSpan") AgentSpan span) { span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { - defaultPropagator().inject(span, headers, SETTER); - propagate().injectPathwayContext(span, headers, SETTER, CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), headers, SETTER); return activateSpan(span); } return null; diff --git a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java index d54025f4537..9d5dd1fc9d4 100644 --- a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java +++ b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java @@ -3,7 +3,7 @@ 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; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.bootstrap.instrumentation.httpurlconnection.HeadersInjectAdapter.SETTER; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -14,11 +14,11 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import datadog.trace.bootstrap.instrumentation.httpurlconnection.HttpUrlState; import java.net.HttpURLConnection; import java.util.Map; @@ -86,10 +86,8 @@ public static HttpUrlState methodEnter( if (!state.hasSpan() && !state.isFinished()) { final AgentSpan span = state.start(thiz); if (!connected) { - defaultPropagator().inject(span, thiz, SETTER); - propagate() - .injectPathwayContext( - span, thiz, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), thiz, SETTER); } } return state; diff --git a/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java b/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java index 2bed5ea86dd..16e8630f7ec 100644 --- a/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java +++ b/dd-java-agent/instrumentation/java-http-client/src/main/java11/datadog/trace/instrumentation/httpclient/HeadersAdvice.java @@ -2,12 +2,12 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.httpclient.HttpHeadersInjectAdapter.KEEP; import static datadog.trace.instrumentation.httpclient.HttpHeadersInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import java.net.http.HttpHeaders; import java.util.HashMap; import java.util.List; @@ -19,10 +19,8 @@ public class HeadersAdvice { public static void methodExit(@Advice.Return(readOnly = false) HttpHeaders headers) { final Map> headerMap = new HashMap<>(headers.map()); final AgentSpan span = activeSpan(); - defaultPropagator().inject(span, headerMap, SETTER); - propagate() - .injectPathwayContext( - span, headerMap, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), headerMap, SETTER); headers = HttpHeaders.of(headerMap, KEEP); } } diff --git a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index deeb2e18328..b01be762333 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 @@ -5,8 +5,8 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.jaxrs.v1.InjectAdapter.SETTER; import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; @@ -20,9 +20,9 @@ import com.sun.jersey.api.client.ClientResponse; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -76,10 +76,8 @@ public static AgentScope onEnter( DECORATE.onRequest(span, request); request.getProperties().put(DD_SPAN_ATTRIBUTE, span); - defaultPropagator().inject(span, request.getHeaders(), SETTER); - propagate() - .injectPathwayContext( - span, request.getHeaders(), SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request.getHeaders(), SETTER); return activateSpan(span); } return null; diff --git a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java index 526671beedd..9e7963bf67d 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 @@ -2,15 +2,15 @@ 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; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.jaxrs.InjectAdapter.SETTER; import static datadog.trace.instrumentation.jaxrs.JaxRsClientDecorator.DECORATE; import static datadog.trace.instrumentation.jaxrs.JaxRsClientDecorator.JAX_RS_CLIENT_CALL; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import javax.annotation.Priority; import javax.ws.rs.Priorities; import javax.ws.rs.client.ClientRequestContext; @@ -24,18 +24,13 @@ public class ClientTracingFilter implements ClientRequestFilter, ClientResponseF @Override public void filter(final ClientRequestContext requestContext) { - final AgentSpan span = startSpan(JAX_RS_CLIENT_CALL); + final AgentSpan span = startSpan("jax-rs", JAX_RS_CLIENT_CALL); try (final AgentScope scope = activateSpan(span)) { DECORATE.afterStart(span); DECORATE.onRequest(span, requestContext); - defaultPropagator().inject(span, requestContext.getHeaders(), SETTER); - propagate() - .injectPathwayContext( - span, - requestContext.getHeaders(), - SETTER, - HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), requestContext.getHeaders(), SETTER); requestContext.setProperty(SPAN_PROPERTY_NAME, span); } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-10.0/src/main/java11/datadog/trace/instrumentation/jetty_client10/SendAdvice.java index 47c9137b8fc..58c64511ee9 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,15 +1,15 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.jetty_client.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.jetty_client10.JettyClientDecorator.DECORATE; import static datadog.trace.instrumentation.jetty_client10.JettyClientDecorator.HTTP_REQUEST; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import java.util.List; import net.bytebuddy.asm.Advice; import org.eclipse.jetty.client.api.Request; @@ -20,15 +20,14 @@ public class SendAdvice { public static AgentSpan methodEnter( @Advice.Argument(0) Request request, @Advice.Argument(1) List responseListeners) { - AgentSpan span = startSpan(HTTP_REQUEST); + AgentSpan span = startSpan("jetty-client", HTTP_REQUEST); InstrumentationContext.get(Request.class, AgentSpan.class).put(request, span); // make sure the span is finished before onComplete callbacks execute responseListeners.add(0, new SpanFinishingCompleteListener(span)); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java index 8efd2e309d5..5575808b567 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 @@ -2,14 +2,15 @@ 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; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.jetty_client12.HeadersInjectAdapter.SETTER; +import static datadog.trace.instrumentation.jetty_client12.JettyClientDecorator.HTTP_REQUEST; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import net.bytebuddy.asm.Advice; import org.eclipse.jetty.client.Request; import org.eclipse.jetty.client.transport.HttpRequest; @@ -17,13 +18,12 @@ public class SendAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope methodEnter(@Advice.This final HttpRequest request) { - AgentSpan span = startSpan(JettyClientDecorator.HTTP_REQUEST); + AgentSpan span = startSpan("jetty-client", HTTP_REQUEST); InstrumentationContext.get(Request.class, AgentSpan.class).put(request, span); JettyClientDecorator.DECORATE.afterStart(span); JettyClientDecorator.DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); return activateSpan(span); } diff --git a/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java b/dd-java-agent/instrumentation/jetty-client/jetty-client-9.1/src/main/java/datadog/trace/instrumentation/jetty_client91/JettyClientInstrumentation.java index 94445e169b1..e6328faefcc 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 @@ -3,8 +3,8 @@ 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; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE; import static datadog.trace.instrumentation.jetty_client.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.jetty_client91.JettyClientDecorator.DECORATE; @@ -18,9 +18,9 @@ import datadog.trace.agent.tooling.ExcludeFilterProvider; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter; import java.util.Collection; import java.util.List; @@ -86,16 +86,14 @@ public static class SendAdvice { public static AgentSpan methodEnter( @Advice.Argument(0) Request request, @Advice.Argument(1) List responseListeners) { - AgentSpan span = startSpan(HTTP_REQUEST); + AgentSpan span = startSpan("jetty-client", HTTP_REQUEST); InstrumentationContext.get(Request.class, AgentSpan.class).put(request, span); // make sure the span is finished before onComplete callbacks execute responseListeners.add(0, new SpanFinishingCompleteListener(span)); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext( - span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); return span; } diff --git a/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/client/HttpClientRequestTracingHandler.java index 6fae33f91ef..db47fba6bbd 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 @@ -3,17 +3,17 @@ 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; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.netty38.client.NettyHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.netty38.client.NettyHttpClientDecorator.DECORATE_SECURE; import static datadog.trace.instrumentation.netty38.client.NettyHttpClientDecorator.NETTY_CLIENT_REQUEST; import static datadog.trace.instrumentation.netty38.client.NettyResponseInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import datadog.trace.instrumentation.netty38.ChannelTraceContext; import java.net.InetSocketAddress; import java.net.SocketAddress; @@ -56,7 +56,7 @@ public void writeRequested(final ChannelHandlerContext ctx, final MessageEvent m boolean isSecure = ctx.getPipeline().get("sslHandler") != null; NettyHttpClientDecorator decorate = isSecure ? DECORATE_SECURE : DECORATE; - final AgentSpan span = startSpan(NETTY_CLIENT_REQUEST); + final AgentSpan span = startSpan("netty", NETTY_CLIENT_REQUEST); try (final AgentScope scope = activateSpan(span)) { decorate.afterStart(span); decorate.onRequest(span, request); @@ -66,10 +66,8 @@ public void writeRequested(final ChannelHandlerContext ctx, final MessageEvent m decorate.onPeerConnection(span, (InetSocketAddress) socketAddress); } - defaultPropagator().inject(span, request.headers(), SETTER); - propagate() - .injectPathwayContext( - span, request.headers(), SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); channelTraceContext.setClientSpan(span); diff --git a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/client/HttpClientRequestTracingHandler.java index a6649163db1..dfcbcb27ec4 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 @@ -3,8 +3,8 @@ 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; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.netty40.AttributeKeys.CLIENT_PARENT_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty40.AttributeKeys.CONNECT_PARENT_CONTINUATION_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty40.AttributeKeys.SPAN_ATTRIBUTE_KEY; @@ -14,9 +14,9 @@ import static datadog.trace.instrumentation.netty40.client.NettyResponseInjectAdapter.SETTER; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; @@ -77,7 +77,7 @@ public void write(final ChannelHandlerContext ctx, final Object msg, final Chann boolean isSecure = SSL_HANDLER != null && ctx.pipeline().get(SSL_HANDLER) != null; NettyHttpClientDecorator decorate = isSecure ? DECORATE_SECURE : DECORATE; - final AgentSpan span = startSpan(NETTY_CLIENT_REQUEST); + final AgentSpan span = startSpan("netty", NETTY_CLIENT_REQUEST); try (final AgentScope scope = activateSpan(span)) { decorate.afterStart(span); decorate.onRequest(span, request); @@ -89,10 +89,8 @@ public void write(final ChannelHandlerContext ctx, final Object msg, final Chann // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { - defaultPropagator().inject(span, request.headers(), SETTER); - propagate() - .injectPathwayContext( - span, request.headers(), SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); } ctx.channel().attr(SPAN_ATTRIBUTE_KEY).set(span); diff --git a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java index b0212d60cee..3672e678054 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 @@ -3,8 +3,8 @@ 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; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.netty41.AttributeKeys.CLIENT_PARENT_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty41.AttributeKeys.CONNECT_PARENT_CONTINUATION_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty41.AttributeKeys.SPAN_ATTRIBUTE_KEY; @@ -14,9 +14,9 @@ import static datadog.trace.instrumentation.netty41.client.NettyResponseInjectAdapter.SETTER; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; @@ -78,7 +78,7 @@ public void write(final ChannelHandlerContext ctx, final Object msg, final Chann boolean isSecure = SSL_HANDLER != null && ctx.pipeline().get(SSL_HANDLER) != null; NettyHttpClientDecorator decorate = isSecure ? DECORATE_SECURE : DECORATE; - final AgentSpan span = startSpan(NETTY_CLIENT_REQUEST); + final AgentSpan span = startSpan("netty", NETTY_CLIENT_REQUEST); try (final AgentScope scope = activateSpan(span)) { decorate.afterStart(span); decorate.onRequest(span, request); @@ -90,10 +90,8 @@ public void write(final ChannelHandlerContext ctx, final Object msg, final Chann // AWS calls are often signed, so we can't add headers without breaking the signature. if (!awsClientCall) { - defaultPropagator().inject(span, request.headers(), SETTER); - propagate() - .injectPathwayContext( - span, request.headers(), SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request.headers(), SETTER); } ctx.channel().attr(SPAN_ATTRIBUTE_KEY).set(span); diff --git a/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-2/src/main/java/datadog/trace/instrumentation/okhttp2/TracingInterceptor.java index bde08ea6005..c68cdf00fe4 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 @@ -2,8 +2,8 @@ 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; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.okhttp2.OkHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.okhttp2.OkHttpClientDecorator.OKHTTP_REQUEST; import static datadog.trace.instrumentation.okhttp2.RequestBuilderInjectAdapter.SETTER; @@ -11,15 +11,15 @@ import com.squareup.okhttp.Interceptor; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import java.io.IOException; public class TracingInterceptor implements Interceptor { @Override public Response intercept(final Chain chain) throws IOException { - final AgentSpan span = startSpan(OKHTTP_REQUEST); + final AgentSpan span = startSpan("okhttp", OKHTTP_REQUEST); try (final AgentScope scope = activateSpan(span)) { DECORATE.afterStart(span); @@ -27,10 +27,8 @@ public Response intercept(final Chain chain) throws IOException { DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); - defaultPropagator().inject(span, requestBuilder, SETTER); - propagate() - .injectPathwayContext( - span, requestBuilder, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), requestBuilder, SETTER); final Response response; try { diff --git a/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java b/dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java index be9043bf38c..fa9b076cae8 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 @@ -2,15 +2,15 @@ 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; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.okhttp3.OkHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.okhttp3.OkHttpClientDecorator.OKHTTP_REQUEST; import static datadog.trace.instrumentation.okhttp3.RequestBuilderInjectAdapter.SETTER; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import java.io.IOException; import okhttp3.Interceptor; import okhttp3.Request; @@ -23,17 +23,15 @@ public Response intercept(final Chain chain) throws IOException { return chain.proceed(chain.request()); } - final AgentSpan span = startSpan(OKHTTP_REQUEST); + final AgentSpan span = startSpan("okhttp", OKHTTP_REQUEST); try (final AgentScope scope = activateSpan(span)) { DECORATE.afterStart(span); DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); - defaultPropagator().inject(span, requestBuilder, SETTER); - propagate() - .injectPathwayContext( - span, requestBuilder, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), requestBuilder, SETTER); final Response response; try { diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java index 9bdb72960e8..7e22ecd660d 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 @@ -3,8 +3,8 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientDecorator.PEKKO_CLIENT_REQUEST; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientHelpers.OnCompleteHandler; @@ -14,9 +14,9 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import net.bytebuddy.asm.Advice; import org.apache.pekko.http.scaladsl.HttpExt; import org.apache.pekko.http.scaladsl.model.HttpRequest; @@ -75,15 +75,13 @@ public static AgentScope methodEnter( return null; } - final AgentSpan span = startSpan(PEKKO_CLIENT_REQUEST); + final AgentSpan span = startSpan("pekko-http", PEKKO_CLIENT_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); if (request != null) { - defaultPropagator().inject(span, request, headers); - propagate() - .injectPathwayContext( - span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, headers); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); } diff --git a/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-1/src/main/java/datadog/trace/instrumentation/playws1/PlayWSClientInstrumentation.java index c802ac71f70..556aa762cc6 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,16 +1,16 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.DECORATE; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import datadog.trace.instrumentation.playws.BasePlayWSClientInstrumentation; import net.bytebuddy.asm.Advice; import play.shaded.ahc.org.asynchttpclient.AsyncHandler; @@ -26,14 +26,12 @@ public static AgentSpan methodEnter( @Advice.Argument(0) final Request request, @Advice.Argument(value = 1, readOnly = false) AsyncHandler asyncHandler) { - final AgentSpan span = startSpan(PLAY_WS_REQUEST); + final AgentSpan span = startSpan("play-ws", PLAY_WS_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext( - span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-2.1/src/main/java/datadog/trace/instrumentation/playws21/PlayWSClientInstrumentation.java index c174f730563..666b01c4bf4 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,16 +1,16 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.DECORATE; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import datadog.trace.instrumentation.playws.BasePlayWSClientInstrumentation; import net.bytebuddy.asm.Advice; import play.shaded.ahc.org.asynchttpclient.AsyncHandler; @@ -26,14 +26,12 @@ public static AgentSpan methodEnter( @Advice.Argument(0) final Request request, @Advice.Argument(value = 1, readOnly = false) AsyncHandler asyncHandler) { - final AgentSpan span = startSpan(PLAY_WS_REQUEST); + final AgentSpan span = startSpan("play-ws", PLAY_WS_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext( - span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws-2/src/main/java/datadog/trace/instrumentation/playws2/PlayWSClientInstrumentation.java index 48a9c23fadf..668e7e1a47a 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,16 +1,16 @@ 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.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.instrumentation.playws.HeadersInjectAdapter.SETTER; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.DECORATE; import static datadog.trace.instrumentation.playws.PlayWSClientDecorator.PLAY_WS_REQUEST; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import datadog.trace.instrumentation.playws.BasePlayWSClientInstrumentation; import net.bytebuddy.asm.Advice; import play.shaded.ahc.org.asynchttpclient.AsyncHandler; @@ -26,14 +26,12 @@ public static AgentSpan methodEnter( @Advice.Argument(0) final Request request, @Advice.Argument(value = 1, readOnly = false) AsyncHandler asyncHandler) { - final AgentSpan span = startSpan(PLAY_WS_REQUEST); + final AgentSpan span = startSpan("play-ws", PLAY_WS_REQUEST); DECORATE.afterStart(span); DECORATE.onRequest(span, request); - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext( - span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); if (asyncHandler instanceof StreamedAsyncHandler) { asyncHandler = new StreamedAsyncHandlerWrapper((StreamedAsyncHandler) asyncHandler, span); diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java index 4ac4aeb1b57..1c762039653 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 @@ -8,7 +8,6 @@ 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.noopSpan; -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_OUT; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; @@ -41,6 +40,7 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -190,14 +190,14 @@ public static AgentScope setResourceNameAddHeaders( if (TIME_IN_QUEUE_ENABLED) { RabbitDecorator.injectTimeInQueueStart(headers); } - defaultPropagator().inject(span, headers, SETTER); LinkedHashMap sortedTags = new LinkedHashMap<>(); sortedTags.put(DIRECTION_TAG, DIRECTION_OUT); sortedTags.put(EXCHANGE_TAG, exchange); sortedTags.put( - HAS_ROUTING_KEY_TAG, routingKey == null || routingKey.equals("") ? "false" : "true"); + HAS_ROUTING_KEY_TAG, routingKey == null || routingKey.isEmpty() ? "false" : "true"); sortedTags.put(TYPE_TAG, "rabbitmq"); - propagate().injectPathwayContext(span, headers, SETTER, sortedTags); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(sortedTags); + defaultPropagator().inject(span.with(dsmContext), headers, SETTER); props = new AMQP.BasicProperties( props.getContentType(), diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java index 0e05beb9743..159eb7bb0a0 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 @@ -6,10 +6,10 @@ 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.activeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.SERVLET_CONTEXT; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.SERVLET_PATH; +import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.servlet.ServletRequestSetter.SETTER; import static datadog.trace.instrumentation.servlet.SpanNameCache.SERVLET_PREFIX; @@ -25,12 +25,12 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; -import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.ServletRequest; @@ -111,7 +111,7 @@ public static AgentScope start( } final AgentSpan span = - startSpan(SPAN_NAME_CACHE.computeIfAbsent(method, SERVLET_PREFIX), parent); + startSpan("servlet", SPAN_NAME_CACHE.computeIfAbsent(method, SERVLET_PREFIX), parent); DECORATE.afterStart(span); span.setTag(SERVLET_CONTEXT, request.getAttribute(DD_CONTEXT_PATH_ATTRIBUTE)); span.setTag(SERVLET_PATH, request.getAttribute(DD_SERVLET_PATH_ATTRIBUTE)); @@ -122,10 +122,8 @@ public static AgentScope start( span.setSpanType(InternalSpanTypes.HTTP_SERVER); // In case we lose context, inject trace into to the request. - defaultPropagator().inject(span, request, SETTER); - propagate() - .injectPathwayContext( - span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS); + DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS); + defaultPropagator().inject(span.with(dsmContext), request, SETTER); // temporarily replace from request to avoid spring resource name bubbling up: requestSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); From e8cb4afad09327420b4bf0a6609bea99f89c678c Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Mon, 3 Feb 2025 10:39:24 +0100 Subject: [PATCH 3/7] feat(dsm): Migrate DSM injection call to propagator API 2/3 --- .../kafka_clients/TracingIterator.java | 11 ++++++++--- .../kafka_clients38/TracingIterator.java | 11 ++++++++--- .../KafkaStreamTaskInstrumentation.java | 17 +++++++++++------ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java index 67c89158442..e7a35eccc9a 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java @@ -1,5 +1,7 @@ package datadog.trace.instrumentation.kafka_clients; +import static datadog.trace.api.datastreams.DataStreamsContext.fromKafka; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -19,7 +21,10 @@ import static datadog.trace.instrumentation.kafka_common.Utils.computePayloadSizeBytes; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import datadog.context.propagation.Propagator; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -116,9 +121,9 @@ protected void startNewRecordSpan(ConsumerRecord val) { // since the data received from the source may leave the topology on // some other instance of the application, breaking the context propagation // for DSM users - propagate() - .injectPathwayContext( - span, val.headers(), SETTER, sortedTags, val.timestamp(), payloadSize); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + DataStreamsContext dsmContext = fromKafka(sortedTags, val.timestamp(), payloadSize); + dsmPropagator.inject(span.with(dsmContext), val.headers(), SETTER); } } } else { diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java index ea154f61d2b..942cac3e990 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java @@ -1,5 +1,7 @@ package datadog.trace.instrumentation.kafka_clients38; +import static datadog.trace.api.datastreams.DataStreamsContext.fromKafka; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -14,7 +16,10 @@ import static datadog.trace.instrumentation.kafka_clients38.TextMapInjectAdapter.SETTER; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import datadog.context.propagation.Propagator; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -116,9 +121,9 @@ protected void startNewRecordSpan(ConsumerRecord val) { // since the data received from the source may leave the topology on // some other instance of the application, breaking the context propagation // for DSM users - propagate() - .injectPathwayContext( - span, val.headers(), SETTER, sortedTags, val.timestamp(), payloadSize); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + DataStreamsContext dsmContext = fromKafka(sortedTags, val.timestamp(), payloadSize); + dsmPropagator.inject(span.with(dsmContext), val.headers(), SETTER); } } } else { diff --git a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java index a1307051605..51c663e9b57 100644 --- a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java @@ -1,6 +1,8 @@ package datadog.trace.instrumentation.kafka_streams; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static datadog.trace.api.datastreams.DataStreamsContext.fromKafka; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; 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,9 +31,12 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.propagation.Propagator; +import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -263,9 +268,9 @@ public static void start( .setCheckpoint(span, sortedTags, record.timestamp, payloadSize); } else { if (STREAMING_CONTEXT.isSourceTopic(record.topic())) { - propagate() - .injectPathwayContext( - span, record, SR_SETTER, sortedTags, record.timestamp, payloadSize); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + DataStreamsContext dsmContext = fromKafka(sortedTags, record.timestamp, payloadSize); + dsmPropagator.inject(span.with(dsmContext), record, SR_SETTER); } } } else { @@ -345,9 +350,9 @@ public static void start( .setCheckpoint(span, sortedTags, record.timestamp(), payloadSize); } else { if (STREAMING_CONTEXT.isSourceTopic(record.topic())) { - propagate() - .injectPathwayContext( - span, record, PR_SETTER, sortedTags, record.timestamp(), payloadSize); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + DataStreamsContext dsmContext = fromKafka(sortedTags, record.timestamp(), payloadSize); + dsmPropagator.inject(span.with(dsmContext), record, PR_SETTER); } } } else { From 3df0d511bcff30f7729b748a61356e146993d66d Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Mon, 3 Feb 2025 10:42:00 +0100 Subject: [PATCH 4/7] feat(dsm): Migrate DSM injection call to propagator API 3/3 --- .../KafkaProducerInstrumentation.java | 16 +++++++++++----- .../kafka_clients38/ProducerAdvice.java | 16 +++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) 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 691b47d4842..8bb69ce3a5b 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 @@ -3,9 +3,10 @@ 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.api.datastreams.DataStreamsContext.fromTagsWithoutCheckpoint; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; 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; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; @@ -24,9 +25,12 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.propagation.Propagator; +import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -155,8 +159,9 @@ public static AgentScope onEnter( // inject the context in the headers, but delay sending the stats until we know the // message size. // The stats are saved in the pathway context and sent in PayloadSizeAdvice. - propagate() - .injectPathwayContextWithoutSendingStats(span, record.headers(), setter, sortedTags); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); + dsmPropagator.inject(span.with(dsmContext), record.headers(), setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } catch (final IllegalStateException e) { @@ -173,8 +178,9 @@ record = defaultPropagator().inject(span, record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { - propagate() - .injectPathwayContextWithoutSendingStats(span, record.headers(), setter, sortedTags); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); + dsmPropagator.inject(span.with(dsmContext), record.headers(), setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java index bb6dc038669..a2e0feff854 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,9 +1,10 @@ package datadog.trace.instrumentation.kafka_clients38; import static datadog.context.propagation.Propagators.defaultPropagator; +import static datadog.trace.api.datastreams.DataStreamsContext.fromTagsWithoutCheckpoint; +import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; 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; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; @@ -15,7 +16,10 @@ import static datadog.trace.instrumentation.kafka_clients38.KafkaDecorator.TIME_IN_QUEUE_ENABLED; import static datadog.trace.instrumentation.kafka_common.StreamingContext.STREAMING_CONTEXT; +import datadog.context.propagation.Propagator; +import datadog.context.propagation.Propagators; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -79,8 +83,9 @@ public static AgentScope onEnter( // inject the context in the headers, but delay sending the stats until we know the // message size. // The stats are saved in the pathway context and sent in PayloadSizeAdvice. - propagate() - .injectPathwayContextWithoutSendingStats(span, record.headers(), setter, sortedTags); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); + dsmPropagator.inject(span.with(dsmContext), record.headers(), setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } catch (final IllegalStateException e) { @@ -97,8 +102,9 @@ record = defaultPropagator().inject(span, record.headers(), setter); if (STREAMING_CONTEXT.isDisabledForTopic(record.topic()) || STREAMING_CONTEXT.isSinkTopic(record.topic())) { - propagate() - .injectPathwayContextWithoutSendingStats(span, record.headers(), setter, sortedTags); + Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); + DataStreamsContext dsmContext = fromTagsWithoutCheckpoint(sortedTags); + dsmPropagator.inject(span.with(dsmContext), record.headers(), setter); AvroSchemaExtractor.tryExtractProducer(record, span); } } From a80a815d09cb681403102834d6d4c25084f9fdd4 Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Mon, 3 Feb 2025 15:33:48 +0100 Subject: [PATCH 5/7] feat(dsm): Refactor DSM API into its own package --- .../shim/trace/OtelExtractedContext.java | 2 +- .../instrumentation/avro/SchemaExtractor.java | 2 +- .../eventbridge/EventBridgeInterceptor.java | 2 +- .../aws/v0/TracingRequestHandler.java | 4 +- .../aws/v2/AwsSdkClientDecorator.java | 4 +- .../aws/v1/sqs/MessageAttributeInjector.java | 2 +- .../aws/v1/sqs/SqsInterceptor.java | 2 +- .../aws/v2/sqs/MessageAttributeInjector.java | 2 +- .../aws/v2/sqs/SqsInterceptor.java | 2 +- .../kafka_clients/AvroSchemaExtractor.java | 2 +- .../KafkaProducerInstrumentation.java | 2 +- .../kafka_clients38/AvroSchemaExtractor.java | 2 +- .../kafka_clients38/PayloadSizeAdvice.java | 2 +- .../src/test/groovy/TypeConverterTest.groovy | 2 +- .../src/test/groovy/TypeConverterTest.groovy | 2 +- .../src/test/groovy/TypeConverterTest.groovy | 1 + .../protobuf_java/SchemaExtractor.java | 2 +- .../spark/DatabricksParentContext.java | 2 +- .../spark/OpenlineageParentContext.java | 2 +- .../trace/agent/test/AgentTestRunner.groovy | 2 +- .../writer/ddagent/TraceMapperBenchmark.java | 2 +- .../datadog/trace/core/PendingTraceWrite.java | 2 +- .../datadog/trace/core/TracerMapperMap.java | 2 +- .../java/datadog/trace/core/CoreTracer.java | 4 +- .../datadog/trace/core/DDSpanContext.java | 2 +- .../DataStreamContextInjector.java | 4 +- .../datastreams/DataStreamsMonitoring.java | 4 +- .../datastreams/DataStreamsPropagator.java | 4 +- .../DefaultDataStreamsMonitoring.java | 12 +- .../datastreams/DefaultPathwayContext.java | 4 +- .../trace/core/datastreams/StatsBucket.java | 4 +- .../writer/DDAgentWriterCombinedTest.groovy | 2 +- .../common/writer/DDAgentWriterTest.groovy | 2 +- .../writer/DDIntakeWriterCombinedTest.groovy | 4 +- .../common/writer/DDIntakeWriterTest.groovy | 4 +- .../writer/PayloadDispatcherImplTest.groovy | 2 +- .../trace/core/CoreSpanBuilderTest.groovy | 2 +- .../trace/core/DDSpanSerializationTest.groovy | 2 +- .../datadog/trace/core/DDSpanTest.groovy | 2 +- .../trace/core/PendingTraceBufferTest.groovy | 2 +- .../trace/core/PendingTraceTest.groovy | 4 +- .../datastreams/DataStreamsWritingTest.groovy | 2 +- .../DefaultDataStreamsMonitoringTest.groovy | 2 +- .../DefaultPathwayContextTest.groovy | 4 +- .../propagation/B3HttpInjectorTest.groovy | 2 +- .../DatadogHttpInjectorTest.groovy | 2 +- .../HaystackHttpInjectorTest.groovy | 2 +- .../core/propagation/HttpInjectorTest.groovy | 2 +- .../propagation/W3CHttpInjectorTest.groovy | 2 +- .../propagation/XRayHttpInjectorTest.groovy | 2 +- .../core/test/DDCoreSpecification.groovy | 4 +- .../groovy/DataStreamsIntegrationTest.groovy | 2 +- .../opentracing/TypeConverterTest.groovy | 1 + internal-api/build.gradle | 11 +- .../AgentDataStreamsMonitoring.java | 5 +- .../api => api/datastreams}/Backlog.java | 2 +- .../trace/api/datastreams/InboxItem.java | 3 + .../NoopDataStreamsMonitoring.java | 59 ++++++++++ .../api/datastreams/NoopPathwayContext.java | 48 ++++++++ .../datastreams}/PathwayContext.java | 2 +- .../api => api/datastreams}/StatsPoint.java | 2 +- .../instrumentation/api/AgentSpanContext.java | 1 + .../instrumentation/api/AgentTracer.java | 105 +----------------- .../instrumentation/api/InboxItem.java | 3 - .../instrumentation/api/NoopSpanContext.java | 4 +- .../instrumentation/api/TagContext.java | 1 + 66 files changed, 203 insertions(+), 183 deletions(-) rename internal-api/src/main/java/datadog/trace/{bootstrap/instrumentation/api => api/datastreams}/AgentDataStreamsMonitoring.java (90%) rename internal-api/src/main/java/datadog/trace/{bootstrap/instrumentation/api => api/datastreams}/Backlog.java (94%) create mode 100644 internal-api/src/main/java/datadog/trace/api/datastreams/InboxItem.java create mode 100644 internal-api/src/main/java/datadog/trace/api/datastreams/NoopDataStreamsMonitoring.java create mode 100644 internal-api/src/main/java/datadog/trace/api/datastreams/NoopPathwayContext.java rename internal-api/src/main/java/datadog/trace/{bootstrap/instrumentation/api => api/datastreams}/PathwayContext.java (94%) rename internal-api/src/main/java/datadog/trace/{bootstrap/instrumentation/api => api/datastreams}/StatsPoint.java (97%) delete mode 100644 internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/InboxItem.java diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelExtractedContext.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelExtractedContext.java index a00a0990751..7b3551919d8 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelExtractedContext.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelExtractedContext.java @@ -2,11 +2,11 @@ import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.sampling.PrioritySampling; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTraceCollector; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.context.Context; diff --git a/dd-java-agent/instrumentation/avro/src/main/java/datadog/trace/instrumentation/avro/SchemaExtractor.java b/dd-java-agent/instrumentation/avro/src/main/java/datadog/trace/instrumentation/avro/SchemaExtractor.java index d206ae6c7ca..e88bd37cef7 100644 --- a/dd-java-agent/instrumentation/avro/src/main/java/datadog/trace/instrumentation/avro/SchemaExtractor.java +++ b/dd-java-agent/instrumentation/avro/src/main/java/datadog/trace/instrumentation/avro/SchemaExtractor.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.avro; import datadog.trace.api.DDTags; -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.Schema; 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 1d9450ad175..a7ca3e02bb7 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 @@ -9,9 +9,9 @@ import static datadog.trace.instrumentation.aws.v2.eventbridge.TextMapInjectAdapter.SETTER; import datadog.trace.api.datastreams.DataStreamsContext; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.bootstrap.InstanceStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; 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 023a1b53085..463263a9ce0 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 @@ -18,11 +18,11 @@ import com.amazonaws.handlers.RequestHandler2; import datadog.context.propagation.Propagators; import datadog.trace.api.Config; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.bootstrap.ContextStore; -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; 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 ebd52e3e35f..d80bc2df4da 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 @@ -11,14 +11,14 @@ import datadog.trace.api.DDTags; import datadog.trace.api.cache.DDCache; import datadog.trace.api.cache.DDCaches; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.naming.SpanNaming; import datadog.trace.bootstrap.InstanceStore; -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.bootstrap.instrumentation.api.Tags; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java index a8d052c2b10..a522c961c34 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.aws.v1.sqs; -import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.DATADOG_KEY; +import static datadog.trace.api.datastreams.PathwayContext.DATADOG_KEY; import com.amazonaws.services.sqs.model.MessageAttributeValue; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java index 084c8cae2f3..4b2e431a6a6 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.aws.v1.sqs; +import static datadog.trace.api.datastreams.PathwayContext.DATADOG_KEY; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.DATADOG_KEY; import static datadog.trace.bootstrap.instrumentation.api.URIUtils.urlFileName; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; diff --git a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java index 1d57ad263a9..d92de8bebf4 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.aws.v2.sqs; -import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.DATADOG_KEY; +import static datadog.trace.api.datastreams.PathwayContext.DATADOG_KEY; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import java.util.Map; diff --git a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java index 41d8146eb02..bc5729e49c1 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.aws.v2.sqs; +import static datadog.trace.api.datastreams.PathwayContext.DATADOG_KEY; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; -import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.DATADOG_KEY; import static datadog.trace.bootstrap.instrumentation.api.URIUtils.urlFileName; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/AvroSchemaExtractor.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/AvroSchemaExtractor.java index 8e74e1757d4..5190ffe8446 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/AvroSchemaExtractor.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/AvroSchemaExtractor.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.kafka_clients; import datadog.trace.api.DDTags; -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.util.FNV64Hash; 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 8bb69ce3a5b..a85ee9ce95d 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 @@ -31,12 +31,12 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsContext; +import datadog.trace.api.datastreams.StatsPoint; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags; -import datadog.trace.bootstrap.instrumentation.api.StatsPoint; import java.util.LinkedHashMap; import java.util.Map; import net.bytebuddy.asm.Advice; diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/AvroSchemaExtractor.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/AvroSchemaExtractor.java index 6ca8bc81aa3..a0f6624a8f1 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/AvroSchemaExtractor.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/AvroSchemaExtractor.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.kafka_clients38; import datadog.trace.api.DDTags; -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.util.FNV64Hash; diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/PayloadSizeAdvice.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/PayloadSizeAdvice.java index 6192485a47e..8d0a8b6a7b0 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/PayloadSizeAdvice.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/PayloadSizeAdvice.java @@ -2,8 +2,8 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; +import datadog.trace.api.datastreams.StatsPoint; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import datadog.trace.bootstrap.instrumentation.api.StatsPoint; import net.bytebuddy.asm.Advice; public class PayloadSizeAdvice { diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/test/groovy/TypeConverterTest.groovy b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/test/groovy/TypeConverterTest.groovy index b5c93348fac..657d79cb67d 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/test/groovy/TypeConverterTest.groovy +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/test/groovy/TypeConverterTest.groovy @@ -2,7 +2,7 @@ import datadog.trace.agent.test.AgentTestRunner import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.ScopeSource import datadog.trace.core.DDSpan import datadog.trace.core.DDSpanContext diff --git a/dd-java-agent/instrumentation/opentracing/api-0.31/src/test/groovy/TypeConverterTest.groovy b/dd-java-agent/instrumentation/opentracing/api-0.31/src/test/groovy/TypeConverterTest.groovy index 694103be815..3728010d4ee 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.31/src/test/groovy/TypeConverterTest.groovy +++ b/dd-java-agent/instrumentation/opentracing/api-0.31/src/test/groovy/TypeConverterTest.groovy @@ -2,7 +2,7 @@ import datadog.trace.agent.test.AgentTestRunner import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.ScopeSource import datadog.trace.core.DDSpan import datadog.trace.core.DDSpanContext diff --git a/dd-java-agent/instrumentation/opentracing/api-0.32/src/test/groovy/TypeConverterTest.groovy b/dd-java-agent/instrumentation/opentracing/api-0.32/src/test/groovy/TypeConverterTest.groovy index 1e2f64b876c..99d5d5f5362 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.32/src/test/groovy/TypeConverterTest.groovy +++ b/dd-java-agent/instrumentation/opentracing/api-0.32/src/test/groovy/TypeConverterTest.groovy @@ -2,6 +2,7 @@ import datadog.trace.agent.test.AgentTestRunner import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.ScopeSource import datadog.trace.core.DDSpan diff --git a/dd-java-agent/instrumentation/protobuf/src/main/java/datadog/trace/instrumentation/protobuf_java/SchemaExtractor.java b/dd-java-agent/instrumentation/protobuf/src/main/java/datadog/trace/instrumentation/protobuf_java/SchemaExtractor.java index a4f9d56c64d..fb8317211a0 100644 --- a/dd-java-agent/instrumentation/protobuf/src/main/java/datadog/trace/instrumentation/protobuf_java/SchemaExtractor.java +++ b/dd-java-agent/instrumentation/protobuf/src/main/java/datadog/trace/instrumentation/protobuf_java/SchemaExtractor.java @@ -4,7 +4,7 @@ import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.Descriptors.FieldDescriptor; import datadog.trace.api.DDTags; -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.Schema; diff --git a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/DatabricksParentContext.java b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/DatabricksParentContext.java index ce072749228..5b8d51a5dc8 100644 --- a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/DatabricksParentContext.java +++ b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/DatabricksParentContext.java @@ -2,10 +2,10 @@ import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.sampling.PrioritySampling; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTraceCollector; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; diff --git a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/OpenlineageParentContext.java b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/OpenlineageParentContext.java index e4c2688f064..23b543211f1 100644 --- a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/OpenlineageParentContext.java +++ b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/OpenlineageParentContext.java @@ -2,11 +2,11 @@ import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.sampling.PrioritySampling; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTraceCollector; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.groovy index a7b2a2116f1..95836bec3fa 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.groovy @@ -37,11 +37,11 @@ import datadog.trace.api.gateway.RequestContext import datadog.trace.api.internal.TraceSegment import datadog.trace.api.sampling.SamplingRule import datadog.trace.api.time.SystemTimeSource +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring import datadog.trace.bootstrap.ActiveSubsystems import datadog.trace.bootstrap.CallDepthThreadLocalMap import datadog.trace.bootstrap.InstrumentationErrors import datadog.trace.bootstrap.debugger.DebuggerContext -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI import datadog.trace.common.metrics.EventListener diff --git a/dd-trace-core/src/jmh/java/datadog/trace/common/writer/ddagent/TraceMapperBenchmark.java b/dd-trace-core/src/jmh/java/datadog/trace/common/writer/ddagent/TraceMapperBenchmark.java index da5db833481..54192804b05 100644 --- a/dd-trace-core/src/jmh/java/datadog/trace/common/writer/ddagent/TraceMapperBenchmark.java +++ b/dd-trace-core/src/jmh/java/datadog/trace/common/writer/ddagent/TraceMapperBenchmark.java @@ -12,8 +12,8 @@ import datadog.communication.serialization.msgpack.MsgPackWriter; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.NoopPathwayContext; import datadog.trace.api.sampling.PrioritySampling; -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.core.CoreTracer; import datadog.trace.core.DDSpan; diff --git a/dd-trace-core/src/jmh/java/datadog/trace/core/PendingTraceWrite.java b/dd-trace-core/src/jmh/java/datadog/trace/core/PendingTraceWrite.java index 677b941ab63..b0a90c7bffb 100644 --- a/dd-trace-core/src/jmh/java/datadog/trace/core/PendingTraceWrite.java +++ b/dd-trace-core/src/jmh/java/datadog/trace/core/PendingTraceWrite.java @@ -2,8 +2,8 @@ import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.NoopPathwayContext; import datadog.trace.api.sampling.PrioritySampling; -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext; import java.util.Collections; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Level; diff --git a/dd-trace-core/src/jmh/java/datadog/trace/core/TracerMapperMap.java b/dd-trace-core/src/jmh/java/datadog/trace/core/TracerMapperMap.java index 50aa7409b82..73250424b2e 100644 --- a/dd-trace-core/src/jmh/java/datadog/trace/core/TracerMapperMap.java +++ b/dd-trace-core/src/jmh/java/datadog/trace/core/TracerMapperMap.java @@ -3,8 +3,8 @@ import datadog.communication.serialization.msgpack.MsgPackWriter; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.NoopPathwayContext; import datadog.trace.api.sampling.PrioritySampling; -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext; import datadog.trace.common.writer.LoggingWriter; import datadog.trace.common.writer.ddagent.TraceMapperV0_4; import datadog.trace.common.writer.ddagent.TraceMapperV0_5; 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 b9a3d5f07da..66bc499dd3c 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 @@ -34,6 +34,8 @@ import datadog.trace.api.StatsDClient; import datadog.trace.api.TraceConfig; import datadog.trace.api.config.GeneralConfig; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.experimental.DataStreamsCheckpointer; import datadog.trace.api.flare.TracerFlare; import datadog.trace.api.gateway.CallbackProvider; @@ -51,7 +53,6 @@ import datadog.trace.api.scopemanager.ScopeListener; import datadog.trace.api.time.SystemTimeSource; import datadog.trace.api.time.TimeSource; -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentHistogram; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentScope; @@ -60,7 +61,6 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpanLink; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.BlackHoleSpan; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration; import datadog.trace.bootstrap.instrumentation.api.ScopeSource; import datadog.trace.bootstrap.instrumentation.api.ScopeState; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java index bce7d8800f3..e6980e2b41d 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java @@ -10,6 +10,7 @@ import datadog.trace.api.cache.DDCache; import datadog.trace.api.cache.DDCaches; import datadog.trace.api.config.TracerConfig; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.gateway.BlockResponseFunction; import datadog.trace.api.gateway.RequestContext; import datadog.trace.api.gateway.RequestContextSlot; @@ -18,7 +19,6 @@ import datadog.trace.api.sampling.SamplingMechanism; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpanLink; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import datadog.trace.bootstrap.instrumentation.api.ProfilerContext; import datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextInjector.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextInjector.java index e7154f6d852..2994aa9518e 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextInjector.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextInjector.java @@ -1,11 +1,11 @@ package datadog.trace.core.datastreams; import static datadog.trace.api.DDTags.PATHWAY_HASH; -import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.PROPAGATION_KEY_BASE64; +import static datadog.trace.api.datastreams.PathwayContext.PROPAGATION_KEY_BASE64; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import java.io.IOException; import java.util.LinkedHashMap; import org.slf4j.Logger; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsMonitoring.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsMonitoring.java index 0571eff5f08..8f7082a4270 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsMonitoring.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsMonitoring.java @@ -1,11 +1,11 @@ package datadog.trace.core.datastreams; import datadog.context.propagation.Propagator; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.experimental.DataStreamsContextCarrier; -import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import datadog.trace.core.propagation.HttpCodec; public interface DataStreamsMonitoring extends AgentDataStreamsMonitoring, AutoCloseable { diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java index 28f42619601..bd0427ebe10 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java @@ -1,7 +1,7 @@ package datadog.trace.core.datastreams; import static datadog.trace.api.DDTags.PATHWAY_HASH; -import static datadog.trace.bootstrap.instrumentation.api.PathwayContext.PROPAGATION_KEY_BASE64; +import static datadog.trace.api.datastreams.PathwayContext.PROPAGATION_KEY_BASE64; import datadog.context.Context; import datadog.context.propagation.CarrierSetter; @@ -9,10 +9,10 @@ import datadog.context.propagation.Propagator; import datadog.trace.api.TraceConfig; import datadog.trace.api.datastreams.DataStreamsContext; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.time.TimeSource; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import datadog.trace.bootstrap.instrumentation.api.TagContext; import java.io.IOException; import java.util.function.Supplier; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java index 1a8f16f0e38..63fa65c950d 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java @@ -18,16 +18,16 @@ import datadog.trace.api.Config; import datadog.trace.api.TraceConfig; import datadog.trace.api.WellKnownTags; +import datadog.trace.api.datastreams.Backlog; +import datadog.trace.api.datastreams.InboxItem; +import datadog.trace.api.datastreams.NoopPathwayContext; +import datadog.trace.api.datastreams.PathwayContext; +import datadog.trace.api.datastreams.StatsPoint; import datadog.trace.api.experimental.DataStreamsContextCarrier; import datadog.trace.api.time.TimeSource; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import datadog.trace.bootstrap.instrumentation.api.Backlog; -import datadog.trace.bootstrap.instrumentation.api.InboxItem; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; import datadog.trace.bootstrap.instrumentation.api.Schema; import datadog.trace.bootstrap.instrumentation.api.SchemaIterator; -import datadog.trace.bootstrap.instrumentation.api.StatsPoint; import datadog.trace.common.metrics.EventListener; import datadog.trace.common.metrics.OkHttpSink; import datadog.trace.common.metrics.Sink; @@ -197,7 +197,7 @@ public PathwayContext newPathwayContext() { if (configSupportsDataStreams) { return new DefaultPathwayContext(timeSource, hashOfKnownTags, getThreadServiceName()); } else { - return AgentTracer.NoopPathwayContext.INSTANCE; + return NoopPathwayContext.INSTANCE; } } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java index b95a65926dc..7db93af2518 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java @@ -10,9 +10,9 @@ import datadog.context.propagation.CarrierVisitor; import datadog.trace.api.Config; import datadog.trace.api.WellKnownTags; +import datadog.trace.api.datastreams.PathwayContext; +import datadog.trace.api.datastreams.StatsPoint; import datadog.trace.api.time.TimeSource; -import datadog.trace.bootstrap.instrumentation.api.PathwayContext; -import datadog.trace.bootstrap.instrumentation.api.StatsPoint; import datadog.trace.util.FNV64Hash; import java.io.IOException; import java.util.ArrayList; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/StatsBucket.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/StatsBucket.java index 79f73df8876..fab6d57a312 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/StatsBucket.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/StatsBucket.java @@ -1,7 +1,7 @@ package datadog.trace.core.datastreams; -import datadog.trace.bootstrap.instrumentation.api.Backlog; -import datadog.trace.bootstrap.instrumentation.api.StatsPoint; +import datadog.trace.api.datastreams.Backlog; +import datadog.trace.api.datastreams.StatsPoint; import java.util.Collection; import java.util.HashMap; import java.util.List; diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterCombinedTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterCombinedTest.groovy index f62c7f842bc..1b3a94b42a1 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterCombinedTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterCombinedTest.groovy @@ -4,7 +4,7 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.StatsDClient import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ddagent.DDAgentApi import datadog.communication.ddagent.DDAgentFeaturesDiscovery import datadog.trace.common.writer.ddagent.TraceMapperV0_4 diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterTest.groovy index 71a7cb2cdc8..d67fd3dee5f 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterTest.groovy @@ -5,7 +5,7 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.StatsDClient import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ddagent.DDAgentApi import datadog.trace.common.writer.ddagent.DDAgentMapperDiscovery import datadog.trace.core.CoreTracer diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy index e47daa6919b..4d69de93014 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy @@ -10,7 +10,7 @@ import datadog.trace.api.StatsDClient import datadog.trace.api.civisibility.CiVisibilityWellKnownTags import datadog.trace.api.intake.TrackType import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ddintake.DDIntakeApi import datadog.trace.common.writer.ddintake.DDIntakeMapperDiscovery import datadog.trace.core.CoreTracer @@ -736,7 +736,7 @@ class DDIntakeWriterCombinedTest extends DDCoreSpecification { trace, null, null, - AgentTracer.NoopPathwayContext.INSTANCE, + NoopPathwayContext.INSTANCE, false, PropagationTags.factory().empty()) } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy index d8584086dac..190100635c3 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy @@ -6,7 +6,7 @@ import datadog.trace.api.DDTraceId import datadog.trace.api.StatsDClient import datadog.trace.api.intake.TrackType import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ddagent.DDAgentApi import datadog.trace.common.writer.ddagent.DDAgentMapperDiscovery import datadog.trace.core.CoreTracer @@ -207,7 +207,7 @@ class DDIntakeWriterTest extends DDCoreSpecification { trace, null, null, - AgentTracer.NoopPathwayContext.INSTANCE, + NoopPathwayContext.INSTANCE, false, PropagationTags.factory().empty()) return new DDSpan("test", 0, context, null) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/PayloadDispatcherImplTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/PayloadDispatcherImplTest.groovy index 2cc1ca0cddf..afb0982b102 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/PayloadDispatcherImplTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/PayloadDispatcherImplTest.groovy @@ -5,7 +5,7 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.StatsDClient import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ddagent.DDAgentApi import datadog.trace.common.writer.ddagent.DDAgentMapperDiscovery import datadog.trace.core.CoreTracer diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/CoreSpanBuilderTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/CoreSpanBuilderTest.groovy index d4a8457f553..28ceda7c1c4 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/CoreSpanBuilderTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/CoreSpanBuilderTest.groovy @@ -12,7 +12,7 @@ import datadog.trace.api.gateway.RequestContextSlot import datadog.trace.api.naming.SpanNaming import datadog.trace.api.sampling.PrioritySampling import datadog.trace.bootstrap.instrumentation.api.AgentScope -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.TagContext import datadog.trace.common.writer.ListWriter import datadog.trace.core.propagation.PropagationTags diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy index 97041d88650..555e8ebd747 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy @@ -6,7 +6,7 @@ import datadog.communication.serialization.msgpack.MsgPackWriter import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ListWriter import datadog.trace.common.writer.ddagent.TraceMapperV0_4 import datadog.trace.common.writer.ddagent.TraceMapperV0_5 diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy index 8385a42d543..a66042c50d9 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy @@ -6,7 +6,7 @@ import datadog.trace.api.DDTraceId import datadog.trace.api.gateway.RequestContextSlot import datadog.trace.api.sampling.PrioritySampling import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities import datadog.trace.bootstrap.instrumentation.api.TagContext import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy index 3b01f607a76..eec8bb3befd 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy @@ -7,7 +7,7 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.flare.TracerFlare import datadog.trace.api.time.SystemTimeSource -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.ScopeSource import datadog.trace.context.TraceScope import datadog.trace.core.monitor.HealthMetrics diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy index cefdafb1ed4..51b144f3c84 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy @@ -3,7 +3,7 @@ package datadog.trace.core import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling import datadog.trace.api.time.TimeSource -import datadog.trace.bootstrap.instrumentation.api.AgentTracer +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.core.monitor.HealthMetrics import datadog.trace.core.propagation.PropagationTags import spock.lang.Timeout @@ -41,7 +41,7 @@ class PendingTraceTest extends PendingTraceTestBase { trace, null, null, - AgentTracer.NoopPathwayContext.INSTANCE, + NoopPathwayContext.INSTANCE, false, PropagationTags.factory().empty()), null) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy index 6d163d0ac79..f3a435cec1e 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy @@ -7,7 +7,7 @@ import datadog.trace.api.Config import datadog.trace.api.TraceConfig import datadog.trace.api.WellKnownTags import datadog.trace.api.time.ControllableTimeSource -import datadog.trace.bootstrap.instrumentation.api.StatsPoint +import datadog.trace.api.datastreams.StatsPoint import datadog.trace.core.DDTraceCoreInfo import datadog.trace.core.test.DDCoreSpecification import okhttp3.HttpUrl diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultDataStreamsMonitoringTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultDataStreamsMonitoringTest.groovy index 36c4dc04287..dfdbb34f019 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultDataStreamsMonitoringTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultDataStreamsMonitoringTest.groovy @@ -7,7 +7,7 @@ import datadog.trace.api.WellKnownTags import datadog.trace.api.experimental.DataStreamsContextCarrier import datadog.trace.api.time.ControllableTimeSource import datadog.trace.bootstrap.instrumentation.api.AgentPropagation -import datadog.trace.bootstrap.instrumentation.api.StatsPoint +import datadog.trace.api.datastreams.StatsPoint import datadog.trace.common.metrics.EventListener import datadog.trace.common.metrics.Sink import datadog.trace.core.test.DDCoreSpecification diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultPathwayContextTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultPathwayContextTest.groovy index 3d69d7b2800..c50a5145c62 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultPathwayContextTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultPathwayContextTest.groovy @@ -7,8 +7,8 @@ import datadog.trace.api.TraceConfig import datadog.trace.api.WellKnownTags import datadog.trace.api.time.ControllableTimeSource import datadog.trace.bootstrap.instrumentation.api.AgentPropagation -import datadog.trace.bootstrap.instrumentation.api.PathwayContext -import datadog.trace.bootstrap.instrumentation.api.StatsPoint +import datadog.trace.api.datastreams.PathwayContext +import datadog.trace.api.datastreams.StatsPoint import datadog.trace.bootstrap.instrumentation.api.TagContext import datadog.trace.common.metrics.Sink import datadog.trace.core.propagation.ExtractedContext diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/B3HttpInjectorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/B3HttpInjectorTest.groovy index 33610e26ea1..71e67ce55dc 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/B3HttpInjectorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/B3HttpInjectorTest.groovy @@ -4,7 +4,7 @@ import datadog.trace.api.Config import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.DynamicConfig -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.core.CoreTracer import datadog.trace.test.util.StringUtils diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/DatadogHttpInjectorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/DatadogHttpInjectorTest.groovy index b7a6a604a76..a51a37fd929 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/DatadogHttpInjectorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/DatadogHttpInjectorTest.groovy @@ -4,7 +4,7 @@ import datadog.trace.api.DD128bTraceId import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.internal.util.LongStringUtils -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ListWriter import datadog.trace.core.DDSpanContext import datadog.trace.core.test.DDCoreSpecification diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HaystackHttpInjectorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HaystackHttpInjectorTest.groovy index c44c251e5ac..8c32e0a8c9b 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HaystackHttpInjectorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HaystackHttpInjectorTest.groovy @@ -5,7 +5,7 @@ import datadog.trace.api.DDTraceId import static datadog.trace.api.sampling.PrioritySampling.* import static datadog.trace.api.sampling.SamplingMechanism.* -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ListWriter import datadog.trace.core.DDSpanContext import datadog.trace.core.test.DDCoreSpecification diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HttpInjectorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HttpInjectorTest.groovy index 4e11dc6aedb..4274be2af55 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HttpInjectorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HttpInjectorTest.groovy @@ -9,7 +9,7 @@ import datadog.trace.test.util.StringUtils import static datadog.trace.api.TracePropagationStyle.HAYSTACK import static datadog.trace.api.TracePropagationStyle.TRACECONTEXT import static datadog.trace.api.sampling.PrioritySampling.* -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ListWriter import datadog.trace.core.DDSpanContext import datadog.trace.core.test.DDCoreSpecification diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/W3CHttpInjectorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/W3CHttpInjectorTest.groovy index 7aacfaa1b50..726399972ca 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/W3CHttpInjectorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/W3CHttpInjectorTest.groovy @@ -2,7 +2,7 @@ package datadog.trace.core.propagation import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.common.writer.ListWriter import datadog.trace.core.DDSpanContext import datadog.trace.core.test.DDCoreSpecification diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/XRayHttpInjectorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/XRayHttpInjectorTest.groovy index 8425d3e4bd0..f8ecf31c1f7 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/XRayHttpInjectorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/propagation/XRayHttpInjectorTest.groovy @@ -5,7 +5,7 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.DynamicConfig import datadog.trace.api.time.TimeSource -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.core.datastreams.DataStreamsMonitoring import static datadog.trace.api.sampling.PrioritySampling.* diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/test/DDCoreSpecification.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/test/DDCoreSpecification.groovy index f2226f6c88f..812da453572 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/test/DDCoreSpecification.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/test/DDCoreSpecification.groovy @@ -4,7 +4,7 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.StatsDClient import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentTracer +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration import datadog.trace.common.writer.ListWriter import datadog.trace.core.CoreTracer @@ -77,7 +77,7 @@ abstract class DDCoreSpecification extends DDSpecification { null, null, ciVisibilityContextData, - AgentTracer.NoopPathwayContext.INSTANCE, + NoopPathwayContext.INSTANCE, false, propagationTags, ProfilingContextIntegration.NoOp.INSTANCE, diff --git a/dd-trace-core/src/traceAgentTest/groovy/DataStreamsIntegrationTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/DataStreamsIntegrationTest.groovy index 8b5fe50e019..5ed81af35c3 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/DataStreamsIntegrationTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/DataStreamsIntegrationTest.groovy @@ -4,7 +4,7 @@ import datadog.communication.http.OkHttpUtils import datadog.trace.api.Config import datadog.trace.api.TraceConfig import datadog.trace.api.time.ControllableTimeSource -import datadog.trace.bootstrap.instrumentation.api.StatsPoint +import datadog.trace.api.datastreams.StatsPoint import datadog.trace.common.metrics.EventListener import datadog.trace.common.metrics.OkHttpSink import datadog.trace.core.datastreams.DefaultDataStreamsMonitoring diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/TypeConverterTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/TypeConverterTest.groovy index 98a4b53987d..56e4dfe1884 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/TypeConverterTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/TypeConverterTest.groovy @@ -3,6 +3,7 @@ package datadog.opentracing import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling +import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.ScopeSource import datadog.trace.core.CoreTracer import datadog.trace.core.DDSpan diff --git a/internal-api/build.gradle b/internal-api/build.gradle index aab6097a4b7..164267028cd 100644 --- a/internal-api/build.gradle +++ b/internal-api/build.gradle @@ -57,6 +57,13 @@ excludedClassesCoverage += [ 'datadog.trace.api.appsec.AppSecEventTracker', // A plain enum 'datadog.trace.api.profiling.RecordingType', + // Data Streams Monitoring + "datadog.trace.api.datastreams.Backlog", + "datadog.trace.api.datastreams.InboxItem", + "datadog.trace.api.datastreams.NoopDataStreamsMonitoring", + "datadog.trace.api.datastreams.NoopPathwayContext", + "datadog.trace.api.datastreams.StatsPoint", + // Bootstrap API "datadog.trace.bootstrap.ActiveSubsystems", "datadog.trace.bootstrap.ContextStore.Factory", "datadog.trace.bootstrap.config.provider.ConfigProvider.Singleton", @@ -70,15 +77,12 @@ excludedClassesCoverage += [ "datadog.trace.bootstrap.instrumentation.api.AgentSpan", "datadog.trace.bootstrap.instrumentation.api.AgentSpanContext", "datadog.trace.bootstrap.instrumentation.api.AgentTracer", - "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopAgentDataStreamsMonitoring", "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopAgentHistogram", "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopAgentPropagation", "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopAgentTraceCollector", - "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext", "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopTraceConfig", "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopTracerAPI", "datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI", - "datadog.trace.bootstrap.instrumentation.api.Backlog", "datadog.trace.bootstrap.instrumentation.api.BlackHoleSpan", "datadog.trace.bootstrap.instrumentation.api.BlackHoleSpan.Context", "datadog.trace.bootstrap.instrumentation.api.ErrorPriorities", @@ -98,7 +102,6 @@ excludedClassesCoverage += [ "datadog.trace.bootstrap.instrumentation.api.ScopeSource", "datadog.trace.bootstrap.instrumentation.api.ScopedContext", "datadog.trace.bootstrap.instrumentation.api.ScopedContextKey", - "datadog.trace.bootstrap.instrumentation.api.StatsPoint", "datadog.trace.bootstrap.instrumentation.api.TagContext", "datadog.trace.bootstrap.instrumentation.api.TagContext.HttpHeaders", "datadog.trace.api.civisibility.config.TestIdentifier", diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentDataStreamsMonitoring.java b/internal-api/src/main/java/datadog/trace/api/datastreams/AgentDataStreamsMonitoring.java similarity index 90% rename from internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentDataStreamsMonitoring.java rename to internal-api/src/main/java/datadog/trace/api/datastreams/AgentDataStreamsMonitoring.java index 660c9be04eb..d1683696700 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentDataStreamsMonitoring.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/AgentDataStreamsMonitoring.java @@ -1,6 +1,9 @@ -package datadog.trace.bootstrap.instrumentation.api; +package datadog.trace.api.datastreams; import datadog.trace.api.experimental.DataStreamsCheckpointer; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Schema; +import datadog.trace.bootstrap.instrumentation.api.SchemaIterator; import java.util.LinkedHashMap; public interface AgentDataStreamsMonitoring extends DataStreamsCheckpointer { diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Backlog.java b/internal-api/src/main/java/datadog/trace/api/datastreams/Backlog.java similarity index 94% rename from internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Backlog.java rename to internal-api/src/main/java/datadog/trace/api/datastreams/Backlog.java index 9b2a26540bc..378ddf4b95c 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Backlog.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/Backlog.java @@ -1,4 +1,4 @@ -package datadog.trace.bootstrap.instrumentation.api; +package datadog.trace.api.datastreams; import java.util.List; diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/InboxItem.java b/internal-api/src/main/java/datadog/trace/api/datastreams/InboxItem.java new file mode 100644 index 00000000000..70914e8c7c3 --- /dev/null +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/InboxItem.java @@ -0,0 +1,3 @@ +package datadog.trace.api.datastreams; + +public interface InboxItem {} diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/NoopDataStreamsMonitoring.java b/internal-api/src/main/java/datadog/trace/api/datastreams/NoopDataStreamsMonitoring.java new file mode 100644 index 00000000000..88737bad3b3 --- /dev/null +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/NoopDataStreamsMonitoring.java @@ -0,0 +1,59 @@ +package datadog.trace.api.datastreams; + +import datadog.trace.api.experimental.DataStreamsContextCarrier; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.Schema; +import datadog.trace.bootstrap.instrumentation.api.SchemaIterator; +import java.util.LinkedHashMap; + +public class NoopDataStreamsMonitoring implements AgentDataStreamsMonitoring { + public static final NoopDataStreamsMonitoring INSTANCE = new NoopDataStreamsMonitoring(); + + @Override + public void trackBacklog(LinkedHashMap sortedTags, long value) {} + + @Override + public void setCheckpoint( + AgentSpan span, + LinkedHashMap sortedTags, + long defaultTimestamp, + long payloadSizeBytes) {} + + @Override + public PathwayContext newPathwayContext() { + return NoopPathwayContext.INSTANCE; + } + + @Override + public void add(StatsPoint statsPoint) {} + + @Override + public int trySampleSchema(String topic) { + return 0; + } + + @Override + public boolean canSampleSchema(String topic) { + return false; + } + + @Override + public Schema getSchema(String schemaName, SchemaIterator iterator) { + return null; + } + + @Override + public void setProduceCheckpoint(String type, String target) {} + + @Override + public void setThreadServiceName(String serviceName) {} + + @Override + public void clearThreadServiceName() {} + + @Override + public void setConsumeCheckpoint(String type, String source, DataStreamsContextCarrier carrier) {} + + @Override + public void setProduceCheckpoint(String type, String target, DataStreamsContextCarrier carrier) {} +} diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/NoopPathwayContext.java b/internal-api/src/main/java/datadog/trace/api/datastreams/NoopPathwayContext.java new file mode 100644 index 00000000000..84ccaac93c9 --- /dev/null +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/NoopPathwayContext.java @@ -0,0 +1,48 @@ +package datadog.trace.api.datastreams; + +import java.util.LinkedHashMap; +import java.util.function.Consumer; + +public class NoopPathwayContext implements PathwayContext { + public static final NoopPathwayContext INSTANCE = new NoopPathwayContext(); + + @Override + public boolean isStarted() { + return false; + } + + @Override + public long getHash() { + return 0L; + } + + @Override + public void setCheckpoint( + LinkedHashMap sortedTags, + Consumer pointConsumer, + long defaultTimestamp, + long payloadSizeBytes) {} + + @Override + public void setCheckpoint( + LinkedHashMap sortedTags, + Consumer pointConsumer, + long defaultTimestamp) {} + + @Override + public void setCheckpoint( + LinkedHashMap sortedTags, Consumer pointConsumer) {} + + @Override + public void saveStats(StatsPoint point) {} + + @Override + public StatsPoint getSavedStats() { + return null; + } + + @Override + public String encode() { + return null; + } +} diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/PathwayContext.java b/internal-api/src/main/java/datadog/trace/api/datastreams/PathwayContext.java similarity index 94% rename from internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/PathwayContext.java rename to internal-api/src/main/java/datadog/trace/api/datastreams/PathwayContext.java index 78ed229d95b..da3c5bbca1e 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/PathwayContext.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/PathwayContext.java @@ -1,4 +1,4 @@ -package datadog.trace.bootstrap.instrumentation.api; +package datadog.trace.api.datastreams; import java.io.IOException; import java.util.LinkedHashMap; diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/StatsPoint.java b/internal-api/src/main/java/datadog/trace/api/datastreams/StatsPoint.java similarity index 97% rename from internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/StatsPoint.java rename to internal-api/src/main/java/datadog/trace/api/datastreams/StatsPoint.java index fb313ddcef2..9379267f46c 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/StatsPoint.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/StatsPoint.java @@ -1,4 +1,4 @@ -package datadog.trace.bootstrap.instrumentation.api; +package datadog.trace.api.datastreams; import java.util.List; diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanContext.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanContext.java index 1f10c1ed24b..139ea4e4281 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanContext.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanContext.java @@ -1,6 +1,7 @@ package datadog.trace.bootstrap.instrumentation.api; import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.sampling.PrioritySampling; import java.util.List; import java.util.Map; diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java index 45555d088e5..d8b17a55d30 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java @@ -7,8 +7,9 @@ import datadog.trace.api.EndpointCheckpointer; import datadog.trace.api.EndpointTracker; import datadog.trace.api.TraceConfig; +import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.NoopDataStreamsMonitoring; import datadog.trace.api.experimental.DataStreamsCheckpointer; -import datadog.trace.api.experimental.DataStreamsContextCarrier; import datadog.trace.api.gateway.CallbackProvider; import datadog.trace.api.gateway.RequestContextSlot; import datadog.trace.api.gateway.SubscriptionService; @@ -23,7 +24,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.function.Consumer; import javax.annotation.Nonnull; public class AgentTracer { @@ -602,7 +602,7 @@ public ScopeState newScopeState() { @Override public AgentDataStreamsMonitoring getDataStreamsMonitoring() { - return NoopAgentDataStreamsMonitoring.INSTANCE; + return NoopDataStreamsMonitoring.INSTANCE; } @Override @@ -652,105 +652,6 @@ public void registerContinuation(final AgentScope.Continuation continuation) {} public void cancelContinuation(final AgentScope.Continuation continuation) {} } - public static class NoopAgentDataStreamsMonitoring implements AgentDataStreamsMonitoring { - public static final NoopAgentDataStreamsMonitoring INSTANCE = - new NoopAgentDataStreamsMonitoring(); - - @Override - public void trackBacklog(LinkedHashMap sortedTags, long value) {} - - @Override - public void setCheckpoint( - AgentSpan span, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes) {} - - @Override - public PathwayContext newPathwayContext() { - return NoopPathwayContext.INSTANCE; - } - - @Override - public void add(StatsPoint statsPoint) {} - - @Override - public int trySampleSchema(String topic) { - return 0; - } - - @Override - public boolean canSampleSchema(String topic) { - return false; - } - - @Override - public Schema getSchema(String schemaName, SchemaIterator iterator) { - return null; - } - - @Override - public void setProduceCheckpoint(String type, String target) {} - - @Override - public void setThreadServiceName(String serviceName) {} - - @Override - public void clearThreadServiceName() {} - - @Override - public void setConsumeCheckpoint( - String type, String source, DataStreamsContextCarrier carrier) {} - - @Override - public void setProduceCheckpoint( - String type, String target, DataStreamsContextCarrier carrier) {} - } - - public static class NoopPathwayContext implements PathwayContext { - public static final NoopPathwayContext INSTANCE = new NoopPathwayContext(); - - @Override - public boolean isStarted() { - return false; - } - - @Override - public long getHash() { - return 0L; - } - - @Override - public void setCheckpoint( - LinkedHashMap sortedTags, - Consumer pointConsumer, - long defaultTimestamp, - long payloadSizeBytes) {} - - @Override - public void setCheckpoint( - LinkedHashMap sortedTags, - Consumer pointConsumer, - long defaultTimestamp) {} - - @Override - public void setCheckpoint( - LinkedHashMap sortedTags, Consumer pointConsumer) {} - - @Override - public void saveStats(StatsPoint point) {} - - @Override - public StatsPoint getSavedStats() { - return null; - } - - @Override - public String encode() { - return null; - } - } - public static class NoopAgentHistogram implements AgentHistogram { public static final NoopAgentHistogram INSTANCE = new NoopAgentHistogram(); diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/InboxItem.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/InboxItem.java deleted file mode 100644 index 1f56183e41d..00000000000 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/InboxItem.java +++ /dev/null @@ -1,3 +0,0 @@ -package datadog.trace.bootstrap.instrumentation.api; - -public interface InboxItem {} diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/NoopSpanContext.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/NoopSpanContext.java index 01cb0c4479d..3a15ff15a2d 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/NoopSpanContext.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/NoopSpanContext.java @@ -4,6 +4,8 @@ import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.NoopPathwayContext; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.sampling.PrioritySampling; import java.util.List; import java.util.Map; @@ -40,7 +42,7 @@ public Iterable> baggageItems() { @Override public PathwayContext getPathwayContext() { - return AgentTracer.NoopPathwayContext.INSTANCE; + return NoopPathwayContext.INSTANCE; } @Override diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/TagContext.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/TagContext.java index fdf9580cbb9..226dca2bc30 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/TagContext.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/TagContext.java @@ -7,6 +7,7 @@ import datadog.trace.api.DDTraceId; import datadog.trace.api.TraceConfig; import datadog.trace.api.TracePropagationStyle; +import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.sampling.PrioritySampling; import java.util.ArrayList; import java.util.Collections; From fc7c9da9afb1da885fc5a339fc908ae46fe87b24 Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Tue, 4 Feb 2025 10:42:53 +0100 Subject: [PATCH 6/7] feat(dsm): Clean up API Remove DSM injection method from AgentPropagation Make checkpoint use DataStreamsContext --- .../decorator/HttpServerDecorator.java | 3 +- .../grpc/server/TracingServerInterceptor.java | 3 +- .../aws/v0/AwsSdkClientDecorator.java | 5 +- .../aws/v0/TracingRequestHandler.java | 6 +- .../aws/v2/AwsSdkClientDecorator.java | 8 +- .../aws/v1/sqs/TracingIterator.java | 3 +- .../aws/v2/sqs/TracingIterator.java | 3 +- .../googlepubsub/PubSubDecorator.java | 8 +- .../grpc/server/TracingServerInterceptor.java | 3 +- .../kafka_clients/TracingIterator.java | 6 +- .../kafka_clients38/TracingIterator.java | 6 +- .../KafkaStreamTaskInstrumentation.java | 10 +- .../src/test/groovy/TypeConverterTest.groovy | 1 - .../rabbitmq/amqp/RabbitDecorator.java | 3 +- .../java/datadog/trace/core/CoreTracer.java | 7 +- .../DataStreamContextExtractor.java | 64 -------- .../DataStreamContextInjector.java | 90 ----------- .../DataStreamsContextCarrierAdapter.java | 18 ++- .../datastreams/DataStreamsMonitoring.java | 16 -- .../datastreams/DataStreamsPropagator.java | 14 +- .../DefaultDataStreamsMonitoring.java | 43 +++--- .../datastreams/DefaultPathwayContext.java | 25 +-- .../core/propagation/CorePropagation.java | 45 ------ .../DefaultDataStreamsMonitoringTest.groovy | 9 +- .../DefaultPathwayContextTest.groovy | 145 +++++++++--------- .../opentracing/TypeConverterTest.groovy | 1 - .../AgentDataStreamsMonitoring.java | 14 +- .../api/datastreams/DataStreamsContext.java | 20 ++- .../NoopDataStreamsMonitoring.java | 6 +- .../api/datastreams/NoopPathwayContext.java | 17 +- .../trace/api/datastreams/PathwayContext.java | 15 +- .../instrumentation/api/AgentPropagation.java | 16 -- .../instrumentation/api/AgentTracer.java | 18 --- .../datastreams/DataStreamsContextTest.groovy | 2 +- 34 files changed, 185 insertions(+), 468 deletions(-) delete mode 100644 dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextExtractor.java delete mode 100644 dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextInjector.java delete mode 100644 dd-trace-core/src/main/java/datadog/trace/core/propagation/CorePropagation.java diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java index 9383c9f1f29..ca2a241f9c1 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java @@ -1,6 +1,7 @@ package datadog.trace.bootstrap.instrumentation.decorator; import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS; +import static datadog.trace.api.datastreams.DataStreamsContext.fromTags; import static datadog.trace.api.gateway.Events.EVENTS; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -148,7 +149,7 @@ public AgentSpan startSpan( } AgentPropagation.ContextVisitor getter = getter(); if (null != carrier && null != getter) { - tracer().getDataStreamsMonitoring().setCheckpoint(span, SERVER_PATHWAY_EDGE_TAGS, 0, 0); + tracer().getDataStreamsMonitoring().setCheckpoint(span, fromTags(SERVER_PATHWAY_EDGE_TAGS)); } return span; } diff --git a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java index c5b0cee8e9b..5b22d0d927b 100644 --- a/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java +++ b/dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.armeria.grpc.server; +import static datadog.trace.api.datastreams.DataStreamsContext.fromTags; import static datadog.trace.api.gateway.Events.EVENTS; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -71,7 +72,7 @@ public ServerCall.Listener interceptCall( AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, SERVER_PATHWAY_EDGE_TAGS, 0, 0); + .setCheckpoint(span, fromTags(SERVER_PATHWAY_EDGE_TAGS)); RequestContext reqContext = span.getRequestContext(); if (reqContext != null) { 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 088649206c2..59b2c306f93 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v0; +import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities.RPC_COMMAND_NAME; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; @@ -264,7 +265,7 @@ public AgentSpan onServiceResponse( AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, 0, responseSize); + .setCheckpoint(span, create(sortedTags, 0, responseSize)); } if ("PutObjectRequest".equalsIgnoreCase(awsOperation) @@ -285,7 +286,7 @@ public AgentSpan onServiceResponse( AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, 0, payloadSize); + .setCheckpoint(span, create(sortedTags, 0, payloadSize)); } } } 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 463263a9ce0..080980b8a02 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,5 +1,6 @@ package datadog.trace.instrumentation.aws.v0; +import static datadog.trace.api.datastreams.DataStreamsContext.create; 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; @@ -19,6 +20,7 @@ import datadog.context.propagation.Propagators; import datadog.trace.api.Config; import datadog.trace.api.datastreams.AgentDataStreamsMonitoring; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -122,8 +124,8 @@ public void afterResponse(final Request request, final Response response) AgentDataStreamsMonitoring dataStreamsMonitoring = AgentTracer.get().getDataStreamsMonitoring(); PathwayContext pathwayContext = dataStreamsMonitoring.newPathwayContext(); - pathwayContext.setCheckpoint( - sortedTags, dataStreamsMonitoring::add, arrivalTime.getTime()); + DataStreamsContext context = create(sortedTags, arrivalTime.getTime(), 0); + pathwayContext.setCheckpoint(context, dataStreamsMonitoring::add); if (!span.context().getPathwayContext().isStarted()) { span.context().mergePathwayContext(pathwayContext); } 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 d80bc2df4da..3e9912a3dae 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 @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v2; +import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_IN; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_TAG; @@ -361,7 +362,8 @@ public AgentSpan onSdkResponse( AgentTracer.get().getDataStreamsMonitoring(); PathwayContext pathwayContext = dataStreamsMonitoring.newPathwayContext(); pathwayContext.setCheckpoint( - sortedTags, dataStreamsMonitoring::add, arrivalTime.toEpochMilli()); + create(sortedTags, arrivalTime.toEpochMilli(), 0), + dataStreamsMonitoring::add); if (!span.context().getPathwayContext().isStarted()) { span.context().mergePathwayContext(pathwayContext); } @@ -391,7 +393,7 @@ public AgentSpan onSdkResponse( AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, 0, responseSize); + .setCheckpoint(span, create(sortedTags, 0, responseSize)); } if ("PutObject".equalsIgnoreCase(awsOperation)) { @@ -411,7 +413,7 @@ public AgentSpan onSdkResponse( AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, 0, payloadSize); + .setCheckpoint(span, create(sortedTags, 0, payloadSize)); } } } diff --git a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java index ab7067801df..0cd6f6cbcdf 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/TracingIterator.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v1.sqs; +import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -90,7 +91,7 @@ protected void startNewMessageSpan(Message message) { sortedTags.put(DIRECTION_TAG, DIRECTION_IN); sortedTags.put(TOPIC_TAG, urlFileName(queueUrl)); sortedTags.put(TYPE_TAG, "sqs"); - AgentTracer.get().getDataStreamsMonitoring().setCheckpoint(span, sortedTags, 0, 0); + AgentTracer.get().getDataStreamsMonitoring().setCheckpoint(span, create(sortedTags, 0, 0)); CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, queueUrl); diff --git a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java index 2bff193532b..503d5efa5b2 100644 --- a/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java +++ b/dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/TracingIterator.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v2.sqs; +import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -92,7 +93,7 @@ protected void startNewMessageSpan(Message message) { sortedTags.put(DIRECTION_TAG, DIRECTION_IN); sortedTags.put(TOPIC_TAG, urlFileName(queueUrl)); sortedTags.put(TYPE_TAG, "sqs"); - AgentTracer.get().getDataStreamsMonitoring().setCheckpoint(span, sortedTags, 0, 0); + AgentTracer.get().getDataStreamsMonitoring().setCheckpoint(span, create(sortedTags, 0, 0)); CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, queueUrl, requestId); diff --git a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PubSubDecorator.java b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PubSubDecorator.java index 31c430def97..f966ca8b3c1 100644 --- a/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PubSubDecorator.java +++ b/dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PubSubDecorator.java @@ -13,6 +13,7 @@ import datadog.trace.api.Functions; import datadog.trace.api.cache.DDCache; import datadog.trace.api.cache.DDCaches; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.naming.SpanNaming; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -141,9 +142,10 @@ public AgentSpan onConsume(final PubsubMessage message, final String subscriptio .getDataStreamsMonitoring() .setCheckpoint( span, - sortedTags, - publishTime.getSeconds() * 1_000 + publishTime.getNanos() / (int) 1e6, - message.getSerializedSize()); + DataStreamsContext.create( + sortedTags, + publishTime.getSeconds() * 1_000 + publishTime.getNanos() / (int) 1e6, + message.getSerializedSize())); afterStart(span); span.setResourceName( CONSUMER_RESOURCE_NAME_CACHE.computeIfAbsent(parsedSubscription, CONSUMER_PREFIX)); diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java index aaf5385619d..954d7458231 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.grpc.server; +import static datadog.trace.api.datastreams.DataStreamsContext.fromTags; import static datadog.trace.api.gateway.Events.EVENTS; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -70,7 +71,7 @@ public ServerCall.Listener interceptCall( AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, SERVER_PATHWAY_EDGE_TAGS, 0, 0); + .setCheckpoint(span, fromTags(SERVER_PATHWAY_EDGE_TAGS)); RequestContext reqContext = span.getRequestContext(); if (reqContext != null) { diff --git a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java index e7a35eccc9a..610ad20a2ca 100644 --- a/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/TracingIterator.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.kafka_clients; -import static datadog.trace.api.datastreams.DataStreamsContext.fromKafka; +import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; @@ -113,7 +113,7 @@ protected void startNewRecordSpan(ConsumerRecord val) { if (STREAMING_CONTEXT.isDisabledForTopic(val.topic())) { AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, val.timestamp(), payloadSize); + .setCheckpoint(span, create(sortedTags, val.timestamp(), payloadSize)); } else { // when we're in a streaming context we want to consume only from source topics if (STREAMING_CONTEXT.isSourceTopic(val.topic())) { @@ -122,7 +122,7 @@ protected void startNewRecordSpan(ConsumerRecord val) { // some other instance of the application, breaking the context propagation // for DSM users Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); - DataStreamsContext dsmContext = fromKafka(sortedTags, val.timestamp(), payloadSize); + DataStreamsContext dsmContext = create(sortedTags, val.timestamp(), payloadSize); dsmPropagator.inject(span.with(dsmContext), val.headers(), SETTER); } } diff --git a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java index 942cac3e990..1c127778141 100644 --- a/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java +++ b/dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/TracingIterator.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.kafka_clients38; -import static datadog.trace.api.datastreams.DataStreamsContext.fromKafka; +import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious; @@ -113,7 +113,7 @@ protected void startNewRecordSpan(ConsumerRecord val) { if (StreamingContext.STREAMING_CONTEXT.isDisabledForTopic(val.topic())) { AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, val.timestamp(), payloadSize); + .setCheckpoint(span, create(sortedTags, val.timestamp(), payloadSize)); } else { // when we're in a streaming context we want to consume only from source topics if (StreamingContext.STREAMING_CONTEXT.isSourceTopic(val.topic())) { @@ -122,7 +122,7 @@ protected void startNewRecordSpan(ConsumerRecord val) { // some other instance of the application, breaking the context propagation // for DSM users Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); - DataStreamsContext dsmContext = fromKafka(sortedTags, val.timestamp(), payloadSize); + DataStreamsContext dsmContext = create(sortedTags, val.timestamp(), payloadSize); dsmPropagator.inject(span.with(dsmContext), val.headers(), SETTER); } } diff --git a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java index 51c663e9b57..33d62f4cdb2 100644 --- a/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.kafka_streams; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static datadog.trace.api.datastreams.DataStreamsContext.fromKafka; +import static datadog.trace.api.datastreams.DataStreamsContext.create; import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -265,11 +265,11 @@ public static void start( if (STREAMING_CONTEXT.isDisabledForTopic(record.topic())) { AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, record.timestamp, payloadSize); + .setCheckpoint(span, create(sortedTags, record.timestamp, payloadSize)); } else { if (STREAMING_CONTEXT.isSourceTopic(record.topic())) { Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); - DataStreamsContext dsmContext = fromKafka(sortedTags, record.timestamp, payloadSize); + DataStreamsContext dsmContext = create(sortedTags, record.timestamp, payloadSize); dsmPropagator.inject(span.with(dsmContext), record, SR_SETTER); } } @@ -347,11 +347,11 @@ public static void start( if (STREAMING_CONTEXT.isDisabledForTopic(record.topic())) { AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, record.timestamp(), payloadSize); + .setCheckpoint(span, create(sortedTags, record.timestamp(), payloadSize)); } else { if (STREAMING_CONTEXT.isSourceTopic(record.topic())) { Propagator dsmPropagator = Propagators.forConcern(DSM_CONCERN); - DataStreamsContext dsmContext = fromKafka(sortedTags, record.timestamp(), payloadSize); + DataStreamsContext dsmContext = create(sortedTags, record.timestamp(), payloadSize); dsmPropagator.inject(span.with(dsmContext), record, PR_SETTER); } } diff --git a/dd-java-agent/instrumentation/opentracing/api-0.32/src/test/groovy/TypeConverterTest.groovy b/dd-java-agent/instrumentation/opentracing/api-0.32/src/test/groovy/TypeConverterTest.groovy index 99d5d5f5362..ca3c4eaff49 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.32/src/test/groovy/TypeConverterTest.groovy +++ b/dd-java-agent/instrumentation/opentracing/api-0.32/src/test/groovy/TypeConverterTest.groovy @@ -3,7 +3,6 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling import datadog.trace.api.datastreams.NoopPathwayContext -import datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext import datadog.trace.bootstrap.instrumentation.api.ScopeSource import datadog.trace.core.DDSpan import datadog.trace.core.DDSpanContext diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java index da98323640e..baf0985199c 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.rabbitmq.amqp; +import static datadog.trace.api.datastreams.DataStreamsContext.create; 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; @@ -253,7 +254,7 @@ public static AgentScope startReceivingSpan( sortedTags.put(TYPE_TAG, "rabbitmq"); AgentTracer.get() .getDataStreamsMonitoring() - .setCheckpoint(span, sortedTags, produceMillis, 0); + .setCheckpoint(span, create(sortedTags, produceMillis, 0)); } CONSUMER_DECORATE.afterStart(span); 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 66bc499dd3c..4428c446632 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 @@ -87,7 +87,6 @@ import datadog.trace.core.monitor.MonitoringImpl; import datadog.trace.core.monitor.TracerHealthMetrics; import datadog.trace.core.propagation.ApmTracingDisabledPropagator; -import datadog.trace.core.propagation.CorePropagation; import datadog.trace.core.propagation.ExtractedContext; import datadog.trace.core.propagation.HttpCodec; import datadog.trace.core.propagation.PropagationTags; @@ -228,7 +227,7 @@ public static CoreTracerBuilder builder() { private final SortedSet interceptors = new ConcurrentSkipListSet<>(Comparator.comparingInt(TraceInterceptor::priority)); - private final CorePropagation propagation; + private final AgentPropagation propagation; private final boolean logs128bTraceIdEnabled; private final InstrumentationGateway instrumentationGateway; @@ -714,8 +713,8 @@ private CoreTracer( sharedCommunicationObjects.whenReady(this.dataStreamsMonitoring::start); - // Store all propagators to propagation -- only DSM injection left - this.propagation = new CorePropagation(this.dataStreamsMonitoring.injector()); + // TODO Need to be removed + this.propagation = AgentTracer.NOOP_TRACER.propagate(); // Register context propagators HttpCodec.Extractor tracingExtractor = diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextExtractor.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextExtractor.java deleted file mode 100644 index d438a4eacb9..00000000000 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextExtractor.java +++ /dev/null @@ -1,64 +0,0 @@ -package datadog.trace.core.datastreams; - -import datadog.trace.api.TraceConfig; -import datadog.trace.api.time.TimeSource; -import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; -import datadog.trace.bootstrap.instrumentation.api.TagContext; -import datadog.trace.core.propagation.HttpCodec; -import java.util.function.Supplier; - -public class DataStreamContextExtractor implements HttpCodec.Extractor { - private final HttpCodec.Extractor delegate; - private final TimeSource timeSource; - private final Supplier traceConfigSupplier; - private final long hashOfKnownTags; - private final ThreadLocal serviceNameOverride; - - public DataStreamContextExtractor( - HttpCodec.Extractor delegate, - TimeSource timeSource, - Supplier traceConfigSupplier, - long hashOfKnownTags, - ThreadLocal serviceNameOverride) { - this.delegate = delegate; - this.timeSource = timeSource; - this.traceConfigSupplier = traceConfigSupplier; - this.hashOfKnownTags = hashOfKnownTags; - this.serviceNameOverride = serviceNameOverride; - } - - @Override - public TagContext extract(C carrier, AgentPropagation.ContextVisitor getter) { - // Delegate the default HTTP extraction - TagContext extracted = this.delegate.extract(carrier, getter); - - if (extracted != null) { - boolean shouldExtractPathwayContext = - extracted.getTraceConfig() == null - ? traceConfigSupplier.get().isDataStreamsEnabled() - : extracted.getTraceConfig().isDataStreamsEnabled(); - - if (shouldExtractPathwayContext) { - DefaultPathwayContext pathwayContext = - DefaultPathwayContext.extract( - carrier, getter, this.timeSource, this.hashOfKnownTags, serviceNameOverride.get()); - - extracted.withPathwayContext(pathwayContext); - } - - return extracted; - } else if (traceConfigSupplier.get().isDataStreamsEnabled()) { - DefaultPathwayContext pathwayContext = - DefaultPathwayContext.extract( - carrier, getter, this.timeSource, this.hashOfKnownTags, serviceNameOverride.get()); - - if (pathwayContext != null) { - extracted = new TagContext(); - extracted.withPathwayContext(pathwayContext); - return extracted; - } - } - - return null; - } -} diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextInjector.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextInjector.java deleted file mode 100644 index 2994aa9518e..00000000000 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamContextInjector.java +++ /dev/null @@ -1,90 +0,0 @@ -package datadog.trace.core.datastreams; - -import static datadog.trace.api.DDTags.PATHWAY_HASH; -import static datadog.trace.api.datastreams.PathwayContext.PROPAGATION_KEY_BASE64; - -import datadog.trace.api.datastreams.PathwayContext; -import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; -import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import java.io.IOException; -import java.util.LinkedHashMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class DataStreamContextInjector { - private static final Logger LOGGER = LoggerFactory.getLogger(DataStreamContextInjector.class); - private final DataStreamsMonitoring dataStreamsMonitoring; - - public DataStreamContextInjector(DataStreamsMonitoring dataStreamsMonitoring) { - this.dataStreamsMonitoring = dataStreamsMonitoring; - } - - public void injectPathwayContext( - AgentSpan span, - C carrier, - AgentPropagation.Setter setter, - LinkedHashMap sortedTags) { - injectPathwayContext(span, carrier, setter, sortedTags, 0, 0, true); - } - - public void injectPathwayContext( - AgentSpan span, - C carrier, - AgentPropagation.Setter setter, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes) { - injectPathwayContext( - span, carrier, setter, sortedTags, defaultTimestamp, payloadSizeBytes, true); - } - - /** Same as injectPathwayContext, but the stats collected in the StatsPoint are not sent. */ - public void injectPathwayContextWithoutSendingStats( - AgentSpan span, - C carrier, - AgentPropagation.Setter setter, - LinkedHashMap sortedTags) { - injectPathwayContext(span, carrier, setter, sortedTags, 0, 0, false); - } - - private void injectPathwayContext( - AgentSpan span, - C carrier, - AgentPropagation.Setter setter, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes, - boolean sendCheckpoint) { - PathwayContext pathwayContext = span.context().getPathwayContext(); - if (pathwayContext == null - || (span.traceConfig() != null && !span.traceConfig().isDataStreamsEnabled())) { - return; - } - pathwayContext.setCheckpoint( - sortedTags, - sendCheckpoint ? dataStreamsMonitoring::add : pathwayContext::saveStats, - defaultTimestamp, - payloadSizeBytes); - - boolean injected = injectPathwayContext(pathwayContext, carrier, setter); - - if (injected && pathwayContext.getHash() != 0) { - span.setTag(PATHWAY_HASH, Long.toUnsignedString(pathwayContext.getHash())); - } - } - - private static boolean injectPathwayContext( - PathwayContext pathwayContext, C carrier, AgentPropagation.Setter setter) { - try { - String encodedContext = pathwayContext.encode(); - if (encodedContext != null) { - LOGGER.debug("Injecting pathway context {}", pathwayContext); - setter.set(carrier, PROPAGATION_KEY_BASE64, encodedContext); - return true; - } - } catch (IOException e) { - LOGGER.debug("Unable to set encode pathway context", e); - } - return false; - } -} diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsContextCarrierAdapter.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsContextCarrierAdapter.java index a9460bae222..1a3b897a604 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsContextCarrierAdapter.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsContextCarrierAdapter.java @@ -1,13 +1,15 @@ package datadog.trace.core.datastreams; +import datadog.context.propagation.CarrierSetter; +import datadog.context.propagation.CarrierVisitor; import datadog.trace.api.experimental.DataStreamsContextCarrier; -import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; -import datadog.trace.bootstrap.instrumentation.api.AgentPropagation.KeyClassifier; import java.util.Map; +import java.util.function.BiConsumer; +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault public class DataStreamsContextCarrierAdapter - implements AgentPropagation.Setter, - AgentPropagation.ContextVisitor { + implements CarrierSetter, CarrierVisitor { public static final DataStreamsContextCarrierAdapter INSTANCE = new DataStreamsContextCarrierAdapter(); @@ -20,11 +22,11 @@ public void set(DataStreamsContextCarrier carrier, String key, String value) { } @Override - public void forEachKey(DataStreamsContextCarrier carrier, KeyClassifier classifier) { + public void forEachKeyValue( + DataStreamsContextCarrier carrier, BiConsumer visitor) { for (Map.Entry entry : carrier.entries()) { - if (null != entry.getValue() - && !classifier.accept(entry.getKey(), entry.getValue().toString())) { - return; + if (null != entry.getValue()) { + visitor.accept(entry.getKey(), entry.getValue().toString()); } } } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsMonitoring.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsMonitoring.java index 8f7082a4270..82d5af02f04 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsMonitoring.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsMonitoring.java @@ -6,7 +6,6 @@ import datadog.trace.api.experimental.DataStreamsContextCarrier; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; -import datadog.trace.core.propagation.HttpCodec; public interface DataStreamsMonitoring extends AgentDataStreamsMonitoring, AutoCloseable { void start(); @@ -18,21 +17,6 @@ public interface DataStreamsMonitoring extends AgentDataStreamsMonitoring, AutoC */ Propagator propagator(); - /** - * Get a context extractor that support {@link PathwayContext} extraction. - * - * @param delegate The extractor to delegate the common trace context extraction. - * @return An extractor with DSM context extraction. - */ - HttpCodec.Extractor extractor(HttpCodec.Extractor delegate); - - /** - * Gets a context injector to propagate {@link PathwayContext}. - * - * @return A context injector if supported, {@code null} otherwise. - */ - DataStreamContextInjector injector(); - /** * Injects DSM {@link PathwayContext} into a span {@link AgentSpanContext}. * diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java index bd0427ebe10..fd9b7b9dd7b 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DataStreamsPropagator.java @@ -10,16 +10,17 @@ import datadog.trace.api.TraceConfig; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.PathwayContext; +import datadog.trace.api.datastreams.StatsPoint; import datadog.trace.api.time.TimeSource; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.TagContext; import java.io.IOException; +import java.util.function.Consumer; import java.util.function.Supplier; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; -// TODO Javadoc @ParametersAreNonnullByDefault public class DataStreamsPropagator implements Propagator { private final DataStreamsMonitoring dataStreamsMonitoring; @@ -54,15 +55,10 @@ public void inject(Context context, C carrier, CarrierSetter setter) { return; } - // TODO Allow set checkpoint to use DsmContext as parameter? - pathwayContext.setCheckpoint( - dsmContext.sortedTags(), - dsmContext.sendCheckpoint() ? dataStreamsMonitoring::add : pathwayContext::saveStats, - dsmContext.defaultTimestamp(), - dsmContext.payloadSizeBytes()); - + Consumer pointConsumer = + dsmContext.sendCheckpoint() ? this.dataStreamsMonitoring::add : pathwayContext::saveStats; + pathwayContext.setCheckpoint(dsmContext, pointConsumer); boolean injected = injectPathwayContext(pathwayContext, carrier, setter); - if (injected && pathwayContext.getHash() != 0) { span.setTag(PATHWAY_HASH, Long.toUnsignedString(pathwayContext.getHash())); } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java index 63fa65c950d..fcf844baf0a 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultDataStreamsMonitoring.java @@ -1,6 +1,7 @@ package datadog.trace.core.datastreams; import static datadog.communication.ddagent.DDAgentFeaturesDiscovery.V01_DATASTREAMS_ENDPOINT; +import static datadog.trace.api.datastreams.DataStreamsContext.fromTags; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_IN; import static datadog.trace.core.datastreams.TagsProcessor.DIRECTION_OUT; @@ -19,6 +20,7 @@ import datadog.trace.api.TraceConfig; import datadog.trace.api.WellKnownTags; import datadog.trace.api.datastreams.Backlog; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.InboxItem; import datadog.trace.api.datastreams.NoopPathwayContext; import datadog.trace.api.datastreams.PathwayContext; @@ -33,7 +35,6 @@ import datadog.trace.common.metrics.Sink; import datadog.trace.core.DDSpan; import datadog.trace.core.DDTraceCoreInfo; -import datadog.trace.core.propagation.HttpCodec; import datadog.trace.util.AgentTaskScheduler; import java.util.ArrayList; import java.util.Collections; @@ -68,8 +69,8 @@ public class DefaultDataStreamsMonitoring implements DataStreamsMonitoring, Even private final long hashOfKnownTags; private final Supplier traceConfigSupplier; private final long bucketDurationNanos; - private final DataStreamContextInjector injector; private final Thread thread; + private final DataStreamsPropagator propagator; private AgentTaskScheduler.Scheduled cancellation; private volatile long nextFeatureCheck; private volatile boolean supportsDataStreams = false; @@ -128,11 +129,18 @@ public DefaultDataStreamsMonitoring( this.hashOfKnownTags = DefaultPathwayContext.getBaseHash(wellKnownTags); this.payloadWriter = payloadWriter; this.bucketDurationNanos = bucketDurationNanos; - this.injector = new DataStreamContextInjector(this); thread = newAgentThread(DATA_STREAMS_MONITORING, new InboxProcessor()); sink.register(this); schemaSamplers = new ConcurrentHashMap<>(); + + this.propagator = + new DataStreamsPropagator( + this, + this.traceConfigSupplier, + this.timeSource, + this.hashOfKnownTags, + serviceNameOverride); } @Override @@ -203,19 +211,7 @@ public PathwayContext newPathwayContext() { @Override public Propagator propagator() { - return new DataStreamsPropagator( - this, this.traceConfigSupplier, this.timeSource, this.hashOfKnownTags, serviceNameOverride); - } - - @Override - public HttpCodec.Extractor extractor(HttpCodec.Extractor delegate) { - return new DataStreamContextExtractor( - delegate, timeSource, traceConfigSupplier, hashOfKnownTags, serviceNameOverride); - } - - @Override - public DataStreamContextInjector injector() { - return this.injector; + return this.propagator; } @Override @@ -245,14 +241,10 @@ public void trackBacklog(LinkedHashMap sortedTags, long value) { } @Override - public void setCheckpoint( - AgentSpan span, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes) { + public void setCheckpoint(AgentSpan span, DataStreamsContext context) { PathwayContext pathwayContext = span.context().getPathwayContext(); if (pathwayContext != null) { - pathwayContext.setCheckpoint(sortedTags, this::add, defaultTimestamp, payloadSizeBytes); + pathwayContext.setCheckpoint(context, this::add); } } @@ -276,7 +268,7 @@ public void setConsumeCheckpoint(String type, String source, DataStreamsContextC sortedTags.put(TOPIC_TAG, source); sortedTags.put(TYPE_TAG, type); - setCheckpoint(span, sortedTags, 0, 0); + setCheckpoint(span, fromTags(sortedTags)); } public void setProduceCheckpoint( @@ -300,8 +292,9 @@ public void setProduceCheckpoint( sortedTags.put(TOPIC_TAG, target); sortedTags.put(TYPE_TAG, type); - this.injector.injectPathwayContext( - span, carrier, DataStreamsContextCarrierAdapter.INSTANCE, sortedTags); + DataStreamsContext dsmContext = fromTags(sortedTags); + this.propagator.inject( + span.with(dsmContext), carrier, DataStreamsContextCarrierAdapter.INSTANCE); } @Override diff --git a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java index 7db93af2518..aad8be72b5f 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java @@ -10,6 +10,7 @@ import datadog.context.propagation.CarrierVisitor; import datadog.trace.api.Config; import datadog.trace.api.WellKnownTags; +import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.PathwayContext; import datadog.trace.api.datastreams.StatsPoint; import datadog.trace.api.time.TimeSource; @@ -105,37 +106,21 @@ public long getHash() { } @Override - public void setCheckpoint( - LinkedHashMap sortedTags, Consumer pointConsumer) { - setCheckpoint(sortedTags, pointConsumer, 0, 0); - } - - @Override - public void setCheckpoint( - LinkedHashMap sortedTags, - Consumer pointConsumer, - long defaultTimestamp) { - setCheckpoint(sortedTags, pointConsumer, defaultTimestamp, 0); - } - - @Override - public void setCheckpoint( - LinkedHashMap sortedTags, - Consumer pointConsumer, - long defaultTimestamp, - long payloadSizeBytes) { + public void setCheckpoint(DataStreamsContext context, Consumer pointConsumer) { long startNanos = timeSource.getCurrentTimeNanos(); long nanoTicks = timeSource.getNanoTicks(); lock.lock(); try { // So far, each tag key has only one tag value, so we're initializing the capacity to match // the number of tag keys for now. We should revisit this later if it's no longer the case. + LinkedHashMap sortedTags = context.sortedTags(); List allTags = new ArrayList<>(sortedTags.size()); PathwayHashBuilder pathwayHashBuilder = new PathwayHashBuilder(hashOfKnownTags, serviceNameOverride); DataSetHashBuilder aggregationHashBuilder = new DataSetHashBuilder(); if (!started) { + long defaultTimestamp = context.defaultTimestamp(); if (defaultTimestamp == 0) { pathwayStartNanos = startNanos; pathwayStartNanoTicks = nanoTicks; @@ -196,7 +181,7 @@ public void setCheckpoint( startNanos, pathwayLatencyNano, edgeLatencyNano, - payloadSizeBytes, + context.payloadSizeBytes(), serviceNameOverride); edgeStartNanoTicks = nanoTicks; hash = newHash; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/CorePropagation.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/CorePropagation.java deleted file mode 100644 index 90f43736c38..00000000000 --- a/dd-trace-core/src/main/java/datadog/trace/core/propagation/CorePropagation.java +++ /dev/null @@ -1,45 +0,0 @@ -package datadog.trace.core.propagation; - -import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; -import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.core.datastreams.DataStreamContextInjector; -import java.util.LinkedHashMap; - -public class CorePropagation implements AgentPropagation { - private final DataStreamContextInjector dataStreamContextInjector; - - /** - * Constructor - * - * @param dataStreamContextInjector The DSM context injector, as a specific object until generic - * context injection is available. - */ - public CorePropagation(DataStreamContextInjector dataStreamContextInjector) { - this.dataStreamContextInjector = dataStreamContextInjector; - } - - @Override - public void injectPathwayContext( - AgentSpan span, C carrier, Setter setter, LinkedHashMap sortedTags) { - this.dataStreamContextInjector.injectPathwayContext(span, carrier, setter, sortedTags); - } - - @Override - public void injectPathwayContext( - AgentSpan span, - C carrier, - Setter setter, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes) { - this.dataStreamContextInjector.injectPathwayContext( - span, carrier, setter, sortedTags, defaultTimestamp, payloadSizeBytes); - } - - @Override - public void injectPathwayContextWithoutSendingStats( - AgentSpan span, C carrier, Setter setter, LinkedHashMap sortedTags) { - this.dataStreamContextInjector.injectPathwayContextWithoutSendingStats( - span, carrier, setter, sortedTags); - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultDataStreamsMonitoringTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultDataStreamsMonitoringTest.groovy index dfdbb34f019..ffcd15cd0c3 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultDataStreamsMonitoringTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultDataStreamsMonitoringTest.groovy @@ -4,16 +4,16 @@ import datadog.communication.ddagent.DDAgentFeaturesDiscovery import datadog.trace.api.Config import datadog.trace.api.TraceConfig import datadog.trace.api.WellKnownTags +import datadog.trace.api.datastreams.StatsPoint import datadog.trace.api.experimental.DataStreamsContextCarrier import datadog.trace.api.time.ControllableTimeSource -import datadog.trace.bootstrap.instrumentation.api.AgentPropagation -import datadog.trace.api.datastreams.StatsPoint import datadog.trace.common.metrics.EventListener import datadog.trace.common.metrics.Sink import datadog.trace.core.test.DDCoreSpecification import spock.util.concurrent.PollingConditions import java.util.concurrent.TimeUnit +import java.util.function.BiConsumer import static DefaultDataStreamsMonitoring.FEATURE_CHECK_INTERVAL_NANOS import static java.util.concurrent.TimeUnit.SECONDS @@ -101,12 +101,11 @@ class DefaultDataStreamsMonitoringTest extends DDCoreSpecification { when: DataStreamsContextCarrierAdapter.INSTANCE.set(carrier, keyName, keyValue) - DataStreamsContextCarrierAdapter.INSTANCE.forEachKey(carrier, new AgentPropagation.KeyClassifier() { + DataStreamsContextCarrierAdapter.INSTANCE.forEachKeyValue(carrier, new BiConsumer() { @Override - boolean accept(String key, String value) { + void accept(String key, String value) { if (key == keyName) { extracted = value - return true } } }) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultPathwayContextTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultPathwayContextTest.groovy index c50a5145c62..3761944b6ba 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultPathwayContextTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DefaultPathwayContextTest.groovy @@ -5,20 +5,22 @@ import datadog.trace.api.Config import datadog.trace.api.DDTraceId import datadog.trace.api.TraceConfig import datadog.trace.api.WellKnownTags +import datadog.trace.api.datastreams.StatsPoint import datadog.trace.api.time.ControllableTimeSource import datadog.trace.bootstrap.instrumentation.api.AgentPropagation -import datadog.trace.api.datastreams.PathwayContext -import datadog.trace.api.datastreams.StatsPoint -import datadog.trace.bootstrap.instrumentation.api.TagContext +import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.common.metrics.Sink import datadog.trace.core.propagation.ExtractedContext -import datadog.trace.core.propagation.HttpCodec import datadog.trace.core.test.DDCoreSpecification import java.util.function.Consumer +import static datadog.context.Context.root import static datadog.trace.api.TracePropagationStyle.DATADOG import static datadog.trace.api.config.GeneralConfig.PRIMARY_TAG +import static datadog.trace.api.datastreams.DataStreamsContext.create +import static datadog.trace.api.datastreams.DataStreamsContext.fromTags +import static datadog.trace.api.datastreams.PathwayContext.PROPAGATION_KEY_BASE64 import static java.util.concurrent.TimeUnit.MILLISECONDS class DefaultPathwayContextTest extends DDCoreSpecification { @@ -49,7 +51,7 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(50) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) then: context.isStarted() @@ -64,10 +66,10 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(50) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) timeSource.advance(25) context.setCheckpoint( - new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"]), pointConsumer) + fromTags(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"])), pointConsumer) then: context.isStarted() @@ -91,7 +93,8 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(25) context.setCheckpoint( - new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"]), pointConsumer, 0, 72) + create(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"]), 0, 72), + pointConsumer) then: context.isStarted() @@ -111,13 +114,13 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(50) - context.setCheckpoint(new LinkedHashMap<>(["direction": "out", "type": "kafka"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["direction": "out", "type": "kafka"])), pointConsumer) timeSource.advance(25) context.setCheckpoint( - new LinkedHashMap<>(["direction": "in", "group": "group", "topic": "topic", "type": "kafka"]), pointConsumer) + fromTags(new LinkedHashMap<>(["direction": "in", "group": "group", "topic": "topic", "type": "kafka"])), pointConsumer) timeSource.advance(30) context.setCheckpoint( - new LinkedHashMap<>(["direction": "in", "group": "group", "topic": "topic", "type": "kafka"]), pointConsumer) + fromTags(new LinkedHashMap<>(["direction": "in", "group": "group", "topic": "topic", "type": "kafka"])), pointConsumer) then: context.isStarted() @@ -163,12 +166,12 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(MILLISECONDS.toNanos(50)) - context.setCheckpoint(new LinkedHashMap<>(["type": "s3", "ds.namespace": "my_bucket", "ds.name": "my_object.csv", "direction": "in"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "s3", "ds.namespace": "my_bucket", "ds.name": "my_object.csv", "direction": "in"])), pointConsumer) def encoded = context.encode() timeSource.advance(MILLISECONDS.toNanos(2)) def decodedContext = DefaultPathwayContext.decode(timeSource, baseHash, null, encoded) timeSource.advance(MILLISECONDS.toNanos(25)) - context.setCheckpoint(new LinkedHashMap<>(["type": "s3", "ds.namespace": "my_bucket", "ds.name": "my_object.csv", "direction": "out"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "s3", "ds.namespace": "my_bucket", "ds.name": "my_object.csv", "direction": "out"])), pointConsumer) then: decodedContext.isStarted() @@ -189,12 +192,12 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(MILLISECONDS.toNanos(50)) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) def encoded = context.encode() timeSource.advance(MILLISECONDS.toNanos(2)) def decodedContext = DefaultPathwayContext.decode(timeSource, baseHash, null, encoded) timeSource.advance(MILLISECONDS.toNanos(25)) - context.setCheckpoint(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"])), pointConsumer) then: decodedContext.isStarted() @@ -216,7 +219,7 @@ class DefaultPathwayContextTest extends DDCoreSpecification { def context = new DefaultPathwayContext(timeSource, baseHash, null) def timeFromQueue = timeSource.getCurrentTimeMillis() - 200 when: - context.setCheckpoint(["type": "internal"], pointConsumer, timeFromQueue) + context.setCheckpoint(create(["type": "internal"], timeFromQueue, 0), pointConsumer) then: context.isStarted() pointConsumer.points.size() == 1 @@ -238,13 +241,13 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(MILLISECONDS.toNanos(50)) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) def encoded = context.encode() timeSource.advance(MILLISECONDS.toNanos(1)) def decodedContext = DefaultPathwayContext.decode(timeSource, baseHash, null, encoded) timeSource.advance(MILLISECONDS.toNanos(25)) - context.setCheckpoint(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"])), pointConsumer) then: decodedContext.isStarted() @@ -263,7 +266,7 @@ class DefaultPathwayContextTest extends DDCoreSpecification { timeSource.advance(MILLISECONDS.toNanos(2)) def secondDecode = DefaultPathwayContext.decode(timeSource, baseHash, null, secondEncode) timeSource.advance(MILLISECONDS.toNanos(30)) - context.setCheckpoint(new LinkedHashMap<>(["group": "group", "topic": "topicB", "type": "kafka"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["group": "group", "topic": "topicB", "type": "kafka"])), pointConsumer) then: secondDecode.isStarted() @@ -287,14 +290,14 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(MILLISECONDS.toNanos(50)) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) def encoded = context.encode() - Map carrier = [(PathwayContext.PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] + Map carrier = [(PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] timeSource.advance(MILLISECONDS.toNanos(1)) def decodedContext = DefaultPathwayContext.extract(carrier, contextVisitor, timeSource, baseHash, null) timeSource.advance(MILLISECONDS.toNanos(25)) - context.setCheckpoint(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "kafka"])), pointConsumer) then: decodedContext.isStarted() @@ -310,11 +313,11 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: def secondEncode = decodedContext.encode() - carrier = [(PathwayContext.PROPAGATION_KEY_BASE64): secondEncode] + carrier = [(PROPAGATION_KEY_BASE64): secondEncode] timeSource.advance(MILLISECONDS.toNanos(2)) def secondDecode = DefaultPathwayContext.extract(carrier, contextVisitor, timeSource, baseHash, null) timeSource.advance(MILLISECONDS.toNanos(30)) - context.setCheckpoint(new LinkedHashMap<>(["group": "group", "topic": "topicB", "type": "kafka"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["group": "group", "topic": "topicB", "type": "kafka"])), pointConsumer) then: secondDecode.isStarted() @@ -338,14 +341,14 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(MILLISECONDS.toNanos(50)) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) def encoded = context.encode() - Map carrier = [(PathwayContext.PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] + Map carrier = [(PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] timeSource.advance(MILLISECONDS.toNanos(1)) def decodedContext = DefaultPathwayContext.extract(carrier, contextVisitor, timeSource, baseHash, null) timeSource.advance(MILLISECONDS.toNanos(25)) - context.setCheckpoint(new LinkedHashMap<>(["topic": "topic", "type": "sqs"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["topic": "topic", "type": "sqs"])), pointConsumer) then: decodedContext.isStarted() @@ -361,11 +364,11 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: def secondEncode = decodedContext.encode() - carrier = [(PathwayContext.PROPAGATION_KEY_BASE64): secondEncode] + carrier = [(PROPAGATION_KEY_BASE64): secondEncode] timeSource.advance(MILLISECONDS.toNanos(2)) def secondDecode = DefaultPathwayContext.extract(carrier, contextVisitor, timeSource, baseHash, null) timeSource.advance(MILLISECONDS.toNanos(30)) - context.setCheckpoint(new LinkedHashMap<>(["topic": "topicB", "type": "sqs"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["topic": "topicB", "type": "sqs"])), pointConsumer) then: secondDecode.isStarted() @@ -387,11 +390,11 @@ class DefaultPathwayContextTest extends DDCoreSpecification { when: timeSource.advance(50) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) timeSource.advance(25) - context.setCheckpoint(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "type"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["group": "group", "topic": "topic", "type": "type"])), pointConsumer) timeSource.advance(25) - context.setCheckpoint(new LinkedHashMap<>(), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>()), pointConsumer) then: context.isStarted() @@ -446,16 +449,24 @@ class DefaultPathwayContextTest extends DDCoreSpecification { def context = new DefaultPathwayContext(timeSource, baseHash, null) timeSource.advance(MILLISECONDS.toNanos(50)) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) def encoded = context.encode() - Map carrier = [(PathwayContext.PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] + Map carrier = [(PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] def contextVisitor = new Base64MapContextVisitor() + def spanContext = new ExtractedContext(DDTraceId.ONE, 1, 0, null, 0, null, null, null, null, localTraceConfig, DATADOG) + def baseContext = AgentSpan.fromSpanContext(spanContext).storeInto(root()) + def propagator = dataStreams.propagator() + when: - def extractor = new FakeExtractor() - extractor.traceConfig = localTraceConfig - def decorated = dataStreams.extractor(extractor) - def extracted = decorated.extract(carrier, contextVisitor) + def extractedContext = propagator.extract(baseContext, carrier, contextVisitor) + def extractedSpan = AgentSpan.fromContext(extractedContext) + + then: + extractedSpan != null + + when: + def extracted = extractedSpan.context() then: extracted != null @@ -492,24 +503,25 @@ class DefaultPathwayContextTest extends DDCoreSpecification { def context = new DefaultPathwayContext(timeSource, baseHash, null) timeSource.advance(MILLISECONDS.toNanos(50)) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) def encoded = context.encode() - Map carrier = [(PathwayContext.PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] + Map carrier = [(PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] def contextVisitor = new Base64MapContextVisitor() - def extractor = new NullExtractor() - def decorated = dataStreams.extractor(extractor) + def propagator = dataStreams.propagator() when: - def extracted = decorated.extract(carrier, contextVisitor) + def extractedContext = propagator.extract(root(), carrier, contextVisitor) + def extractedSpan = AgentSpan.fromContext(extractedContext) then: - if (globalDsmEnabled) { + extractedSpan != null + def extracted = extractedSpan.context() extracted != null extracted.pathwayContext != null extracted.pathwayContext.isStarted() } else { - extracted == null + extractedSpan == null } where: @@ -533,15 +545,24 @@ class DefaultPathwayContextTest extends DDCoreSpecification { def context = new DefaultPathwayContext(timeSource, baseHash, null) timeSource.advance(MILLISECONDS.toNanos(50)) - context.setCheckpoint(new LinkedHashMap<>(["type": "internal"]), pointConsumer) + context.setCheckpoint(fromTags(new LinkedHashMap<>(["type": "internal"])), pointConsumer) def encoded = context.encode() - Map carrier = [(PathwayContext.PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] + Map carrier = [(PROPAGATION_KEY_BASE64): encoded, "someotherkey": "someothervalue"] def contextVisitor = new Base64MapContextVisitor() - def extractor = new FakeExtractor() - def decorated = dataStreams.extractor(extractor) + def spanContext = new ExtractedContext(DDTraceId.ONE, 1, 0, null, 0, null, null, null, null, null, DATADOG) + def baseContext = AgentSpan.fromSpanContext(spanContext).storeInto(root()) + def propagator = dataStreams.propagator() + + + when: + def extractedContext = propagator.extract(baseContext, carrier, contextVisitor) + def extractedSpan = AgentSpan.fromContext(extractedContext) + + then: + extractedSpan != null when: - def extracted = decorated.extract(carrier, contextVisitor) + def extracted = extractedSpan.context() then: extracted != null @@ -573,30 +594,14 @@ class DefaultPathwayContextTest extends DDCoreSpecification { Map carrier = ["someotherkey": "someothervalue"] def contextVisitor = new Base64MapContextVisitor() - def extractor = new NullExtractor() - def decorated = dataStreams.extractor(extractor) + def propagator = dataStreams.propagator() when: - def extracted = decorated.extract(carrier, contextVisitor) + def extractedContext = propagator.extract(root(), carrier, contextVisitor) + def extractedSpan = AgentSpan.fromContext(extractedContext) then: - extracted == null - } - - class FakeExtractor implements HttpCodec.Extractor { - TraceConfig traceConfig - - @Override - TagContext extract(C carrier, AgentPropagation.ContextVisitor getter) { - return new ExtractedContext(DDTraceId.ONE, 1, 0, null, 0, null, null, null, null, traceConfig, DATADOG) - } - } - - class NullExtractor implements HttpCodec.Extractor { - @Override - TagContext extract(C carrier, AgentPropagation.ContextVisitor getter) { - return null - } + extractedSpan == null } class Base64MapContextVisitor implements AgentPropagation.ContextVisitor> { diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/TypeConverterTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/TypeConverterTest.groovy index 56e4dfe1884..2bdceb91b0f 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/TypeConverterTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/TypeConverterTest.groovy @@ -15,7 +15,6 @@ import datadog.trace.test.util.DDSpecification import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpanContext -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopPathwayContext import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan class TypeConverterTest extends DDSpecification { diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/AgentDataStreamsMonitoring.java b/internal-api/src/main/java/datadog/trace/api/datastreams/AgentDataStreamsMonitoring.java index d1683696700..e6ddac36bac 100644 --- a/internal-api/src/main/java/datadog/trace/api/datastreams/AgentDataStreamsMonitoring.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/AgentDataStreamsMonitoring.java @@ -13,19 +13,9 @@ public interface AgentDataStreamsMonitoring extends DataStreamsCheckpointer { * Sets data streams checkpoint, used for both produce and consume operations. * * @param span active span - * @param sortedTags alphabetically sorted tags for the checkpoint (direction, queue type etc) - * @param defaultTimestamp unix timestamp to use as a start of the pathway if this is the first - * checkpoint in the chain. Zero should be passed if we can't extract the timestamp from the - * message / payload itself (for instance: produce operations; http produce / consume etc). - * Value will be ignored for checkpoints happening not at the start of the pipeline. - * @param payloadSizeBytes size of the message (body + headers) in bytes. Zero should be passed if - * the size cannot be evaluated. + * @param context the data streams context */ - void setCheckpoint( - AgentSpan span, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes); + void setCheckpoint(AgentSpan span, DataStreamsContext context); PathwayContext newPathwayContext(); diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java b/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java index 8cd0d6c33e0..ff9118df05d 100644 --- a/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/DataStreamsContext.java @@ -18,11 +18,29 @@ public static DataStreamsContext fromContext(Context context) { return context.get(CONTEXT_KEY); } + /** + * Creates a DSM context. + * + * @param sortedTags alphabetically sorted tags for the checkpoint (direction, queue type etc) + * @return the created context. + */ public static DataStreamsContext fromTags(LinkedHashMap sortedTags) { return new DataStreamsContext(sortedTags, 0, 0, true); } - public static DataStreamsContext fromKafka( + /** + * Creates a DSM context. + * + * @param sortedTags alphabetically sorted tags for the checkpoint (direction, queue type etc) + * @param defaultTimestamp unix timestamp to use as a start of the pathway if this is the first + * checkpoint in the chain. Zero should be passed if we can't extract the timestamp from the + * message / payload itself (for instance: produce operations; http produce / consume etc). + * Value will be ignored for checkpoints happening not at the start of the pipeline. + * @param payloadSizeBytes size of the message (body + headers) in bytes. Zero should be passed if + * the size cannot be evaluated. + * @return the created context. + */ + public static DataStreamsContext create( LinkedHashMap sortedTags, long defaultTimestamp, long payloadSizeBytes) { return new DataStreamsContext(sortedTags, defaultTimestamp, payloadSizeBytes, true); } diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/NoopDataStreamsMonitoring.java b/internal-api/src/main/java/datadog/trace/api/datastreams/NoopDataStreamsMonitoring.java index 88737bad3b3..020b492639d 100644 --- a/internal-api/src/main/java/datadog/trace/api/datastreams/NoopDataStreamsMonitoring.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/NoopDataStreamsMonitoring.java @@ -13,11 +13,7 @@ public class NoopDataStreamsMonitoring implements AgentDataStreamsMonitoring { public void trackBacklog(LinkedHashMap sortedTags, long value) {} @Override - public void setCheckpoint( - AgentSpan span, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes) {} + public void setCheckpoint(AgentSpan span, DataStreamsContext context) {} @Override public PathwayContext newPathwayContext() { diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/NoopPathwayContext.java b/internal-api/src/main/java/datadog/trace/api/datastreams/NoopPathwayContext.java index 84ccaac93c9..08e28ac83b0 100644 --- a/internal-api/src/main/java/datadog/trace/api/datastreams/NoopPathwayContext.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/NoopPathwayContext.java @@ -1,6 +1,5 @@ package datadog.trace.api.datastreams; -import java.util.LinkedHashMap; import java.util.function.Consumer; public class NoopPathwayContext implements PathwayContext { @@ -17,21 +16,7 @@ public long getHash() { } @Override - public void setCheckpoint( - LinkedHashMap sortedTags, - Consumer pointConsumer, - long defaultTimestamp, - long payloadSizeBytes) {} - - @Override - public void setCheckpoint( - LinkedHashMap sortedTags, - Consumer pointConsumer, - long defaultTimestamp) {} - - @Override - public void setCheckpoint( - LinkedHashMap sortedTags, Consumer pointConsumer) {} + public void setCheckpoint(DataStreamsContext context, Consumer pointConsumer) {} @Override public void saveStats(StatsPoint point) {} diff --git a/internal-api/src/main/java/datadog/trace/api/datastreams/PathwayContext.java b/internal-api/src/main/java/datadog/trace/api/datastreams/PathwayContext.java index da3c5bbca1e..f5a373e70ec 100644 --- a/internal-api/src/main/java/datadog/trace/api/datastreams/PathwayContext.java +++ b/internal-api/src/main/java/datadog/trace/api/datastreams/PathwayContext.java @@ -1,7 +1,6 @@ package datadog.trace.api.datastreams; import java.io.IOException; -import java.util.LinkedHashMap; import java.util.function.Consumer; public interface PathwayContext { @@ -12,19 +11,7 @@ public interface PathwayContext { long getHash(); - void setCheckpoint( - LinkedHashMap sortedTags, - Consumer pointConsumer, - long defaultTimestamp, - long payloadSizeBytes); - - void setCheckpoint( - LinkedHashMap sortedTags, - Consumer pointConsumer, - long defaultTimestamp); - - // The input tags should be sorted. - void setCheckpoint(LinkedHashMap sortedTags, Consumer pointConsumer); + void setCheckpoint(DataStreamsContext context, Consumer pointConsumer); void saveStats(StatsPoint point); 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 0fd8cbca94f..091c7465260 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 @@ -8,7 +8,6 @@ import datadog.context.propagation.CarrierVisitor; import datadog.context.propagation.Concern; import datadog.context.propagation.Propagators; -import java.util.LinkedHashMap; import java.util.function.BiConsumer; import javax.annotation.ParametersAreNonnullByDefault; @@ -20,21 +19,6 @@ public interface AgentPropagation { // TODO into the span context for now. Remove priority after the migration is complete. Concern DSM_CONCERN = withPriority("data-stream-monitoring", 110); - // The input tags should be sorted. - void injectPathwayContext( - AgentSpan span, C carrier, Setter setter, LinkedHashMap sortedTags); - - void injectPathwayContext( - AgentSpan span, - C carrier, - Setter setter, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes); - - void injectPathwayContextWithoutSendingStats( - AgentSpan span, C carrier, Setter setter, LinkedHashMap sortedTags); - interface Setter extends CarrierSetter { void set(C carrier, String key, String value); } diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java index d8b17a55d30..479f6b89307 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java @@ -21,7 +21,6 @@ import datadog.trace.context.TraceScope; import java.nio.ByteBuffer; import java.util.Collections; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.annotation.Nonnull; @@ -623,23 +622,6 @@ public void updatePreferredServiceName(String serviceName) { static class NoopAgentPropagation implements AgentPropagation { static final NoopAgentPropagation INSTANCE = new NoopAgentPropagation(); - - @Override - public void injectPathwayContext( - AgentSpan span, C carrier, Setter setter, LinkedHashMap sortedTags) {} - - @Override - public void injectPathwayContext( - AgentSpan span, - C carrier, - Setter setter, - LinkedHashMap sortedTags, - long defaultTimestamp, - long payloadSizeBytes) {} - - @Override - public void injectPathwayContextWithoutSendingStats( - AgentSpan span, C carrier, Setter setter, LinkedHashMap sortedTags) {} } public static class NoopAgentTraceCollector implements AgentTraceCollector { diff --git a/internal-api/src/test/groovy/datadog/trace/api/datastreams/DataStreamsContextTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/datastreams/DataStreamsContextTest.groovy index 8d3240ff8b4..a565e0ed5e0 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/datastreams/DataStreamsContextTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/datastreams/DataStreamsContextTest.groovy @@ -29,7 +29,7 @@ class DataStreamsContextTest extends Specification { when: def timestamp = 123L def payloadSize = 456L - dsmContext = DataStreamsContext.fromKafka(tags, timestamp, payloadSize) + dsmContext = DataStreamsContext.create(tags, timestamp, payloadSize) then: dsmContext.sortedTags() == tags From 997d94e0fdd15ec4b1d281193055936b821186ff Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Tue, 4 Feb 2025 13:59:02 +0100 Subject: [PATCH 7/7] chore(dsm): Update CODEOWNERS --- .github/CODEOWNERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8809726e680..3cf080e8154 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -65,3 +65,10 @@ dd-java-agent/instrumentation/spring-security-5/ @DataDog/asm-java # @DataDog/data-jobs-monitoring dd-java-agent/instrumentation/spark/ @DataDog/data-jobs-monitoring dd-java-agent/instrumentation/spark-executor/ @DataDog/data-jobs-monitoring + +# @DataDog/data-streams-monitoring +dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/datastreams @DataDog/data-streams-monitoring +dd-trace-core/src/main/java/datadog/trace/core/datastreams @DataDog/data-streams-monitoring +dd-trace-core/src/test/groovy/datadog/trace/core/datastreams @DataDog/data-streams-monitoring +internal-api/src/main/java/datadog/trace/api/datastreams @DataDog/data-streams-monitoring +internal-api/src/test/groovy/datadog/trace/api/datastreams @DataDog/data-streams-monitoring