Skip to content

Commit 44f8ed9

Browse files
committed
feat(play): Improve context usage in advice
1 parent 57e8038 commit 44f8ed9

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import datadog.context.Context;
1010
import datadog.context.ContextScope;
1111
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
12+
import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge;
1213
import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities;
1314
import net.bytebuddy.asm.Advice;
1415
import play.api.mvc.Action;
@@ -19,9 +20,8 @@
1920

2021
public class PlayAdvice {
2122
@Advice.OnMethodEnter(suppress = Throwable.class)
22-
public static ContextScope onEnter(
23-
@Advice.Argument(value = 0, readOnly = false) Request<?> req,
24-
@Advice.Local("extractedContext") Context extractedContext) {
23+
public static ContextScope onEnter(@Advice.Argument(value = 0, readOnly = false) Request<?> req) {
24+
final Context parentContext;
2525
final AgentSpan span;
2626
final ContextScope scope;
2727

@@ -32,13 +32,14 @@ public static ContextScope onEnter(
3232

3333
if (activeSpan() == null) {
3434
final Headers headers = req.headers();
35-
extractedContext = DECORATE.extract(headers);
36-
final Context context = DECORATE.startSpan(headers, extractedContext);
35+
parentContext = DECORATE.extract(headers);
36+
final Context context = DECORATE.startSpan(headers, parentContext);
3737
span = spanFromContext(context);
3838
scope = context.attach();
3939
} else {
4040
// An upstream framework (e.g. akka-http, netty) has already started the span.
4141
// Do not extract the context.
42+
parentContext = Java8BytecodeBridge.getRootContext();
4243
span = startSpan("play", PLAY_REQUEST);
4344
scope = span.attach();
4445
}
@@ -50,15 +51,14 @@ public static ContextScope onEnter(
5051

5152
// Moved from OnMethodExit
5253
// Call onRequest on return after tags are populated.
53-
DECORATE.onRequest(span, req, req, extractedContext);
54+
DECORATE.onRequest(span, req, req, parentContext);
5455

5556
return scope;
5657
}
5758

5859
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5960
public static void stopTraceOnResponse(
6061
@Advice.Enter final ContextScope playControllerScope,
61-
@Advice.Local("extractedContext") Context extractedContext,
6262
@Advice.This final Object thisAction,
6363
@Advice.Thrown final Throwable throwable,
6464
@Advice.Argument(0) final Request<?> req,

dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayHttpServerDecorator.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static datadog.trace.api.gateway.Events.EVENTS;
44
import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR;
55

6+
import datadog.context.Context;
67
import datadog.trace.api.Config;
78
import datadog.trace.api.cache.DDCache;
89
import datadog.trace.api.cache.DDCaches;
@@ -11,7 +12,6 @@
1112
import datadog.trace.api.gateway.RequestContextSlot;
1213
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
1314
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
14-
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
1515
import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities;
1616
import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter;
1717
import datadog.trace.bootstrap.instrumentation.api.URIUtils;
@@ -36,7 +36,7 @@
3636
import scala.Option;
3737

3838
public class PlayHttpServerDecorator
39-
extends HttpServerDecorator<Request, Request, Result, Headers> {
39+
extends HttpServerDecorator<Request<?>, Request<?>, Result, Headers> {
4040
private static final Logger LOG = LoggerFactory.getLogger(PlayHttpServerDecorator.class);
4141
public static final boolean REPORT_HTTP_STATUS = Config.get().getPlayReportHttpStatus();
4242
public static final CharSequence PLAY_REQUEST = UTF8BytesString.create("play.request");
@@ -96,17 +96,17 @@ public CharSequence spanName() {
9696
}
9797

9898
@Override
99-
protected String method(final Request httpRequest) {
99+
protected String method(final Request<?> httpRequest) {
100100
return httpRequest.method();
101101
}
102102

103103
@Override
104-
protected URIDataAdapter url(final Request request) {
104+
protected URIDataAdapter url(final Request<?> request) {
105105
return new RequestURIDataAdapter(request);
106106
}
107107

108108
@Override
109-
protected String peerHostIP(final Request request) {
109+
protected String peerHostIP(final Request<?> request) {
110110
RemoteConnection connection = request.connection();
111111
if (connection instanceof RemoteConnectionWithRawAddress) {
112112
return ((RemoteConnectionWithRawAddress) connection).rawRemoteAddressString();
@@ -116,7 +116,7 @@ protected String peerHostIP(final Request request) {
116116
}
117117

118118
@Override
119-
protected int peerPort(final Request request) {
119+
protected int peerPort(final Request<?> request) {
120120
return 0;
121121
}
122122

@@ -128,9 +128,9 @@ protected int status(final Result httpResponse) {
128128
@Override
129129
public AgentSpan onRequest(
130130
final AgentSpan span,
131-
final Request connection,
132-
final Request request,
133-
AgentSpanContext.Extracted context) {
131+
final Request<?> connection,
132+
final Request<?> request,
133+
final Context context) {
134134
super.onRequest(span, connection, request, context);
135135
if (request != null) {
136136
// more about routes here:

0 commit comments

Comments
 (0)