Skip to content

Commit 3f4b7a8

Browse files
feat(core): Extract and refactor span and scope implementations from tracer (#8321)
Add dedicated noop methods for span, span context and scope Remove unused eligibleForDropping method Improve Javadoc
1 parent 7ebf343 commit 3f4b7a8

File tree

47 files changed

+952
-791
lines changed

Some content is hidden

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

47 files changed

+952
-791
lines changed

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/concurrent/ConcurrentState.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import datadog.trace.bootstrap.ContextStore;
66
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
7-
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
87
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
98
import org.slf4j.Logger;
109
import org.slf4j.LoggerFactory;
@@ -32,7 +31,7 @@ private ConcurrentState() {}
3231
public static <K> ConcurrentState captureScope(
3332
ContextStore<K, ConcurrentState> contextStore, K key, AgentScope scope) {
3433
if (scope != null && scope.isAsyncPropagating()) {
35-
if (scope.span() instanceof AgentTracer.NoopAgentSpan) {
34+
if (!scope.span().isValid()) {
3635
return null;
3736
}
3837
final ConcurrentState state = contextStore.putIfAbsent(key, FACTORY);

dd-java-agent/instrumentation/akka-concurrent/src/main/java/datadog/trace/instrumentation/akka/concurrent/AkkaActorCellInstrumentation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
55
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope;
66
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
7+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan;
78
import static java.util.Collections.singletonMap;
89
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
910

@@ -13,7 +14,6 @@
1314
import datadog.trace.agent.tooling.InstrumenterModule;
1415
import datadog.trace.bootstrap.InstrumentationContext;
1516
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
16-
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
1717
import datadog.trace.bootstrap.instrumentation.java.concurrent.AdviceUtils;
1818
import datadog.trace.bootstrap.instrumentation.java.concurrent.State;
1919
import java.util.Map;
@@ -72,11 +72,11 @@ public static AgentScope enter(
7272
return null;
7373
}
7474
// If there is a noop span in the active scope, we can clean all the way to this scope
75-
if (activeSpan() instanceof AgentTracer.NoopAgentSpan) {
75+
if (activeSpan() == noopSpan()) {
7676
return activeScope;
7777
}
7878
// Create an active scope with a noop span, and clean all the way to the previous scope
79-
localScope = activateSpan(AgentTracer.NoopAgentSpan.INSTANCE, false);
79+
localScope = activateSpan(noopSpan(), false);
8080
return activeScope;
8181
}
8282

dd-java-agent/instrumentation/akka-concurrent/src/main/java/datadog/trace/instrumentation/akka/concurrent/AkkaMailboxInstrumentation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
55
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope;
66
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
7+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan;
78
import static java.util.Collections.singletonList;
89
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
910

@@ -12,7 +13,6 @@
1213
import datadog.trace.agent.tooling.Instrumenter;
1314
import datadog.trace.agent.tooling.InstrumenterModule;
1415
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
15-
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
1616
import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter;
1717
import java.util.Collection;
1818
import java.util.EnumMap;
@@ -69,11 +69,11 @@ public static AgentScope enter() {
6969
return null;
7070
}
7171
// If there is a noop span in the active scope, we can clean all the way to this scope
72-
if (activeSpan() instanceof AgentTracer.NoopAgentSpan) {
72+
if (activeSpan() == noopSpan()) {
7373
return activeScope;
7474
}
7575
// Create an active scope with a noop span, and clean all the way to the previous scope
76-
activateSpan(AgentTracer.NoopAgentSpan.INSTANCE, false);
76+
activateSpan(noopSpan(), false);
7777
return activeScope;
7878
}
7979

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import datadog.trace.agent.tooling.Instrumenter;
1313
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1414
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
15-
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
1615
import net.bytebuddy.asm.Advice;
1716

1817
/**
@@ -50,7 +49,7 @@ public static void methodExit(
5049
// check name in case TracingRequestHandler failed to activate the span
5150
if (scope != null
5251
&& (AwsNameCache.spanName(request).equals(scope.span().getSpanName())
53-
|| scope.span() instanceof AgentTracer.NoopAgentSpan)) {
52+
|| !scope.span().isValid())) {
5453
scope.close();
5554
}
5655

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import datadog.trace.agent.tooling.Instrumenter;
1111
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1212
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
13-
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
1413
import net.bytebuddy.asm.Advice;
1514

1615
/**
@@ -47,7 +46,7 @@ public static void methodExit(
4746
// check name in case TracingRequestHandler failed to activate the span
4847
if (scope != null
4948
&& (AwsNameCache.spanName(request).equals(scope.span().getSpanName())
50-
|| scope.span() instanceof AgentTracer.NoopAgentSpan)) {
49+
|| !scope.span().isValid())) {
5150
scope.close();
5251
}
5352

dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import datadog.trace.agent.tooling.Instrumenter;
1616
import datadog.trace.agent.tooling.InstrumenterModule;
1717
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
18-
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
1918
import net.bytebuddy.asm.Advice;
2019
import net.bytebuddy.description.type.TypeDescription;
2120
import net.bytebuddy.matcher.ElementMatcher;
@@ -76,7 +75,7 @@ public static AgentScope methodEnter(
7675
final AgentScope scope = activeScope();
7776
// check name in case TracingExecutionInterceptor failed to activate the span
7877
if (scope != null
79-
&& (scope.span() instanceof AgentTracer.NoopAgentSpan
78+
&& ((!scope.span().isValid())
8079
|| AwsSdkClientDecorator.DECORATE
8180
.spanName(requestExecutionContext.executionAttributes())
8281
.equals(scope.span().getSpanName()))) {

dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
66
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
77
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
8+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope;
89
import static datadog.trace.instrumentation.netty40.AttributeKeys.SPAN_ATTRIBUTE_KEY;
910
import static datadog.trace.instrumentation.netty40.NettyChannelPipelineInstrumentation.ADDITIONAL_INSTRUMENTATION_NAMES;
1011
import static datadog.trace.instrumentation.netty40.NettyChannelPipelineInstrumentation.INSTRUMENTATION_NAME;
@@ -16,7 +17,6 @@
1617
import datadog.trace.agent.tooling.InstrumenterModule;
1718
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1819
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
19-
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
2020
import datadog.trace.instrumentation.netty40.client.NettyHttpClientDecorator;
2121
import datadog.trace.instrumentation.netty40.server.NettyHttpServerDecorator;
2222
import io.netty.channel.ChannelHandlerContext;
@@ -72,7 +72,7 @@ public static AgentScope scopeSpan(@Advice.This final ChannelHandlerContext ctx)
7272
final AgentSpan channelSpan = ctx.channel().attr(SPAN_ATTRIBUTE_KEY).get();
7373
if (channelSpan == null || channelSpan == activeSpan()) {
7474
// don't modify the scope
75-
return AgentTracer.NoopAgentScope.INSTANCE;
75+
return noopScope();
7676
}
7777
return activateSpan(channelSpan);
7878
}

dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
66
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
77
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
8+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope;
89
import static datadog.trace.instrumentation.netty41.AttributeKeys.SPAN_ATTRIBUTE_KEY;
910
import static datadog.trace.instrumentation.netty41.NettyChannelPipelineInstrumentation.ADDITIONAL_INSTRUMENTATION_NAMES;
1011
import static datadog.trace.instrumentation.netty41.NettyChannelPipelineInstrumentation.INSTRUMENTATION_NAME;
@@ -16,7 +17,6 @@
1617
import datadog.trace.agent.tooling.InstrumenterModule;
1718
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1819
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
19-
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
2020
import datadog.trace.instrumentation.netty41.client.NettyHttpClientDecorator;
2121
import datadog.trace.instrumentation.netty41.server.NettyHttpServerDecorator;
2222
import io.netty.channel.ChannelHandlerContext;
@@ -72,7 +72,7 @@ public static AgentScope scopeSpan(@Advice.This final ChannelHandlerContext ctx)
7272
final AgentSpan channelSpan = ctx.channel().attr(SPAN_ATTRIBUTE_KEY).get();
7373
if (channelSpan == null || channelSpan == activeSpan()) {
7474
// don't modify the scope
75-
return AgentTracer.NoopAgentScope.INSTANCE;
75+
return noopScope();
7676
}
7777
return activateSpan(channelSpan);
7878
}

dd-java-agent/instrumentation/okhttp-2/src/test/groovy/OkHttp2AsyncTest.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentTracer
77
import java.util.concurrent.CountDownLatch
88
import java.util.concurrent.atomic.AtomicReference
99

10+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan
1011
import static java.util.concurrent.TimeUnit.SECONDS
1112

1213
abstract class OkHttp2AsyncTest extends OkHttp2Test {
@@ -52,7 +53,7 @@ abstract class OkHttp2AsyncTest extends OkHttp2Test {
5253
def "callbacks should carry context with error = #error" () {
5354

5455
when:
55-
def captured = AgentTracer.noopSpan()
56+
def captured = noopSpan()
5657
try {
5758
TraceUtils.runUnderTrace("parent", {
5859
doRequest(method, url, ["Datadog-Meta-Lang": "java"], "", { captured = AgentTracer.activeSpan() })

dd-java-agent/instrumentation/okhttp-3/src/test/groovy/OkHttp3AsyncTest.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import okhttp3.internal.http.HttpMethod
1313
import java.util.concurrent.CountDownLatch
1414
import java.util.concurrent.atomic.AtomicReference
1515

16+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan
1617
import static java.util.concurrent.TimeUnit.SECONDS
1718

1819
abstract class OkHttp3AsyncTest extends OkHttp3Test {
@@ -52,7 +53,7 @@ abstract class OkHttp3AsyncTest extends OkHttp3Test {
5253
def "callbacks should carry context with error = #error" () {
5354

5455
when:
55-
def captured = AgentTracer.noopSpan()
56+
def captured = noopSpan()
5657
try {
5758
TraceUtils.runUnderTrace("parent", {
5859
doRequest(method, url, ["Datadog-Meta-Lang": "java"], "", { captured = AgentTracer.activeSpan() })

0 commit comments

Comments
 (0)