Skip to content

Commit 8c4249a

Browse files
committed
feat(core): Refactor propagation calls to the new inject API
1 parent 3f4b7a8 commit 8c4249a

File tree

77 files changed

+200
-87
lines changed

Some content is hidden

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

77 files changed

+200
-87
lines changed

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/httpurlconnection/HeadersInjectAdapter.java

+2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
44
import java.net.HttpURLConnection;
5+
import javax.annotation.ParametersAreNonnullByDefault;
56

7+
@ParametersAreNonnullByDefault
68
public class HeadersInjectAdapter implements AgentPropagation.Setter<HttpURLConnection> {
79

810
public static final HeadersInjectAdapter SETTER = new HeadersInjectAdapter();

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPayload.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package datadog.trace.bootstrap.instrumentation.rmi;
22

3-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
4-
3+
import datadog.context.propagation.Propagators;
54
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
65
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
76
import java.io.IOException;
87
import java.io.ObjectInput;
98
import java.io.ObjectOutput;
109
import java.util.HashMap;
1110
import java.util.Map;
11+
import javax.annotation.ParametersAreNonnullByDefault;
1212
import org.slf4j.Logger;
1313
import org.slf4j.LoggerFactory;
1414

@@ -33,7 +33,7 @@ public Map<String, String> getContext() {
3333

3434
public static ContextPayload from(final AgentSpan span) {
3535
final ContextPayload payload = new ContextPayload();
36-
propagate().inject(span, payload, SETTER);
36+
Propagators.defaultPropagator().inject(span, payload, SETTER);
3737
return payload;
3838
}
3939

@@ -54,6 +54,7 @@ public void write(final ObjectOutput out) throws IOException {
5454
out.writeObject(context);
5555
}
5656

57+
@ParametersAreNonnullByDefault
5758
public static class InjectAdapter implements AgentPropagation.Setter<ContextPayload> {
5859
@Override
5960
public void set(final ContextPayload carrier, final String key, final String value) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package datadog.trace.civisibility.domain.buildsystem;
22

3-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
4-
53
import datadog.communication.ddagent.TracerVersion;
4+
import datadog.context.propagation.Propagators;
65
import datadog.trace.api.Config;
76
import datadog.trace.api.DDTags;
87
import datadog.trace.api.civisibility.CIConstants;
@@ -33,10 +32,15 @@
3332
import datadog.trace.util.Strings;
3433
import java.net.InetSocketAddress;
3534
import java.nio.file.Path;
36-
import java.util.*;
35+
import java.util.Collection;
36+
import java.util.HashMap;
37+
import java.util.List;
38+
import java.util.Map;
39+
import java.util.Properties;
3740
import java.util.concurrent.atomic.LongAdder;
3841
import java.util.function.Consumer;
3942
import javax.annotation.Nullable;
43+
import javax.annotation.ParametersAreNonnullByDefault;
4044

4145
public class BuildSystemModuleImpl extends AbstractTestModule implements BuildSystemModule {
4246

@@ -105,6 +109,7 @@ public <T extends CoverageCalculator> BuildSystemModuleImpl(
105109
setTag(Tags.TEST_COMMAND, startCommand);
106110
}
107111

112+
@ParametersAreNonnullByDefault
108113
private static final class ChildProcessPropertiesPropagationSetter
109114
implements AgentPropagation.Setter<Map<String, String>> {
110115
static final AgentPropagation.Setter<Map<String, String>> INSTANCE =
@@ -221,7 +226,7 @@ private Map<String, String> getPropertiesPropagatedToChildProcess(
221226
}
222227

223228
// propagate module span context to child processes
224-
propagate()
229+
Propagators.defaultPropagator()
225230
.inject(span, propagatedSystemProperties, ChildProcessPropertiesPropagationSetter.INSTANCE);
226231

227232
return propagatedSystemProperties;

dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/AgentTextMapPropagator.java

+12-6
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import static datadog.opentelemetry.shim.trace.OtelSpanContext.fromRemote;
44
import static datadog.trace.api.TracePropagationStyle.TRACECONTEXT;
55

6+
import datadog.context.propagation.Propagators;
67
import datadog.opentelemetry.shim.context.OtelContext;
78
import datadog.opentelemetry.shim.trace.OtelExtractedContext;
89
import datadog.opentelemetry.shim.trace.OtelSpan;
910
import datadog.trace.api.TracePropagationStyle;
11+
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1012
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
1113
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext.Extracted;
1214
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
@@ -36,11 +38,7 @@ public <C> void inject(Context context, @Nullable C carrier, TextMapSetter<C> se
3638
if (carrier == null) {
3739
return;
3840
}
39-
Span span = Span.fromContext(context);
40-
if (span.getSpanContext().isValid()) {
41-
AgentSpanContext agentSpanContext = OtelExtractedContext.extract(context);
42-
AgentTracer.propagate().inject(agentSpanContext, carrier, setter::set);
43-
}
41+
Propagators.defaultPropagator().inject(convertContext(context), carrier, setter::set);
4442
}
4543

4644
@Override
@@ -66,15 +64,23 @@ public <C> Context extract(Context context, @Nullable C carrier, TextMapGetter<C
6664
}
6765
}
6866

67+
private static datadog.context.Context convertContext(Context context) {
68+
// TODO Extract baggage too
69+
// TODO Create fast path from OtelSpan --> AgentSpan delegate --> with() to inflate as full
70+
// context if baggage
71+
AgentSpanContext extract = OtelExtractedContext.extract(context);
72+
return AgentSpan.fromSpanContext(extract);
73+
}
74+
6975
/**
7076
* Extracts tracestate if {@code tracestate} header is present and extracted context comes from
7177
* {@link TracePropagationStyle#TRACECONTEXT}
7278
*
7379
* @param extracted The extracted context.
7480
* @param carrier The context carrier.
7581
* @param getter The context getter.
76-
* @return The extracted tracestate, or an empty tracestate otherwise.
7782
* @param <C> The carrier type.
83+
* @return The extracted tracestate, or an empty tracestate otherwise.
7884
*/
7985
private static <C> TraceState extractTraceState(
8086
Extracted extracted, C carrier, TextMapGetter<C> getter) {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ public AgentSpanContext getAgentSpanContext() {
172172

173173
@Override
174174
public AgentSpan asAgentSpan() {
175-
return delegate;
175+
return this.delegate;
176176
}
177177

178178
private static class NoopSpan implements Span {

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import akka.http.scaladsl.model.headers.CustomHeader;
99
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
1010
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
11+
import javax.annotation.ParametersAreNonnullByDefault;
1112
import scala.runtime.AbstractFunction1;
1213
import scala.util.Try;
1314

@@ -35,7 +36,7 @@ public Void apply(final Try<HttpResponse> result) {
3536
public static class AkkaHttpHeaders implements AgentPropagation.Setter<HttpRequest> {
3637
private HttpRequest request;
3738
// Did this request have a span when the AkkaHttpHeaders object was created?
38-
private boolean hadSpan;
39+
private final boolean hadSpan;
3940

4041
public AkkaHttpHeaders(final HttpRequest request) {
4142
hadSpan = request != null && request.getHeader(HasSpanHeader.class).isPresent();
@@ -51,6 +52,7 @@ public boolean hadSpan() {
5152
return hadSpan;
5253
}
5354

55+
@ParametersAreNonnullByDefault
5456
@Override
5557
public void set(final HttpRequest carrier, final String key, final String value) {
5658
// Coerce a Scala trait Self type into the correct type

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import akka.http.scaladsl.model.HttpRequest;
1515
import akka.http.scaladsl.model.HttpResponse;
1616
import com.google.auto.service.AutoService;
17+
import datadog.context.propagation.Propagators;
1718
import datadog.trace.agent.tooling.Instrumenter;
1819
import datadog.trace.agent.tooling.InstrumenterModule;
1920
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
@@ -78,7 +79,7 @@ public static AgentScope methodEnter(
7879
DECORATE.onRequest(span, request);
7980

8081
if (request != null) {
81-
propagate().inject(span, request, headers);
82+
Propagators.defaultPropagator().inject(span, request, headers);
8283
propagate()
8384
.injectPathwayContext(
8485
span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import akka.http.scaladsl.HttpExt;
88
import akka.http.scaladsl.model.HttpRequest;
99
import akka.http.scaladsl.model.HttpResponse;
10+
import datadog.context.propagation.Propagators;
1011
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1112
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1213
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
@@ -28,7 +29,7 @@ public static AgentScope methodEnter(
2829
AkkaHttpClientDecorator.DECORATE.onRequest(span, request);
2930

3031
if (request != null) {
31-
propagate().inject(span, request, headers);
32+
Propagators.defaultPropagator().inject(span, request, headers);
3233
propagate()
3334
.injectPathwayContext(
3435
span, request, headers, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static datadog.trace.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientDecorator.DECORATE;
55
import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInjectAdapter.SETTER;
66

7+
import datadog.context.propagation.Propagators;
78
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
89
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
910
import java.io.IOException;
@@ -34,7 +35,7 @@ public HttpRequest generateRequest() throws IOException, HttpException {
3435
final HttpRequest request = delegate.generateRequest();
3536
DECORATE.onRequest(span, new HostAndRequestAsHttpUriRequest(delegate.getTarget(), request));
3637

37-
propagate().inject(span, request, SETTER);
38+
Propagators.defaultPropagator().inject(span, request, SETTER);
3839
propagate()
3940
.injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);
4041

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

+2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package datadog.trace.instrumentation.apachehttpasyncclient;
22

33
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
4+
import javax.annotation.ParametersAreNonnullByDefault;
45
import org.apache.http.HttpRequest;
56

7+
@ParametersAreNonnullByDefault
68
public class HttpHeadersInjectAdapter implements AgentPropagation.Setter<HttpRequest> {
79

810
public static final HttpHeadersInjectAdapter SETTER = new HttpHeadersInjectAdapter();

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.HTTP_REQUEST;
88
import static datadog.trace.instrumentation.apachehttpclient.HttpHeadersInjectAdapter.SETTER;
99

10+
import datadog.context.propagation.Propagators;
1011
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
1112
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1213
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -45,7 +46,7 @@ private static AgentScope activateHttpSpan(final HttpUriRequest request) {
4546

4647
// AWS calls are often signed, so we can't add headers without breaking the signature.
4748
if (!awsClientCall) {
48-
propagate().inject(span, request, SETTER);
49+
Propagators.defaultPropagator().inject(span, request, SETTER);
4950
propagate()
5051
.injectPathwayContext(
5152
span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);

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

+2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package datadog.trace.instrumentation.apachehttpclient;
22

33
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
4+
import javax.annotation.ParametersAreNonnullByDefault;
45
import org.apache.http.client.methods.HttpUriRequest;
56

7+
@ParametersAreNonnullByDefault
68
public class HttpHeadersInjectAdapter implements AgentPropagation.Setter<HttpUriRequest> {
79

810
public static final HttpHeadersInjectAdapter SETTER = new HttpHeadersInjectAdapter();

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE;
55
import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER;
66

7+
import datadog.context.propagation.Propagators;
78
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
89
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
910
import java.io.IOException;
@@ -27,7 +28,7 @@ public void sendRequest(HttpRequest request, EntityDetails entityDetails, HttpCo
2728
throws HttpException, IOException {
2829
DECORATE.onRequest(span, request);
2930

30-
propagate().inject(span, request, SETTER);
31+
Propagators.defaultPropagator().inject(span, request, SETTER);
3132
propagate()
3233
.injectPathwayContext(span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);
3334
delegate.sendRequest(request, entityDetails, context);

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.HTTP_REQUEST;
88
import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER;
99

10+
import datadog.context.propagation.Propagators;
1011
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
1112
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1213
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -45,7 +46,7 @@ private static AgentScope activateHttpSpan(final HttpRequest request) {
4546
final boolean awsClientCall = request.containsHeader("amz-sdk-invocation-id");
4647
// AWS calls are often signed, so we can't add headers without breaking the signature.
4748
if (!awsClientCall) {
48-
propagate().inject(span, request, SETTER);
49+
Propagators.defaultPropagator().inject(span, request, SETTER);
4950
propagate()
5051
.injectPathwayContext(
5152
span, request, SETTER, HttpClientDecorator.CLIENT_PATHWAY_EDGE_TAGS);

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

+2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package datadog.trace.instrumentation.apachehttpclient5;
22

33
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
4+
import javax.annotation.ParametersAreNonnullByDefault;
45
import org.apache.hc.core5.http.HttpRequest;
56

7+
@ParametersAreNonnullByDefault
68
public class HttpHeadersInjectAdapter implements AgentPropagation.Setter<HttpRequest> {
79

810
public static final HttpHeadersInjectAdapter SETTER = new HttpHeadersInjectAdapter();

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
1717

1818
import com.google.auto.service.AutoService;
19+
import datadog.context.propagation.Propagators;
1920
import datadog.trace.agent.tooling.Instrumenter;
2021
import datadog.trace.agent.tooling.InstrumenterModule;
2122
import datadog.trace.agent.tooling.muzzle.Reference;
@@ -120,7 +121,7 @@ public static <T> AgentScope before(
120121
if (null != responseListener && null != headers) {
121122
span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call);
122123
if (null != span) {
123-
propagate().inject(span, headers, SETTER);
124+
Propagators.defaultPropagator().inject(span, headers, SETTER);
124125
propagate().injectPathwayContext(span, headers, SETTER, CLIENT_PATHWAY_EDGE_TAGS);
125126
return activateSpan(span);
126127
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
44
import io.grpc.Metadata;
5+
import javax.annotation.ParametersAreNonnullByDefault;
56

7+
@ParametersAreNonnullByDefault
68
public final class GrpcInjectAdapter implements AgentPropagation.Setter<Metadata> {
79

810
public static final GrpcInjectAdapter SETTER = new GrpcInjectAdapter();

dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static datadog.trace.core.datastreams.TagsProcessor.TYPE_TAG;
99
import static datadog.trace.instrumentation.aws.v2.eventbridge.TextMapInjectAdapter.SETTER;
1010

11+
import datadog.context.propagation.Propagators;
1112
import datadog.trace.bootstrap.InstanceStore;
1213
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1314
import datadog.trace.bootstrap.instrumentation.api.PathwayContext;
@@ -86,7 +87,7 @@ private String getTraceContextToInject(
8687
jsonBuilder.append('{');
8788

8889
// Inject trace context
89-
propagate().inject(span, jsonBuilder, SETTER);
90+
Propagators.defaultPropagator().inject(span, jsonBuilder, SETTER);
9091

9192
if (traceConfig().isDataStreamsEnabled()) {
9293
propagate().injectPathwayContext(span, jsonBuilder, SETTER, getTags(eventBusName));

dd-java-agent/instrumentation/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/TextMapInjectAdapter.java

+2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package datadog.trace.instrumentation.aws.v2.eventbridge;
22

33
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
4+
import javax.annotation.ParametersAreNonnullByDefault;
45

6+
@ParametersAreNonnullByDefault
57
public class TextMapInjectAdapter implements AgentPropagation.Setter<StringBuilder> {
68

79
public static final TextMapInjectAdapter SETTER = new TextMapInjectAdapter();

dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/AwsSdkClientDecorator.java

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.Locale;
2929
import java.util.regex.Matcher;
3030
import java.util.regex.Pattern;
31+
import javax.annotation.ParametersAreNonnullByDefault;
3132

3233
public class AwsSdkClientDecorator extends HttpClientDecorator<Request, Response>
3334
implements AgentPropagation.Setter<Request<?>> {

dd-java-agent/instrumentation/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ private ByteBuffer getMessageAttributeValueToInject(
3737
final AgentSpan span = newSpan(request);
3838
StringBuilder jsonBuilder = new StringBuilder();
3939
jsonBuilder.append('{');
40-
propagate().inject(span, jsonBuilder, SETTER, TracePropagationStyle.DATADOG);
40+
propagate()
41+
.inject(
42+
span,
43+
jsonBuilder,
44+
SETTER,
45+
TracePropagationStyle.DATADOG); // TODO Is forcing Datadog encoding on purpose?
4146
if (traceConfig().isDataStreamsEnabled()) {
4247
propagate().injectPathwayContext(span, jsonBuilder, SETTER, getTags(snsTopicName));
4348
}

0 commit comments

Comments
 (0)