Skip to content

Commit b8e7758

Browse files
authored
Supporting Baggage for Instrumentations used in Weblog Tests (#8773)
* supporting baggage in weblog related instrumentations resolve merge conflicts * simplifying startSpan * adding support for AzureFunctionsInstrumentation * cleanup * updateing grizzly instrumentations * updating PR comments and addressing failing unit tests * fixing ambiguous overloading tests * logging * logging 2 * spotless * spotlesS * updating tests * PR comments
1 parent de3871c commit b8e7758

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed

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

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

3+
import static datadog.context.Context.root;
4+
import static datadog.context.propagation.Propagators.defaultPropagator;
35
import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS;
46
import static datadog.trace.api.datastreams.DataStreamsContext.fromTags;
57
import static datadog.trace.api.gateway.Events.EVENTS;
@@ -8,6 +10,7 @@
810
import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR;
911

1012
import datadog.appsec.api.blocking.BlockingException;
13+
import datadog.context.Context;
1114
import datadog.trace.api.Config;
1215
import datadog.trace.api.DDTags;
1316
import datadog.trace.api.function.TriConsumer;
@@ -124,6 +127,7 @@ protected AgentTracer.TracerAPI tracer() {
124127
return AgentTracer.get();
125128
}
126129

130+
/** Deprecated. Use {@link #extractContext(REQUEST_CARRIER)} instead. */
127131
public AgentSpanContext.Extracted extract(REQUEST_CARRIER carrier) {
128132
AgentPropagation.ContextVisitor<REQUEST_CARRIER> getter = getter();
129133
if (null == carrier || null == getter) {
@@ -132,7 +136,18 @@ public AgentSpanContext.Extracted extract(REQUEST_CARRIER carrier) {
132136
return extractContextAndGetSpanContext(carrier, getter);
133137
}
134138

135-
/** Deprecated. Use {@link #startSpan(String, Object, AgentSpanContext.Extracted)} instead. */
139+
/**
140+
* Will be renamed to #extract(REQUEST_CARRIER) when refactoring of instrumentation's is complete
141+
*/
142+
public Context extractContext(REQUEST_CARRIER carrier) {
143+
AgentPropagation.ContextVisitor<REQUEST_CARRIER> getter = getter();
144+
if (null == carrier || null == getter) {
145+
return root();
146+
}
147+
return defaultPropagator().extract(root(), carrier, getter);
148+
}
149+
150+
/** Deprecated. Use {@link #startSpanFromContext(String, Object, Context)} instead. */
136151
@Deprecated
137152
public AgentSpan startSpan(REQUEST_CARRIER carrier, AgentSpanContext.Extracted context) {
138153
return startSpan("http-server", carrier, context);
@@ -155,6 +170,20 @@ public AgentSpan startSpan(
155170
return span;
156171
}
157172

173+
/**
174+
* Will be renamed to #startSpan(String, REQUEST_CARRIER, Context) when refactoring of
175+
* instrumentation's is complete
176+
*/
177+
public AgentSpan startSpanFromContext(
178+
String instrumentationName, REQUEST_CARRIER carrier, Context context) {
179+
return startSpan(instrumentationName, carrier, getSpanContext(context));
180+
}
181+
182+
public AgentSpanContext.Extracted getSpanContext(Context context) {
183+
AgentSpan extractedSpan = AgentSpan.fromContext(context);
184+
return extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context();
185+
}
186+
158187
public AgentSpan onRequest(
159188
final AgentSpan span,
160189
final CONNECTION connection,

dd-java-agent/instrumentation/okhttp-3/src/main/java/datadog/trace/instrumentation/okhttp3/TracingInterceptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static datadog.trace.instrumentation.okhttp3.OkHttpClientDecorator.OKHTTP_REQUEST;
99
import static datadog.trace.instrumentation.okhttp3.RequestBuilderInjectAdapter.SETTER;
1010

11+
import datadog.context.Context;
1112
import datadog.trace.api.datastreams.DataStreamsContext;
1213
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1314
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -31,7 +32,8 @@ public Response intercept(final Chain chain) throws IOException {
3132

3233
final Request.Builder requestBuilder = chain.request().newBuilder();
3334
DataStreamsContext dsmContext = DataStreamsContext.fromTags(CLIENT_PATHWAY_EDGE_TAGS);
34-
defaultPropagator().inject(span.with(dsmContext), requestBuilder, SETTER);
35+
defaultPropagator()
36+
.inject(Context.current().with(span).with(dsmContext), requestBuilder, SETTER);
3537

3638
final Response response;
3739
try {

dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1313

1414
import com.google.auto.service.AutoService;
15+
import datadog.context.Context;
16+
import datadog.context.ContextScope;
1517
import datadog.trace.agent.tooling.ExcludeFilterProvider;
1618
import datadog.trace.agent.tooling.Instrumenter;
1719
import datadog.trace.agent.tooling.InstrumenterModule;
1820
import datadog.trace.agent.tooling.muzzle.Reference;
1921
import datadog.trace.api.CorrelationIdentifier;
2022
import datadog.trace.api.GlobalTracer;
2123
import datadog.trace.api.gateway.Flow;
22-
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2324
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2425
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
2526
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
@@ -114,19 +115,22 @@ public void methodAdvice(MethodTransformer transformer) {
114115
public static class ServiceAdvice {
115116

116117
@Advice.OnMethodEnter(suppress = Throwable.class)
117-
public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request req) {
118+
public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Request req) {
118119

119120
Object existingSpan = req.getAttribute(DD_SPAN_ATTRIBUTE);
120121
if (existingSpan instanceof AgentSpan) {
121122
// Request already gone through initial processing, so just activate the span.
122123
return activateSpan((AgentSpan) existingSpan);
123124
}
124125

125-
final AgentSpanContext.Extracted extractedContext = DECORATE.extract(req);
126-
req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, extractedContext);
126+
final Context extractedContext = DECORATE.extractContext(req);
127+
// TODO: Migrate setting DD_EXTRACTED_CONTEXT_ATTRIBUTE from AgentSpanContext.Extracted to
128+
// Context
129+
req.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, DECORATE.getSpanContext(extractedContext));
130+
131+
final AgentSpan span = DECORATE.startSpanFromContext("http-server", req, extractedContext);
132+
final ContextScope scope = extractedContext.with(span).attach();
127133

128-
final AgentSpan span = DECORATE.startSpan(req, extractedContext);
129-
final AgentScope scope = activateSpan(span);
130134
// This span is finished when Request.recycle() is called by RequestInstrumentation.
131135
DECORATE.afterStart(span);
132136

@@ -137,7 +141,7 @@ public static AgentScope onService(@Advice.Argument(0) org.apache.coyote.Request
137141
}
138142

139143
@Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class)
140-
public static void closeScope(@Advice.Enter final AgentScope scope) {
144+
public static void closeScope(@Advice.Enter final ContextScope scope) {
141145
scope.close();
142146
}
143147

0 commit comments

Comments
 (0)