Skip to content

Commit 2d7d791

Browse files
Migrate DSM injection calls to context-first APIs (#8383)
* feat(dsm): Implement DSM context injection * feat(dsm): Migrate DSM injection call to propagator * feat(dsm): Refactor DSM API into its own package * feat(dsm): Clean up API * chore(dsm): Update CODEOWNERS
1 parent 8316649 commit 2d7d791

File tree

118 files changed

+779
-868
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+779
-868
lines changed

.github/CODEOWNERS

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,10 @@ dd-java-agent/instrumentation/spring-security-5/ @DataDog/asm-java
6565
# @DataDog/data-jobs-monitoring
6666
dd-java-agent/instrumentation/spark/ @DataDog/data-jobs-monitoring
6767
dd-java-agent/instrumentation/spark-executor/ @DataDog/data-jobs-monitoring
68+
69+
# @DataDog/data-streams-monitoring
70+
dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/datastreams @DataDog/data-streams-monitoring
71+
dd-trace-core/src/main/java/datadog/trace/core/datastreams @DataDog/data-streams-monitoring
72+
dd-trace-core/src/test/groovy/datadog/trace/core/datastreams @DataDog/data-streams-monitoring
73+
internal-api/src/main/java/datadog/trace/api/datastreams @DataDog/data-streams-monitoring
74+
internal-api/src/test/groovy/datadog/trace/api/datastreams @DataDog/data-streams-monitoring

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.trace.bootstrap.instrumentation.decorator;
22

33
import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS;
4+
import static datadog.trace.api.datastreams.DataStreamsContext.fromTags;
45
import static datadog.trace.api.gateway.Events.EVENTS;
56
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig;
67
import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR;
@@ -148,7 +149,7 @@ public AgentSpan startSpan(
148149
}
149150
AgentPropagation.ContextVisitor<REQUEST_CARRIER> getter = getter();
150151
if (null != carrier && null != getter) {
151-
tracer().getDataStreamsMonitoring().setCheckpoint(span, SERVER_PATHWAY_EDGE_TAGS, 0, 0);
152+
tracer().getDataStreamsMonitoring().setCheckpoint(span, fromTags(SERVER_PATHWAY_EDGE_TAGS));
152153
}
153154
return span;
154155
}

dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelExtractedContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import datadog.trace.api.DDSpanId;
44
import datadog.trace.api.DDTraceId;
5+
import datadog.trace.api.datastreams.PathwayContext;
56
import datadog.trace.api.sampling.PrioritySampling;
67
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
78
import datadog.trace.bootstrap.instrumentation.api.AgentTraceCollector;
89
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
9-
import datadog.trace.bootstrap.instrumentation.api.PathwayContext;
1010
import io.opentelemetry.api.trace.Span;
1111
import io.opentelemetry.api.trace.SpanContext;
1212
import io.opentelemetry.context.Context;

dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import static datadog.context.propagation.Propagators.defaultPropagator;
44
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
55
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
6-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
76
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
7+
import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS;
88
import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.AKKA_CLIENT_REQUEST;
99
import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.DECORATE;
1010
import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientHelpers.AkkaHttpHeaders;
@@ -17,9 +17,9 @@
1717
import com.google.auto.service.AutoService;
1818
import datadog.trace.agent.tooling.Instrumenter;
1919
import datadog.trace.agent.tooling.InstrumenterModule;
20+
import datadog.trace.api.datastreams.DataStreamsContext;
2021
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2122
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
22-
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
2323
import net.bytebuddy.asm.Advice;
2424
import scala.concurrent.Future;
2525

@@ -79,10 +79,8 @@ public static AgentScope methodEnter(
7979
DECORATE.onRequest(span, request);
8080

8181
if (request != null) {
82-
defaultPropagator().inject(span, request, headers);
83-
propagate()
84-
.injectPathwayContext(
85-
span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);
82+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS);
83+
defaultPropagator().inject(span.with(dsmContext), request, headers);
8684
// Request is immutable, so we have to assign new value once we update headers
8785
request = headers.getRequest();
8886
}

dd-java-agent/instrumentation/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import static datadog.context.propagation.Propagators.defaultPropagator;
44
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
5-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
65
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
6+
import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS;
77

88
import akka.http.scaladsl.HttpExt;
99
import akka.http.scaladsl.model.HttpRequest;
1010
import akka.http.scaladsl.model.HttpResponse;
11+
import datadog.trace.api.datastreams.DataStreamsContext;
1112
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1213
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
13-
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
1414
import net.bytebuddy.asm.Advice;
1515
import scala.concurrent.Future;
1616

@@ -29,10 +29,8 @@ public static AgentScope methodEnter(
2929
AkkaHttpClientDecorator.DECORATE.onRequest(span, request);
3030

3131
if (request != null) {
32-
defaultPropagator().inject(span, request, headers);
33-
propagate()
34-
.injectPathwayContext(
35-
span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);
32+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS);
33+
defaultPropagator().inject(span.with(dsmContext), request, headers);
3634
// Request is immutable, so we have to assign new value once we update headers
3735
request = headers.getRequest();
3836
}

dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/DelegatingRequestProducer.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package datadog.trace.instrumentation.apachehttpasyncclient;
22

