Skip to content

Commit added74

Browse files
Migrate context injection calls to context-first APIs (#8358)
* feat(core): Refactor propagation calls to the new inject API * feat(core): Migrate X-Ray inject calls to new API * feat(core): Implement standalone ASM propagator * feat(aws-sns): Switch AWS SNS to default propagator (like AWS SNS 2) * chore(ci): Increase limit of Muzzle
1 parent 987006c commit added74

File tree

87 files changed

+371
-99
lines changed

Some content is hidden

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

87 files changed

+371
-99
lines changed

.circleci/config.continue.yml.j2

+2-2
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,7 @@ jobs:
767767

768768
muzzle:
769769
<<: *defaults
770-
resource_class: medium
770+
resource_class: medium+
771771
parallelism: 4
772772
steps:
773773
- setup_code
@@ -798,7 +798,7 @@ jobs:
798798
name: Verify Muzzle
799799
command: >-
800800
SKIP_BUILDSCAN="true"
801-
GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
801+
GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx3G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
802802
./gradlew `circleci tests split --split-by=timings workspace/build/muzzleTasks | xargs`
803803
<< pipeline.parameters.gradle_flags >>
804804
--max-workers=4

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-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.trace.bootstrap.instrumentation.rmi;
22

3-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
3+
import static datadog.context.propagation.Propagators.defaultPropagator;
44

55
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
66
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -9,6 +9,7 @@
99
import java.io.ObjectOutput;
1010
import java.util.HashMap;
1111
import java.util.Map;
12+
import javax.annotation.ParametersAreNonnullByDefault;
1213
import org.slf4j.Logger;
1314
import org.slf4j.LoggerFactory;
1415

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

3435
public static ContextPayload from(final AgentSpan span) {
3536
final ContextPayload payload = new ContextPayload();
36-
propagate().inject(span, payload, SETTER);
37+
defaultPropagator().inject(span, payload, SETTER);
3738
return payload;
3839
}
3940

@@ -54,6 +55,7 @@ public void write(final ObjectOutput out) throws IOException {
5455
out.writeObject(context);
5556
}
5657

58+
@ParametersAreNonnullByDefault
5759
public static class InjectAdapter implements AgentPropagation.Setter<ContextPayload> {
5860
@Override
5961
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-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.trace.civisibility.domain.buildsystem;
22

3-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
3+
import static datadog.context.propagation.Propagators.defaultPropagator;
44

55
import datadog.communication.ddagent.TracerVersion;
66
import datadog.trace.api.Config;
@@ -33,10 +33,15 @@
3333
import datadog.trace.util.Strings;
3434
import java.net.InetSocketAddress;
3535
import java.nio.file.Path;
36-
import java.util.*;
36+
import java.util.Collection;
37+
import java.util.HashMap;
38+
import java.util.List;
39+
import java.util.Map;
40+
import java.util.Properties;
3741
import java.util.concurrent.atomic.LongAdder;
3842
import java.util.function.Consumer;
3943
import javax.annotation.Nullable;
44+
import javax.annotation.ParametersAreNonnullByDefault;
4045

4146
public class BuildSystemModuleImpl extends AbstractTestModule implements BuildSystemModule {
4247

@@ -105,6 +110,7 @@ public <T extends CoverageCalculator> BuildSystemModuleImpl(
105110
setTag(Tags.TEST_COMMAND, startCommand);
106111
}
107112

113+
@ParametersAreNonnullByDefault
108114
private static final class ChildProcessPropertiesPropagationSetter
109115
implements AgentPropagation.Setter<Map<String, String>> {
110116
static final AgentPropagation.Setter<Map<String, String>> INSTANCE =
@@ -221,7 +227,7 @@ private Map<String, String> getPropertiesPropagatedToChildProcess(
221227
}
222228

223229
// propagate module span context to child processes
224-
propagate()
230+
defaultPropagator()
225231
.inject(span, propagatedSystemProperties, ChildProcessPropertiesPropagationSetter.INSTANCE);
226232

227233
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
@@ -1,12 +1,14 @@
11
package datadog.opentelemetry.shim.context.propagation;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.opentelemetry.shim.trace.OtelSpanContext.fromRemote;
45
import static datadog.trace.api.TracePropagationStyle.TRACECONTEXT;
56

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+
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
@@ -1,5 +1,6 @@
11
package datadog.trace.instrumentation.akkahttp;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
45
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
56
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
@@ -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+
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
@@ -1,5 +1,6 @@
11
package datadog.trace.instrumentation.akkahttp106;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
45
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
56
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
@@ -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+
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
@@ -1,5 +1,6 @@
11
package datadog.trace.instrumentation.apachehttpasyncclient;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
45
import static datadog.trace.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientDecorator.DECORATE;
56
import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInjectAdapter.SETTER;
@@ -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+
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
@@ -1,5 +1,6 @@
11
package datadog.trace.instrumentation.apachehttpclient;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
45
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
56
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
@@ -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+
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
@@ -1,5 +1,6 @@
11
package datadog.trace.instrumentation.apachehttpclient5;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
45
import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE;
56
import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER;
@@ -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+
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
@@ -1,5 +1,6 @@
11
package datadog.trace.instrumentation.apachehttpclient5;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
45
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
56
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
@@ -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+
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
@@ -1,5 +1,6 @@
11
package datadog.trace.instrumentation.armeria.grpc.client;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
45
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
56
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
@@ -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+
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
@@ -1,5 +1,6 @@
11
package datadog.trace.instrumentation.aws.v2.eventbridge;
22

3+
import static datadog.context.propagation.Propagators.defaultPropagator;
34
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
45
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig;
56
import static datadog.trace.core.datastreams.TagsProcessor.BUS_TAG;
@@ -86,7 +87,7 @@ private String getTraceContextToInject(
8687
jsonBuilder.append('{');
8788

8889
// Inject trace context
89-
propagate().inject(span, jsonBuilder, SETTER);
90+
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

+2
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<?>> {
@@ -332,6 +333,7 @@ protected int status(final Response response) {
332333
return response.getHttpResponse().getStatusCode();
333334
}
334335

336+
@ParametersAreNonnullByDefault
335337
@Override
336338
public void set(Request<?> carrier, String key, String value) {
337339
carrier.addHeader(key, value);

0 commit comments

Comments
 (0)