33
import static datadog.context.propagation.Propagators.defaultPropagator;
4-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
4+
import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS;
55
import static datadog.trace.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientDecorator.DECORATE;
66
import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInjectAdapter.SETTER;
77

8+
import datadog.trace.api.datastreams.DataStreamsContext;
89
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
9-
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
1010
import java.io.IOException;
1111
import org.apache.http.HttpException;
1212
import org.apache.http.HttpHost;
@@ -35,9 +35,8 @@ public HttpRequest generateRequest() throws IOException, HttpException {
3535
final HttpRequest request = delegate.generateRequest();
3636
DECORATE.onRequest(span, new HostAndRequestAsHttpUriRequest(delegate.getTarget(), request));
3737

38-
defaultPropagator().inject(span, request, SETTER);
39-
propagate()
40-
.injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);
38+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS);
39+
defaultPropagator().inject(span.with(dsmContext), request, SETTER);
4140

4241
return request;
4342
}

dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
import static datadog.context.propagation.Propagators.defaultPropagator;
44
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
5-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
65
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
6+
import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS;
77
import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.DECORATE;
88
import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.HTTP_REQUEST;
99
import static datadog.trace.instrumentation.apachehttpclient.HttpHeadersInjectAdapter.SETTER;
1010

11+
import datadog.trace.api.datastreams.DataStreamsContext;
1112
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
1213
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1314
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
14-
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
1515
import org.apache.http.HttpHost;
1616
import org.apache.http.HttpRequest;
1717
import org.apache.http.HttpResponse;
@@ -46,10 +46,8 @@ private static AgentScope activateHttpSpan(final HttpUriRequest request) {
4646

4747
// AWS calls are often signed, so we can't add headers without breaking the signature.
4848
if (!awsClientCall) {
49-
defaultPropagator().inject(span, request, SETTER);
50-
propagate()
51-
.injectPathwayContext(
52-
span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);
49+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS);
50+
defaultPropagator().inject(span.with(dsmContext), request, SETTER);
5351
}
5452

5553
return scope;

dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/DelegatingRequestChannel.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package datadog.trace.instrumentation.apachehttpclient5;
22

33
import static datadog.context.propagation.Propagators.defaultPropagator;
4-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
4+
import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS;
55
import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE;
66
import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER;
77

8+
import datadog.trace.api.datastreams.DataStreamsContext;
89
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
9-
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
1010
import java.io.IOException;
1111
import org.apache.hc.core5.http.EntityDetails;
1212
import org.apache.hc.core5.http.HttpException;
@@ -28,9 +28,8 @@ public void sendRequest(HttpRequest request, EntityDetails entityDetails, HttpCo
2828
throws HttpException, IOException {
2929
DECORATE.onRequest(span, request);
3030

31-
defaultPropagator().inject(span, request, SETTER);
32-
propagate()
33-
.injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);
31+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS);
32+
defaultPropagator().inject(span.with(dsmContext), request, SETTER);
3433
delegate.sendRequest(request, entityDetails, context);
3534
}
3635
}

dd-java-agent/instrumentation/apache-httpclient-5/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
import static datadog.context.propagation.Propagators.defaultPropagator;
44
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
5-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
65
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
6+
import static datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS;
77
import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE;
88
import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.HTTP_REQUEST;
99
import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER;
1010

11+
import datadog.trace.api.datastreams.DataStreamsContext;
1112
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
1213
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1314
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
14-
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
1515
import org.apache.hc.client5.http.classic.HttpClient;
1616
import org.apache.hc.core5.http.HttpHost;
1717
import org.apache.hc.core5.http.HttpRequest;
@@ -46,10 +46,8 @@ private static AgentScope activateHttpSpan(final HttpRequest request) {
4646
final boolean awsClientCall = request.containsHeader("amz-sdk-invocation-id");
4747
// AWS calls are often signed, so we can't add headers without breaking the signature.
4848
if (!awsClientCall) {
49-
defaultPropagator().inject(span, request, SETTER);
50-
propagate()
51-
.injectPathwayContext(
52-
span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);
49+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS);
50+
defaultPropagator().inject(span.with(dsmContext), request, SETTER);
5351
}
5452

5553
return scope;

dd-java-agent/instrumentation/armeria-grpc/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
55
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
66
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
7-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
87
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
98
import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.CLIENT_PATHWAY_EDGE_TAGS;
109
import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.DECORATE;
@@ -21,6 +20,7 @@
2120
import datadog.trace.agent.tooling.InstrumenterModule;
2221
import datadog.trace.agent.tooling.muzzle.Reference;
2322
import datadog.trace.api.InstrumenterConfig;
23+
import datadog.trace.api.datastreams.DataStreamsContext;
2424
import datadog.trace.bootstrap.InstrumentationContext;
2525
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2626
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -121,8 +121,8 @@ public static <T> AgentScope before(
121121
if (null != responseListener && null != headers) {
122122
span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call);
123123
if (null != span) {
124-
defaultPropagator().inject(span, headers, SETTER);
125-
propagate().injectPathwayContext(span, headers, SETTER, CLIENT_PATHWAY_EDGE_TAGS);
124+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS);
125+
defaultPropagator().inject(span.with(dsmContext), headers, SETTER);
126126
return activateSpan(span);
127127
}
128128
}

0 commit comments

Comments
 (0)