From b4dd86872e764893d8daca6c7e1383fa994be894 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Thu, 17 Sep 2026 23:12:21 +0100 Subject: [PATCH 01/20] Decouple AgentScope from TraceScope --- dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java | 2 +- .../java/datadog/trace/core/scopemanager/ContinuableScope.java | 2 -- .../trace/bootstrap/instrumentation/api/AgentScope.java | 3 +-- .../trace/bootstrap/instrumentation/api/AgentTracer.java | 2 +- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index e9e130847b9..8ba76b99eb3 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -1502,7 +1502,7 @@ public boolean addTraceInterceptor(final TraceInterceptor interceptor) { @Override public TraceScope muteTracing() { - return activateSpan(blackholeSpan()); + return activateSpan(blackholeSpan())::close; } @Override diff --git a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java index ba7e5288a68..127f05fee24 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java @@ -123,7 +123,6 @@ final boolean alive() { return referenceCount > 0; } - @Override public final boolean isAsyncPropagating() { return asyncPropagating; } @@ -138,7 +137,6 @@ public Context context() { return context; } - @Override public final void setAsyncPropagation(final boolean value) { asyncPropagating = value; } diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentScope.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentScope.java index 39741a55c3e..d85644b287a 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentScope.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentScope.java @@ -2,10 +2,9 @@ import datadog.context.Context; import datadog.context.ContextScope; -import datadog.trace.context.TraceScope; import java.io.Closeable; -public interface AgentScope extends ContextScope, TraceScope, Closeable { +public interface AgentScope extends ContextScope, Closeable { AgentSpan span(); @Override diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java index a40bf5e7603..32a2293e92d 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java @@ -608,7 +608,7 @@ public boolean addTraceInterceptor(final TraceInterceptor traceInterceptor) { @Override public TraceScope muteTracing() { - return NoopScope.INSTANCE; + return NoopTraceScope.INSTANCE; } @Override From 0aaa8d9f4e67c1f4999a0f66413e18b867e97ba6 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Thu, 17 Sep 2026 23:17:05 +0100 Subject: [PATCH 02/20] Introduce AgentSpan.fromScope helper --- .../instrumentation/api/Java8BytecodeBridge.java | 8 ++++++++ .../trace/bootstrap/instrumentation/api/AgentSpan.java | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java index 99c7cb700e1..d749dd4c372 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java @@ -1,6 +1,7 @@ package datadog.trace.bootstrap.instrumentation.api; import datadog.context.Context; +import datadog.context.ContextScope; /** * A helper for accessing methods that rely on new Java 8 bytecode features such as calling a static @@ -38,6 +39,13 @@ public static AgentSpan spanFromContext(Context context) { return AgentSpan.fromContext(context); } + /** + * @see AgentSpan#fromScope(ContextScope) + */ + public static AgentSpan spanFromScope(ContextScope scope) { + return AgentSpan.fromScope(scope); + } + /** * @see Baggage#fromContext(Context) */ diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java index dd17b8ccc7c..94c0f80572a 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java @@ -45,6 +45,16 @@ static AgentSpan fromContext(Context context) { return context == null ? null : context.get(SPAN_KEY); } + /** + * Extracts the span from the given {@link ContextScope}. + * + * @param scope the context scope to extract the span from. + * @return the span if existing, {@code null} otherwise. + */ + static AgentSpan fromScope(ContextScope scope) { + return scope == null ? null : scope.context().get(SPAN_KEY); + } + /** * Creates a span wrapper from a span context. * From d0a920073165ccd58a0bbd64a25e14276182dce5 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Thu, 17 Sep 2026 23:57:22 +0100 Subject: [PATCH 03/20] Migrate AgentScope to ContextScope (internal-api) --- .../instrumentation/api/AgentTracer.java | 16 ++++++++-------- .../bootstrap/instrumentation/api/NoopScope.java | 7 +++++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java index 32a2293e92d..71767ea7fae 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java @@ -77,7 +77,7 @@ public static AgentSpan startSpan( return get().startSpan(prototype, operationName); } - public static AgentScope activateSpan(final AgentSpan span) { + public static ContextScope activateSpan(final AgentSpan span) { return get().activateSpan(span); } @@ -139,7 +139,7 @@ public static void closePrevious(final boolean finishSpan) { * * @see datadog.trace.api.config.TracerConfig#SCOPE_ITERATION_KEEP_ALIVE */ - public static AgentScope activateNext(final AgentSpan span) { + public static ContextScope activateNext(final AgentSpan span) { return get().activateNext(span); } @@ -288,10 +288,10 @@ AgentSpan startSpan( long startTimeMicros); /** Activate a span from inside auto-instrumentation. */ - AgentScope activateSpan(AgentSpan span); + ContextScope activateSpan(AgentSpan span); /** Activate a span from outside auto-instrumentation, i.e. a manual or custom span. */ - AgentScope activateManualSpan(AgentSpan span); + ContextScope activateManualSpan(AgentSpan span); /** Activate a span which will be closed by {@link #closeActive()} instead of a scope. */ void activateSpanWithoutScope(AgentSpan span); @@ -314,7 +314,7 @@ default TraceScope.Continuation captureActiveSpan() { void closePrevious(boolean finishSpan); - AgentScope activateNext(AgentSpan span); + ContextScope activateNext(AgentSpan span); AgentSpan activeSpan(); @@ -488,12 +488,12 @@ public AgentSpan startSpan( } @Override - public AgentScope activateSpan(final AgentSpan span) { + public ContextScope activateSpan(final AgentSpan span) { return NoopScope.INSTANCE; } @Override - public AgentScope activateManualSpan(final AgentSpan span) { + public ContextScope activateManualSpan(final AgentSpan span) { return NoopScope.INSTANCE; } @@ -521,7 +521,7 @@ public void closeActive() {} public void closePrevious(final boolean finishSpan) {} @Override - public AgentScope activateNext(final AgentSpan span) { + public ContextScope activateNext(final AgentSpan span) { return NoopScope.INSTANCE; } diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/NoopScope.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/NoopScope.java index f77750a4710..5347b5de1c7 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/NoopScope.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/NoopScope.java @@ -1,12 +1,15 @@ package datadog.trace.bootstrap.instrumentation.api; -public final class NoopScope implements AgentScope { +import datadog.context.Context; +import datadog.context.ContextScope; + +public final class NoopScope implements ContextScope { public static final NoopScope INSTANCE = new NoopScope(); private NoopScope() {} @Override - public AgentSpan span() { + public Context context() { return NoopSpan.INSTANCE; } From 6692762c55b97dfb0c2845ee4652ae43d5e73080 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Thu, 17 Sep 2026 23:58:05 +0100 Subject: [PATCH 04/20] Migrate AgentScope to ContextScope (dd-trace-core) --- .../trace/core/ScopeLifecycleBenchmark.java | 14 +-- .../java/datadog/trace/core/CoreTracer.java | 9 +- .../core/scopemanager/ContinuableScope.java | 5 +- .../scopemanager/ContinuableScopeManager.java | 13 +- .../datadog/trace/core/BlackholeSpanTest.java | 6 +- .../trace/core/CoreSpanBuilderTest.java | 7 +- .../core/PendingTraceStrictWriteTest.java | 6 +- .../datadog/trace/core/PendingTraceTest.java | 4 +- .../trace/core/TraceCorrelationTest.java | 15 +-- .../core/datastreams/CheckpointerTest.java | 4 +- .../core/propagation/W3CHttpInjectorTest.java | 4 +- .../IterationSpansForkedTest.java | 42 +++---- .../scopemanager/ScopeManagerDepthTest.java | 10 +- .../scopemanager/ScopeManagerForkedTest.java | 113 +++++++++--------- 14 files changed, 125 insertions(+), 127 deletions(-) diff --git a/dd-trace-core/src/jmh/java/datadog/trace/core/ScopeLifecycleBenchmark.java b/dd-trace-core/src/jmh/java/datadog/trace/core/ScopeLifecycleBenchmark.java index 1a1de2bc795..0c3186e71ac 100644 --- a/dd-trace-core/src/jmh/java/datadog/trace/core/ScopeLifecycleBenchmark.java +++ b/dd-trace-core/src/jmh/java/datadog/trace/core/ScopeLifecycleBenchmark.java @@ -2,7 +2,7 @@ import static java.util.concurrent.TimeUnit.MICROSECONDS; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; @@ -32,7 +32,7 @@ public class ScopeLifecycleBenchmark { public static class ThreadState { AgentSpan span; AgentSpan childSpan; - AgentScope activeScope; + ContextScope activeScope; @Setup(Level.Iteration) public void setup() { @@ -51,22 +51,22 @@ public void tearDown() { @Benchmark public void activateAndClose(ThreadState state) { - AgentScope scope = TRACER.activateSpan(state.span); + ContextScope scope = TRACER.activateSpan(state.span); scope.close(); } @Benchmark public void activateSameSpan(ThreadState state) { - AgentScope outer = TRACER.activateSpan(state.span); - AgentScope inner = TRACER.activateSpan(state.span); + ContextScope outer = TRACER.activateSpan(state.span); + ContextScope inner = TRACER.activateSpan(state.span); inner.close(); outer.close(); } @Benchmark public void nestedActivateAndClose(ThreadState state) { - AgentScope parentScope = TRACER.activateSpan(state.span); - AgentScope childScope = TRACER.activateSpan(state.childSpan); + ContextScope parentScope = TRACER.activateSpan(state.span); + ContextScope childScope = TRACER.activateSpan(state.childSpan); childScope.close(); parentScope.close(); } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index 8ba76b99eb3..44fbbe4fe23 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -66,7 +66,6 @@ import datadog.trace.api.scopemanager.ScopeListener; import datadog.trace.api.time.SystemTimeSource; import datadog.trace.api.time.TimeSource; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpanLink; @@ -1226,12 +1225,12 @@ public AgentSpan startSpan( } @Override - public AgentScope activateSpan(AgentSpan span) { + public ContextScope activateSpan(AgentSpan span) { return scopeManager.activateSpan(span); } @Override - public AgentScope activateManualSpan(final AgentSpan span) { + public ContextScope activateManualSpan(final AgentSpan span) { return scopeManager.activateManualSpan(span); } @@ -1261,7 +1260,7 @@ public void closePrevious(boolean finishSpan) { } @Override - public AgentScope activateNext(AgentSpan span) { + public ContextScope activateNext(AgentSpan span) { if (!InstrumenterConfig.get().isLegacyContextManagerEnabled()) { throw new IllegalStateException( "activateNext must not be called when context swap based logic is enabled"); @@ -1302,7 +1301,7 @@ public void rollbackActiveToCheckpoint() { @Override public void closeActive() { - AgentScope activeScope = this.scopeManager.active(); + ContextScope activeScope = this.scopeManager.active(); if (activeScope != null) { activeScope.close(); } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java index 127f05fee24..0f6feaf095c 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScope.java @@ -1,13 +1,13 @@ package datadog.trace.core.scopemanager; import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.api.Stateful; import datadog.trace.api.scopemanager.ExtendedScopeListener; import datadog.trace.api.scopemanager.ScopeListener; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -class ContinuableScope implements AgentScope { +class ContinuableScope implements ContextScope { // different sources of scopes static final byte INSTRUMENTATION = 0; @@ -127,7 +127,6 @@ public final boolean isAsyncPropagating() { return asyncPropagating; } - @Override public final AgentSpan span() { return AgentSpan.fromContext(context); } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java index 33e6580574e..7f0e1a92c1e 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ContinuableScopeManager.java @@ -19,7 +19,6 @@ import datadog.trace.api.Stateful; import datadog.trace.api.scopemanager.ExtendedScopeListener; import datadog.trace.api.scopemanager.ScopeListener; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTraceCollector; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -100,15 +99,15 @@ public ContinuableScopeManager( !(profilingContextIntegration instanceof ProfilingContextIntegration.NoOp); } - public AgentScope activateSpan(final AgentSpan span) { + public ContextScope activateSpan(final AgentSpan span) { return activate(span, INSTRUMENTATION, true, DEFAULT_ASYNC_PROPAGATING); } - public AgentScope activateManualSpan(final AgentSpan span) { + public ContextScope activateManualSpan(final AgentSpan span) { return activate(span, MANUAL, false, /* ignored */ false); } - private AgentScope activate( + private ContextScope activate( final AgentSpan span, final byte source, final boolean overrideAsyncPropagation, @@ -149,7 +148,7 @@ private AgentScope activate( return scope; } - private AgentScope activate(final Context context) { + private ContextScope activate(final Context context) { ScopeStack scopeStack = scopeStack(); final ContinuableScope top = scopeStack.top; @@ -250,7 +249,7 @@ public void closePrevious(final boolean finishSpan) { } } - public AgentScope activateNext(final AgentSpan span) { + public ContextScope activateNext(final AgentSpan span) { ScopeStack scopeStack = scopeStack(); final int currentDepth = scopeStack.depth(); @@ -279,7 +278,7 @@ public AgentScope activateNext(final AgentSpan span) { return scope; } - public AgentScope active() { + public ContextScope active() { return scopeStack().active(); } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/BlackholeSpanTest.java b/dd-trace-core/src/test/java/datadog/trace/core/BlackholeSpanTest.java index d6b35bc93dc..4d0e94b5369 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/BlackholeSpanTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/BlackholeSpanTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.common.writer.ListWriter; import java.util.Arrays; @@ -24,13 +24,13 @@ void shouldMuteTracing(String use128bitTraceId) throws Exception { CoreTracer tracer = tracerBuilder().withProperties(props).writer(writer).build(); try { AgentSpan root = tracer.startSpan("test", "root"); - AgentScope scope1 = tracer.activateSpan(root); + ContextScope scope1 = tracer.activateSpan(root); AgentSpan bh; AgentSpan ignored; AgentSpan child; try { bh = tracer.blackholeSpan(); - AgentScope scope2 = tracer.activateSpan(bh); + ContextScope scope2 = tracer.activateSpan(bh); try { ignored = tracer.startSpan("test", "ignored"); ignored.finish(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/CoreSpanBuilderTest.java b/dd-trace-core/src/test/java/datadog/trace/core/CoreSpanBuilderTest.java index 9d9367551a7..0b119c0fe3f 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/CoreSpanBuilderTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/CoreSpanBuilderTest.java @@ -23,6 +23,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import datadog.context.ContextScope; import datadog.trace.api.Config; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; @@ -31,7 +32,6 @@ import datadog.trace.api.gateway.RequestContextSlot; import datadog.trace.api.naming.SpanNaming; import datadog.trace.api.sampling.PrioritySampling; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanLink; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -210,12 +210,13 @@ void shouldLinkToParentSpan() { }) void shouldLinkToParentSpanImplicitly( boolean noopParent, String serviceName, boolean expectTopLevel) { - try (AgentScope parent = + try (ContextScope parent = tracer.activateSpan( noopParent ? noopSpan() : tracer.buildSpan("test", "parent").withServiceName("service").start())) { - long expectedParentId = noopParent ? DDSpanId.ZERO : parent.span().spanContext().getSpanId(); + long expectedParentId = + noopParent ? DDSpanId.ZERO : AgentSpan.fromScope(parent).spanContext().getSpanId(); DDSpan span = (DDSpan) tracer.buildSpan("test", "fakeName").withServiceName(serviceName).start(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceStrictWriteTest.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceStrictWriteTest.java index ea187ab9ef0..309ac1db3ba 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceStrictWriteTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceStrictWriteTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import datadog.context.ContextContinuation; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import java.util.ArrayList; import java.util.Arrays; import org.junit.jupiter.api.Test; @@ -14,7 +14,7 @@ public class PendingTraceStrictWriteTest extends PendingTraceTestBase { @Test void traceNotReportedUntilContinuationClosed() throws InterruptedException { - AgentScope scope = tracer.activateSpan(rootSpan); + ContextScope scope = tracer.activateSpan(rootSpan); ContextContinuation continuation = tracer.capture(rootSpan); scope.close(); rootSpan.finish(); @@ -40,7 +40,7 @@ void traceNotReportedUntilContinuationClosed() throws InterruptedException { @Test void negativeReferenceCountThrowsException() { - AgentScope scope = tracer.activateSpan(rootSpan); + ContextScope scope = tracer.activateSpan(rootSpan); ContextContinuation continuation = tracer.capture(rootSpan); scope.close(); rootSpan.finish(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTest.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTest.java index ff9f23841a1..7d47a0b17c5 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTest.java @@ -9,11 +9,11 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import datadog.context.ContextScope; import datadog.environment.JavaVirtualMachine; import datadog.trace.api.DDTraceId; import datadog.trace.api.datastreams.NoopPathwayContext; import datadog.trace.api.time.TimeSource; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.core.monitor.HealthMetrics; import datadog.trace.core.propagation.PropagationTags; import java.util.ArrayList; @@ -78,7 +78,7 @@ private DDSpan createSimpleSpanWithID(PendingTrace trace, long id) { @Test void traceStillReportedWhenUnfinishedContinuationDiscarded() throws InterruptedException, TimeoutException { - AgentScope scope = tracer.activateSpan(rootSpan); + ContextScope scope = tracer.activateSpan(rootSpan); tracer.capture(rootSpan); scope.close(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/TraceCorrelationTest.java b/dd-trace-core/src/test/java/datadog/trace/core/TraceCorrelationTest.java index 1310d0f5820..c7f63ce836e 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/TraceCorrelationTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/TraceCorrelationTest.java @@ -4,8 +4,8 @@ import static datadog.trace.api.config.TracerConfig.TRACE_128_BIT_TRACEID_GENERATION_ENABLED; import static org.junit.jupiter.api.Assertions.assertEquals; +import datadog.context.ContextScope; import datadog.trace.api.DDTraceId; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.common.writer.ListWriter; import datadog.trace.test.junit.utils.config.WithConfigExtension; @@ -25,7 +25,7 @@ void getTraceIdWithoutTrace(boolean log128bTraceId) { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); AgentSpan span = tracer.buildSpan("datadog", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); scope.close(); assertEquals("0", tracer.getTraceId()); @@ -44,9 +44,9 @@ void getTraceIdWithTrace(boolean log128bTraceId) { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); AgentSpan span = tracer.buildSpan("datadog", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); - DDTraceId traceId = ((DDSpan) scope.span()).getTraceId(); + DDTraceId traceId = ((DDSpan) AgentSpan.fromScope(scope)).getTraceId(); String formattedTraceId = log128bTraceId ? traceId.toHexString() : traceId.toString(); assertEquals(formattedTraceId, tracer.getTraceId()); @@ -59,7 +59,7 @@ void getTraceIdWithTrace(boolean log128bTraceId) { void getSpanIdWithoutSpan() { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); AgentSpan span = tracer.buildSpan("datadog", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); scope.close(); assertEquals("0", tracer.getSpanId()); @@ -72,9 +72,10 @@ void getSpanIdWithoutSpan() { void getSpanIdWithTrace() { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); AgentSpan span = tracer.buildSpan("datadog", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); - assertEquals(Long.toString(((DDSpan) scope.span()).getSpanId()), tracer.getSpanId()); + assertEquals( + Long.toString(((DDSpan) AgentSpan.fromScope(scope)).getSpanId()), tracer.getSpanId()); scope.close(); span.finish(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/datastreams/CheckpointerTest.java b/dd-trace-core/src/test/java/datadog/trace/core/datastreams/CheckpointerTest.java index 07681335c4c..9fd36af327d 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/datastreams/CheckpointerTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/datastreams/CheckpointerTest.java @@ -4,9 +4,9 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import datadog.context.ContextScope; import datadog.trace.api.experimental.DataStreamsCheckpointer; import datadog.trace.api.experimental.DataStreamsContextCarrier; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.core.CoreTracer; @@ -32,7 +32,7 @@ void testSettingProduceAndConsumeCheckpoint() { CustomContextCarrier carrier = new CustomContextCarrier(); // Start and activate a span AgentSpan span = tracer.buildSpan("test", "dsm-checkpoint").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); // Trigger produce checkpoint checkpointer.setProduceCheckpoint("kafka", "testTopic", carrier); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java index 9903867e1c4..d8d13351782 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java @@ -10,9 +10,9 @@ import static java.util.Collections.singletonMap; import static org.junit.jupiter.api.Assertions.assertEquals; +import datadog.context.ContextScope; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.core.DDSpanContext; import datadog.trace.test.junit.utils.converter.PrioritySamplingConverter; @@ -130,7 +130,7 @@ void updateLastParentIdOnChildSpan() { // injecting root span context AgentSpan rootSpan = this.tracer.startSpan("test", "root"); long rootSpanId = rootSpan.getSpanId(); - AgentScope rootScope = this.tracer.activateSpan(rootSpan); + ContextScope rootScope = this.tracer.activateSpan(rootSpan); this.injector.inject((DDSpanContext) rootSpan.spanContext(), carrier, Map::put); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/IterationSpansForkedTest.java b/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/IterationSpansForkedTest.java index 576864a43e5..c73471994df 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/IterationSpansForkedTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/IterationSpansForkedTest.java @@ -7,8 +7,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; +import datadog.context.ContextScope; import datadog.metrics.api.statsd.StatsDClient; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.common.writer.ListWriter; import datadog.trace.core.CoreTracer; @@ -44,32 +44,32 @@ void cleanup() throws Exception { void rootIterationScopeLifecycle() throws Exception { tracer.closePrevious(true); AgentSpan span1 = tracer.buildSpan("datadog", "next1").start(); - AgentScope scope1 = tracer.activateNext(span1); + ContextScope scope1 = tracer.activateNext(span1); assertTrue(writer.isEmpty()); - assertSame(span1, scope1.span()); + assertSame(span1, AgentSpan.fromScope(scope1)); assertSame(span1, tracer.activeSpan()); assertFalse(spanFinished(span1)); tracer.closePrevious(true); AgentSpan span2 = tracer.buildSpan("datadog", "next2").start(); - AgentScope scope2 = tracer.activateNext(span2); + ContextScope scope2 = tracer.activateNext(span2); assertTrue(spanFinished(span1)); assertEquals(1, writer.size()); assertSame(span1, writer.get(0).get(0)); - assertSame(span2, scope2.span()); + assertSame(span2, AgentSpan.fromScope(scope2)); assertSame(span2, tracer.activeSpan()); assertFalse(spanFinished(span2)); tracer.closePrevious(true); AgentSpan span3 = tracer.buildSpan("datadog", "next3").start(); - AgentScope scope3 = tracer.activateNext(span3); + ContextScope scope3 = tracer.activateNext(span3); writer.waitForTraces(2); assertTrue(spanFinished(span2)); assertEquals(2, writer.size()); - assertSame(span3, scope3.span()); + assertSame(span3, AgentSpan.fromScope(scope3)); assertSame(span3, tracer.activeSpan()); assertFalse(spanFinished(span3)); @@ -84,34 +84,34 @@ void rootIterationScopeLifecycle() throws Exception { @Test void nonRootIterationScopeLifecycle() throws Exception { AgentSpan span0 = tracer.buildSpan("datadog", "parent").start(); - AgentScope scope0 = tracer.activateSpan(span0); + ContextScope scope0 = tracer.activateSpan(span0); tracer.closePrevious(true); AgentSpan span1 = tracer.buildSpan("datadog", "next1").start(); - AgentScope scope1 = tracer.activateNext(span1); + ContextScope scope1 = tracer.activateNext(span1); assertTrue(writer.isEmpty()); - assertSame(span1, scope1.span()); + assertSame(span1, AgentSpan.fromScope(scope1)); assertSame(span1, tracer.activeSpan()); assertFalse(spanFinished(span1)); tracer.closePrevious(true); AgentSpan span2 = tracer.buildSpan("datadog", "next2").start(); - AgentScope scope2 = tracer.activateNext(span2); + ContextScope scope2 = tracer.activateNext(span2); assertTrue(spanFinished(span1)); assertTrue(writer.isEmpty()); - assertSame(span2, scope2.span()); + assertSame(span2, AgentSpan.fromScope(scope2)); assertSame(span2, tracer.activeSpan()); assertFalse(spanFinished(span2)); tracer.closePrevious(true); AgentSpan span3 = tracer.buildSpan("datadog", "next3").start(); - AgentScope scope3 = tracer.activateNext(span3); + ContextScope scope3 = tracer.activateNext(span3); assertTrue(spanFinished(span2)); assertTrue(writer.isEmpty()); - assertSame(span3, scope3.span()); + assertSame(span3, AgentSpan.fromScope(scope3)); assertSame(span3, tracer.activeSpan()); assertFalse(spanFinished(span3)); @@ -136,33 +136,33 @@ void nonRootIterationScopeLifecycle() throws Exception { void nestedIterationScopeLifecycle() throws Exception { tracer.closePrevious(true); AgentSpan span1 = tracer.buildSpan("datadog", "next").start(); - AgentScope scope1 = tracer.activateNext(span1); + ContextScope scope1 = tracer.activateNext(span1); assertTrue(writer.isEmpty()); - assertSame(span1, scope1.span()); + assertSame(span1, AgentSpan.fromScope(scope1)); assertSame(span1, tracer.activeSpan()); assertFalse(spanFinished(span1)); AgentSpan span1A = tracer.buildSpan("datadog", "method").start(); - AgentScope scope1A = tracer.activateSpan(span1A); + ContextScope scope1A = tracer.activateSpan(span1A); tracer.closePrevious(true); AgentSpan span1A1 = tracer.buildSpan("datadog", "next").start(); - AgentScope scope1A1 = tracer.activateNext(span1A1); + ContextScope scope1A1 = tracer.activateNext(span1A1); assertFalse(spanFinished(span1)); assertTrue(writer.isEmpty()); - assertSame(span1A1, scope1A1.span()); + assertSame(span1A1, AgentSpan.fromScope(scope1A1)); assertSame(span1A1, tracer.activeSpan()); assertFalse(spanFinished(span1A1)); tracer.closePrevious(true); AgentSpan span1A2 = tracer.buildSpan("datadog", "next").start(); - AgentScope scope1A2 = tracer.activateNext(span1A2); + ContextScope scope1A2 = tracer.activateNext(span1A2); assertTrue(spanFinished(span1A1)); assertTrue(writer.isEmpty()); - assertSame(span1A2, scope1A2.span()); + assertSame(span1A2, AgentSpan.fromScope(scope1A2)); assertSame(span1A2, tracer.activeSpan()); assertFalse(spanFinished(span1A2)); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerDepthTest.java b/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerDepthTest.java index fbf129c6ab8..02b1ae943ed 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerDepthTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerDepthTest.java @@ -4,8 +4,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import datadog.context.ContextScope; import datadog.trace.api.config.TracerConfig; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.NoopScope; import datadog.trace.common.writer.ListWriter; @@ -26,7 +26,7 @@ void scopeManagerReturnsNoopScopeIfDepthExceeded() { ContinuableScopeManager scopeManager = ScopeManagerTestBridge.getScopeManager(tracer); // fill up the scope stack - AgentScope scope = null; + ContextScope scope = null; for (int i = 0; i < depth; i++) { AgentSpan testSpan = tracer.buildSpan("test", "test").start(); scope = tracer.activateSpan(testSpan); @@ -66,7 +66,7 @@ void scopeManagerIgnoresDepthLimitWhenZero() { ContinuableScopeManager scopeManager = ScopeManagerTestBridge.getScopeManager(tracer); // fill up the scope stack - AgentScope scope = null; + ContextScope scope = null; for (int i = 0; i < defaultLimit; i++) { AgentSpan testSpan = tracer.buildSpan("test", "test").start(); scope = tracer.activateSpan(testSpan); @@ -106,10 +106,10 @@ void depthIsCorrectlyUpdatedWithOutOfOrderClosing() { ContinuableScopeManager scopeManager = ScopeManagerTestBridge.getScopeManager(tracer); AgentSpan firstSpan = tracer.buildSpan("test", "foo").start(); - AgentScope firstScope = tracer.activateSpan(firstSpan); + ContextScope firstScope = tracer.activateSpan(firstSpan); AgentSpan secondSpan = tracer.buildSpan("test", "foo").start(); - AgentScope secondScope = tracer.activateSpan(secondSpan); + ContextScope secondScope = tracer.activateSpan(secondSpan); assertEquals(2, scopeManager.scopeStack().depth()); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerForkedTest.java b/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerForkedTest.java index dc683942549..78dbe9d3a7c 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerForkedTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerForkedTest.java @@ -33,7 +33,6 @@ import datadog.trace.api.interceptor.TraceInterceptor; import datadog.trace.api.scopemanager.ExtendedScopeListener; import datadog.trace.api.scopemanager.ScopeListener; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration; @@ -114,7 +113,7 @@ void cleanup() { @Test void nonDdspanActivationResultsInAContinuableScope() { - AgentScope scope = scopeManager.activateSpan(noopSpan()); + ContextScope scope = scopeManager.activateSpan(noopSpan()); assertSame(scope, scopeManager.active()); assertInstanceOf(ContinuableScope.class, scope); @@ -135,65 +134,65 @@ void noScopeIsActiveBeforeActivation() throws Exception { @Test void simpleScopeAndSpanLifecycle() throws Exception { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); - assertSame(span, scope.span()); - assertFalse(spanFinished(scope.span())); + assertSame(span, AgentSpan.fromScope(scope)); + assertFalse(spanFinished(AgentSpan.fromScope(scope))); assertSame(scope, scopeManager.active()); assertInstanceOf(ContinuableScope.class, scope); assertTrue(writer.isEmpty()); scope.close(); - assertFalse(spanFinished(scope.span())); + assertFalse(spanFinished(AgentSpan.fromScope(scope))); assertTrue(writer.isEmpty()); assertNull(scopeManager.active()); span.finish(); writer.waitForTraces(1); - assertTrue(spanFinished(scope.span())); + assertTrue(spanFinished(AgentSpan.fromScope(scope))); assertEquals(1, writer.size()); - assertSame(scope.span(), writer.get(0).get(0)); + assertSame(AgentSpan.fromScope(scope), writer.get(0).get(0)); assertNull(scopeManager.active()); } @Test void setsParentAsCurrentUponClose() { AgentSpan parentSpan = tracer.buildSpan("test", "parent").start(); - AgentScope parentScope = tracer.activateSpan(parentSpan); + ContextScope parentScope = tracer.activateSpan(parentSpan); AgentSpan childSpan = tracer.buildSpan("test", "child").start(); - AgentScope childScope = tracer.activateSpan(childSpan); + ContextScope childScope = tracer.activateSpan(childSpan); assertSame(childScope, scopeManager.active()); assertEquals( - parentScope.span().spanContext().getSpanId(), - ((DDSpan) childScope.span()).spanContext().getParentId()); + AgentSpan.fromScope(parentScope).spanContext().getSpanId(), + ((DDSpan) AgentSpan.fromScope(childScope)).spanContext().getParentId()); assertSame( - parentScope.span().spanContext().getTraceCollector(), - childScope.span().spanContext().getTraceCollector()); + AgentSpan.fromScope(parentScope).spanContext().getTraceCollector(), + AgentSpan.fromScope(childScope).spanContext().getTraceCollector()); childScope.close(); assertSame(parentScope, scopeManager.active()); - assertFalse(spanFinished(childScope.span())); - assertFalse(spanFinished(parentScope.span())); + assertFalse(spanFinished(AgentSpan.fromScope(childScope))); + assertFalse(spanFinished(AgentSpan.fromScope(parentScope))); assertTrue(writer.isEmpty()); } @Test void setsParentAsCurrentUponCloseWithNoopChild() { AgentSpan parentSpan = tracer.buildSpan("test", "parent").start(); - AgentScope parentScope = tracer.activateSpan(parentSpan); + ContextScope parentScope = tracer.activateSpan(parentSpan); AgentSpan childSpan = noopSpan(); - AgentScope childScope = tracer.activateSpan(childSpan); + ContextScope childScope = tracer.activateSpan(childSpan); assertSame(childScope, scopeManager.active()); childScope.close(); assertSame(parentScope, scopeManager.active()); - assertFalse(spanFinished(parentScope.span())); + assertFalse(spanFinished(AgentSpan.fromScope(parentScope))); assertTrue(writer.isEmpty()); } @@ -218,7 +217,7 @@ void ddScopeCreatesNoOpContinuationsWhenPropagationIsNotSet() { @Test void continuationCancelDoesNotCloseParentScope() { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); ContextContinuation continuation = Context.current().capture(); assertNotNull(continuation); @@ -232,7 +231,7 @@ void continuationCancelDoesNotCloseParentScope() { @Test void testContinuationDoesNotHaveHardReferenceOnScope() throws InterruptedException { AgentSpan span = tracer.buildSpan("test", "test").start(); - AtomicReference scopeRef = new AtomicReference<>(tracer.activateSpan(span)); + AtomicReference scopeRef = new AtomicReference<>(tracer.activateSpan(span)); ContextContinuation continuation = Context.current().capture(); assertNotNull(continuation); @@ -241,7 +240,7 @@ void testContinuationDoesNotHaveHardReferenceOnScope() throws InterruptedExcepti assertNull(scopeManager.active()); - WeakReference ref = new WeakReference<>(scopeRef.get()); + WeakReference ref = new WeakReference<>(scopeRef.get()); scopeRef.set(null); awaitGC(ref); @@ -256,7 +255,7 @@ void testContinuationDoesNotHaveHardReferenceOnScope() throws InterruptedExcepti void hardReferenceOnContinuationDoesNotPreventTraceFromReporting(boolean autoClose) throws Exception { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); ContextContinuation continuation = Context.current().capture(); assertNotNull(continuation); @@ -279,9 +278,9 @@ void hardReferenceOnContinuationDoesNotPreventTraceFromReporting(boolean autoClo @Test void continuationRestoresTrace() throws Exception { AgentSpan parentSpan = tracer.buildSpan("test", "parent").start(); - AgentScope parentScope = tracer.activateSpan(parentSpan); + ContextScope parentScope = tracer.activateSpan(parentSpan); AgentSpan childSpan = tracer.buildSpan("test", "child").start(); - AgentScope childScope = tracer.activateSpan(childSpan); + ContextScope childScope = tracer.activateSpan(childSpan); ContextContinuation continuation = Context.current().capture(); childScope.close(); @@ -334,7 +333,7 @@ void continuationRestoresTrace() throws Exception { void continuationAllowsAddingSpansEvenAfterOtherSpansWereCompleted() throws Exception { // creating and activating a continuation AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); ContextContinuation continuation = Context.current().capture(); scope.close(); span.finish(); @@ -350,7 +349,7 @@ void continuationAllowsAddingSpansEvenAfterOtherSpansWereCompleted() throws Exce // creating a new child span under a continued scope AgentSpan childSpan = tracer.buildSpan("test", "child").start(); - AgentScope childScope = tracer.activateSpan(childSpan); + ContextScope childScope = tracer.activateSpan(childSpan); childScope.close(); childSpan.finish(); @@ -374,13 +373,13 @@ void testActivatingSameSpanMultipleTimes() { when(profilingContext.newScopeState(any())).thenReturn(localState); clearInvocations(profilingContext); - AgentScope scope1 = scopeManager.activateSpan(span); + ContextScope scope1 = scopeManager.activateSpan(span); assertEvents(Arrays.asList(ACTIVATE)); verify(profilingContext, times(1)).newScopeState(any()); clearInvocations(profilingContext); - AgentScope scope2 = scopeManager.activateSpan(span); + ContextScope scope2 = scopeManager.activateSpan(span); // Activating the same span multiple times does not create a new scope assertEvents(Arrays.asList(ACTIVATE)); @@ -403,13 +402,13 @@ void testActivatingSameSpanMultipleTimes() { @Test void openingAndClosingMultipleScopes() { AgentSpan span = tracer.buildSpan("test", "foo").start(); - AgentScope continuableScope = tracer.activateSpan(span); + ContextScope continuableScope = tracer.activateSpan(span); assertInstanceOf(ContinuableScope.class, continuableScope); assertEvents(Arrays.asList(ACTIVATE)); AgentSpan childSpan = tracer.buildSpan("test", "foo").start(); - AgentScope childDDScope = tracer.activateSpan(childSpan); + ContextScope childDDScope = tracer.activateSpan(childSpan); assertInstanceOf(ContinuableScope.class, childDDScope); assertEvents(Arrays.asList(ACTIVATE, ACTIVATE)); @@ -428,10 +427,10 @@ void openingAndClosingMultipleScopes() { @Test void closingScopeOutOfOrderSimple() { AgentSpan firstSpan = tracer.buildSpan("test", "foo").start(); - AgentScope firstScope = tracer.activateSpan(firstSpan); + ContextScope firstScope = tracer.activateSpan(firstSpan); AgentSpan secondSpan = tracer.buildSpan("test", "bar").start(); - AgentScope secondScope = tracer.activateSpan(secondSpan); + ContextScope secondScope = tracer.activateSpan(secondSpan); firstSpan.finish(); firstScope.close(); @@ -465,7 +464,7 @@ void closingScopeOutOfOrderComplex() { // scopeManager.active() or tracer.activeSpan() doesn't change the count AgentSpan firstSpan = tracer.buildSpan("test", "foo").start(); - AgentScope firstScope = tracer.activateSpan(firstSpan); + ContextScope firstScope = tracer.activateSpan(firstSpan); assertEvents(Arrays.asList(ACTIVATE)); assertSame(firstSpan, tracer.activeSpan()); @@ -479,7 +478,7 @@ void closingScopeOutOfOrderComplex() { clearInvocations(profilingContext); AgentSpan secondSpan = tracer.buildSpan("test", "bar").start(); - AgentScope secondScope = tracer.activateSpan(secondSpan); + ContextScope secondScope = tracer.activateSpan(secondSpan); assertEvents(Arrays.asList(ACTIVATE, ACTIVATE)); assertSame(secondSpan, tracer.activeSpan()); @@ -491,7 +490,7 @@ void closingScopeOutOfOrderComplex() { clearInvocations(profilingContext); AgentSpan thirdSpan = tracer.buildSpan("test", "quux").start(); - AgentScope thirdScope = tracer.activateSpan(thirdSpan); + ContextScope thirdScope = tracer.activateSpan(thirdSpan); assertEvents(Arrays.asList(ACTIVATE, ACTIVATE, ACTIVATE)); assertSame(thirdSpan, tracer.activeSpan()); @@ -534,18 +533,18 @@ void closingScopeOutOfOrderMultipleActivations() { AgentSpan span = tracer.buildSpan("test", "test").start(); clearInvocations(profilingContext); - AgentScope scope1 = scopeManager.activateSpan(span); + ContextScope scope1 = scopeManager.activateSpan(span); assertEvents(Arrays.asList(ACTIVATE)); - AgentScope scope2 = scopeManager.activateSpan(span); + ContextScope scope2 = scopeManager.activateSpan(span); // Activating the same span multiple times does not create a new scope assertEvents(Arrays.asList(ACTIVATE)); clearInvocations(profilingContext); AgentSpan thirdSpan = tracer.buildSpan("test", "quux").start(); - AgentScope thirdScope = tracer.activateSpan(thirdSpan); + ContextScope thirdScope = tracer.activateSpan(thirdSpan); assertEvents(Arrays.asList(ACTIVATE, ACTIVATE)); assertSame(thirdSpan, tracer.activeSpan()); @@ -579,7 +578,7 @@ void closingScopeOutOfOrderMultipleActivations() { @Test void closingAContinuedScopeOutOfOrderCancelsTheContinuation() throws Exception { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); ContextContinuation continuation = Context.current().capture(); scope.close(); span.finish(); @@ -591,7 +590,7 @@ void closingAContinuedScopeOutOfOrderCancelsTheContinuation() throws Exception { ContextScope continuedScope = continuation.resume(); AgentSpan secondSpan = tracer.buildSpan("test", "test2").start(); - AgentScope secondScope = (ContinuableScope) tracer.activateSpan(secondSpan); + ContextScope secondScope = (ContinuableScope) tracer.activateSpan(secondSpan); assertSame(secondScope, scopeManager.active()); @@ -614,7 +613,7 @@ void exceptionThrownInTraceInterceptorDoesNotLeaveScopeManagerInBadState() throw tracer.addTraceInterceptor(interceptor); AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); scope.close(); span.finish(); @@ -630,7 +629,7 @@ void exceptionThrownInTraceInterceptorDoesNotLeaveScopeManagerInBadState() throw // completing another scope lifecycle AgentSpan span2 = tracer.buildSpan("test", "test").start(); - AgentScope scope2 = tracer.activateSpan(span2); + ContextScope scope2 = tracer.activateSpan(span2); assertSame(scope2, scopeManager.active()); @@ -655,7 +654,7 @@ void exceptionThrownInTraceInterceptorDoesNotLeaveScopeManagerInBadState() throw tracer.addTraceInterceptor(interceptor); AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); ContextContinuation continuation = Context.current().capture(); scope.close(); span.finish(); @@ -680,7 +679,7 @@ void exceptionThrownInTraceInterceptorDoesNotLeaveScopeManagerInBadState() throw // completing another async scope lifecycle AgentSpan span2 = tracer.buildSpan("test", "test").start(); - AgentScope scope2 = tracer.activateSpan(span2); + ContextScope scope2 = tracer.activateSpan(span2); ContextContinuation continuation2 = Context.current().capture(); assertNotNull(continuation2); @@ -706,7 +705,7 @@ void continuationCanBeActivatedAndClosedInMultipleThreads() throws Throwable { AgentSpan span = tracer.buildSpan("test", "test").start(); long start = System.nanoTime(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); AtomicReference continuation = new AtomicReference<>(Context.current().capture()); scope.close(); @@ -749,7 +748,7 @@ void continuationCanBeActivatedAndClosedInMultipleThreads() throws Throwable { void scopeListenerShouldBeNotifiedAboutTheCurrentlyActiveScope() { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = scopeManager.activateSpan(span); + ContextScope scope = scopeManager.activateSpan(span); assertEvents(Arrays.asList(ACTIVATE)); @@ -771,7 +770,7 @@ void scopeListenerShouldBeNotifiedAboutTheCurrentlyActiveScope() { void extendedScopeListenerShouldBeNotifiedAboutTheCurrentlyActiveScope() { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = scopeManager.activateSpan(span); + ContextScope scope = scopeManager.activateSpan(span); assertEvents(Arrays.asList(ACTIVATE)); @@ -819,13 +818,13 @@ void misbehavingScopeListenerShouldNotAffectOthers( scopeManager.addScopeListener(secondEventCountingListener); AgentSpan span = tracer.buildSpan("test", "foo").start(); - AgentScope continuableScope = tracer.activateSpan(span); + ContextScope continuableScope = tracer.activateSpan(span); assertEvents(Arrays.asList(ACTIVATE)); assertEquals(Arrays.asList(ACTIVATE), secondEventCountingListener.events); AgentSpan childSpan = tracer.buildSpan("test", "foo").start(); - AgentScope childDDScope = tracer.activateSpan(childSpan); + ContextScope childDDScope = tracer.activateSpan(childSpan); assertEvents(Arrays.asList(ACTIVATE, ACTIVATE)); assertEquals(Arrays.asList(ACTIVATE, ACTIVATE), secondEventCountingListener.events); @@ -866,9 +865,9 @@ void contextThreadListenerNotifiedWhenScopeActivatedOnThreadForTheFirstTime() th futures[i] = executor.submit( () -> { - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); AgentSpan child = tracer.buildSpan("test", "foo" + taskIndex).start(); - AgentScope childScope = tracer.activateSpan(child); + ContextScope childScope = tracer.activateSpan(child); try { Thread.sleep(100); } catch (InterruptedException ignored) { @@ -900,7 +899,7 @@ void activatingASpanMergesItWithExistingContext() { assertNull(scopeManager.activeSpan()); assertEquals("test-value", scopeManager.currentContext().get(testKey)); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); assertSame(scope, scopeManager.active()); assertNotEquals(context, scopeManager.currentContext()); @@ -1087,7 +1086,7 @@ void contextsCanBeSwappedOutAndBack() { @Test void captureViaContextContinuationAPIHoldsTrace() throws Exception { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); // Context.current().capture() routes through ContinuableScopeManager.capture(Context) ContextContinuation continuation = Context.current().capture(); @@ -1104,7 +1103,7 @@ void captureViaContextContinuationAPIHoldsTrace() throws Exception { @Test void continuationResumeActivatesSpan() throws Exception { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); ContextContinuation continuation = Context.current().capture(); scope.close(); span.finish(); @@ -1114,7 +1113,7 @@ void continuationResumeActivatesSpan() throws Exception { // resume() delegates to activate() ContextScope resumedScope = continuation.resume(); - assertSame(span, scopeManager.active().span()); + assertSame(span, AgentSpan.fromScope(scopeManager.active())); resumedScope.close(); assertNull(scopeManager.active()); @@ -1125,7 +1124,7 @@ void continuationResumeActivatesSpan() throws Exception { @Test void continuationReleaseIsSameAsCancel() throws Exception { AgentSpan span = tracer.buildSpan("test", "test").start(); - AgentScope scope = tracer.activateSpan(span); + ContextScope scope = tracer.activateSpan(span); ContextContinuation continuation = Context.current().capture(); scope.close(); span.finish(); From 74d69633f32a6d9a7f8b9b662ab05ac571fcc570 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Thu, 17 Sep 2026 23:59:28 +0100 Subject: [PATCH 05/20] Migrate AgentScope to ContextScope (dd-trace-ot) --- .../datadog/opentracing/OTScopeManager.java | 23 +++++----- .../datadog/opentracing/TypeConverter.java | 4 +- .../opentracing/IterationSpansForkedTest.java | 42 +++++++++---------- .../opentracing/TypeConverterTest.java | 6 +-- 4 files changed, 39 insertions(+), 36 deletions(-) diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/OTScopeManager.java b/dd-trace-ot/src/main/java/datadog/opentracing/OTScopeManager.java index a620838b4e6..0aba3ac4c42 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/OTScopeManager.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/OTScopeManager.java @@ -1,7 +1,8 @@ package datadog.opentracing; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.api.Config; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.context.TraceScope; @@ -35,7 +36,7 @@ public Scope activate(final Span span, final boolean finishSpanOnClose) { } final AgentSpan agentSpan = converter.toAgentSpan(span); - final AgentScope agentScope = tracer.activateManualSpan(agentSpan); + final ContextScope agentScope = tracer.activateManualSpan(agentSpan); return converter.toScope(agentScope, finishSpanOnClose); } @@ -57,12 +58,14 @@ public Span activeSpan() { } static class OTScope implements Scope, TraceScope { - private final AgentScope delegate; + private final ContextScope delegate; private final boolean finishSpanOnClose; private final TypeConverter converter; OTScope( - final AgentScope delegate, final boolean finishSpanOnClose, final TypeConverter converter) { + final ContextScope delegate, + final boolean finishSpanOnClose, + final TypeConverter converter) { this.delegate = delegate; this.finishSpanOnClose = finishSpanOnClose; this.converter = converter; @@ -73,13 +76,13 @@ public void close() { delegate.close(); if (finishSpanOnClose) { - delegate.span().finish(); + AgentSpan.fromScope(delegate).finish(); } } @Override public Span span() { - return converter.toSpan(delegate.span()); + return converter.toSpan(AgentSpan.fromScope(delegate)); } @Override @@ -91,12 +94,12 @@ public boolean equals(final Object o) { return false; } final OTScope otScope = (OTScope) o; - return delegate.span().equals(otScope.delegate.span()); + return AgentSpan.fromScope(delegate).equals(AgentSpan.fromScope(otScope.delegate)); } @Override public int hashCode() { - return delegate.span().hashCode(); + return AgentSpan.fromScope(delegate).hashCode(); } boolean isFinishSpanOnClose() { @@ -104,7 +107,7 @@ boolean isFinishSpanOnClose() { } } - private final class FakeScope implements AgentScope { + private final class FakeScope implements ContextScope { private final AgentSpan agentSpan; FakeScope(AgentSpan agentSpan) { @@ -112,7 +115,7 @@ private final class FakeScope implements AgentScope { } @Override - public AgentSpan span() { + public Context context() { return agentSpan; } diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/TypeConverter.java b/dd-trace-ot/src/main/java/datadog/opentracing/TypeConverter.java index 2193eeee980..67e0f050b62 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/TypeConverter.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/TypeConverter.java @@ -3,7 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpanContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AttachableWrapper; @@ -54,7 +54,7 @@ public OTSpan toSpan(final AgentSpan agentSpan) { return new OTSpan(agentSpan, this, logHandler); } - public Scope toScope(final AgentScope scope, final boolean finishSpanOnClose) { + public Scope toScope(final ContextScope scope, final boolean finishSpanOnClose) { if (scope == null) { return null; } diff --git a/dd-trace-ot/src/test/java/datadog/opentracing/IterationSpansForkedTest.java b/dd-trace-ot/src/test/java/datadog/opentracing/IterationSpansForkedTest.java index ac24833a82f..80a37398567 100644 --- a/dd-trace-ot/src/test/java/datadog/opentracing/IterationSpansForkedTest.java +++ b/dd-trace-ot/src/test/java/datadog/opentracing/IterationSpansForkedTest.java @@ -6,8 +6,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; +import datadog.context.ContextScope; import datadog.metrics.api.statsd.StatsDClient; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.common.writer.ListWriter; import datadog.trace.core.CoreTracer; @@ -48,32 +48,32 @@ void cleanup() throws Exception { void rootIterationScopeLifecycle() throws Exception { coreTracer.closePrevious(true); AgentSpan span1 = coreTracer.buildSpan("datadog", "next1").start(); - AgentScope scope1 = coreTracer.activateNext(span1); + ContextScope scope1 = coreTracer.activateNext(span1); assertTrue(writer.isEmpty()); - assertSame(span1, scope1.span()); + assertSame(span1, AgentSpan.fromScope(scope1)); assertSame(span1, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span1)); coreTracer.closePrevious(true); AgentSpan span2 = coreTracer.buildSpan("datadog", "next2").start(); - AgentScope scope2 = coreTracer.activateNext(span2); + ContextScope scope2 = coreTracer.activateNext(span2); assertTrue(spanFinished(span1)); assertEquals(1, writer.size()); assertSame(span1, writer.get(0).get(0)); - assertSame(span2, scope2.span()); + assertSame(span2, AgentSpan.fromScope(scope2)); assertSame(span2, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span2)); coreTracer.closePrevious(true); AgentSpan span3 = coreTracer.buildSpan("datadog", "next3").start(); - AgentScope scope3 = coreTracer.activateNext(span3); + ContextScope scope3 = coreTracer.activateNext(span3); writer.waitForTraces(2); assertTrue(spanFinished(span2)); assertEquals(2, writer.size()); - assertSame(span3, scope3.span()); + assertSame(span3, AgentSpan.fromScope(scope3)); assertSame(span3, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span3)); @@ -87,34 +87,34 @@ void rootIterationScopeLifecycle() throws Exception { @Test void nonRootIterationScopeLifecycle() throws Exception { AgentSpan span0 = coreTracer.buildSpan("datadog", "parent").start(); - AgentScope scope0 = coreTracer.activateSpan(span0); + ContextScope scope0 = coreTracer.activateSpan(span0); coreTracer.closePrevious(true); AgentSpan span1 = coreTracer.buildSpan("datadog", "next1").start(); - AgentScope scope1 = coreTracer.activateNext(span1); + ContextScope scope1 = coreTracer.activateNext(span1); assertTrue(writer.isEmpty()); - assertSame(span1, scope1.span()); + assertSame(span1, AgentSpan.fromScope(scope1)); assertSame(span1, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span1)); coreTracer.closePrevious(true); AgentSpan span2 = coreTracer.buildSpan("datadog", "next2").start(); - AgentScope scope2 = coreTracer.activateNext(span2); + ContextScope scope2 = coreTracer.activateNext(span2); assertTrue(spanFinished(span1)); assertTrue(writer.isEmpty()); - assertSame(span2, scope2.span()); + assertSame(span2, AgentSpan.fromScope(scope2)); assertSame(span2, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span2)); coreTracer.closePrevious(true); AgentSpan span3 = coreTracer.buildSpan("datadog", "next3").start(); - AgentScope scope3 = coreTracer.activateNext(span3); + ContextScope scope3 = coreTracer.activateNext(span3); assertTrue(spanFinished(span2)); assertTrue(writer.isEmpty()); - assertSame(span3, scope3.span()); + assertSame(span3, AgentSpan.fromScope(scope3)); assertSame(span3, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span3)); @@ -138,33 +138,33 @@ void nonRootIterationScopeLifecycle() throws Exception { void nestedIterationScopeLifecycle() throws Exception { coreTracer.closePrevious(true); AgentSpan span1 = coreTracer.buildSpan("datadog", "next1").start(); - AgentScope scope1 = coreTracer.activateNext(span1); + ContextScope scope1 = coreTracer.activateNext(span1); assertTrue(writer.isEmpty()); - assertSame(span1, scope1.span()); + assertSame(span1, AgentSpan.fromScope(scope1)); assertSame(span1, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span1)); AgentSpan span1A = coreTracer.buildSpan("datadog", "methodA").start(); - AgentScope scope1A = coreTracer.activateSpan(span1A); + ContextScope scope1A = coreTracer.activateSpan(span1A); coreTracer.closePrevious(true); AgentSpan span1A1 = coreTracer.buildSpan("datadog", "next1A1").start(); - AgentScope scope1A1 = coreTracer.activateNext(span1A1); + ContextScope scope1A1 = coreTracer.activateNext(span1A1); assertFalse(spanFinished(span1)); assertTrue(writer.isEmpty()); - assertSame(span1A1, scope1A1.span()); + assertSame(span1A1, AgentSpan.fromScope(scope1A1)); assertSame(span1A1, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span1A1)); coreTracer.closePrevious(true); AgentSpan span1A2 = coreTracer.buildSpan("datadog", "next1A2").start(); - AgentScope scope1A2 = coreTracer.activateNext(span1A2); + ContextScope scope1A2 = coreTracer.activateNext(span1A2); assertTrue(spanFinished(span1A1)); assertTrue(writer.isEmpty()); - assertSame(span1A2, scope1A2.span()); + assertSame(span1A2, AgentSpan.fromScope(scope1A2)); assertSame(span1A2, ((OTSpan) tracer.activeSpan()).getDelegate()); assertFalse(spanFinished(span1A2)); diff --git a/dd-trace-ot/src/test/java/datadog/opentracing/TypeConverterTest.java b/dd-trace-ot/src/test/java/datadog/opentracing/TypeConverterTest.java index e506bc44616..7268378f451 100644 --- a/dd-trace-ot/src/test/java/datadog/opentracing/TypeConverterTest.java +++ b/dd-trace-ot/src/test/java/datadog/opentracing/TypeConverterTest.java @@ -7,7 +7,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.common.writer.ListWriter; import datadog.trace.core.CoreTracer; @@ -48,8 +48,8 @@ void shouldAvoidTheNoopContextWrapperAllocation() { @Test void shouldReuseNoopSpanWrapperViaScope() { - AgentScope noopScope = mock(AgentScope.class); - when(noopScope.span()).thenReturn(noopSpan()); + ContextScope noopScope = mock(ContextScope.class); + when(noopScope.context()).thenReturn(noopSpan()); OTSpan noopSpanWrapper = typeConverter.toSpan(noopSpan()); assertSame(typeConverter.toScope(noopScope, true).span(), noopSpanWrapper); assertSame(typeConverter.toScope(noopScope, false).span(), noopSpanWrapper); From adb677aa73b1f4df14b34b0e527a187912bd6b98 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:00:09 +0100 Subject: [PATCH 06/20] Migrate AgentScope to ContextScope (instrumentation) --- .../AerospikeClientInstrumentation.java | 17 +++--- ...isableTracingActorInitInstrumentation.java | 6 +- .../AkkaHttpSingleRequestInstrumentation.java | 9 +-- .../AkkaPoolMasterActorInstrumentation.java | 6 +- .../akkahttp106/SingleRequestAdvice.java | 10 ++-- .../ApacheHttpClientInstrumentation.java | 29 +++++----- .../apachehttpclient/HelperMethods.java | 15 ++--- .../ApacheHttpAsyncClientInstrumentation.java | 11 ++-- .../ApacheHttpClientInstrumentation.java | 19 ++++--- .../apachehttpclient5/HelperMethods.java | 15 ++--- ...ArmeriaMessageDeframerInstrumentation.java | 6 +- .../client/ClientCallImplInstrumentation.java | 33 +++++------ .../lambda/LambdaHandlerInstrumentation.java | 11 ++-- .../aws/v2/AwsHttpClientInstrumentation.java | 20 +++++-- .../axis2/AxisEngineInstrumentation.java | 14 ++--- .../axis2/AxisTransportInstrumentation.java | 9 +-- .../instrumentation/axway/StateAdvice.java | 11 ++-- .../caffeine/BoundedLocalCacheAdvice.java | 6 +- .../BoundedLocalCacheInstrumentation.java | 6 +- .../cics/ECIInteractionInstrumentation.java | 9 +-- .../JavaGatewayInterfaceInstrumentation.java | 9 +-- .../CommonsHttpClientInstrumentation.java | 11 ++-- .../cucumber/CucumberInstrumentation.java | 6 +- .../cucumber/CucumberStepDecorator.java | 10 ++-- .../trace_annotation/DoNotTraceAdvice.java | 11 ++-- .../trace_annotation/TraceAdvice.java | 12 ++-- .../ExecutionContextInstrumentation.java | 27 ++++----- .../datanucleus/JDOQueryInstrumentation.java | 9 +-- .../JDOTransactionInstrumentation.java | 9 +-- .../datastax/cassandra/TracingSession.java | 55 ++++++++++--------- .../view/DropwizardViewInstrumentation.java | 9 +-- ...asticsearch5RestClientInstrumentation.java | 9 +-- ...asticsearch6RestClientInstrumentation.java | 9 +-- ...asticsearch7RestClientInstrumentation.java | 11 ++-- ...search2TransportClientInstrumentation.java | 9 +-- ...search5TransportClientInstrumentation.java | 9 +-- ...earch53TransportClientInstrumentation.java | 9 +-- ...search6TransportClientInstrumentation.java | 9 +-- ...earch73TransportClientInstrumentation.java | 9 +-- .../ShadowExistingScopeAdvice.java | 6 +- .../GoogleHttpClientInstrumentation.java | 15 ++--- .../PublisherInstrumentation.java | 9 +-- .../AsyncHttpClientInstrumentation.java | 9 +-- .../AbstractClientStreamInstrumentation.java | 6 +- .../client/ClientCallImplInstrumentation.java | 14 ++--- ...ientStreamListenerImplInstrumentation.java | 10 ++-- .../MessagesAvailableInstrumentation.java | 9 +-- .../DistributedObjectInstrumentation.java | 15 ++--- .../ClientInvocationInstrumentation.java | 9 +-- .../ClientListenerInstrumentation.java | 9 +-- .../hazelcast4/InvocationAdvice.java | 9 +-- .../hibernate/SessionMethodUtils.java | 9 +-- .../hibernate/SessionState.java | 8 +-- .../core/v3_3/QueryInstrumentation.java | 3 +- .../src/test/groovy/SessionTest.groovy | 7 ++- .../core/v4_0/QueryInstrumentation.java | 3 +- .../src/test/groovy/SessionTest.groovy | 7 ++- .../IgniteCacheAsyncInstrumentation.java | 15 ++--- .../cache/IgniteCacheSyncInstrumentation.java | 29 +++++----- .../timer/TimerTaskContinuationTest.groovy | 4 +- .../httpclient/SendAdvice.java | 12 ++-- .../httpclient/SendAsyncAdvice.java | 11 ++-- .../rmi/client/RmiClientInstrumentation.java | 9 +-- .../rmi/server/RmiServerInstrumentation.java | 9 +-- ...tractPreparedStatementInstrumentation.java | 13 +++-- .../jdbc/DataSourceInstrumentation.java | 9 +-- .../jdbc/StatementInstrumentation.java | 13 +++-- .../jedis/JedisInstrumentation.java | 13 +++-- .../jedis30/JedisInstrumentation.java | 13 +++-- .../jedis40/JedisInstrumentation.java | 13 +++-- .../JerseyRequestContextInstrumentation.java | 7 ++- .../jetty_client12/CallbackWrapper.java | 3 +- .../jetty_client12/SendAdvice.java | 9 +-- .../jetty_client/CallbackWrapper.java | 3 +- .../WebSocketSessionInstrumentation.java | 6 +- .../JMSMessageProducerInstrumentation.java | 15 ++--- .../MDBMessageConsumerInstrumentation.java | 8 +-- .../instrumentation/jsp/JSPDecorator.java | 9 ++- .../jsp/JSPInstrumentation.java | 9 +-- ...rJSPCompilationContextInstrumentation.java | 9 +-- .../JUnit4BeforeAfterInstrumentation.java | 6 +- .../JUnit4BeforeAfterOperationsTracer.java | 10 ++-- .../TestParameterizedSetupSpecSpock.groovy | 4 +- .../example/TestSucceedSetupSpecSpock.groovy | 4 +- .../KafkaConsumerInfoInstrumentation.java | 9 +-- .../KafkaProducerInstrumentation.java | 6 +- .../kafka_clients38/ProducerAdvice.java | 6 +- .../kafka_clients38/RecordsAdvice.java | 9 +-- .../KafkaStreamTaskInstrumentation.java | 10 ++-- .../kafka_streams/StreamTaskContext.java | 8 +-- .../coroutines/CoreKotlinCoroutineTests.kt | 5 +- .../lettuce4/InstrumentationPoints.java | 15 ++--- .../lettuce4/LettuceAsyncCommandsAdvice.java | 6 +- .../lettuce4/RedisConnectionAdvice.java | 6 +- .../lettuce5/ConnectionFutureAdvice.java | 9 +-- .../lettuce5/LettuceAsyncCommandsAdvice.java | 9 +-- .../rx/RedisSubscriptionDispatchAdvice.java | 6 +- .../rx/RedisSubscriptionSubscribeAdvice.java | 8 +-- .../micronaut/v4_0/ChannelAcceptAdvice.java | 6 +- .../micronaut/v4_0/ChannelAcceptAdvice2.java | 6 +- .../micronaut/ChannelRead0Advice.java | 6 +- ...ponentMessageProcessorInstrumentation.java | 6 +- ...yChannelHandlerContextInstrumentation.java | 6 +- ...yChannelHandlerContextInstrumentation.java | 6 +- ...CompletionServiceAsyncInstrumentation.java | 15 ++--- .../ChatCompletionServiceInstrumentation.java | 15 ++--- ...CompletionServiceAsyncInstrumentation.java | 15 ++--- .../CompletionServiceInstrumentation.java | 15 ++--- .../EmbeddingServiceInstrumentation.java | 9 +-- .../ResponseServiceAsyncInstrumentation.java | 15 ++--- .../ResponseServiceInstrumentation.java | 15 ++--- .../OpensearchRestClientInstrumentation.java | 11 ++-- ...nsearchTransportClientInstrumentation.java | 9 +-- .../opensearch/ShadowExistingScopeAdvice.java | 6 +- .../opentelemetry/OtelScope.java | 6 +- .../opentelemetry/OtelTracer.java | 4 +- .../opentelemetry/TypeConverter.java | 4 +- .../opentelemetry14/context/ContextTest.java | 10 ++-- .../annotations/WithSpanAdvice.java | 10 ++-- .../annotations/WithSpanAttributeAdvice.java | 9 +-- .../opentracing31/OTScopeManager.java | 19 ++++--- .../opentracing31/TypeConverter.java | 4 +- .../src/test/groovy/TypeConverterTest.groovy | 6 +- .../opentracing32/OTScopeManager.java | 19 ++++--- .../opentracing32/TypeConverter.java | 4 +- .../src/test/groovy/TypeConverterTest.groovy | 6 +- ...PekkoHttpSingleRequestInstrumentation.java | 9 +-- .../PekkoPoolMasterActorInstrumentation.java | 6 +- .../QuartzSchedulingInstrumentation.java | 9 +-- .../amqp/RabbitChannelInstrumentation.java | 23 ++++---- .../rabbitmq/amqp/RabbitDecorator.java | 11 ++-- .../amqp/TracedDelegatingConsumer.java | 7 ++- .../groovy/ReactorCoreTest.groovy | 6 +- .../src/test/groovy/ReactorCoreTest.groovy | 6 +- .../ReactorNettyBaggagePropagationTest.java | 3 +- .../rediscala/RediscalaInstrumentation.java | 9 +-- .../redisson/RedissonInstrumentation.java | 10 ++-- .../redisson23/RedissonInstrumentation.java | 10 ++-- .../redisson30/RedissonInstrumentation.java | 10 ++-- .../RenaissanceInstrumentation.java | 9 +-- .../resilience4j/WrapperWithContext.java | 3 +- ...steasy30RequestContextInstrumentation.java | 7 ++- ...steasy31RequestContextInstrumentation.java | 7 ++- .../restlet/ResourceInstrumentation.java | 9 +-- .../DefaultRequestContextInstrumentation.java | 12 ++-- .../JakartaRsAnnotationsInstrumentation.java | 11 ++-- .../jakarta3/RequestFilterHelper.java | 11 ++-- .../JaxRsAnnotationsInstrumentation.java | 11 ++-- .../DefaultRequestContextInstrumentation.java | 12 ++-- .../JaxRsAnnotationsInstrumentation.java | 11 ++-- .../jaxrs2/RequestFilterHelper.java | 11 ++-- .../v1/JaxRsClientV1Instrumentation.java | 11 ++-- .../src/test/groovy/RxJava2Test.groovy | 6 +- .../instrumentation/rxjava3/RxJava3Test.java | 8 +-- .../rxjava3/SubscriptionTest.java | 12 ++-- .../ContextPreservingInstrumentation.java | 6 +- .../DatadogCapturedContextProvider.java | 4 +- .../servlet/filter/FilterInstrumentation.java | 9 +-- .../http/HttpServletInstrumentation.java | 9 +-- .../HttpServletResponseInstrumentation.java | 9 +-- .../AbstractClusterInstrumentation.java | 11 ++-- .../ProviderProxyInvokerInstrumentation.java | 9 +-- .../sofarpc/SofaRpcRestTest.java | 4 +- .../instrumentation/sofarpc/SofaRpcTest.java | 4 +- .../SofaRpcTripleWithGrpcForkedTest.java | 4 +- .../spark/SparkExecutorInstrumentation.java | 9 +-- .../springdata/RepositoryInterceptor.java | 4 +- .../SpringMessageHandlerInstrumentation.java | 8 +-- ...ssageListenerContainerInstrumentation.java | 8 +-- .../server/DispatcherHandlerAdvice.java | 9 +-- .../server/HandlerAdapterAdvice.java | 11 ++-- .../MemcachedClientInstrumentation.java | 27 ++++----- .../spymemcached/SyncCompletionListener.java | 4 +- .../tibcobw5/TaskInstrumentation.java | 5 +- .../tibcobw6/BehaviorInstrumentation.java | 9 +-- .../WsHttpUpgradeHandlerInstrumentation.java | 6 +- .../twilio/TwilioAsyncInstrumentation.java | 9 +-- .../twilio/TwilioSyncInstrumentation.java | 9 +-- .../valkey/ValkeyInstrumentation.java | 13 +++-- .../RedisAPICallAdvice.java | 8 +-- .../RedisFutureSendAdvice.java | 11 ++-- .../vertx_redis_client/RedisSendAdvice.java | 9 +-- .../vertx_sql_client_39/CursorReadAdvice.java | 6 +- .../vertx_sql_client_39/QueryAdvice.java | 6 +- .../HttpClientRequestBaseInstrumentation.java | 4 +- .../AsyncRemoteEndpointInstrumentation.java | 14 ++--- .../BasicRemoteEndpointInstrumentation.java | 14 ++--- .../jsr256/EndpointInstrumentation.java | 9 +-- .../jsr256/MessageHandlerInstrumentation.java | 6 +- .../jsr256/SessionInstrumentation.java | 10 ++-- .../jakartaws/WebServiceInstrumentation.java | 9 +-- .../jaxws1/WebServiceInstrumentation.java | 9 +-- .../WebServiceProviderInstrumentation.java | 9 +-- 193 files changed, 1019 insertions(+), 875 deletions(-) diff --git a/dd-java-agent/instrumentation/aerospike-4.0/src/main/java/datadog/trace/instrumentation/aerospike4/AerospikeClientInstrumentation.java b/dd-java-agent/instrumentation/aerospike-4.0/src/main/java/datadog/trace/instrumentation/aerospike4/AerospikeClientInstrumentation.java index 7f756381c94..c06a5c7a639 100644 --- a/dd-java-agent/instrumentation/aerospike-4.0/src/main/java/datadog/trace/instrumentation/aerospike4/AerospikeClientInstrumentation.java +++ b/dd-java-agent/instrumentation/aerospike-4.0/src/main/java/datadog/trace/instrumentation/aerospike4/AerospikeClientInstrumentation.java @@ -2,14 +2,15 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.nameStartsWith; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.aerospike4.AerospikeClientDecorator.DECORATE; import static net.bytebuddy.implementation.bytecode.assign.Assigner.Typing.DYNAMIC; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -36,26 +37,26 @@ public void methodAdvice(MethodTransformer transformer) { public static final class TraceSyncRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest(@Advice.Origin("#m") final String methodName) { + public static ContextScope beginRequest(@Advice.Origin("#m") final String methodName) { AgentSpan clientSpan = DECORATE.startAerospikeSpan(methodName); return activateSpan(clientSpan); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exitRequest( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable error) { - DECORATE.finishAerospikeSpan(scope.span(), error); + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable error) { + DECORATE.finishAerospikeSpan(spanFromScope(scope), error); scope.close(); } } public static final class TraceAsyncRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest( + public static ContextScope beginRequest( @Advice.Origin("#m") final String methodName, @Advice.Argument(value = 1, readOnly = false, typing = DYNAMIC) Object listener) { AgentSpan clientSpan = DECORATE.startAerospikeSpan(methodName); - AgentScope scope = activateSpan(clientSpan); + ContextScope scope = activateSpan(clientSpan); // always want to wrap even when there's no listener so we get the true async time listener = new TracingListener(clientSpan, clientSpan.captureWithContext(), listener); return scope; @@ -63,9 +64,9 @@ public static AgentScope beginRequest( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exitRequest( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable error) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable error) { if (error != null) { - DECORATE.finishAerospikeSpan(scope.span(), error); + DECORATE.finishAerospikeSpan(spanFromScope(scope), error); } else { // span will be finished in the traced listener } diff --git a/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/main/java/datadog/trace/instrumentation/akka/init/DisableTracingActorInitInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/main/java/datadog/trace/instrumentation/akka/init/DisableTracingActorInitInstrumentation.java index 835f8664ed1..98e6172a2df 100644 --- a/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/main/java/datadog/trace/instrumentation/akka/init/DisableTracingActorInitInstrumentation.java +++ b/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/main/java/datadog/trace/instrumentation/akka/init/DisableTracingActorInitInstrumentation.java @@ -6,9 +6,9 @@ import akka.actor.ActorSystem$; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; @AutoService(InstrumenterModule.class) @@ -38,12 +38,12 @@ public void methodAdvice(MethodTransformer transformer) { public static class BlockPropagation { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter() { + public static ContextScope enter() { return activateSpan(noopSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void exit(@Advice.Enter final AgentScope scope) { + public static void exit(@Advice.Enter final ContextScope scope) { scope.close(); } diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java index 56e14e2c513..5fe7844e488 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpSingleRequestInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.currentContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.AKKA_CLIENT_REQUEST; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.AKKA_HTTP_CLIENT; import static datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator.DECORATE; @@ -16,10 +17,10 @@ import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import scala.concurrent.Future; @@ -66,7 +67,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class SingleRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.Argument(value = 0) final HttpRequest request) { + public static ContextScope methodEnter(@Advice.Argument(value = 0) final HttpRequest request) { /* Versions 10.0 and 10.1 have slightly different structure that is hard to distinguish so here we cast 'wider net' and avoid instrumenting twice. @@ -88,13 +89,13 @@ public static AgentScope methodEnter(@Advice.Argument(value = 0) final HttpReque public static void methodExit( @Advice.This final HttpExt thiz, @Advice.Return final Future responseFuture, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable == null) { responseFuture.onComplete(new OnCompleteHandler(span), thiz.system().dispatcher()); diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaPoolMasterActorInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaPoolMasterActorInstrumentation.java index 83e7a74a3e2..ce271b32e64 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaPoolMasterActorInstrumentation.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaPoolMasterActorInstrumentation.java @@ -5,9 +5,9 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; @AutoService(InstrumenterModule.class) @@ -39,12 +39,12 @@ public void methodAdvice(MethodTransformer transformer) { public static class BlockPropagation { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter() { + public static ContextScope enter() { return activateSpan(noopSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void exit(@Advice.Enter final AgentScope scope) { + public static void exit(@Advice.Enter final ContextScope scope) { scope.close(); } } diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java index de14a16d057..6054d7845c6 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java @@ -1,5 +1,7 @@ package datadog.trace.instrumentation.akkahttp106; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; + import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.akkahttp106.AkkaHttpClientDecorator.AKKA_CLIENT_REQUEST; @@ -9,14 +11,14 @@ import akka.http.scaladsl.HttpExt; import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import scala.concurrent.Future; public class SingleRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.Argument(value = 0) final HttpRequest request) { + public static ContextScope methodEnter(@Advice.Argument(value = 0) final HttpRequest request) { final AkkaHttpClientHelpers.AkkaHttpHeaders headers = new AkkaHttpClientHelpers.AkkaHttpHeaders(request); if (headers.hadSpan()) { @@ -33,13 +35,13 @@ public static AgentScope methodEnter(@Advice.Argument(value = 0) final HttpReque public static void methodExit( @Advice.This final HttpExt thiz, @Advice.Return final Future responseFuture, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable == null) { responseFuture.onComplete( diff --git a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java index 4f70c43a034..aea16047e36 100644 --- a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java @@ -3,16 +3,17 @@ import static datadog.trace.agent.tooling.InstrumenterModule.TargetSystem.CONTEXT_TRACKING; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.implementation.bytecode.assign.Assigner; @@ -163,7 +164,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class UriRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.Argument(0) final HttpUriRequest request) { + public static ContextScope methodEnter(@Advice.Argument(0) final HttpUriRequest request) { try { return HelperMethods.doMethodEnter(request); } catch (BlockingException e) { @@ -175,7 +176,7 @@ public static AgentScope methodEnter(@Advice.Argument(0) final HttpUriRequest re @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final Object result, @Advice.Thrown final Throwable throwable) { HelperMethods.doMethodExit(scope, result, throwable); @@ -185,7 +186,7 @@ public static void methodExit( public static class UriRequestWithHandlerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(0) final HttpUriRequest request, @Advice.Argument( value = 1, @@ -195,11 +196,12 @@ public static AgentScope methodEnter( Object handler) { try { - final AgentScope scope = HelperMethods.doMethodEnter(request); + final ContextScope scope = HelperMethods.doMethodEnter(request); // Wrap the handler so we capture the status code if (null != scope && handler instanceof ResponseHandler) { handler = - new WrappingStatusSettingResponseHandler(scope.span(), (ResponseHandler) handler); + new WrappingStatusSettingResponseHandler( + spanFromScope(scope), (ResponseHandler) handler); } return scope; } catch (BlockingException e) { @@ -211,7 +213,7 @@ public static AgentScope methodEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final Object result, @Advice.Thrown final Throwable throwable) { HelperMethods.doMethodExit(scope, result, throwable); @@ -220,7 +222,7 @@ public static void methodExit( public static class RequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(0) final HttpHost host, @Advice.Argument(1) final HttpRequest request) { try { if (request instanceof HttpUriRequest) { @@ -237,7 +239,7 @@ public static AgentScope methodEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final Object result, @Advice.Thrown final Throwable throwable) { HelperMethods.doMethodExit(scope, result, throwable); @@ -247,7 +249,7 @@ public static void methodExit( public static class RequestWithHandlerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(0) final HttpHost host, @Advice.Argument(1) final HttpRequest request, @Advice.Argument( @@ -257,7 +259,7 @@ public static AgentScope methodEnter( readOnly = false) Object handler) { try { - final AgentScope scope; + final ContextScope scope; if (request instanceof HttpUriRequest) { scope = HelperMethods.doMethodEnter((HttpUriRequest) request); } else { @@ -266,7 +268,8 @@ public static AgentScope methodEnter( // Wrap the handler so we capture the status code if (null != scope && handler instanceof ResponseHandler) { handler = - new WrappingStatusSettingResponseHandler(scope.span(), (ResponseHandler) handler); + new WrappingStatusSettingResponseHandler( + spanFromScope(scope), (ResponseHandler) handler); } return scope; } catch (BlockingException e) { @@ -278,7 +281,7 @@ public static AgentScope methodEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final Object result, @Advice.Thrown final Throwable throwable) { HelperMethods.doMethodExit(scope, result, throwable); diff --git a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java index a1bc6397dda..b4f77d405c6 100644 --- a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java +++ b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/datadog/trace/instrumentation/apachehttpclient/HelperMethods.java @@ -3,13 +3,14 @@ import static datadog.context.Context.current; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.APACHE_HTTP_CLIENT; import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient.ApacheHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.apachehttpclient.HttpHeadersInjectAdapter.SETTER; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; @@ -18,7 +19,7 @@ import org.apache.http.client.methods.HttpUriRequest; public class HelperMethods { - public static AgentScope doMethodEnter(final HttpUriRequest request) { + public static ContextScope doMethodEnter(final HttpUriRequest request) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(HttpClient.class); if (callDepth > 0) { return null; @@ -26,7 +27,7 @@ public static AgentScope doMethodEnter(final HttpUriRequest request) { return activateHttpSpan(request); } - public static AgentScope doMethodEnter(HttpHost host, HttpRequest request) { + public static ContextScope doMethodEnter(HttpHost host, HttpRequest request) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(HttpClient.class); if (callDepth > 0) { return null; @@ -35,9 +36,9 @@ public static AgentScope doMethodEnter(HttpHost host, HttpRequest request) { return activateHttpSpan(new HostAndRequestAsHttpUriRequest(host, request)); } - private static AgentScope activateHttpSpan(final HttpUriRequest request) { + private static ContextScope activateHttpSpan(final HttpUriRequest request) { final AgentSpan span = startSpan(APACHE_HTTP_CLIENT.toString(), HTTP_REQUEST); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); DECORATE.afterStart(span); DECORATE.onRequest(span, request); @@ -63,11 +64,11 @@ public static void doInjectContext(final HttpHost host, final HttpRequest reques } public static void doMethodExit( - final AgentScope scope, final Object result, final Throwable throwable) { + final ContextScope scope, final Object result, final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (result instanceof HttpResponse) { DECORATE.onResponse(span, (HttpResponse) result); } // else they probably provided a ResponseHandler. diff --git a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/ApacheHttpAsyncClientInstrumentation.java b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/ApacheHttpAsyncClientInstrumentation.java index d889cd17465..5803ecab414 100644 --- a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/ApacheHttpAsyncClientInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/ApacheHttpAsyncClientInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.currentContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.APACHE_HTTP_CLIENT; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.HTTP_REQUEST; @@ -15,10 +16,10 @@ import com.google.auto.service.AutoService; import datadog.context.ContextContinuation; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import net.bytebuddy.asm.Advice; @@ -109,14 +110,14 @@ public static void onEnter( public static class ClientAdvice { @SuppressFBWarnings("UC_USELESS_OBJECT") @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(value = 0, readOnly = false) AsyncRequestProducer requestProducer, @Advice.Argument(value = 3, readOnly = false) HttpContext context, @Advice.Argument(value = 4, readOnly = false) FutureCallback futureCallback) { final ContextContinuation parentContinuation = currentContext().capture(); final AgentSpan clientSpan = startSpan(APACHE_HTTP_CLIENT.toString(), HTTP_REQUEST); - final AgentScope clientScope = activateSpan(clientSpan); + final ContextScope clientScope = activateSpan(clientSpan); DECORATE.afterStart(clientSpan); if (context == null) { @@ -137,13 +138,13 @@ public static AgentScope methodEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final Object result, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/ApacheHttpClientInstrumentation.java b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/ApacheHttpClientInstrumentation.java index d1e1d2752a7..9d044b58f32 100644 --- a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/ApacheHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/ApacheHttpClientInstrumentation.java @@ -3,16 +3,17 @@ import static datadog.trace.agent.tooling.InstrumenterModule.TargetSystem.CONTEXT_TRACKING; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.implementation.bytecode.assign.Assigner; @@ -122,7 +123,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class RequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.Argument(0) final ClassicHttpRequest request) { + public static ContextScope methodEnter(@Advice.Argument(0) final ClassicHttpRequest request) { try { return HelperMethods.doMethodEnter(request); } catch (BlockingException e) { @@ -134,7 +135,7 @@ public static AgentScope methodEnter(@Advice.Argument(0) final ClassicHttpReques @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final Object result, @Advice.Thrown final Throwable throwable) { HelperMethods.doMethodExit(scope, result, throwable); @@ -143,7 +144,7 @@ public static void methodExit( public static class HostRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(0) final HttpHost host, @Advice.Argument(1) final ClassicHttpRequest request) { try { @@ -157,7 +158,7 @@ public static AgentScope methodEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final Object result, @Advice.Thrown final Throwable throwable) { HelperMethods.doMethodExit(scope, result, throwable); @@ -167,7 +168,7 @@ public static void methodExit( public static class ResponseHandlerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(0) final HttpHost host, @Advice.Argument(1) final ClassicHttpRequest request, @Advice.Argument(2) final HttpContext context, @@ -178,12 +179,12 @@ public static AgentScope methodEnter( readOnly = false) Object handler) { try { - final AgentScope scope = HelperMethods.doMethodEnter(host, request); + final ContextScope scope = HelperMethods.doMethodEnter(host, request); // Wrap the handler so we capture the status code if (null != scope && handler instanceof HttpClientResponseHandler) { handler = new WrappingStatusSettingResponseHandler( - scope.span(), (HttpClientResponseHandler) handler); + spanFromScope(scope), (HttpClientResponseHandler) handler); } return scope; } catch (BlockingException e) { @@ -195,7 +196,7 @@ public static AgentScope methodEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final Object result, @Advice.Thrown final Throwable throwable) { HelperMethods.doMethodExit(scope, result, throwable); diff --git a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java index 2e93067ea35..c4d5b6a2ac6 100644 --- a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java +++ b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/HelperMethods.java @@ -3,13 +3,14 @@ import static datadog.context.Context.current; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.APACHE_HTTP_CLIENT; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.apachehttpclient5.ApacheHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.apachehttpclient5.HttpHeadersInjectAdapter.SETTER; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.core5.http.HttpHost; @@ -17,7 +18,7 @@ import org.apache.hc.core5.http.HttpResponse; public class HelperMethods { - public static AgentScope doMethodEnter(final HttpRequest request) { + public static ContextScope doMethodEnter(final HttpRequest request) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(HttpClient.class); if (callDepth > 0) { return null; @@ -26,7 +27,7 @@ public static AgentScope doMethodEnter(final HttpRequest request) { return activateHttpSpan(request); } - public static AgentScope doMethodEnter(HttpHost host, HttpRequest request) { + public static ContextScope doMethodEnter(HttpHost host, HttpRequest request) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(HttpClient.class); if (callDepth > 0) { return null; @@ -35,9 +36,9 @@ public static AgentScope doMethodEnter(HttpHost host, HttpRequest request) { return activateHttpSpan(new HostAndRequestAsHttpUriRequest(host, request)); } - private static AgentScope activateHttpSpan(final HttpRequest request) { + private static ContextScope activateHttpSpan(final HttpRequest request) { final AgentSpan span = startSpan(APACHE_HTTP_CLIENT.toString(), HTTP_REQUEST); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); DECORATE.afterStart(span); DECORATE.onRequest(span, request); @@ -53,11 +54,11 @@ public static void doInjectContext(final HttpRequest request) { } public static void doMethodExit( - final AgentScope scope, final Object result, final Throwable throwable) { + final ContextScope scope, final Object result, final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (result instanceof HttpResponse) { DECORATE.onResponse(span, (HttpResponse) result); } // else they probably provided a ResponseHandler. diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ArmeriaMessageDeframerInstrumentation.java b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ArmeriaMessageDeframerInstrumentation.java index 189e6aa47b2..17450cc5235 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ArmeriaMessageDeframerInstrumentation.java +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ArmeriaMessageDeframerInstrumentation.java @@ -8,9 +8,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.linecorp.armeria.common.grpc.protocol.ArmeriaMessageDeframer; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.grpc.ClientCall; import net.bytebuddy.asm.Advice; @@ -80,7 +80,7 @@ public static void capture( public static final class ActivateSpan { @SuppressWarnings("rawtypes") @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ArmeriaMessageDeframer messageDeframer) { + public static ContextScope before(@Advice.This ArmeriaMessageDeframer messageDeframer) { ClientCall clientCall = InstrumentationContext.get(ArmeriaMessageDeframer.class, ClientCall.class) .get(messageDeframer); @@ -95,7 +95,7 @@ public static AgentScope before(@Advice.This ArmeriaMessageDeframer messageDefra } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); } diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java index 58c84f37af1..0d2511b4d84 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.currentContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.COMPONENT_NAME; import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.DECORATE; import static datadog.trace.instrumentation.armeria.grpc.client.GrpcClientDecorator.GRPC_MESSAGE; @@ -16,11 +17,11 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.annotation.AppliesOn; import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.grpc.ClientCall; import io.grpc.Metadata; @@ -102,7 +103,7 @@ public static void capture( public static final class Start { @Advice.OnMethodEnter - public static AgentScope before( + public static ContextScope before( @Advice.This ClientCall call, @Advice.Argument(0) ClientCall.Listener responseListener, @Advice.Argument(1) Metadata headers, @@ -118,7 +119,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class) public static void after( - @Advice.Enter AgentScope scope, + @Advice.Enter ContextScope scope, @Advice.Thrown Throwable error, @Advice.Local("$$ddSpan") AgentSpan span) throws Throwable { @@ -146,7 +147,7 @@ public static void before(@Advice.Argument(1) Metadata headers) { public static final class ActivateSpan { @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ClientCall call) { + public static ContextScope before(@Advice.This ClientCall call) { AgentSpan span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { return activateSpan(span); @@ -155,7 +156,7 @@ public static AgentScope before(@Advice.This ClientCall call) { } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); } @@ -164,7 +165,7 @@ public static void after(@Advice.Enter AgentScope scope) { public static final class SendMessage { @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ClientCall call) { + public static ContextScope before(@Advice.This ClientCall call) { // could create a message span here for the request AgentSpan span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (span != null) { @@ -174,7 +175,7 @@ public static AgentScope before(@Advice.This ClientCall call) { } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); } @@ -199,7 +200,7 @@ public static void before( public static final class CloseObserver { @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ClientCall call) { + public static ContextScope before(@Advice.This ClientCall call) { AgentSpan span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).remove(call); if (span != null) { return activateSpan(span); @@ -209,11 +210,11 @@ public static AgentScope before(@Advice.This ClientCall call) { @Advice.OnMethodExit(onThrowable = Throwable.class) public static void closeObserver( - @Advice.Enter AgentScope scope, @Advice.Argument(0) Status status) { + @Advice.Enter ContextScope scope, @Advice.Argument(0) Status status) { if (null != scope) { - DECORATE.onClose(scope.span(), status); + DECORATE.onClose(spanFromScope(scope), status); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } @@ -225,7 +226,7 @@ public static void closeObserver( */ public static final class CloseObserverWithCause { @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ClientCall call) { + public static ContextScope before(@Advice.This ClientCall call) { AgentSpan span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (span != null) { return activateSpan(span); @@ -236,7 +237,7 @@ public static AgentScope before(@Advice.This ClientCall call) { @Advice.OnMethodExit(onThrowable = Throwable.class) public static void closeObserver( @Advice.This ClientCall call, - @Advice.Enter AgentScope scope, + @Advice.Enter ContextScope scope, @Advice.Argument(0) Status status, @Advice.FieldValue("closed") boolean closed) { if (null != scope) { @@ -257,7 +258,7 @@ public static void closeObserver( public static final class ReceiveMessages { @Advice.OnMethodEnter - public static AgentScope before() { + public static ContextScope before() { AgentSpan clientSpan = activeSpan(); if (clientSpan != null && OPERATION_NAME.equals(clientSpan.getOperationName())) { AgentSpan messageSpan = @@ -270,10 +271,10 @@ public static AgentScope before() { } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java index cb8d369d51e..79158d9228a 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.aws.v1.lambda.LambdaHandlerDecorator.INVOCATION_SPAN_NAME; import static net.bytebuddy.asm.Advice.Enter; import static net.bytebuddy.asm.Advice.OnMethodEnter; @@ -16,10 +17,10 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -80,7 +81,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ExtensionCommunicationAdvice { @OnMethodEnter - static AgentScope enter( + static ContextScope enter( @This final Object that, @Advice.Argument(0) final Object in, @Advice.Argument(1) final Object out, @@ -101,14 +102,14 @@ static AgentScope enter( span.setSpanType(InternalSpanTypes.SERVERLESS); span.setTag("request_id", lambdaRequestId); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); return scope; } @OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) static void exit( @Origin String method, - @Enter final AgentScope scope, + @Enter final ContextScope scope, @Advice.Argument(1) final Object result, @Advice.Argument(2) final Context awsContext, @Advice.Thrown final Throwable throwable) { @@ -119,7 +120,7 @@ static void exit( CallDepthThreadLocalMap.reset(RequestHandler.class); - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); try { if (throwable == null) { AgentTracer.get().notifyAppSecEnd(span, result); diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java index 1aef1957213..c9e08e7d356 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java @@ -12,10 +12,10 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import datadog.trace.context.TraceScope; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -69,7 +69,7 @@ public static class AwsHttpClientAdvice { * stored in channel attributes. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static TraceScope methodEnter( + public static ContextScope methodEnter( @Advice.This final Object thiz, @Advice.Argument(1) final RequestExecutionContext requestExecutionContext) { final AgentSpan activeSpan = activeSpan(); @@ -84,14 +84,24 @@ public static TraceScope methodEnter( closeActive(); // then drop-through and activate no-op span } else { // keep sync legacy HTTP span alive for duration of call - return AgentTracer::closeActive; + return new ContextScope() { + @Override + public Context context() { + return activeSpan; + } + + @Override + public void close() { + closeActive(); + } + }; } } return activateSpan(noopSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void methodExit(@Advice.Enter final TraceScope scope) { + public static void methodExit(@Advice.Enter final ContextScope scope) { scope.close(); } diff --git a/dd-java-agent/instrumentation/axis2-1.3/src/main/java/datadog/trace/instrumentation/axis2/AxisEngineInstrumentation.java b/dd-java-agent/instrumentation/axis2-1.3/src/main/java/datadog/trace/instrumentation/axis2/AxisEngineInstrumentation.java index faa2bbc654a..d04e7059aec 100644 --- a/dd-java-agent/instrumentation/axis2-1.3/src/main/java/datadog/trace/instrumentation/axis2/AxisEngineInstrumentation.java +++ b/dd-java-agent/instrumentation/axis2-1.3/src/main/java/datadog/trace/instrumentation/axis2/AxisEngineInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.axis2.AxisMessageDecorator.AXIS2_CONTINUATION_KEY; import static datadog.trace.instrumentation.axis2.AxisMessageDecorator.AXIS2_MESSAGE; import static datadog.trace.instrumentation.axis2.AxisMessageDecorator.DECORATE; @@ -15,7 +16,6 @@ import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.Tracer; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.apache.axis2.context.MessageContext; @@ -50,7 +50,7 @@ public void methodAdvice(MethodTransformer transformer) { public static final class HandleMessageAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginProcessingMessage( + public static ContextScope beginProcessingMessage( @Advice.Argument(0) final MessageContext message) { // only create a span if the message has a clear action and there's a surrounding request if (DECORATE.shouldTrace(message)) { @@ -64,13 +64,13 @@ public static AgentScope beginProcessingMessage( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishProcessingMessage( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Argument(0) final MessageContext message, @Advice.Thrown final Throwable error) { if (null == scope) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (null != error) { DECORATE.onError(span, error); } @@ -82,7 +82,7 @@ public static void finishProcessingMessage( public static final class ResumeMessageAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginResumingMessage( + public static ContextScope beginResumingMessage( @Advice.Argument(0) final MessageContext message) { Object continuation = message.getSelfManagedData(Tracer.class, AXIS2_CONTINUATION_KEY); if (continuation instanceof ContextContinuation) { @@ -100,13 +100,13 @@ public static AgentScope beginResumingMessage( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishResumingMessage( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Argument(0) final MessageContext message, @Advice.Thrown final Throwable error) { if (null == scope) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (null != error) { DECORATE.onError(span, error); } diff --git a/dd-java-agent/instrumentation/axis2-1.3/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java b/dd-java-agent/instrumentation/axis2-1.3/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java index 091a34b6a0c..a02121f0e4c 100644 --- a/dd-java-agent/instrumentation/axis2-1.3/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java +++ b/dd-java-agent/instrumentation/axis2-1.3/src/main/java/datadog/trace/instrumentation/axis2/AxisTransportInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.axis2.AxisMessageDecorator.AXIS2_ASYNC_SPAN_KEY; import static datadog.trace.instrumentation.axis2.AxisMessageDecorator.AXIS2_TRANSPORT; import static datadog.trace.instrumentation.axis2.AxisMessageDecorator.DECORATE; @@ -13,10 +14,10 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.annotation.AppliesOn; import datadog.trace.api.InstrumenterConfig; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Map; import java.util.TreeMap; @@ -51,7 +52,7 @@ public void methodAdvice(MethodTransformer transformer) { public static final class TransportAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginTransport(@Advice.Argument(0) final MessageContext message) { + public static ContextScope beginTransport(@Advice.Argument(0) final MessageContext message) { // only create a span if the message has a clear action and there's a surrounding request if (DECORATE.shouldTrace(message)) { AgentSpan span = startSpan("axis2", AXIS2_TRANSPORT); @@ -65,14 +66,14 @@ public static AgentScope beginTransport(@Advice.Argument(0) final MessageContext @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishTransport( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Argument(0) final MessageContext message, @Advice.Thrown final Throwable error) { if (null == scope) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (null != error) { // cancel async tracking when we know there's an error message.removePropertyNonReplicable(AXIS2_ASYNC_SPAN_KEY); diff --git a/dd-java-agent/instrumentation/axway-api-7.5/src/main/java/datadog/trace/instrumentation/axway/StateAdvice.java b/dd-java-agent/instrumentation/axway-api-7.5/src/main/java/datadog/trace/instrumentation/axway/StateAdvice.java index a5844cad8b9..5651c5b019d 100644 --- a/dd-java-agent/instrumentation/axway-api-7.5/src/main/java/datadog/trace/instrumentation/axway/StateAdvice.java +++ b/dd-java-agent/instrumentation/axway-api-7.5/src/main/java/datadog/trace/instrumentation/axway/StateAdvice.java @@ -2,11 +2,12 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.axway.AxwayHTTPPluginDecorator.AXWAY_TRY_TRANSACTION; import static datadog.trace.instrumentation.axway.AxwayHTTPPluginDecorator.DECORATE; import datadog.context.Context; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -19,9 +20,9 @@ */ public class StateAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.This final Object stateInstance) { + public static ContextScope onEnter(@Advice.This final Object stateInstance) { final AgentSpan span = startSpan("axway-http", AXWAY_TRY_TRANSACTION); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); span.setMeasured(true); DECORATE.onTransaction(span, stateInstance); DECORATE.afterStart(span); @@ -30,11 +31,11 @@ public static AgentScope onEnter(@Advice.This final Object stateInstance) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); final Context context = scope.context(); DECORATE.onError(span, throwable); DECORATE.beforeFinish(context); diff --git a/dd-java-agent/instrumentation/caffeine-1.0/src/main/java/datadog/trace/instrumentation/caffeine/BoundedLocalCacheAdvice.java b/dd-java-agent/instrumentation/caffeine-1.0/src/main/java/datadog/trace/instrumentation/caffeine/BoundedLocalCacheAdvice.java index 5b2edd0b7d5..5282bf3cbcd 100644 --- a/dd-java-agent/instrumentation/caffeine-1.0/src/main/java/datadog/trace/instrumentation/caffeine/BoundedLocalCacheAdvice.java +++ b/dd-java-agent/instrumentation/caffeine-1.0/src/main/java/datadog/trace/instrumentation/caffeine/BoundedLocalCacheAdvice.java @@ -3,18 +3,18 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import net.bytebuddy.asm.Advice; public class BoundedLocalCacheAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter() { + public static ContextScope enter() { return activateSpan(noopSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void exit(@Advice.Enter final AgentScope scope) { + public static void exit(@Advice.Enter final ContextScope scope) { scope.close(); } } diff --git a/dd-java-agent/instrumentation/caffeine-1.0/src/main/java/datadog/trace/instrumentation/caffeine/BoundedLocalCacheInstrumentation.java b/dd-java-agent/instrumentation/caffeine-1.0/src/main/java/datadog/trace/instrumentation/caffeine/BoundedLocalCacheInstrumentation.java index 7c351cc484a..b1e01e1901d 100644 --- a/dd-java-agent/instrumentation/caffeine-1.0/src/main/java/datadog/trace/instrumentation/caffeine/BoundedLocalCacheInstrumentation.java +++ b/dd-java-agent/instrumentation/caffeine-1.0/src/main/java/datadog/trace/instrumentation/caffeine/BoundedLocalCacheInstrumentation.java @@ -6,9 +6,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; @AutoService(InstrumenterModule.class) @@ -34,12 +34,12 @@ public void methodAdvice(MethodTransformer transformer) { public static class ScheduleDrainBuffers { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter() { + public static ContextScope enter() { return activateSpan(noopSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void exit(@Advice.Enter final AgentScope scope) { + public static void exit(@Advice.Enter final ContextScope scope) { scope.close(); } } diff --git a/dd-java-agent/instrumentation/cics-9.1/src/main/java/datadog/trace/instrumentation/cics/ECIInteractionInstrumentation.java b/dd-java-agent/instrumentation/cics-9.1/src/main/java/datadog/trace/instrumentation/cics/ECIInteractionInstrumentation.java index c682bb4466a..ab785206078 100644 --- a/dd-java-agent/instrumentation/cics-9.1/src/main/java/datadog/trace/instrumentation/cics/ECIInteractionInstrumentation.java +++ b/dd-java-agent/instrumentation/cics-9.1/src/main/java/datadog/trace/instrumentation/cics/ECIInteractionInstrumentation.java @@ -3,15 +3,16 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.cics.CicsDecorator.CICS_CLIENT; import static datadog.trace.instrumentation.cics.CicsDecorator.DECORATE; import static datadog.trace.instrumentation.cics.CicsDecorator.ECI_EXECUTE_OPERATION; import com.ibm.connector2.cics.ECIInteraction; import com.ibm.connector2.cics.ECIInteractionSpec; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -29,7 +30,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ExecuteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter(@Advice.Argument(0) final Object spec) { + public static ContextScope enter(@Advice.Argument(0) final Object spec) { // Coordinating with JavaGatewayInterfaceInstrumentation CallDepthThreadLocalMap.incrementCallDepth(ECIInteraction.class); @@ -46,11 +47,11 @@ public static AgentScope enter(@Advice.Argument(0) final Object spec) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { CallDepthThreadLocalMap.decrementCallDepth(ECIInteraction.class); if (null != scope) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); diff --git a/dd-java-agent/instrumentation/cics-9.1/src/main/java/datadog/trace/instrumentation/cics/JavaGatewayInterfaceInstrumentation.java b/dd-java-agent/instrumentation/cics-9.1/src/main/java/datadog/trace/instrumentation/cics/JavaGatewayInterfaceInstrumentation.java index 2745576e4e5..a0e020fb320 100644 --- a/dd-java-agent/instrumentation/cics-9.1/src/main/java/datadog/trace/instrumentation/cics/JavaGatewayInterfaceInstrumentation.java +++ b/dd-java-agent/instrumentation/cics-9.1/src/main/java/datadog/trace/instrumentation/cics/JavaGatewayInterfaceInstrumentation.java @@ -5,14 +5,15 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.cics.CicsDecorator.CICS_CLIENT; import static datadog.trace.instrumentation.cics.CicsDecorator.DECORATE; import static datadog.trace.instrumentation.cics.CicsDecorator.GATEWAY_FLOW_OPERATION; import com.ibm.connector2.cics.ECIInteraction; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.net.InetAddress; import net.bytebuddy.asm.Advice; @@ -38,7 +39,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class FlowAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.FieldValue("strAddress") final String strAddress, @Advice.FieldValue("iPort") final int port, @Advice.FieldValue("ipGateway") final InetAddress ipGateway) { @@ -62,12 +63,12 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (null == scope) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/commons-httpclient-2.0/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java b/dd-java-agent/instrumentation/commons-httpclient-2.0/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java index d7625157562..f7a64539c31 100644 --- a/dd-java-agent/instrumentation/commons-httpclient-2.0/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/commons-httpclient-2.0/src/main/java/datadog/trace/instrumentation/commonshttpclient/CommonsHttpClientInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.currentContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.commonshttpclient.CommonsHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.commonshttpclient.CommonsHttpClientDecorator.HTTP_REQUEST; import static datadog.trace.instrumentation.commonshttpclient.HttpHeadersInjectAdapter.SETTER; @@ -14,11 +15,11 @@ import com.google.auto.service.AutoService; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.apache.commons.httpclient.HttpClient; @@ -57,7 +58,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ExecAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.Argument(1) final HttpMethod httpMethod) { + public static ContextScope methodEnter(@Advice.Argument(1) final HttpMethod httpMethod) { try { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(HttpClient.class); @@ -66,7 +67,7 @@ public static AgentScope methodEnter(@Advice.Argument(1) final HttpMethod httpMe } final AgentSpan span = startSpan("commons-http-client", HTTP_REQUEST); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); DECORATE.afterStart(span); DECORATE.onRequest(span, httpMethod); @@ -81,14 +82,14 @@ public static AgentScope methodEnter(@Advice.Argument(1) final HttpMethod httpMe @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Argument(1) final HttpMethod httpMethod, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onResponse(span, httpMethod); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/cucumber-5.4/src/main/java/datadog/trace/instrumentation/cucumber/CucumberInstrumentation.java b/dd-java-agent/instrumentation/cucumber-5.4/src/main/java/datadog/trace/instrumentation/cucumber/CucumberInstrumentation.java index e9315bde090..1d39b8b3396 100644 --- a/dd-java-agent/instrumentation/cucumber-5.4/src/main/java/datadog/trace/instrumentation/cucumber/CucumberInstrumentation.java +++ b/dd-java-agent/instrumentation/cucumber-5.4/src/main/java/datadog/trace/instrumentation/cucumber/CucumberInstrumentation.java @@ -6,9 +6,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import io.cucumber.core.backend.StepDefinition; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -47,13 +47,13 @@ public void methodAdvice(MethodTransformer transformer) { public static class CucumberAdvice { @Advice.OnMethodEnter - public static AgentScope onCucumberStepStart( + public static ContextScope onCucumberStepStart( @Advice.This StepDefinition step, @Advice.Argument(0) Object[] arguments) { return CucumberStepDecorator.DECORATE.onStepStart(step, arguments); } @Advice.OnMethodExit - public static void onCucumberStepFinish(@Advice.Enter AgentScope scope) { + public static void onCucumberStepFinish(@Advice.Enter ContextScope scope) { CucumberStepDecorator.DECORATE.onStepFinish(scope); } diff --git a/dd-java-agent/instrumentation/cucumber-5.4/src/main/java/datadog/trace/instrumentation/cucumber/CucumberStepDecorator.java b/dd-java-agent/instrumentation/cucumber-5.4/src/main/java/datadog/trace/instrumentation/cucumber/CucumberStepDecorator.java index f0ad990cead..6f9e37f4fe5 100644 --- a/dd-java-agent/instrumentation/cucumber-5.4/src/main/java/datadog/trace/instrumentation/cucumber/CucumberStepDecorator.java +++ b/dd-java-agent/instrumentation/cucumber-5.4/src/main/java/datadog/trace/instrumentation/cucumber/CucumberStepDecorator.java @@ -1,6 +1,8 @@ package datadog.trace.instrumentation.cucumber; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; + +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator; @@ -26,7 +28,7 @@ protected CharSequence component() { return "cucumber"; } - public AgentScope onStepStart(StepDefinition step, Object[] arguments) { + public ContextScope onStepStart(StepDefinition step, Object[] arguments) { AgentSpan span = AgentTracer.startSpan("cucumber", "cucumber.step"); afterStart(span); @@ -41,8 +43,8 @@ public AgentScope onStepStart(StepDefinition step, Object[] arguments) { return AgentTracer.activateSpan(span); } - public void onStepFinish(AgentScope scope) { - AgentSpan span = scope.span(); + public void onStepFinish(ContextScope scope) { + AgentSpan span = spanFromScope(scope); beforeFinish(span); scope.close(); span.finish(); diff --git a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/DoNotTraceAdvice.java b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/DoNotTraceAdvice.java index 9248a676519..d43d2aab353 100644 --- a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/DoNotTraceAdvice.java +++ b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/DoNotTraceAdvice.java @@ -2,27 +2,30 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.blackholeSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.trace_annotation.TraceDecorator.DECORATE; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import java.lang.invoke.MethodType; import net.bytebuddy.asm.Advice; import net.bytebuddy.implementation.bytecode.assign.Assigner; public class DoNotTraceAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before() { + public static ContextScope before() { return activateSpan(blackholeSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Origin final MethodType methodType, @Advice.Return(typing = Assigner.Typing.DYNAMIC, readOnly = false) Object result) { if (scope != null) { scope.close(); - result = DECORATE.wrapAsyncResultOrFinishSpan(result, methodType.returnType(), scope.span()); + result = + DECORATE.wrapAsyncResultOrFinishSpan( + result, methodType.returnType(), spanFromScope(scope)); } } } diff --git a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAdvice.java b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAdvice.java index c737f6845d6..493202c1f9e 100644 --- a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAdvice.java +++ b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAdvice.java @@ -3,9 +3,10 @@ import static datadog.trace.bootstrap.debugger.DebuggerContext.captureCodeOrigin; import static datadog.trace.bootstrap.debugger.DebuggerContext.marker; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.trace_annotation.TraceDecorator.DECORATE; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import java.lang.invoke.MethodType; import java.lang.reflect.Method; import net.bytebuddy.asm.Advice; @@ -14,8 +15,8 @@ public class TraceAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.Origin final Method method) { - AgentScope agentScope = activateSpan(DECORATE.startMethodSpan(method)); + public static ContextScope onEnter(@Advice.Origin final Method method) { + ContextScope agentScope = activateSpan(DECORATE.startMethodSpan(method)); marker(); captureCodeOrigin(method, true); return agentScope; @@ -23,7 +24,7 @@ public static AgentScope onEnter(@Advice.Origin final Method method) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(typing = Assigner.Typing.DYNAMIC, readOnly = false) Object result, @Advice.Origin final MethodType methodType, @Advice.Thrown final Throwable throwable) { @@ -32,6 +33,7 @@ public static void stopSpan( scope.close(); // we must check against the method return signature and not the type of the returned object // otherwise we'll risk to have class cast at runtime - result = DECORATE.wrapAsyncResultOrFinishSpan(result, methodType.returnType(), scope.span()); + result = + DECORATE.wrapAsyncResultOrFinishSpan(result, methodType.returnType(), spanFromScope(scope)); } } diff --git a/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/ExecutionContextInstrumentation.java b/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/ExecutionContextInstrumentation.java index 74518e0cee8..d2d2c2d2e73 100644 --- a/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/ExecutionContextInstrumentation.java +++ b/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/ExecutionContextInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.DATANUCLEUS_FIND_OBJECT; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.DECORATE; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.JAVA_DATANUCLEUS; @@ -13,9 +14,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.InstrumenterConfig; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -75,7 +76,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class MultiObjectActionAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope startMethod( + public static ContextScope startMethod( @Advice.This final ExecutionContext executionContext, @Advice.Origin("datanucleus.#m") final String operationName) { @@ -87,13 +88,13 @@ public static AgentScope startMethod( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void endMethod( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); @@ -104,7 +105,7 @@ public static void endMethod( public static class SingleObjectActionAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope startMethod( + public static ContextScope startMethod( @Advice.Origin("datanucleus.#m") final String operationName, @Advice.Argument(0) Object entity) { @@ -120,7 +121,7 @@ public static AgentScope startMethod( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void endMethod( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Argument(0) Object entity) { @@ -128,7 +129,7 @@ public static void endMethod( return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.onOperation(span, entity); DECORATE.beforeFinish(span); @@ -140,7 +141,7 @@ public static void endMethod( public static class FindWithStringClassnameAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope startMethod() { + public static ContextScope startMethod() { final AgentSpan span = startSpan(JAVA_DATANUCLEUS.toString(), DATANUCLEUS_FIND_OBJECT); DECORATE.afterStart(span); @@ -150,7 +151,7 @@ public static AgentScope startMethod() { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void endMethod( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Argument(0) Object id, @Advice.Argument(3) String objectClassName) { @@ -159,7 +160,7 @@ public static void endMethod( return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.setResourceFromIdOrClass(span, id, objectClassName); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); @@ -171,7 +172,7 @@ public static void endMethod( public static class FindWithClassAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope startMethod() { + public static ContextScope startMethod() { final AgentSpan span = startSpan(JAVA_DATANUCLEUS.toString(), DATANUCLEUS_FIND_OBJECT); DECORATE.afterStart(span); @@ -181,7 +182,7 @@ public static AgentScope startMethod() { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void endMethod( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Argument(0) Object id, @Advice.Argument(2) Class cls) { @@ -190,7 +191,7 @@ public static void endMethod( return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.setResourceFromIdOrClass(span, id, cls == null ? null : cls.getName()); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/JDOQueryInstrumentation.java b/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/JDOQueryInstrumentation.java index abd3fb76f1c..a072d175e2f 100644 --- a/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/JDOQueryInstrumentation.java +++ b/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/JDOQueryInstrumentation.java @@ -3,15 +3,16 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.DATANUCLEUS_QUERY_DELETE; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.DATANUCLEUS_QUERY_EXECUTE; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.DECORATE; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.JAVA_DATANUCLEUS; import static net.bytebuddy.matcher.ElementMatchers.isMethod; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.datanucleus.api.jdo.JDOQuery; @@ -49,7 +50,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class QueryAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope startExecute(@Advice.Origin("#m") final String methodName) { + public static ContextScope startExecute(@Advice.Origin("#m") final String methodName) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(JDOQuery.class); if (callDepth > 0) { return null; @@ -67,7 +68,7 @@ public static AgentScope startExecute(@Advice.Origin("#m") final String methodNa @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void endExecute( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.FieldValue("query") Query internalQuery, @Advice.Thrown final Throwable throwable) { @@ -77,7 +78,7 @@ public static void endExecute( CallDepthThreadLocalMap.reset(JDOQuery.class); - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); // candidateClass is set internally and is not always in sync with candidateClassName String candidateClassName = diff --git a/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/JDOTransactionInstrumentation.java b/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/JDOTransactionInstrumentation.java index a3158a7d3c0..3a5364dce49 100644 --- a/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/JDOTransactionInstrumentation.java +++ b/dd-java-agent/instrumentation/datanucleus-4.0.5/src/main/java/datadog/trace/instrumentation/datanucleus/JDOTransactionInstrumentation.java @@ -3,12 +3,13 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.DECORATE; import static datadog.trace.instrumentation.datanucleus.DatanucleusDecorator.JAVA_DATANUCLEUS; import static net.bytebuddy.matcher.ElementMatchers.isMethod; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -29,7 +30,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class TransactionAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope start( + public static ContextScope start( @Advice.Origin("datanucleus.transaction.#m") final String operationName) { final AgentSpan span = startSpan(JAVA_DATANUCLEUS.toString(), operationName); @@ -40,13 +41,13 @@ public static AgentScope start( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void end( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java index 1a30d565298..3a568c9118d 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java @@ -3,6 +3,7 @@ import static com.google.common.util.concurrent.MoreExecutors.directExecutor; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.datastax.cassandra.CassandraClientDecorator.DECORATE; import static datadog.trace.instrumentation.datastax.cassandra.CassandraClientDecorator.JAVA_CASSANDRA; import static datadog.trace.instrumentation.datastax.cassandra.CassandraClientDecorator.OPERATION_NAME; @@ -20,7 +21,7 @@ import com.google.common.base.Function; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags; import datadog.trace.util.AgentThreadFactory; @@ -77,48 +78,48 @@ public ListenableFuture initAsync() { @Override public ResultSet execute(final String query) { - try (final AgentScope scope = startSpanWithScope(query)) { + try (final ContextScope scope = startSpanWithScope(query)) { try { final ResultSet resultSet = session.execute(query); - beforeSpanFinish(scope.span(), resultSet); + beforeSpanFinish(spanFromScope(scope), resultSet); return resultSet; } catch (final RuntimeException e) { - beforeSpanFinish(scope.span(), e); + beforeSpanFinish(spanFromScope(scope), e); throw e; } finally { - scope.span().finish(); + spanFromScope(scope).finish(); } } } @Override public ResultSet execute(final String query, final Object... values) { - try (final AgentScope scope = startSpanWithScope(query)) { + try (final ContextScope scope = startSpanWithScope(query)) { try { final ResultSet resultSet = session.execute(query, values); - beforeSpanFinish(scope.span(), resultSet); + beforeSpanFinish(spanFromScope(scope), resultSet); return resultSet; } catch (final RuntimeException e) { - beforeSpanFinish(scope.span(), e); + beforeSpanFinish(spanFromScope(scope), e); throw e; } finally { - scope.span().finish(); + spanFromScope(scope).finish(); } } } @Override public ResultSet execute(final String query, final Map values) { - try (final AgentScope scope = startSpanWithScope(query)) { + try (final ContextScope scope = startSpanWithScope(query)) { try { final ResultSet resultSet = session.execute(query, values); - beforeSpanFinish(scope.span(), resultSet); + beforeSpanFinish(spanFromScope(scope), resultSet); return resultSet; } catch (final RuntimeException e) { - beforeSpanFinish(scope.span(), e); + beforeSpanFinish(spanFromScope(scope), e); throw e; } finally { - scope.span().finish(); + spanFromScope(scope).finish(); } } } @@ -126,25 +127,25 @@ public ResultSet execute(final String query, final Map values) { @Override public ResultSet execute(final Statement statement) { final String query = getQuery(statement); - try (final AgentScope scope = startSpanWithScope(query)) { + try (final ContextScope scope = startSpanWithScope(query)) { try { final ResultSet resultSet = session.execute(statement); - beforeSpanFinish(scope.span(), resultSet); + beforeSpanFinish(spanFromScope(scope), resultSet); return resultSet; } catch (final RuntimeException e) { - beforeSpanFinish(scope.span(), e); + beforeSpanFinish(spanFromScope(scope), e); throw e; } finally { - scope.span().finish(); + spanFromScope(scope).finish(); } } } @Override public ResultSetFuture executeAsync(final String query) { - try (final AgentScope scope = startSpanWithScope(query)) { + try (final ContextScope scope = startSpanWithScope(query)) { final ResultSetFuture future = session.executeAsync(query); - future.addListener(createListener(scope.span(), future), EXECUTOR_SERVICE); + future.addListener(createListener(spanFromScope(scope), future), EXECUTOR_SERVICE); return future; } @@ -152,9 +153,9 @@ public ResultSetFuture executeAsync(final String query) { @Override public ResultSetFuture executeAsync(final String query, final Object... values) { - try (final AgentScope scope = startSpanWithScope(query)) { + try (final ContextScope scope = startSpanWithScope(query)) { final ResultSetFuture future = session.executeAsync(query, values); - future.addListener(createListener(scope.span(), future), EXECUTOR_SERVICE); + future.addListener(createListener(spanFromScope(scope), future), EXECUTOR_SERVICE); return future; } @@ -162,9 +163,9 @@ public ResultSetFuture executeAsync(final String query, final Object... values) @Override public ResultSetFuture executeAsync(final String query, final Map values) { - try (final AgentScope scope = startSpanWithScope(query)) { + try (final ContextScope scope = startSpanWithScope(query)) { final ResultSetFuture future = session.executeAsync(query, values); - future.addListener(createListener(scope.span(), future), EXECUTOR_SERVICE); + future.addListener(createListener(spanFromScope(scope), future), EXECUTOR_SERVICE); return future; } @@ -173,9 +174,9 @@ public ResultSetFuture executeAsync(final String query, final Map handler) { AgentSpan parentSpan = activeSpan(); @@ -55,12 +56,12 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } if (throwable != null) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/AbstractClientStreamInstrumentation.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/AbstractClientStreamInstrumentation.java index 6caaa52af1b..93628297d55 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/AbstractClientStreamInstrumentation.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/AbstractClientStreamInstrumentation.java @@ -6,9 +6,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.grpc.internal.ClientStreamListener; import net.bytebuddy.asm.Advice; @@ -35,7 +35,7 @@ public void methodAdvice(MethodTransformer transformer) { public static final class ActivateSpan { @Advice.OnMethodEnter - public static AgentScope before(@Advice.Argument(0) ClientStreamListener listener) { + public static ContextScope before(@Advice.Argument(0) ClientStreamListener listener) { AgentSpan span = InstrumentationContext.get(ClientStreamListener.class, AgentSpan.class).get(listener); if (null != span) { @@ -45,7 +45,7 @@ public static AgentScope before(@Advice.Argument(0) ClientStreamListener listene } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java index fcb8615aaa2..b9fd2143262 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientCallImplInstrumentation.java @@ -10,10 +10,10 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.annotation.AppliesOn; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.grpc.ClientCall; import io.grpc.Grpc; @@ -67,7 +67,7 @@ public static void capture( public static final class Start { @Advice.OnMethodEnter - public static AgentScope before( + public static ContextScope before( @Advice.This ClientCall call, @Advice.Argument(1) Metadata headers, @Advice.Local("$$ddSpan") AgentSpan span) { @@ -80,7 +80,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class) public static void after( - @Advice.Enter AgentScope scope, + @Advice.Enter ContextScope scope, @Advice.Thrown Throwable error, @Advice.Local("$$ddSpan") AgentSpan span) throws Throwable { @@ -110,7 +110,7 @@ public static void before(@Advice.Argument(1) Metadata headers) { public static final class ActivateSpan { @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ClientCall call) { + public static ContextScope before(@Advice.This ClientCall call) { AgentSpan span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (null != span) { return activateSpan(span); @@ -119,7 +119,7 @@ public static AgentScope before(@Advice.This ClientCall call) { } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); } @@ -128,7 +128,7 @@ public static void after(@Advice.Enter AgentScope scope) { public static final class SendMessage { @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ClientCall call) { + public static ContextScope before(@Advice.This ClientCall call) { // could create a message span here for the request AgentSpan span = InstrumentationContext.get(ClientCall.class, AgentSpan.class).get(call); if (span != null) { @@ -138,7 +138,7 @@ public static AgentScope before(@Advice.This ClientCall call) { } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientStreamListenerImplInstrumentation.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientStreamListenerImplInstrumentation.java index 953a21be327..0c0f04cc812 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientStreamListenerImplInstrumentation.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/ClientStreamListenerImplInstrumentation.java @@ -9,9 +9,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.grpc.Status; import io.grpc.internal.ClientStreamListener; @@ -68,7 +68,7 @@ public static void exceptionThrown( public static final class RecordActivity { @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ClientStreamListener listener) { + public static ContextScope before(@Advice.This ClientStreamListener listener) { // activate the span so serialisation work is accounted for, whichever thread the work is done // on AgentSpan span = @@ -80,7 +80,7 @@ public static AgentScope before(@Advice.This ClientStreamListener listener) { } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); } @@ -96,7 +96,7 @@ public static void after(@Advice.Enter AgentScope scope) { public static final class RecordHeaders { @Advice.OnMethodEnter - public static AgentScope before(@Advice.This ClientStreamListener listener) { + public static ContextScope before(@Advice.This ClientStreamListener listener) { // activate the span so serialisation work is accounted for, whichever thread the work is done // on AgentSpan span = @@ -108,7 +108,7 @@ public static AgentScope before(@Advice.This ClientStreamListener listener) { } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/MessagesAvailableInstrumentation.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/MessagesAvailableInstrumentation.java index e72ef5d5431..1d586a350a6 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/MessagesAvailableInstrumentation.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/MessagesAvailableInstrumentation.java @@ -5,17 +5,18 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.grpc.client.GrpcClientDecorator.COMPONENT_NAME; import static datadog.trace.instrumentation.grpc.client.GrpcClientDecorator.DECORATE; import static datadog.trace.instrumentation.grpc.client.GrpcClientDecorator.GRPC_MESSAGE; import static datadog.trace.instrumentation.grpc.client.GrpcClientDecorator.OPERATION_NAME; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.annotation.AppliesOn; import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.java.concurrent.AdviceUtils; import datadog.trace.bootstrap.instrumentation.java.concurrent.State; @@ -52,7 +53,7 @@ public static void capture(@Advice.This Runnable task) { public static final class ReceiveMessages { @Advice.OnMethodEnter - public static AgentScope before() { + public static ContextScope before() { AgentSpan clientSpan = activeSpan(); if (clientSpan != null && OPERATION_NAME.equals(clientSpan.getOperationName())) { AgentSpan messageSpan = @@ -65,10 +66,10 @@ public static AgentScope before() { } @Advice.OnMethodExit(onThrowable = Throwable.class) - public static void after(@Advice.Enter AgentScope scope) { + public static void after(@Advice.Enter ContextScope scope) { if (null != scope) { scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/hazelcast/hazelcast-3.6/src/main/java/datadog/trace/instrumentation/hazelcast36/DistributedObjectInstrumentation.java b/dd-java-agent/instrumentation/hazelcast/hazelcast-3.6/src/main/java/datadog/trace/instrumentation/hazelcast36/DistributedObjectInstrumentation.java index 9e17358c1ac..c240d2147d7 100644 --- a/dd-java-agent/instrumentation/hazelcast/hazelcast-3.6/src/main/java/datadog/trace/instrumentation/hazelcast36/DistributedObjectInstrumentation.java +++ b/dd-java-agent/instrumentation/hazelcast/hazelcast-3.6/src/main/java/datadog/trace/instrumentation/hazelcast36/DistributedObjectInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.hazelcast36.DistributedObjectDecorator.DECORATE; import static datadog.trace.instrumentation.hazelcast36.HazelcastConstants.COMPONENT_NAME; import static datadog.trace.instrumentation.hazelcast36.HazelcastConstants.SPAN_NAME; @@ -15,10 +16,10 @@ import com.hazelcast.core.DistributedObject; import com.hazelcast.core.ICompletableFuture; import com.hazelcast.spi.discovery.DiscoveryStrategy; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -186,7 +187,7 @@ public static class SyncAdvice { /** Method entry instrumentation. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.This final DistributedObject that, @Advice.Origin("#m") final String methodName) { // Ensure that we only create a span for the top-level Hazelcast method; except in the @@ -208,13 +209,13 @@ public static AgentScope methodEnter( /** Method exit instrumentation. */ @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } // If we have a scope (i.e. we were the top-level Hazelcast SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); @@ -242,7 +243,7 @@ public static class CompletableFutureAdvice { /** Method entry instrumentation. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.This final DistributedObject that, @Advice.Origin("#m") final String methodName) { // Ensure that we only create a span for the top-level Hazelcast method; except in the @@ -264,7 +265,7 @@ public static AgentScope methodEnter( /** Method exit instrumentation. */ @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return final ICompletableFuture future) { if (scope == null) { @@ -272,7 +273,7 @@ public static void methodExit( } // If we have a scope (i.e. we were the top-level Hazelcast SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { // There was a synchronous error, // which means we shouldn't wait for a callback to close the span. diff --git a/dd-java-agent/instrumentation/hazelcast/hazelcast-3.9/src/main/java/datadog/trace/instrumentation/hazelcast39/ClientInvocationInstrumentation.java b/dd-java-agent/instrumentation/hazelcast/hazelcast-3.9/src/main/java/datadog/trace/instrumentation/hazelcast39/ClientInvocationInstrumentation.java index 071003b4e22..8de87678326 100644 --- a/dd-java-agent/instrumentation/hazelcast/hazelcast-3.9/src/main/java/datadog/trace/instrumentation/hazelcast39/ClientInvocationInstrumentation.java +++ b/dd-java-agent/instrumentation/hazelcast/hazelcast-3.9/src/main/java/datadog/trace/instrumentation/hazelcast39/ClientInvocationInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.hazelcast39.ClientInvocationDecorator.DECORATE; import static datadog.trace.instrumentation.hazelcast39.HazelcastConstants.COMPONENT_NAME; import static datadog.trace.instrumentation.hazelcast39.HazelcastConstants.SPAN_NAME; @@ -17,10 +18,10 @@ import com.hazelcast.client.spi.impl.ClientInvocationFuture; import com.hazelcast.client.spi.impl.NonSmartClientInvocationService; import com.hazelcast.core.HazelcastInstance; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -52,7 +53,7 @@ public static class InvocationAdvice { /** Method entry instrumentation. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.This final ClientInvocation that, @Advice.FieldValue("objectName") final String objectName, @Advice.FieldValue("clientMessage") final ClientMessage clientMessage) { @@ -82,7 +83,7 @@ public static AgentScope methodEnter( /** Method exit instrumentation. */ @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.FieldValue("clientInvocationFuture") final ClientInvocationFuture future) { if (scope == null) { @@ -90,7 +91,7 @@ public static void methodExit( } // If we have a scope (i.e. we were the top-level Hazelcast SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { // There was a synchronous error, // which means we shouldn't wait for a callback to close the span. diff --git a/dd-java-agent/instrumentation/hazelcast/hazelcast-4.0/src/main/java/datadog/trace/instrumentation/hazelcast4/ClientListenerInstrumentation.java b/dd-java-agent/instrumentation/hazelcast/hazelcast-4.0/src/main/java/datadog/trace/instrumentation/hazelcast4/ClientListenerInstrumentation.java index e325b1ff49e..755b4c2accd 100644 --- a/dd-java-agent/instrumentation/hazelcast/hazelcast-4.0/src/main/java/datadog/trace/instrumentation/hazelcast4/ClientListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/hazelcast/hazelcast-4.0/src/main/java/datadog/trace/instrumentation/hazelcast4/ClientListenerInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.hazelcast4.HazelcastConstants.COMPONENT_NAME; import static datadog.trace.instrumentation.hazelcast4.HazelcastConstants.SPAN_NAME; import static datadog.trace.instrumentation.hazelcast4.HazelcastDecorator.DECORATE; @@ -13,9 +14,9 @@ import com.hazelcast.client.impl.protocol.ClientMessage; import com.hazelcast.client.impl.proxy.ClientMapProxy; import com.hazelcast.client.impl.spi.ClientListenerService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -41,7 +42,7 @@ public static class ListenerAdvice { /** Method entry instrumentation. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.This final ClientListenerService that, @Advice.Argument(0) final ClientMessage clientMessage) { @@ -70,13 +71,13 @@ public static AgentScope methodEnter( /** Method exit instrumentation. */ @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } // If we have a scope (i.e. we were the top-level Hazelcast SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); diff --git a/dd-java-agent/instrumentation/hazelcast/hazelcast-4.0/src/main/java/datadog/trace/instrumentation/hazelcast4/InvocationAdvice.java b/dd-java-agent/instrumentation/hazelcast/hazelcast-4.0/src/main/java/datadog/trace/instrumentation/hazelcast4/InvocationAdvice.java index 014d2af5a5c..d7e7420436f 100644 --- a/dd-java-agent/instrumentation/hazelcast/hazelcast-4.0/src/main/java/datadog/trace/instrumentation/hazelcast4/InvocationAdvice.java +++ b/dd-java-agent/instrumentation/hazelcast/hazelcast-4.0/src/main/java/datadog/trace/instrumentation/hazelcast4/InvocationAdvice.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.hazelcast4.HazelcastConstants.COMPONENT_NAME; import static datadog.trace.instrumentation.hazelcast4.HazelcastDecorator.DECORATE; @@ -9,9 +10,9 @@ import com.hazelcast.client.impl.proxy.ClientMapProxy; import com.hazelcast.client.impl.spi.impl.ClientInvocation; import com.hazelcast.client.impl.spi.impl.ClientInvocationFuture; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -20,7 +21,7 @@ public class InvocationAdvice { /** Method entry instrumentation. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.This final ClientInvocation that, @Advice.FieldValue("objectName") final Object objectName, @Advice.FieldValue("clientMessage") final ClientMessage clientMessage) { @@ -51,7 +52,7 @@ public static AgentScope methodEnter( /** Method exit instrumentation. */ @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.FieldValue("clientInvocationFuture") final ClientInvocationFuture future) { if (scope == null) { @@ -59,7 +60,7 @@ public static void methodExit( } // If we have a scope (i.e. we were the top-level Hazelcast SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { // There was a synchronous error, // which means we shouldn't wait for a callback to close the span. diff --git a/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/SessionMethodUtils.java b/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/SessionMethodUtils.java index 3f7fdd6bdff..e76bdba737e 100644 --- a/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/SessionMethodUtils.java +++ b/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/SessionMethodUtils.java @@ -2,11 +2,12 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.ContextStore; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Arrays; import java.util.HashSet; @@ -39,7 +40,7 @@ public static SessionState startScopeFrom( return null; // This method call is being traced already. } - final AgentScope scope; + final ContextScope scope; if (createSpan) { final AgentSpan span = startSpan("java-hibernate", operationName, sessionState.getSessionSpan().spanContext()); @@ -62,7 +63,7 @@ public static void closeScope( final Object entity, final boolean closeSpan) { - final AgentScope scope = sessionState == null ? null : sessionState.getMethodScope(); + final ContextScope scope = sessionState == null ? null : sessionState.getMethodScope(); if (scope == null) { // This method call was re-entrant. Do nothing, since it is being traced by the parent/first // call. @@ -71,7 +72,7 @@ public static void closeScope( CallDepthThreadLocalMap.reset(SessionMethodUtils.class); sessionState.setMethodScope(null); - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (span != null && (sessionState.hasChildSpan() || closeSpan)) { DECORATOR.onError(span, throwable); if (entity != null) { diff --git a/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/SessionState.java b/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/SessionState.java index 694c8f1958f..ecbb2447706 100644 --- a/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/SessionState.java +++ b/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/SessionState.java @@ -1,12 +1,12 @@ package datadog.trace.instrumentation.hibernate; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; public class SessionState { private final AgentSpan sessionSpan; - private AgentScope methodScope; + private ContextScope methodScope; private boolean hasChildSpan = true; public SessionState(AgentSpan sessionSpan) { @@ -17,11 +17,11 @@ public AgentSpan getSessionSpan() { return sessionSpan; } - public AgentScope getMethodScope() { + public ContextScope getMethodScope() { return methodScope; } - public void setMethodScope(AgentScope methodScope) { + public void setMethodScope(ContextScope methodScope) { this.methodScope = methodScope; } diff --git a/dd-java-agent/instrumentation/hibernate/hibernate-core-3.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_3/QueryInstrumentation.java b/dd-java-agent/instrumentation/hibernate/hibernate-core-3.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_3/QueryInstrumentation.java index bf2f95f6153..42f57f9fd27 100644 --- a/dd-java-agent/instrumentation/hibernate/hibernate-core-3.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_3/QueryInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/hibernate-core-3.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_3/QueryInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -61,7 +62,7 @@ public static SessionState startMethod( final SessionState state = SessionMethodUtils.startScopeFrom(contextStore, query, operationName, null, true); if (state != null) { - DECORATOR.onStatement(state.getMethodScope().span(), query.getQueryString()); + DECORATOR.onStatement(spanFromScope(state.getMethodScope()), query.getQueryString()); } return state; } diff --git a/dd-java-agent/instrumentation/hibernate/hibernate-core-3.3/src/test/groovy/SessionTest.groovy b/dd-java-agent/instrumentation/hibernate/hibernate-core-3.3/src/test/groovy/SessionTest.groovy index 659e24b9552..042e150e3c0 100644 --- a/dd-java-agent/instrumentation/hibernate/hibernate-core-3.3/src/test/groovy/SessionTest.groovy +++ b/dd-java-agent/instrumentation/hibernate/hibernate-core-3.3/src/test/groovy/SessionTest.groovy @@ -1,5 +1,5 @@ import datadog.trace.api.DDSpanTypes -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.Tags import org.hibernate.LockMode import org.hibernate.MappingException @@ -9,6 +9,7 @@ import org.hibernate.Session import spock.lang.Shared import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan class SessionTest extends AbstractHibernateTest { @@ -540,7 +541,7 @@ class SessionTest extends AbstractHibernateTest { def "test hibernate overlapping Sessions"() { - AgentScope scope = activateSpan(startSpan("test", "overlapping Sessions")) + ContextScope scope = activateSpan(startSpan("test", "overlapping Sessions")) def session1 = sessionFactory.openSession() session1.beginTransaction() @@ -559,7 +560,7 @@ class SessionTest extends AbstractHibernateTest { session3.close() scope.close() - scope.span().finish() + spanFromScope(scope).finish() expect: diff --git a/dd-java-agent/instrumentation/hibernate/hibernate-core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/QueryInstrumentation.java b/dd-java-agent/instrumentation/hibernate/hibernate-core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/QueryInstrumentation.java index 8ab199d3552..c37929908cc 100644 --- a/dd-java-agent/instrumentation/hibernate/hibernate-core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/QueryInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/hibernate-core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/QueryInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.hibernate.HibernateDecorator.DECORATOR; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -62,7 +63,7 @@ public static SessionState startMethod( final SessionState state = SessionMethodUtils.startScopeFrom(contextStore, query, operationName, null, true); if (state != null) { - DECORATOR.onStatement(state.getMethodScope().span(), query.getQueryString()); + DECORATOR.onStatement(spanFromScope(state.getMethodScope()), query.getQueryString()); } return state; } diff --git a/dd-java-agent/instrumentation/hibernate/hibernate-core-4.0/src/test/groovy/SessionTest.groovy b/dd-java-agent/instrumentation/hibernate/hibernate-core-4.0/src/test/groovy/SessionTest.groovy index 9fb814fd8f4..d1f39daa76c 100644 --- a/dd-java-agent/instrumentation/hibernate/hibernate-core-4.0/src/test/groovy/SessionTest.groovy +++ b/dd-java-agent/instrumentation/hibernate/hibernate-core-4.0/src/test/groovy/SessionTest.groovy @@ -1,5 +1,5 @@ import datadog.trace.api.DDSpanTypes -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.Tags import org.hibernate.LockMode import org.hibernate.MappingException @@ -9,6 +9,7 @@ import org.hibernate.Session import spock.lang.Shared import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan class SessionTest extends AbstractHibernateTest { @@ -466,7 +467,7 @@ class SessionTest extends AbstractHibernateTest { def "test hibernate overlapping Sessions"() { setup: - AgentScope scope = activateSpan(startSpan("test", "overlapping Sessions")) + ContextScope scope = activateSpan(startSpan("test", "overlapping Sessions")) def session1 = sessionFactory.openSession() session1.beginTransaction() @@ -485,7 +486,7 @@ class SessionTest extends AbstractHibernateTest { session3.close() scope.close() - scope.span().finish() + spanFromScope(scope).finish() expect: assertTraces(1) { diff --git a/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheAsyncInstrumentation.java b/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheAsyncInstrumentation.java index efdad2f73bc..6af960820a1 100644 --- a/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheAsyncInstrumentation.java +++ b/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheAsyncInstrumentation.java @@ -3,13 +3,14 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.ignite.v2.cache.IgniteCacheDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.apache.ignite.Ignite; @@ -60,7 +61,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class IgniteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final IgniteCache that, @Advice.Origin("#m") final String methodName) { // Ensure that we only create a span for the top-level cache method final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(IgniteCache.class); @@ -81,7 +82,7 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return final IgniteFuture future) { @@ -89,7 +90,7 @@ public static void stopSpan( return; } // If we have a scope (i.e. we were the top-level Ignite SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { // There was a synchronous error, // which means we shouldn't wait for a callback to close the span. @@ -111,7 +112,7 @@ public static void stopSpan( public static class KeyedAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final IgniteCache that, @Advice.Origin("#m") final String methodName, @Advice.Argument(value = 0, optional = true) final Object key) { @@ -134,14 +135,14 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return final IgniteFuture future) { if (scope == null) { return; } // If we have a scope (i.e. we were the top-level Ignite SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { // There was a synchronous error, // which means we shouldn't wait for a callback to close the span. diff --git a/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheSyncInstrumentation.java b/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheSyncInstrumentation.java index c97b0d66fa6..6c7bd1a2433 100644 --- a/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheSyncInstrumentation.java +++ b/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheSyncInstrumentation.java @@ -4,14 +4,15 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.ignite.v2.cache.IgniteCacheDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.apache.ignite.Ignite; @@ -73,7 +74,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class IgniteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final IgniteCache that, @Advice.Origin("#m") final String methodName) { // Ensure that we only create a span for the top-level cache method final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(IgniteCache.class); @@ -92,13 +93,13 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); @@ -110,7 +111,7 @@ public static void stopSpan( public static class KeyedAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final IgniteCache that, @Advice.Origin("#m") final String methodName, @Advice.Argument(value = 0, optional = true) final Object key) { @@ -131,15 +132,15 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - DECORATE.onError(scope.span(), throwable); - DECORATE.beforeFinish(scope.span()); + DECORATE.onError(spanFromScope(scope), throwable); + DECORATE.beforeFinish(spanFromScope(scope)); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); CallDepthThreadLocalMap.reset(IgniteCache.class); // reset call depth count } } @@ -147,7 +148,7 @@ public static void stopSpan( public static class QueryAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final IgniteCache that, @Advice.Origin("#m") final String methodName, @Advice.Argument(0) final Query query) { @@ -168,15 +169,15 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - DECORATE.onError(scope.span(), throwable); - DECORATE.beforeFinish(scope.span()); + DECORATE.onError(spanFromScope(scope), throwable); + DECORATE.beforeFinish(spanFromScope(scope)); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); CallDepthThreadLocalMap.reset(IgniteCache.class); // reset call depth count } } diff --git a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/groovy/timer/TimerTaskContinuationTest.groovy b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/groovy/timer/TimerTaskContinuationTest.groovy index 0ce840a5600..9545dd9ac61 100644 --- a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/groovy/timer/TimerTaskContinuationTest.groovy +++ b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/groovy/timer/TimerTaskContinuationTest.groovy @@ -6,7 +6,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSp import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan import datadog.trace.agent.test.InstrumentationSpecification -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import spock.lang.Shared @@ -32,7 +32,7 @@ class TimerTaskContinuationTest extends InstrumentationSpecification { @Override void run() { AgentSpan span = startSpan("test", "child") - AgentScope scope = activateSpan(span) + ContextScope scope = activateSpan(span) try { span.finish() } finally { diff --git a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/SendAdvice.java b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/SendAdvice.java index 8f4c09bb4f3..389d0a9ff6f 100644 --- a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/SendAdvice.java +++ b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/SendAdvice.java @@ -2,13 +2,14 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.httpclient.JavaNetClientDecorator.DECORATE; import static datadog.trace.instrumentation.httpclient.JavaNetClientDecorator.INSTRUMENTATION_NAME; import static datadog.trace.instrumentation.httpclient.JavaNetClientDecorator.OPERATION_NAME; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -17,7 +18,8 @@ public class SendAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.Argument(value = 0) final HttpRequest httpRequest) { + public static ContextScope methodEnter( + @Advice.Argument(value = 0) final HttpRequest httpRequest) { try { if (DECORATE.isAgentRequest(httpRequest)) { return null; @@ -32,7 +34,7 @@ public static AgentScope methodEnter(@Advice.Argument(value = 0) final HttpReque } DECORATE.allowContextInjection(); final AgentSpan span = startSpan(INSTRUMENTATION_NAME, OPERATION_NAME); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); DECORATE.afterStart(span); DECORATE.onRequest(span, httpRequest); @@ -49,7 +51,7 @@ public static AgentScope methodEnter(@Advice.Argument(value = 0) final HttpReque @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final HttpResponse httpResponse, @Advice.Thrown final Throwable throwable) { if (scope == null) { @@ -58,7 +60,7 @@ public static void methodExit( CallDepthThreadLocalMap.reset(HttpClient.class); DECORATE.blockContextInjection(); - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (null != throwable) { DECORATE.onError(span, throwable); } else { diff --git a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/SendAsyncAdvice.java b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/SendAsyncAdvice.java index a73c4c15722..f9838510417 100644 --- a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/SendAsyncAdvice.java +++ b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/SendAsyncAdvice.java @@ -2,13 +2,14 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.httpclient.JavaNetClientDecorator.DECORATE; import static datadog.trace.instrumentation.httpclient.JavaNetClientDecorator.INSTRUMENTATION_NAME; import static datadog.trace.instrumentation.httpclient.JavaNetClientDecorator.OPERATION_NAME; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -18,7 +19,7 @@ public class SendAsyncAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(value = 0) final HttpRequest httpRequest, @Advice.Argument(value = 1, readOnly = false) HttpResponse.BodyHandler bodyHandler) { try { @@ -35,7 +36,7 @@ public static AgentScope methodEnter( } DECORATE.allowContextInjection(); final AgentSpan span = startSpan(INSTRUMENTATION_NAME, OPERATION_NAME); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); if (bodyHandler != null) { // Pass span directly — BodyHandlerWrapper captures the continuation lazily in apply(), // only once response headers arrive. This avoids leaking a continuation when the @@ -58,7 +59,7 @@ public static AgentScope methodEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Argument(value = 0) final HttpRequest httpRequest, @Advice.Return(readOnly = false) CompletableFuture> future, @Advice.Thrown final Throwable throwable) { @@ -69,7 +70,7 @@ public static void methodExit( CallDepthThreadLocalMap.reset(HttpClient.class); DECORATE.blockContextInjection(); - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/java/java-rmi-1.1/src/main/java/datadog/trace/instrumentation/rmi/client/RmiClientInstrumentation.java b/dd-java-agent/instrumentation/java/java-rmi-1.1/src/main/java/datadog/trace/instrumentation/rmi/client/RmiClientInstrumentation.java index 010a7c26775..303c5bd0636 100644 --- a/dd-java-agent/instrumentation/java/java-rmi-1.1/src/main/java/datadog/trace/instrumentation/rmi/client/RmiClientInstrumentation.java +++ b/dd-java-agent/instrumentation/java/java-rmi-1.1/src/main/java/datadog/trace/instrumentation/rmi/client/RmiClientInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.rmi.RmiClientDecorator.DECORATE; import static datadog.trace.bootstrap.instrumentation.rmi.RmiClientDecorator.RMI_CLIENT; import static datadog.trace.bootstrap.instrumentation.rmi.RmiClientDecorator.RMI_INVOKE; @@ -12,9 +13,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.reflect.Method; import net.bytebuddy.asm.Advice; @@ -53,7 +54,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class RmiClientAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.Argument(value = 1) final Method method) { + public static ContextScope onEnter(@Advice.Argument(value = 1) final Method method) { if (activeSpan() == null) { return null; } @@ -65,14 +66,14 @@ public static AgentScope onEnter(@Advice.Argument(value = 1) final Method method @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/java/java-rmi-1.1/src/main/java/datadog/trace/instrumentation/rmi/server/RmiServerInstrumentation.java b/dd-java-agent/instrumentation/java/java-rmi-1.1/src/main/java/datadog/trace/instrumentation/rmi/server/RmiServerInstrumentation.java index ddc5bc5a061..5956b8833c2 100644 --- a/dd-java-agent/instrumentation/java/java-rmi-1.1/src/main/java/datadog/trace/instrumentation/rmi/server/RmiServerInstrumentation.java +++ b/dd-java-agent/instrumentation/java/java-rmi-1.1/src/main/java/datadog/trace/instrumentation/rmi/server/RmiServerInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.rmi.RmiServerDecorator.DECORATE; import static datadog.trace.bootstrap.instrumentation.rmi.RmiServerDecorator.RMI_REQUEST; import static datadog.trace.bootstrap.instrumentation.rmi.RmiServerDecorator.RMI_SERVER; @@ -14,9 +15,9 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import java.lang.reflect.Method; @@ -52,7 +53,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ServerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = true) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final Object thiz, @Advice.Origin final Method method) { final AgentSpanContext context = THREAD_LOCAL_CONTEXT.getAndResetContext(); @@ -71,14 +72,14 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java index ba9d7322669..c6a260ade54 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.DBM_TRACE_INJECTED; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jdbc.JDBCDecorator.DATABASE_QUERY; import static datadog.trace.instrumentation.jdbc.JDBCDecorator.DBM_TRACE_PREPARED_STATEMENTS; import static datadog.trace.instrumentation.jdbc.JDBCDecorator.DECORATE; @@ -13,11 +14,11 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; @@ -63,7 +64,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class PreparedStatementAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.This final Statement statement) { + public static ContextScope onEnter(@Advice.This final Statement statement) { int depth = CallDepthThreadLocalMap.incrementCallDepth(Statement.class); if (depth > 0) { return null; @@ -125,15 +126,15 @@ public static AgentScope onEnter(@Advice.This final Statement statement) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { CallDepthThreadLocalMap.decrementCallDepth(Statement.class); if (scope == null) { return; } - DECORATE.onError(scope.span(), throwable); - DECORATE.beforeFinish(scope.span()); + DECORATE.onError(spanFromScope(scope), throwable); + DECORATE.beforeFinish(spanFromScope(scope)); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DataSourceInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DataSourceInstrumentation.java index fa8a9545d99..59291b453b4 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DataSourceInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DataSourceInstrumentation.java @@ -5,14 +5,15 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jdbc.DataSourceDecorator.DATABASE_CONNECTION; import static datadog.trace.instrumentation.jdbc.DataSourceDecorator.DECORATE; import static datadog.trace.instrumentation.jdbc.DataSourceDecorator.JAVA_JDBC_CONNECTION; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import javax.sql.DataSource; import net.bytebuddy.asm.Advice; @@ -59,7 +60,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class GetConnectionAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope start(@Advice.This final DataSource ds) { + public static ContextScope start(@Advice.This final DataSource ds) { if (activeSpan() == null) { // Don't want to generate a new top-level span return null; @@ -75,14 +76,14 @@ public static AgentScope start(@Advice.This final DataSource ds) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java index 767ee6a8914..ccee8c1f95f 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java @@ -7,6 +7,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.DBM_TRACE_INJECTED; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jdbc.JDBCDecorator.DATABASE_QUERY; import static datadog.trace.instrumentation.jdbc.JDBCDecorator.DECORATE; import static datadog.trace.instrumentation.jdbc.JDBCDecorator.INJECT_COMMENT; @@ -16,12 +17,12 @@ import com.google.auto.service.AutoService; import datadog.appsec.api.blocking.BlockingException; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.propagation.W3CTraceParent; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; @@ -75,7 +76,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class StatementAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(value = 0, readOnly = false) String sql, @Advice.AllArguments() Object[] args, @Advice.This final Statement statement) { @@ -192,15 +193,15 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { CallDepthThreadLocalMap.decrementCallDepth(Statement.class); if (scope == null) { return; } - DECORATE.onError(scope.span(), throwable); - DECORATE.beforeFinish(scope.span()); + DECORATE.onError(spanFromScope(scope), throwable); + DECORATE.beforeFinish(spanFromScope(scope)); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jedis/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java b/dd-java-agent/instrumentation/jedis/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java index a24f12030ac..baf23d05739 100644 --- a/dd-java-agent/instrumentation/jedis/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java +++ b/dd-java-agent/instrumentation/jedis/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jedis.JedisClientDecorator.COMPONENT_NAME; import static datadog.trace.instrumentation.jedis.JedisClientDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -11,10 +12,10 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatcher; @@ -60,7 +61,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class JedisAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final Command command, @Advice.This final Connection thiz) { if (CallDepthThreadLocalMap.incrementCallDepth(Connection.class) > 0) { return null; @@ -75,15 +76,15 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } CallDepthThreadLocalMap.reset(Connection.class); - DECORATE.onError(scope.span(), throwable); - DECORATE.beforeFinish(scope.span()); + DECORATE.onError(spanFromScope(scope), throwable); + DECORATE.beforeFinish(spanFromScope(scope)); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jedis/jedis-3.0/src/main/java/datadog/trace/instrumentation/jedis30/JedisInstrumentation.java b/dd-java-agent/instrumentation/jedis/jedis-3.0/src/main/java/datadog/trace/instrumentation/jedis30/JedisInstrumentation.java index 371e84a784a..329f944cf65 100644 --- a/dd-java-agent/instrumentation/jedis/jedis-3.0/src/main/java/datadog/trace/instrumentation/jedis30/JedisInstrumentation.java +++ b/dd-java-agent/instrumentation/jedis/jedis-3.0/src/main/java/datadog/trace/instrumentation/jedis30/JedisInstrumentation.java @@ -3,15 +3,16 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jedis30.JedisClientDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import redis.clients.jedis.Connection; @@ -51,7 +52,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class JedisAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final ProtocolCommand command, @Advice.This final Connection thiz) { if (CallDepthThreadLocalMap.incrementCallDepth(Connection.class) > 0) { return null; @@ -72,15 +73,15 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } CallDepthThreadLocalMap.reset(Connection.class); - DECORATE.onError(scope.span(), throwable); - DECORATE.beforeFinish(scope.span()); + DECORATE.onError(spanFromScope(scope), throwable); + DECORATE.beforeFinish(spanFromScope(scope)); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jedis/jedis-4.0/src/main/java/datadog/trace/instrumentation/jedis40/JedisInstrumentation.java b/dd-java-agent/instrumentation/jedis/jedis-4.0/src/main/java/datadog/trace/instrumentation/jedis40/JedisInstrumentation.java index 24350a6a3a6..6ff705389b3 100644 --- a/dd-java-agent/instrumentation/jedis/jedis-4.0/src/main/java/datadog/trace/instrumentation/jedis40/JedisInstrumentation.java +++ b/dd-java-agent/instrumentation/jedis/jedis-4.0/src/main/java/datadog/trace/instrumentation/jedis40/JedisInstrumentation.java @@ -3,15 +3,16 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static redis.clients.jedis.JedisClientDecorator.DECORATE; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import redis.clients.jedis.CommandObject; @@ -53,7 +54,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class JedisAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final CommandObject commandObject, @Advice.This final Connection thiz) { final AgentSpan span = startSpan("redis-command", JedisClientDecorator.OPERATION_NAME); @@ -74,11 +75,11 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { - DECORATE.onError(scope.span(), throwable); - DECORATE.beforeFinish(scope.span()); + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { + DECORATE.onError(spanFromScope(scope), throwable); + DECORATE.beforeFinish(spanFromScope(scope)); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jersey/jersey-filter-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JerseyRequestContextInstrumentation.java b/dd-java-agent/instrumentation/jersey/jersey-filter-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JerseyRequestContextInstrumentation.java index ee977629437..ccfda136b35 100644 --- a/dd-java-agent/instrumentation/jersey/jersey-filter-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JerseyRequestContextInstrumentation.java +++ b/dd-java-agent/instrumentation/jersey/jersey-filter-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JerseyRequestContextInstrumentation.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.jaxrs2; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import java.lang.reflect.Method; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ResourceInfo; @@ -22,7 +22,8 @@ public class JerseyRequestContextInstrumentation extends AbstractRequestContextInstrumentation { public static class ContainerRequestContextAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope decorateAbortSpan(@Advice.This final ContainerRequestContext context) { + public static ContextScope decorateAbortSpan( + @Advice.This final ContainerRequestContext context) { final UriInfo uriInfo = context.getUriInfo(); if (context.getProperty(JaxRsAnnotationsDecorator.ABORT_HANDLED) == null @@ -40,7 +41,7 @@ public static AgentScope decorateAbortSpan(@Advice.This final ContainerRequestCo @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { RequestFilterHelper.closeSpanAndScope(scope, throwable); } } diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/CallbackWrapper.java b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/CallbackWrapper.java index 90aa89b4f3e..dee754f9052 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/CallbackWrapper.java +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/CallbackWrapper.java @@ -4,7 +4,6 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import datadog.context.ContextScope; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import org.eclipse.jetty.client.Request; import org.eclipse.jetty.client.Response; @@ -121,7 +120,7 @@ public void onSuccess(Request request) { } } - private AgentScope activate(AgentSpan span) { + private ContextScope activate(AgentSpan span) { return null == span ? null : activateSpan(span); } } diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java index cc08b865280..2a762481cdc 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/main/java17/datadog/trace/instrumentation/jetty_client12/SendAdvice.java @@ -2,11 +2,12 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jetty_client12.JettyClientDecorator.DECORATE; import static datadog.trace.instrumentation.jetty_client12.JettyClientDecorator.HTTP_REQUEST; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.eclipse.jetty.client.Request; @@ -14,7 +15,7 @@ public class SendAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.This final HttpRequest request) { + public static ContextScope methodEnter(@Advice.This final HttpRequest request) { AgentSpan span = startSpan("jetty-client", HTTP_REQUEST); InstrumentationContext.get(Request.class, AgentSpan.class).put(request, span); DECORATE.afterStart(span); @@ -24,12 +25,12 @@ public static AgentScope methodEnter(@Advice.This final HttpRequest request) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { try (scope) { if (throwable != null) { DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-common/src/main/java/datadog/trace/instrumentation/jetty_client/CallbackWrapper.java b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-common/src/main/java/datadog/trace/instrumentation/jetty_client/CallbackWrapper.java index 8b8aa2972dc..a6408178d1f 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-common/src/main/java/datadog/trace/instrumentation/jetty_client/CallbackWrapper.java +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-common/src/main/java/datadog/trace/instrumentation/jetty_client/CallbackWrapper.java @@ -3,7 +3,6 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import datadog.context.ContextScope; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.nio.ByteBuffer; import org.eclipse.jetty.client.api.Request; @@ -152,7 +151,7 @@ public void onSuccess(Request request) { } } - private AgentScope activate(AgentSpan span) { + private ContextScope activate(AgentSpan span) { return null == span ? null : activateSpan(span); } } diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/main/java/datadog/trace/instrumentation/jetty9/WebSocketSessionInstrumentation.java b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/main/java/datadog/trace/instrumentation/jetty9/WebSocketSessionInstrumentation.java index 61fd9cc8c17..449aa1c125f 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/main/java/datadog/trace/instrumentation/jetty9/WebSocketSessionInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/main/java/datadog/trace/instrumentation/jetty9/WebSocketSessionInstrumentation.java @@ -7,11 +7,11 @@ import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.websocket.HandlerContext; import java.util.Collections; import java.util.Map; @@ -61,7 +61,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class CloseAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final Object session, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { @@ -81,7 +81,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable thrown, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { if (scope != null) { diff --git a/dd-java-agent/instrumentation/jms/javax-jms-1.1/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java b/dd-java-agent/instrumentation/jms/javax-jms-1.1/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java index 3dbfa0579f5..3a2d482de8a 100644 --- a/dd-java-agent/instrumentation/jms/javax-jms-1.1/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/javax-jms-1.1/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java @@ -10,6 +10,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jms.JMSDecorator.JMS_PRODUCE; import static datadog.trace.instrumentation.jms.JMSDecorator.PRODUCER_DECORATE; import static datadog.trace.instrumentation.jms.JMSDecorator.TIME_IN_QUEUE_ENABLED; @@ -18,6 +19,7 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.annotation.AppliesOn; import datadog.trace.api.Config; @@ -25,7 +27,6 @@ import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.jms.MessageProducerState; @@ -73,7 +74,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ProducerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beforeSend( + public static ContextScope beforeSend( @Advice.Argument(0) final Message message, @Advice.This final MessageProducer producer) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(MessageProducer.class); if (callDepth > 0) { @@ -126,14 +127,14 @@ public static AgentScope beforeSend( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterSend( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } PRODUCER_DECORATE.onError(scope, throwable); PRODUCER_DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); CallDepthThreadLocalMap.reset(MessageProducer.class); } } @@ -160,7 +161,7 @@ public static void onEnter( public static class ProducerWithDestinationAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beforeSend( + public static ContextScope beforeSend( @Advice.Argument(0) final Destination destination, @Advice.Argument(1) final Message message, @Advice.This final MessageProducer producer) { @@ -201,14 +202,14 @@ public static AgentScope beforeSend( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterSend( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } PRODUCER_DECORATE.onError(scope, throwable); PRODUCER_DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); CallDepthThreadLocalMap.reset(MessageProducer.class); } } diff --git a/dd-java-agent/instrumentation/jms/javax-jms-1.1/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms/javax-jms-1.1/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java index 9ae776c7ed4..c8b04c89c97 100644 --- a/dd-java-agent/instrumentation/jms/javax-jms-1.1/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/javax-jms-1.1/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java @@ -9,6 +9,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.rootContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jms.JMSDecorator.CONSUMER_DECORATE; import static datadog.trace.instrumentation.jms.JMSDecorator.JMS_CONSUME; import static datadog.trace.instrumentation.jms.JMSDecorator.logJMSException; @@ -22,7 +23,6 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.annotation.AppliesOn; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import javax.jms.Destination; import javax.jms.JMSException; @@ -81,7 +81,7 @@ public static void onExit(@Advice.Local("ctxScope") ContextScope scope) { public static class MDBAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.Argument(0) final Message message) { + public static ContextScope methodEnter(@Advice.Argument(0) final Message message) { if (CallDepthThreadLocalMap.incrementCallDepth(MessageListener.class) > 0) { return null; } @@ -103,12 +103,12 @@ public static AgentScope methodEnter(@Advice.Argument(0) final Message message) @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter ContextScope scope, @Advice.Thrown final Throwable throwable) { if (null != scope) { CallDepthThreadLocalMap.reset(MessageListener.class); CONSUMER_DECORATE.onError(scope, throwable); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPDecorator.java b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPDecorator.java index 89efa564eb8..fdea60ec215 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPDecorator.java +++ b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPDecorator.java @@ -1,6 +1,8 @@ package datadog.trace.instrumentation.jsp; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; + +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator; @@ -30,9 +32,10 @@ protected CharSequence component() { return JSP_HTTP_SERVLET; } - public void onCompile(final AgentScope scope, final JspCompilationContext jspCompilationContext) { + public void onCompile( + final ContextScope scope, final JspCompilationContext jspCompilationContext) { if (jspCompilationContext != null) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); span.setResourceName(jspCompilationContext.getJspFile()); if (jspCompilationContext.getServletContext() != null) { diff --git a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java index ce2d37251b6..d8b98526804 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java +++ b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jsp.JSPDecorator.DECORATE; import static datadog.trace.instrumentation.jsp.JSPDecorator.JSP_HTTP_SERVLET; import static datadog.trace.instrumentation.jsp.JSPDecorator.JSP_RENDER; @@ -11,9 +12,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import javax.servlet.http.HttpServletRequest; import net.bytebuddy.asm.Advice; @@ -58,7 +59,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class HttpJspPageAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final Object obj, @Advice.Argument(0) final HttpServletRequest req) { final AgentSpan span = startSpan(JSP_HTTP_SERVLET.toString(), JSP_RENDER) @@ -70,11 +71,11 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JasperJSPCompilationContextInstrumentation.java b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JasperJSPCompilationContextInstrumentation.java index 2bec868dac1..71918ce5332 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JasperJSPCompilationContextInstrumentation.java +++ b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JasperJSPCompilationContextInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jsp.JSPDecorator.DECORATE; import static datadog.trace.instrumentation.jsp.JSPDecorator.JSP_COMPILE; import static datadog.trace.instrumentation.jsp.JSPDecorator.JSP_HTTP_SERVLET; @@ -10,9 +11,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.apache.jasper.JspCompilationContext; @@ -48,7 +49,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class JasperJspCompilationContext { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter() { + public static ContextScope onEnter() { final AgentSpan span = startSpan(JSP_HTTP_SERVLET.toString(), JSP_COMPILE); DECORATE.afterStart(span); return activateSpan(span); @@ -57,7 +58,7 @@ public static AgentScope onEnter() { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( @Advice.This final JspCompilationContext jspCompilationContext, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { DECORATE.onCompile(scope, jspCompilationContext); // ^ Decorate on return because additional properties are available @@ -65,7 +66,7 @@ public static void stopSpan( DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterInstrumentation.java index bd2405bab66..89fb61c89f9 100644 --- a/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterInstrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterInstrumentation.java @@ -4,9 +4,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; import org.junit.runner.manipulation.InvalidOrderingException; import org.junit.runner.manipulation.Ordering; @@ -47,13 +47,13 @@ public void methodAdvice(MethodTransformer transformer) { public static class RunBeforesAftersAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope startCallSpan(@Advice.Argument(0) final FrameworkMethod method) { + public static ContextScope startCallSpan(@Advice.Argument(0) final FrameworkMethod method) { return JUnit4BeforeAfterOperationsTracer.startTrace(method.getMethod()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishCallSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { JUnit4BeforeAfterOperationsTracer.endTrace(scope, throwable); } diff --git a/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterOperationsTracer.java b/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterOperationsTracer.java index 1e41f817349..01602f656c3 100644 --- a/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterOperationsTracer.java +++ b/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterOperationsTracer.java @@ -1,6 +1,8 @@ package datadog.trace.instrumentation.junit4; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; + +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.Tags; @@ -12,7 +14,7 @@ import org.junit.runners.Parameterized; public class JUnit4BeforeAfterOperationsTracer { - public static AgentScope startTrace(final Method method) { + public static ContextScope startTrace(final Method method) { final AgentSpan span = AgentTracer.startSpan("junit", method.getName()); if (method.isAnnotationPresent(Before.class)) { span.setTag(Tags.TEST_CALLBACK, "Before"); @@ -30,8 +32,8 @@ public static AgentScope startTrace(final Method method) { return AgentTracer.activateSpan(span); } - public static void endTrace(final AgentScope scope, final Throwable throwable) { - final AgentSpan span = scope.span(); + public static void endTrace(final ContextScope scope, final Throwable throwable) { + final AgentSpan span = spanFromScope(scope); if (throwable != null) { span.addThrowable(throwable); } diff --git a/dd-java-agent/instrumentation/junit/junit-5/junit-5-spock-2.0/src/test/groovy/org/example/TestParameterizedSetupSpecSpock.groovy b/dd-java-agent/instrumentation/junit/junit-5/junit-5-spock-2.0/src/test/groovy/org/example/TestParameterizedSetupSpecSpock.groovy index 20b65ca7bf6..a0104cfeb1f 100644 --- a/dd-java-agent/instrumentation/junit/junit-5/junit-5-spock-2.0/src/test/groovy/org/example/TestParameterizedSetupSpecSpock.groovy +++ b/dd-java-agent/instrumentation/junit/junit-5/junit-5-spock-2.0/src/test/groovy/org/example/TestParameterizedSetupSpecSpock.groovy @@ -1,6 +1,6 @@ package org.example -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentTracer import spock.lang.Specification @@ -10,7 +10,7 @@ class TestParameterizedSetupSpecSpock extends Specification { def setupSpec() { AgentTracer.TracerAPI agentTracer = AgentTracer.get() AgentSpan span = agentTracer.buildSpan("spock-manual", "spec-setup").start() - try (AgentScope scope = agentTracer.activateManualSpan(span)) { + try (ContextScope scope = agentTracer.activateManualSpan(span)) { // manually trace spec setup to check whether ITR skips it or not } span.finish() diff --git a/dd-java-agent/instrumentation/junit/junit-5/junit-5-spock-2.0/src/test/groovy/org/example/TestSucceedSetupSpecSpock.groovy b/dd-java-agent/instrumentation/junit/junit-5/junit-5-spock-2.0/src/test/groovy/org/example/TestSucceedSetupSpecSpock.groovy index d31301e8379..712b544fae8 100644 --- a/dd-java-agent/instrumentation/junit/junit-5/junit-5-spock-2.0/src/test/groovy/org/example/TestSucceedSetupSpecSpock.groovy +++ b/dd-java-agent/instrumentation/junit/junit-5/junit-5-spock-2.0/src/test/groovy/org/example/TestSucceedSetupSpecSpock.groovy @@ -1,6 +1,6 @@ package org.example -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentTracer import spock.lang.Specification @@ -10,7 +10,7 @@ class TestSucceedSetupSpecSpock extends Specification { def setupSpec() { AgentTracer.TracerAPI agentTracer = AgentTracer.get() AgentSpan span = agentTracer.buildSpan("spock-manual", "spec-setup").start() - try (AgentScope scope = agentTracer.activateManualSpan(span)) { + try (ContextScope scope = agentTracer.activateManualSpan(span)) { // manually trace spec setup to check whether ITR skips it or not } span.finish() diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java index e428a73d94b..0ba96be626d 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.KAFKA_RECORDS_COUNT; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.kafka_clients.KafkaDecorator.JAVA_KAFKA; import static datadog.trace.instrumentation.kafka_clients.KafkaDecorator.KAFKA_POLL; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; @@ -17,11 +18,11 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.kafka_common.ClusterIdHolder; import datadog.trace.instrumentation.kafka_common.KafkaConfigHelper; @@ -236,7 +237,7 @@ public static void muzzleCheck(ConsumerRecord record) { */ public static class RecordsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.This KafkaConsumer consumer) { + public static ContextScope onEnter(@Advice.This KafkaConsumer consumer) { // Set cluster ID in ClusterIdHolder for Schema Registry instrumentation KafkaConsumerInfo kafkaConsumerInfo = InstrumentationContext.get(KafkaConsumer.class, KafkaConsumerInfo.class).get(consumer); @@ -261,7 +262,7 @@ public static AgentScope onEnter(@Advice.This KafkaConsumer consumer) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void captureGroup( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.This KafkaConsumer consumer, @Advice.Return ConsumerRecords records, @Advice.Thrown Throwable throwable) { @@ -281,7 +282,7 @@ public static void captureGroup( if (scope == null) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); span.setTag(KAFKA_RECORDS_COUNT, recordsCount); if (!(throwable instanceof WakeupException)) { span.addThrowable(throwable); diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java index f0309fbcb84..98e415b4cd4 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaProducerInstrumentation.java @@ -27,6 +27,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; import datadog.trace.agent.tooling.Instrumenter; @@ -38,7 +39,6 @@ import datadog.trace.api.datastreams.DataStreamsTransactionExtractor; import datadog.trace.api.datastreams.StatsPoint; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -135,7 +135,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ProducerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.FieldValue("producerConfig") ProducerConfig producerConfig, @Advice.FieldValue("sender") Sender sender, @Advice.FieldValue("metadata") Metadata metadata, @@ -180,7 +180,7 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { // Clear cluster ID from Schema Registry instrumentation ClusterIdHolder.clear(); diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java index 01905ee65e4..716683d7011 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.java @@ -8,8 +8,8 @@ import static datadog.trace.instrumentation.kafka_clients38.KafkaDecorator.KAFKA_PRODUCE; import static datadog.trace.instrumentation.kafka_clients38.KafkaDecorator.PRODUCER_DECORATE; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags; @@ -25,7 +25,7 @@ public class ProducerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.FieldValue("producerConfig") ProducerConfig producerConfig, @Advice.FieldValue("sender") Sender sender, @Advice.FieldValue("metadata") Metadata metadata, @@ -70,7 +70,7 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { // Clear cluster ID from Schema Registry instrumentation ClusterIdHolder.clear(); diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.java b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.java index b8f3dff049a..418966c4cb8 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.java +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.java @@ -4,12 +4,13 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.KAFKA_RECORDS_COUNT; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.kafka_clients38.KafkaDecorator.JAVA_KAFKA; import static datadog.trace.instrumentation.kafka_clients38.KafkaDecorator.KAFKA_POLL; +import datadog.context.ContextScope; import datadog.trace.api.Config; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.kafka_common.ClusterIdHolder; import datadog.trace.instrumentation.kafka_common.MetadataState; @@ -26,7 +27,7 @@ */ public class RecordsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.This ConsumerDelegate consumer) { + public static ContextScope onEnter(@Advice.This ConsumerDelegate consumer) { // Set cluster ID in ClusterIdHolder for Schema Registry instrumentation KafkaConsumerInfo kafkaConsumerInfo = InstrumentationContext.get(ConsumerDelegate.class, KafkaConsumerInfo.class).get(consumer); @@ -48,7 +49,7 @@ public static AgentScope onEnter(@Advice.This ConsumerDelegate consumer) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void captureGroup( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.This ConsumerDelegate consumer, @Advice.Return ConsumerRecords records, @Advice.Thrown Throwable throwable) { @@ -70,7 +71,7 @@ public static void captureGroup( if (scope == null) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); span.setTag(KAFKA_RECORDS_COUNT, recordsCount); if (!(throwable instanceof WakeupException)) { span.addThrowable(throwable); diff --git a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java index 81ddfd4202f..c362047e9c2 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java @@ -11,6 +11,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.rootContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.kafka_common.StreamingContext.STREAMING_CONTEXT; import static datadog.trace.instrumentation.kafka_common.Utils.computePayloadSizeBytes; import static datadog.trace.instrumentation.kafka_streams.KafkaStreamsDecorator.BROKER_DECORATE; @@ -42,7 +43,6 @@ import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.instrumentation.kafka_clients.TracingIterableDelegator; @@ -316,7 +316,7 @@ public static void start( CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, record, node); - AgentScope agentScope = activateSpan(span); + ContextScope agentScope = activateSpan(span); if (null != queueSpan) { queueSpan.finish(); } @@ -388,7 +388,7 @@ public static void start( CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, record, node); - AgentScope agentScope = activateSpan(span); + ContextScope agentScope = activateSpan(span); if (null != queueSpan) { queueSpan.finish(); } @@ -410,9 +410,9 @@ public static void stop( StreamTaskContext streamTaskContext = InstrumentationContext.get(StreamTask.class, StreamTaskContext.class).get(task); if (streamTaskContext != null) { - AgentScope scope = streamTaskContext.getAgentScope(); + ContextScope scope = streamTaskContext.getAgentScope(); if (scope != null) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); CONSUMER_DECORATE.onError(span, throwable); CONSUMER_DECORATE.beforeFinish(span); scope.close(); diff --git a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/StreamTaskContext.java b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/StreamTaskContext.java index 3e2009cdf8b..1cf30286453 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/StreamTaskContext.java +++ b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/StreamTaskContext.java @@ -1,18 +1,18 @@ package datadog.trace.instrumentation.kafka_streams; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; public class StreamTaskContext { - private AgentScope agentScope; + private ContextScope agentScope; private String applicationId; public StreamTaskContext() {} - public void setAgentScope(AgentScope agentScope) { + public void setAgentScope(ContextScope agentScope) { this.agentScope = agentScope; } - public AgentScope getAgentScope() { + public ContextScope getAgentScope() { return agentScope; } diff --git a/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt b/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt index 75a66319120..b29b0c3a19e 100644 --- a/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt +++ b/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt @@ -372,8 +372,11 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc protected suspend fun AgentSpan.activateAndUse(block: suspend () -> Unit) { try { - get().activateManualSpan(this).use { + val scope = get().activateManualSpan(this) + try { block() + } finally { + scope.close() } } finally { finish() diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/InstrumentationPoints.java b/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/InstrumentationPoints.java index 338222cfbc0..d5ffcc60dc7 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/InstrumentationPoints.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/InstrumentationPoints.java @@ -10,6 +10,7 @@ import static com.lambdaworks.redis.protocol.CommandType.SHUTDOWN; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.lettuce4.LettuceClientDecorator.DECORATE; import static datadog.trace.instrumentation.lettuce4.LettuceClientDecorator.REDIS_CLIENT; @@ -18,7 +19,7 @@ import com.lambdaworks.redis.protocol.CommandType; import com.lambdaworks.redis.protocol.ProtocolKeyword; import com.lambdaworks.redis.protocol.RedisCommand; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.EnumSet; import java.util.Set; @@ -33,7 +34,7 @@ public final class InstrumentationPoints { public static final String AGENT_CRASHING_COMMAND_PREFIX = "COMMAND-NAME:"; - public static AgentScope beforeCommand( + public static ContextScope beforeCommand( final RedisCommand command, final RedisURI redisURI) { final AgentSpan span = startSpan(REDIS_CLIENT.toString(), LettuceClientDecorator.OPERATION_NAME); @@ -45,10 +46,10 @@ public static AgentScope beforeCommand( public static void afterCommand( final RedisCommand command, - final AgentScope scope, + final ContextScope scope, final Throwable throwable, final AsyncCommand asyncCommand) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); @@ -78,7 +79,7 @@ public static void afterCommand( // span may be finished by handleAsync call above. } - public static AgentScope beforeConnect(final RedisURI redisURI) { + public static ContextScope beforeConnect(final RedisURI redisURI) { final AgentSpan span = startSpan(REDIS_CLIENT.toString(), LettuceClientDecorator.OPERATION_NAME); DECORATE.afterStart(span); @@ -87,8 +88,8 @@ public static AgentScope beforeConnect(final RedisURI redisURI) { return activateSpan(span); } - public static void afterConnect(final AgentScope scope, final Throwable throwable) { - final AgentSpan span = scope.span(); + public static void afterConnect(final ContextScope scope, final Throwable throwable) { + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/LettuceAsyncCommandsAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/LettuceAsyncCommandsAdvice.java index 22192ea31dd..0f7656fd81b 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/LettuceAsyncCommandsAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/LettuceAsyncCommandsAdvice.java @@ -5,14 +5,14 @@ import com.lambdaworks.redis.api.StatefulConnection; import com.lambdaworks.redis.protocol.AsyncCommand; import com.lambdaworks.redis.protocol.RedisCommand; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; public class LettuceAsyncCommandsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final RedisCommand command, @Advice.This AbstractRedisAsyncCommands thiz) { return InstrumentationPoints.beforeCommand( @@ -24,7 +24,7 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( @Advice.Argument(0) final RedisCommand command, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return final AsyncCommand asyncCommand) { InstrumentationPoints.afterCommand(command, scope, throwable, asyncCommand); diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/RedisConnectionAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/RedisConnectionAdvice.java index 64fb6b8d123..905132a1faa 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/RedisConnectionAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/RedisConnectionAdvice.java @@ -3,21 +3,21 @@ import com.lambdaworks.redis.RedisURI; import com.lambdaworks.redis.api.StatefulConnection; import com.lambdaworks.redis.api.StatefulRedisConnection; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; public class RedisConnectionAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.Argument(1) final RedisURI redisURI) { + public static ContextScope onEnter(@Advice.Argument(1) final RedisURI redisURI) { return InstrumentationPoints.beforeConnect(redisURI); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( @Advice.Argument(1) final RedisURI redisURI, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return final StatefulRedisConnection connection) { if (connection != null) { diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/ConnectionFutureAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/ConnectionFutureAdvice.java index fd9c335af54..7c468f73b92 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/ConnectionFutureAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/ConnectionFutureAdvice.java @@ -2,10 +2,11 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.lettuce5.LettuceClientDecorator.DECORATE; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.lettuce.core.ConnectionFuture; import io.lettuce.core.RedisURI; @@ -14,7 +15,7 @@ public class ConnectionFutureAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.Argument(1) final RedisURI redisUri) { + public static ContextScope onEnter(@Advice.Argument(1) final RedisURI redisUri) { final AgentSpan span = startSpan( LettuceClientDecorator.REDIS_CLIENT.toString(), LettuceClientDecorator.OPERATION_NAME); @@ -26,12 +27,12 @@ public static AgentScope onEnter(@Advice.Argument(1) final RedisURI redisUri) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Argument(1) final RedisURI redisUri, @Advice.Return(readOnly = false) ConnectionFuture connectionFuture) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/LettuceAsyncCommandsAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/LettuceAsyncCommandsAdvice.java index 8c201abd048..2018dcd1a9c 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/LettuceAsyncCommandsAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/LettuceAsyncCommandsAdvice.java @@ -2,11 +2,12 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.lettuce5.LettuceClientDecorator.DECORATE; import static datadog.trace.instrumentation.lettuce5.LettuceInstrumentationUtil.expectsResponse; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.lettuce.core.AbstractRedisAsyncCommands; import io.lettuce.core.RedisURI; @@ -18,7 +19,7 @@ public class LettuceAsyncCommandsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final RedisCommand command, @Advice.This final AbstractRedisAsyncCommands thiz) { @@ -38,11 +39,11 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( @Advice.Argument(0) final RedisCommand command, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return AsyncCommand asyncCommand) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionDispatchAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionDispatchAdvice.java index 660bf1269ab..8efd5f75325 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionDispatchAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionDispatchAdvice.java @@ -2,8 +2,8 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.lettuce.core.protocol.RedisCommand; import net.bytebuddy.asm.Advice; @@ -11,7 +11,7 @@ public class RedisSubscriptionDispatchAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beforeDispatch( + public static ContextScope beforeDispatch( @Advice.FieldValue("subscriptionCommand") RedisCommand subscriptionCommand) { AgentSpan span = InstrumentationContext.get(RedisCommand.class, AgentSpan.class).get(subscriptionCommand); @@ -19,7 +19,7 @@ public static AgentScope beforeDispatch( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void afterDispatch(@Advice.Enter AgentScope scope) { + public static void afterDispatch(@Advice.Enter ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionSubscribeAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionSubscribeAdvice.java index d10800f5d94..4f7124e35a6 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionSubscribeAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionSubscribeAdvice.java @@ -5,8 +5,8 @@ import static datadog.trace.instrumentation.lettuce5.LettuceClientDecorator.DECORATE; import static datadog.trace.instrumentation.lettuce5.LettuceInstrumentationUtil.expectsResponse; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.lettuce5.LettuceClientDecorator; import io.lettuce.core.RedisURI; @@ -17,10 +17,10 @@ public class RedisSubscriptionSubscribeAdvice { public static final class State { - public final AgentScope parentScope; + public final ContextScope parentScope; public final AgentSpan span; - public State(AgentScope parentScope, AgentSpan span) { + public State(ContextScope parentScope, AgentSpan span) { this.parentScope = parentScope; this.span = span; } @@ -32,7 +32,7 @@ public static State beforeSubscribe( @Advice.FieldValue("command") RedisCommand command, @Advice.FieldValue("subscriptionCommand") RedisCommand subscriptionCommand) { - AgentScope parentScope = null; + ContextScope parentScope = null; RedisSubscriptionState state = (RedisSubscriptionState) InstrumentationContext.get( diff --git a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/main/java17/datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice.java b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/main/java17/datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice.java index fef3a8f016c..498e902b215 100644 --- a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/main/java17/datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice.java +++ b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/main/java17/datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice.java @@ -7,14 +7,14 @@ import static datadog.trace.instrumentation.micronaut.v4_0.MicronautDecorator.PARENT_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.micronaut.v4_0.MicronautDecorator.SPAN_ATTRIBUTE; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.micronaut.http.server.netty.NettyHttpRequest; import net.bytebuddy.asm.Advice; public class ChannelAcceptAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest( + public static ContextScope beginRequest( @Advice.FieldValue("nettyRequest") final NettyHttpRequest request) { final AgentSpan nettySpan = activeSpan(); @@ -30,7 +30,7 @@ public static AgentScope beginRequest( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void endRequest(@Advice.Enter final AgentScope scope) { + public static void endRequest(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/main/java17/datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice2.java b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/main/java17/datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice2.java index 46a24b24336..ccc86cfa320 100644 --- a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/main/java17/datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice2.java +++ b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/main/java17/datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice2.java @@ -7,14 +7,14 @@ import static datadog.trace.instrumentation.micronaut.v4_0.MicronautDecorator.PARENT_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.micronaut.v4_0.MicronautDecorator.SPAN_ATTRIBUTE; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.micronaut.http.server.netty.NettyHttpRequest; import net.bytebuddy.asm.Advice; public class ChannelAcceptAdvice2 { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest(@Advice.Argument(0) final NettyHttpRequest request) { + public static ContextScope beginRequest(@Advice.Argument(0) final NettyHttpRequest request) { final AgentSpan nettySpan = activeSpan(); if (request == null || nettySpan == null) { @@ -29,7 +29,7 @@ public static AgentScope beginRequest(@Advice.Argument(0) final NettyHttpRequest } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void endRequest(@Advice.Enter final AgentScope scope) { + public static void endRequest(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-common/src/main/java/datadog/trace/instrumentation/micronaut/ChannelRead0Advice.java b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-common/src/main/java/datadog/trace/instrumentation/micronaut/ChannelRead0Advice.java index 9a2d04b3e85..4643d580e9b 100644 --- a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-common/src/main/java/datadog/trace/instrumentation/micronaut/ChannelRead0Advice.java +++ b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-common/src/main/java/datadog/trace/instrumentation/micronaut/ChannelRead0Advice.java @@ -7,14 +7,14 @@ import static datadog.trace.instrumentation.micronaut.MicronautDecorator.PARENT_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.micronaut.MicronautDecorator.SPAN_ATTRIBUTE; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.micronaut.http.HttpRequest; import net.bytebuddy.asm.Advice; public class ChannelRead0Advice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest(@Advice.Argument(1) final HttpRequest request) { + public static ContextScope beginRequest(@Advice.Argument(1) final HttpRequest request) { final AgentSpan nettySpan = activeSpan(); if (null == nettySpan) { // Micronaut-netty uses Netty so there needs to be a Netty span @@ -29,7 +29,7 @@ public static AgentScope beginRequest(@Advice.Argument(1) final HttpRequest r } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void endRequest(@Advice.Enter final AgentScope scope) { + public static void endRequest(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/mule-4.5/src/main/java/datadog/trace/instrumentation/mule4/ComponentMessageProcessorInstrumentation.java b/dd-java-agent/instrumentation/mule-4.5/src/main/java/datadog/trace/instrumentation/mule4/ComponentMessageProcessorInstrumentation.java index 45dfceb6c9d..9e6c894cc32 100644 --- a/dd-java-agent/instrumentation/mule-4.5/src/main/java/datadog/trace/instrumentation/mule4/ComponentMessageProcessorInstrumentation.java +++ b/dd-java-agent/instrumentation/mule-4.5/src/main/java/datadog/trace/instrumentation/mule4/ComponentMessageProcessorInstrumentation.java @@ -8,11 +8,11 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; import org.mule.runtime.api.event.EventContext; import org.mule.runtime.core.api.event.CoreEvent; @@ -43,7 +43,7 @@ public void methodAdvice(MethodTransformer transformer) { @AppliesOn(CONTEXT_TRACKING) public static class ProcessAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before(@Advice.Argument(0) final CoreEvent event) { + public static ContextScope before(@Advice.Argument(0) final CoreEvent event) { if (event == null || event.getContext() == null) { return null; } @@ -56,7 +56,7 @@ public static AgentScope before(@Advice.Argument(0) final CoreEvent event) { } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void after(@Advice.Enter final AgentScope scope) { + public static void after(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java b/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java index 33c854fc2ef..bb6b46210ed 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java +++ b/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java @@ -14,9 +14,9 @@ import com.google.auto.service.AutoService; import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.netty40.client.NettyHttpClientDecorator; import datadog.trace.instrumentation.netty40.server.NettyHttpServerDecorator; @@ -69,7 +69,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class FireAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope scopeSpan(@Advice.This final ChannelHandlerContext ctx) { + public static ContextScope scopeSpan(@Advice.This final ChannelHandlerContext ctx) { final Context storedContext = ctx.channel().attr(CONTEXT_ATTRIBUTE_KEY).get(); final AgentSpan channelSpan = spanFromContext(storedContext); if (channelSpan == null || channelSpan == activeSpan()) { @@ -80,7 +80,7 @@ public static AgentScope scopeSpan(@Advice.This final ChannelHandlerContext ctx) } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void close(@Advice.Enter final AgentScope scope) { + public static void close(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java index a821b9c9f56..0246d87e69d 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java @@ -13,9 +13,9 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.netty41.client.NettyHttpClientDecorator; import datadog.trace.instrumentation.netty41.server.NettyHttpServerDecorator; @@ -70,7 +70,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class FireAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope scopeSpan(@Advice.This final ChannelHandlerContext ctx) { + public static ContextScope scopeSpan(@Advice.This final ChannelHandlerContext ctx) { final AgentSpan channelSpan = spanFromContext(ctx.channel().attr(CONTEXT_ATTRIBUTE_KEY).get()); if (channelSpan == null || channelSpan == activeSpan()) { @@ -81,7 +81,7 @@ public static AgentScope scopeSpan(@Advice.This final ChannelHandlerContext ctx) } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void close(@Advice.Enter final AgentScope scope) { + public static void close(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionServiceAsyncInstrumentation.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionServiceAsyncInstrumentation.java index d5ad641b670..e8536d554da 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionServiceAsyncInstrumentation.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionServiceAsyncInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresField; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.openai_java.OpenAiDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -14,8 +15,8 @@ import com.openai.models.chat.completions.ChatCompletion; import com.openai.models.chat.completions.ChatCompletionChunk; import com.openai.models.chat.completions.ChatCompletionCreateParams; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.concurrent.CompletableFuture; import net.bytebuddy.asm.Advice; @@ -59,7 +60,7 @@ public ElementMatcher structureMatcher() { public static class CreateAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final ChatCompletionCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -69,10 +70,10 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) CompletableFuture> future, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || future == null) { DECORATE.finishSpan(span, err); } else { @@ -86,7 +87,7 @@ public static void exit( public static class CreateStreamingAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final ChatCompletionCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -96,11 +97,11 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) CompletableFuture>> future, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || future == null) { DECORATE.finishSpan(span, err); } else { diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionServiceInstrumentation.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionServiceInstrumentation.java index fb0cfded56f..7d863dcd4b8 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionServiceInstrumentation.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionServiceInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresField; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.openai_java.OpenAiDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -14,8 +15,8 @@ import com.openai.models.chat.completions.ChatCompletion; import com.openai.models.chat.completions.ChatCompletionChunk; import com.openai.models.chat.completions.ChatCompletionCreateParams; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -58,7 +59,7 @@ public ElementMatcher structureMatcher() { public static class CreateAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final ChatCompletionCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -68,10 +69,10 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) HttpResponseFor response, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || response == null) { DECORATE.finishSpan(span, err); } else { @@ -86,7 +87,7 @@ public static void exit( public static class CreateStreamingAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final ChatCompletionCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -96,11 +97,11 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) HttpResponseFor> response, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || response == null) { DECORATE.finishSpan(span, err); } else { diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionServiceAsyncInstrumentation.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionServiceAsyncInstrumentation.java index e372a4a4cc1..74347d37860 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionServiceAsyncInstrumentation.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionServiceAsyncInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresField; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.openai_java.OpenAiDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -13,8 +14,8 @@ import com.openai.core.http.StreamResponse; import com.openai.models.completions.Completion; import com.openai.models.completions.CompletionCreateParams; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.concurrent.CompletableFuture; import net.bytebuddy.asm.Advice; @@ -54,7 +55,7 @@ public ElementMatcher structureMatcher() { public static class CreateAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final CompletionCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -64,10 +65,10 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) CompletableFuture> future, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || future == null) { DECORATE.finishSpan(span, err); } else { @@ -82,7 +83,7 @@ public static void exit( public static class CreateStreamingAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final CompletionCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -92,11 +93,11 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) CompletableFuture>> future, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || future == null) { DECORATE.finishSpan(span, err); } else { diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionServiceInstrumentation.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionServiceInstrumentation.java index d3f23e2d0aa..c7b6387c85f 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionServiceInstrumentation.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionServiceInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresField; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.openai_java.OpenAiDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -13,8 +14,8 @@ import com.openai.core.http.StreamResponse; import com.openai.models.completions.Completion; import com.openai.models.completions.CompletionCreateParams; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -53,7 +54,7 @@ public ElementMatcher structureMatcher() { public static class CreateAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final CompletionCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -65,10 +66,10 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) HttpResponseFor response, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || response == null) { DECORATE.finishSpan(span, err); } else { @@ -82,7 +83,7 @@ public static void exit( public static class CreateStreamingAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final CompletionCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -92,10 +93,10 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) HttpResponseFor> response, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || response == null) { DECORATE.finishSpan(span, err); } else { diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/EmbeddingServiceInstrumentation.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/EmbeddingServiceInstrumentation.java index 259bf901b58..f2b3106215c 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/EmbeddingServiceInstrumentation.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/EmbeddingServiceInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresField; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.openai_java.OpenAiDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -12,8 +13,8 @@ import com.openai.core.http.HttpResponseFor; import com.openai.models.embeddings.CreateEmbeddingResponse; import com.openai.models.embeddings.EmbeddingCreateParams; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -45,7 +46,7 @@ public ElementMatcher structureMatcher() { public static class CreateAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final EmbeddingCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -55,10 +56,10 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) HttpResponseFor response, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || response == null) { DECORATE.finishSpan(span, err); } else { diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseServiceAsyncInstrumentation.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseServiceAsyncInstrumentation.java index c4c5171b221..ed316703a39 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseServiceAsyncInstrumentation.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseServiceAsyncInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresField; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.openai_java.OpenAiDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -14,8 +15,8 @@ import com.openai.models.responses.Response; import com.openai.models.responses.ResponseCreateParams; import com.openai.models.responses.ResponseStreamEvent; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.concurrent.CompletableFuture; import net.bytebuddy.asm.Advice; @@ -55,7 +56,7 @@ public ElementMatcher structureMatcher() { public static class CreateAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final ResponseCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -65,10 +66,10 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) CompletableFuture> future, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || future == null) { DECORATE.finishSpan(span, err); } else { @@ -82,7 +83,7 @@ public static void exit( public static class CreateStreamingAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final ResponseCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -92,11 +93,11 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) CompletableFuture>> future, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || future == null) { DECORATE.finishSpan(span, err); } else { diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseServiceInstrumentation.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseServiceInstrumentation.java index 73905000a14..6de041b34ce 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseServiceInstrumentation.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseServiceInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.declaresField; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.openai_java.OpenAiDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -14,8 +15,8 @@ import com.openai.models.responses.Response; import com.openai.models.responses.ResponseCreateParams; import com.openai.models.responses.ResponseStreamEvent; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -54,7 +55,7 @@ public ElementMatcher structureMatcher() { public static class CreateAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final ResponseCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -64,10 +65,10 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) HttpResponseFor response, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || response == null) { DECORATE.finishSpan(span, err); } else { @@ -81,7 +82,7 @@ public static void exit( public static class CreateStreamingAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.Argument(0) final ResponseCreateParams params, @Advice.FieldValue("clientOptions") ClientOptions clientOptions) { AgentSpan span = DECORATE.startSpan(clientOptions); @@ -91,11 +92,11 @@ public static AgentScope enter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return(readOnly = false) HttpResponseFor> response, @Advice.Thrown final Throwable err) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (err != null || response == null) { DECORATE.finishSpan(span, err); } else { diff --git a/dd-java-agent/instrumentation/opensearch/opensearch-rest-1.0/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchRestClientInstrumentation.java b/dd-java-agent/instrumentation/opensearch/opensearch-rest-1.0/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchRestClientInstrumentation.java index e6c900cad53..fb0f0f43200 100644 --- a/dd-java-agent/instrumentation/opensearch/opensearch-rest-1.0/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchRestClientInstrumentation.java +++ b/dd-java-agent/instrumentation/opensearch/opensearch-rest-1.0/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchRestClientInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.opensearch.OpensearchRestClientDecorator.DECORATE; import static datadog.trace.instrumentation.opensearch.OpensearchRestClientDecorator.OPENSEARCH_JAVA; import static datadog.trace.instrumentation.opensearch.OpensearchRestClientDecorator.OPERATION_NAME; @@ -11,9 +12,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.implementation.bytecode.assign.Assigner; @@ -62,7 +63,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class OpensearchRestClientAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final Request request, @Advice.Argument(value = 1, readOnly = false, optional = true) ResponseListener responseListener) { @@ -85,17 +86,17 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return(typing = Assigner.Typing.DYNAMIC) final Object result) { if (throwable != null) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); span.finish(); } else if (result instanceof Response) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (((Response) result).getHost() != null) { DECORATE.onResponse(span, ((Response) result)); } diff --git a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchTransportClientInstrumentation.java b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchTransportClientInstrumentation.java index 1ce9c01ba98..b54b787fbf0 100644 --- a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchTransportClientInstrumentation.java +++ b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchTransportClientInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.opensearch.OpensearchTransportClientDecorator.DECORATE; import static datadog.trace.instrumentation.opensearch.OpensearchTransportClientDecorator.OPENSEARCH_JAVA; import static datadog.trace.instrumentation.opensearch.OpensearchTransportClientDecorator.OPERATION_NAME; @@ -12,9 +13,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatcher; @@ -65,7 +66,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class OpensearchTransportClientAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final ActionType action, @Advice.Argument(1) final ActionRequest actionRequest, @Advice.Argument(value = 2, readOnly = false) @@ -82,9 +83,9 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (throwable != null) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); diff --git a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/ShadowExistingScopeAdvice.java b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/ShadowExistingScopeAdvice.java index b2902bf4ff5..f0de0d46e48 100644 --- a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/ShadowExistingScopeAdvice.java +++ b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/ShadowExistingScopeAdvice.java @@ -3,7 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import net.bytebuddy.asm.Advice; /** @@ -13,12 +13,12 @@ public class ShadowExistingScopeAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter() { + public static ContextScope enter() { return activateSpan(noopSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void exit(@Advice.Enter final AgentScope scope) { + public static void exit(@Advice.Enter final ContextScope scope) { scope.close(); } } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelScope.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelScope.java index ed1ca770fb9..294228b01d4 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelScope.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelScope.java @@ -1,13 +1,13 @@ package datadog.trace.instrumentation.opentelemetry; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.context.TraceScope; import io.opentelemetry.context.Scope; public class OtelScope implements Scope, TraceScope { - private final AgentScope delegate; + private final ContextScope delegate; - OtelScope(final AgentScope delegate) { + OtelScope(final ContextScope delegate) { this.delegate = delegate; } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelTracer.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelTracer.java index 529ec13aa65..4d88fa67280 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelTracer.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelTracer.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.opentelemetry; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.Tags; @@ -38,7 +38,7 @@ public Scope withSpan(final Span span) { } final AgentSpan agentSpan = converter.toAgentSpan(span); - final AgentScope agentScope = tracer.activateManualSpan(agentSpan); + final ContextScope agentScope = tracer.activateManualSpan(agentSpan); return converter.toScope(agentScope); } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/TypeConverter.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/TypeConverter.java index 66f5602c50e..7ce0080a06b 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/TypeConverter.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/TypeConverter.java @@ -3,7 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpanContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AttachableWrapper; @@ -48,7 +48,7 @@ public Span toSpan(final AgentSpan agentSpan) { return new OtelSpan(agentSpan, this); } - public Scope toScope(final AgentScope scope) { + public Scope toScope(final ContextScope scope) { if (scope == null) { return null; } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/context/ContextTest.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/context/ContextTest.java index d5fd8751df8..a644feebb02 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/context/ContextTest.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/context/ContextTest.java @@ -8,8 +8,8 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import datadog.context.ContextScope; import datadog.trace.api.DDSpanId; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.opentelemetry.api.baggage.Baggage; import io.opentelemetry.api.trace.Span; @@ -53,7 +53,7 @@ void testSpanCurrentMakeCurrent() { // After activating DD span: Datadog span must be current span AgentSpan ddSpan = tracer.startSpan("dd-api", "other-name"); - AgentScope ddScope = tracer.activateManualSpan(ddSpan); + ContextScope ddScope = tracer.activateManualSpan(ddSpan); currentSpan = Span.current(); assertSpanEquals(ddSpan, currentSpan); @@ -95,7 +95,7 @@ void testContextMakeCurrentWithoutPriorActiveSpan() { @Test void testContextMakeCurrentWithAnotherActiveSpan() { AgentSpan ddSpan = tracer.startSpan("dd-api", "some-name"); - AgentScope ddScope = tracer.activateManualSpan(ddSpan); + ContextScope ddScope = tracer.activateManualSpan(ddSpan); Span otelSpan = this.otelTracer.spanBuilder("other-name").startSpan(); // DD span is active: current OTel span reflects DD span @@ -125,7 +125,7 @@ void testContextMakeCurrentWithAnotherActiveSpan() { @Test void testContextMakeCurrentAlreadyActiveSpan() { AgentSpan ddSpan = tracer.startSpan("dd-api", "some-name"); - AgentScope ddScope = tracer.activateManualSpan(ddSpan); + ContextScope ddScope = tracer.activateManualSpan(ddSpan); Span currentSpan = Span.current(); assertNotNull(currentSpan); @@ -180,7 +180,7 @@ void testMixingManualAndOtelInstrumentation() { // Activate DD child span and verify OTel current span AgentSpan ddChildSpan = tracer.startSpan("dd-api", "other-name"); - AgentScope ddChildScope = tracer.activateManualSpan(ddChildSpan); + ContextScope ddChildScope = tracer.activateManualSpan(ddChildSpan); Span current = Span.current(); assertEquals( diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanAdvice.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanAdvice.java index af46a8ff208..0a7bf4c13ba 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanAdvice.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanAdvice.java @@ -1,9 +1,10 @@ package datadog.trace.instrumentation.opentelemetry.annotations; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.opentelemetry.annotations.WithSpanDecorator.DECORATE; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.invoke.MethodType; import java.lang.reflect.Method; @@ -12,20 +13,21 @@ public class WithSpanAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.Origin final Method method) { + public static ContextScope onEnter(@Advice.Origin final Method method) { AgentSpan span = DECORATE.startMethodSpan(method); return activateSpan(span); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Origin final MethodType methodType, @Advice.Return(typing = Assigner.Typing.DYNAMIC, readOnly = false) Object result, @Advice.Thrown final Throwable throwable) { DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - result = DECORATE.wrapAsyncResultOrFinishSpan(result, methodType.returnType(), scope.span()); + result = + DECORATE.wrapAsyncResultOrFinishSpan(result, methodType.returnType(), spanFromScope(scope)); } } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanAttributeAdvice.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanAttributeAdvice.java index 3febd171487..df1f5717c8a 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanAttributeAdvice.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/main/java/datadog/trace/instrumentation/opentelemetry/annotations/WithSpanAttributeAdvice.java @@ -1,16 +1,17 @@ package datadog.trace.instrumentation.opentelemetry.annotations; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.opentelemetry.annotations.WithSpanDecorator.DECORATE; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.reflect.Method; import net.bytebuddy.asm.Advice; public class WithSpanAttributeAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Origin final Method method, @Advice.AllArguments final Object[] args) { AgentSpan span = DECORATE.startMethodSpan(method); DECORATE.addTagsFromMethodArgs(span, method, args); @@ -19,10 +20,10 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } diff --git a/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTScopeManager.java b/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTScopeManager.java index 6028aefea15..0faa346dda4 100644 --- a/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTScopeManager.java +++ b/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTScopeManager.java @@ -1,7 +1,8 @@ package datadog.trace.instrumentation.opentracing31; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.api.Config; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.context.TraceScope; @@ -29,7 +30,7 @@ public Scope activate(final Span span, final boolean finishSpanOnClose) { } final AgentSpan agentSpan = converter.toAgentSpan(span); - final AgentScope agentScope = tracer.activateManualSpan(agentSpan); + final ContextScope agentScope = tracer.activateManualSpan(agentSpan); return converter.toScope(agentScope, finishSpanOnClose); } @@ -46,12 +47,14 @@ public Scope active() { } static class OTScope implements Scope, TraceScope { - private final AgentScope delegate; + private final ContextScope delegate; private final boolean finishSpanOnClose; private final TypeConverter converter; OTScope( - final AgentScope delegate, final boolean finishSpanOnClose, final TypeConverter converter) { + final ContextScope delegate, + final boolean finishSpanOnClose, + final TypeConverter converter) { this.delegate = delegate; this.finishSpanOnClose = finishSpanOnClose; this.converter = converter; @@ -62,13 +65,13 @@ public void close() { delegate.close(); if (finishSpanOnClose) { - delegate.span().finish(); + AgentSpan.fromScope(delegate).finish(); } } @Override public Span span() { - return converter.toSpan(delegate.span()); + return converter.toSpan(AgentSpan.fromScope(delegate)); } public boolean isFinishSpanOnClose() { @@ -76,7 +79,7 @@ public boolean isFinishSpanOnClose() { } } - private final class FakeScope implements AgentScope { + private final class FakeScope implements ContextScope { private final AgentSpan agentSpan; FakeScope(AgentSpan agentSpan) { @@ -84,7 +87,7 @@ private final class FakeScope implements AgentScope { } @Override - public AgentSpan span() { + public Context context() { return agentSpan; } diff --git a/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/TypeConverter.java b/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/TypeConverter.java index 9d89a0c9320..734ab0b7123 100644 --- a/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/TypeConverter.java +++ b/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/TypeConverter.java @@ -3,7 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpanContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AttachableWrapper; @@ -51,7 +51,7 @@ public OTSpan toSpan(final AgentSpan agentSpan) { return new OTSpan(agentSpan, this, logHandler); } - public Scope toScope(final AgentScope scope, final boolean finishSpanOnClose) { + public Scope toScope(final ContextScope scope, final boolean finishSpanOnClose) { if (scope == null) { return null; } diff --git a/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/test/groovy/TypeConverterTest.groovy b/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/test/groovy/TypeConverterTest.groovy index fcdd67b9e4b..3a3b5c6efca 100644 --- a/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/test/groovy/TypeConverterTest.groovy +++ b/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/test/groovy/TypeConverterTest.groovy @@ -8,7 +8,7 @@ import datadog.trace.core.DDSpanContext import datadog.trace.core.PendingTrace import datadog.trace.core.propagation.PropagationTags import datadog.trace.instrumentation.opentracing.DefaultLogHandler -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.instrumentation.opentracing31.TypeConverter import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan @@ -41,8 +41,8 @@ class TypeConverterTest extends InstrumentationSpecification { } def "should reuse the noop span wrapper via scope"() { - def noopScope = Stub(AgentScope) { - span() >> noopSpan() + def noopScope = Stub(ContextScope) { + context() >> noopSpan() } def noopSpanWrapper = typeConverter.toSpan(noopSpan()) expect: diff --git a/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTScopeManager.java b/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTScopeManager.java index ee007d8d770..5591ac985cb 100644 --- a/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTScopeManager.java +++ b/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTScopeManager.java @@ -1,7 +1,8 @@ package datadog.trace.instrumentation.opentracing32; +import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.api.Config; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.context.TraceScope; @@ -34,7 +35,7 @@ public Scope activate(final Span span, final boolean finishSpanOnClose) { } final AgentSpan agentSpan = converter.toAgentSpan(span); - final AgentScope agentScope = tracer.activateManualSpan(agentSpan); + final ContextScope agentScope = tracer.activateManualSpan(agentSpan); return converter.toScope(agentScope, finishSpanOnClose); } @@ -56,12 +57,14 @@ public Span activeSpan() { } static class OTScope implements Scope, TraceScope { - private final AgentScope delegate; + private final ContextScope delegate; private final boolean finishSpanOnClose; private final TypeConverter converter; OTScope( - final AgentScope delegate, final boolean finishSpanOnClose, final TypeConverter converter) { + final ContextScope delegate, + final boolean finishSpanOnClose, + final TypeConverter converter) { this.delegate = delegate; this.finishSpanOnClose = finishSpanOnClose; this.converter = converter; @@ -72,13 +75,13 @@ public void close() { delegate.close(); if (finishSpanOnClose) { - delegate.span().finish(); + AgentSpan.fromScope(delegate).finish(); } } @Override public Span span() { - return converter.toSpan(delegate.span()); + return converter.toSpan(AgentSpan.fromScope(delegate)); } public boolean isFinishSpanOnClose() { @@ -86,7 +89,7 @@ public boolean isFinishSpanOnClose() { } } - private final class FakeScope implements AgentScope { + private final class FakeScope implements ContextScope { private final AgentSpan agentSpan; FakeScope(AgentSpan agentSpan) { @@ -94,7 +97,7 @@ private final class FakeScope implements AgentScope { } @Override - public AgentSpan span() { + public Context context() { return agentSpan; } diff --git a/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/TypeConverter.java b/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/TypeConverter.java index 2d2b78b8146..f686d3ca40b 100644 --- a/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/TypeConverter.java +++ b/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/TypeConverter.java @@ -3,7 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpanContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AttachableWrapper; @@ -51,7 +51,7 @@ public OTSpan toSpan(final AgentSpan agentSpan) { return new OTSpan(agentSpan, this, logHandler); } - public Scope toScope(final AgentScope scope, final boolean finishSpanOnClose) { + public Scope toScope(final ContextScope scope, final boolean finishSpanOnClose) { if (scope == null) { return null; } diff --git a/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/test/groovy/TypeConverterTest.groovy b/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/test/groovy/TypeConverterTest.groovy index 795964ec8eb..9ecfd5221ef 100644 --- a/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/test/groovy/TypeConverterTest.groovy +++ b/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/test/groovy/TypeConverterTest.groovy @@ -8,7 +8,7 @@ import datadog.trace.core.DDSpanContext import datadog.trace.core.PendingTrace import datadog.trace.core.propagation.PropagationTags import datadog.trace.instrumentation.opentracing.DefaultLogHandler -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.instrumentation.opentracing32.TypeConverter import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan @@ -41,8 +41,8 @@ class TypeConverterTest extends InstrumentationSpecification { } def "should reuse the noop span wrapper via scope"() { - def noopScope = Stub(AgentScope) { - span() >> noopSpan() + def noopScope = Stub(ContextScope) { + context() >> noopSpan() } def noopSpanWrapper = typeConverter.toSpan(noopSpan()) expect: diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java index 1c85e382736..bde139cbbb3 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpSingleRequestInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.currentContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientDecorator.DECORATE; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientDecorator.PEKKO_CLIENT_REQUEST; import static datadog.trace.instrumentation.pekkohttp.PekkoHttpClientDecorator.PEKKO_HTTP_CLIENT; @@ -13,10 +14,10 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.apache.pekko.http.scaladsl.HttpExt; @@ -67,7 +68,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class SingleRequestAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(value = 0, readOnly = false) HttpRequest request) { /* Versions 10.0 and 10.1 have slightly different structure that is hard to distinguish so here @@ -90,13 +91,13 @@ public static AgentScope methodEnter( public static void methodExit( @Advice.This final HttpExt thiz, @Advice.Return final Future responseFuture, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable == null) { responseFuture.onComplete(new OnCompleteHandler(span), thiz.system().dispatcher()); diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoPoolMasterActorInstrumentation.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoPoolMasterActorInstrumentation.java index e4088a59f29..b4fb4627a14 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoPoolMasterActorInstrumentation.java +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoPoolMasterActorInstrumentation.java @@ -5,9 +5,9 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import net.bytebuddy.asm.Advice; @AutoService(InstrumenterModule.class) @@ -39,12 +39,12 @@ public void methodAdvice(MethodTransformer transformer) { public static class BlockPropagation { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter() { + public static ContextScope enter() { return activateSpan(noopSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void exit(@Advice.Enter final AgentScope scope) { + public static void exit(@Advice.Enter final ContextScope scope) { scope.close(); } } diff --git a/dd-java-agent/instrumentation/quartz-2.0/src/main/java/datadog/trace/instrumentation/quartz/QuartzSchedulingInstrumentation.java b/dd-java-agent/instrumentation/quartz-2.0/src/main/java/datadog/trace/instrumentation/quartz/QuartzSchedulingInstrumentation.java index aa7993b8639..7ea735da6e0 100644 --- a/dd-java-agent/instrumentation/quartz-2.0/src/main/java/datadog/trace/instrumentation/quartz/QuartzSchedulingInstrumentation.java +++ b/dd-java-agent/instrumentation/quartz-2.0/src/main/java/datadog/trace/instrumentation/quartz/QuartzSchedulingInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.quartz.QuartzDecorator.DECORATE; import static datadog.trace.instrumentation.quartz.QuartzDecorator.SCHEDULED_CALL; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -11,9 +12,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -55,7 +56,7 @@ public String[] helperClassNames() { public static class QuartzSchedulingAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter(@Advice.Argument(0) JobExecutionContext context) { + public static ContextScope enter(@Advice.Argument(0) JobExecutionContext context) { // create a new trace for every job final AgentSpan span = startSpan("quartz", SCHEDULED_CALL, null); DECORATE.afterStart(span); @@ -65,8 +66,8 @@ public static AgentScope enter(@Advice.Argument(0) JobExecutionContext context) @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { - final AgentSpan span = scope.span(); + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); } diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java index 2780015a5bf..eddf53c1241 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java @@ -14,6 +14,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.rabbitmq.amqp.RabbitDecorator.CLIENT_DECORATE; import static datadog.trace.instrumentation.rabbitmq.amqp.RabbitDecorator.CONSUMER_DECORATE; import static datadog.trace.instrumentation.rabbitmq.amqp.RabbitDecorator.OPERATION_AMQP_COMMAND; @@ -38,6 +39,7 @@ import com.rabbitmq.client.Consumer; import com.rabbitmq.client.GetResponse; import com.rabbitmq.client.MessageProperties; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; @@ -45,7 +47,6 @@ import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; import java.util.HashMap; @@ -122,7 +123,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ChannelMethodAdvice { @Advice.OnMethodEnter - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final Channel channel, @Advice.Origin("Channel.#m") final String method) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(Channel.class); if (callDepth > 0) { @@ -141,21 +142,21 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } CLIENT_DECORATE.onError(scope, throwable); CLIENT_DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); CallDepthThreadLocalMap.reset(Channel.class); } } public static class ChannelPublishAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope setResourceNameAddHeaders( + public static ContextScope setResourceNameAddHeaders( @Advice.This final Channel channel, @Advice.Argument(0) final String exchange, @Advice.Argument(1) final String routingKey, @@ -185,14 +186,14 @@ public static AgentScope setResourceNameAddHeaders( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } PRODUCER_DECORATE.onError(scope, throwable); PRODUCER_DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); CallDepthThreadLocalMap.reset(Channel.class); } } @@ -253,7 +254,7 @@ public static void onEnter( public static class ChannelGetAdvice { @Advice.OnMethodEnter public static long takeTimestamp( - @Advice.Local("placeholderScope") AgentScope placeholderScope, + @Advice.Local("placeholderScope") ContextScope placeholderScope, @Advice.Local("callDepth") int callDepth) { callDepth = CallDepthThreadLocalMap.incrementCallDepth(Channel.class); @@ -267,7 +268,7 @@ public static void extractAndStartSpan( @Advice.This final Channel channel, @Advice.Argument(0) final String queue, @Advice.Enter final long spanStartMillis, - @Advice.Local("placeholderScope") final AgentScope placeholderScope, + @Advice.Local("placeholderScope") final ContextScope placeholderScope, @Advice.Local("callDepth") final int callDepth, @Advice.Return final GetResponse response, @Advice.Thrown final Throwable throwable) { @@ -280,14 +281,14 @@ public static void extractAndStartSpan( final boolean propagate = config.isRabbitPropagationEnabled() && !config.isRabbitPropagationDisabledForDestination(queue); - final AgentScope scope = + final ContextScope scope = RabbitDecorator.startReceivingSpan( propagate, spanStartMillis, null != response ? response.getProps() : null, null != response ? response.getBody() : null, queue); - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); CONSUMER_DECORATE.setPeerPort(span, connection.getPort()); CONSUMER_DECORATE.onGet(span, queue); CONSUMER_DECORATE.onPeerConnection(span, connection.getAddress()); diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java index e73bf99c34a..e3741e76d11 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java @@ -11,16 +11,17 @@ import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.AMQP_QUEUE; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.AMQP_ROUTING_KEY; import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.RECORD_QUEUE_TIME_MS; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.api.ServiceNameSources.MESSAGE_BROKER_SPLIT_BY_DESTINATION; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Command; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.Envelope; +import datadog.context.ContextScope; import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.api.naming.SpanNaming; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -196,7 +197,7 @@ public TracedDelegatingConsumer wrapConsumer(String queue, Consumer consumer) { return new TracedDelegatingConsumer(queue, consumer); } - public static AgentScope startReceivingSpan( + public static ContextScope startReceivingSpan( boolean propagate, long spanStartMillis, AMQP.BasicProperties properties, @@ -259,15 +260,15 @@ public static AgentScope startReceivingSpan( } CONSUMER_DECORATE.afterStart(span); - AgentScope scope = activateSpan(span); + ContextScope scope = activateSpan(span); if (null != queueSpan) { queueSpan.finish(spanStartMicros); } return scope; } - public static void finishReceivingSpan(AgentScope scope) { - AgentSpan span = scope.span(); + public static void finishReceivingSpan(ContextScope scope) { + AgentSpan span = spanFromScope(scope); scope.close(); if (CONSUMER_DECORATE.endToEndDurationsEnabled) { span.finishWithEndToEnd(); diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/TracedDelegatingConsumer.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/TracedDelegatingConsumer.java index 314a3cc1af7..35008f303f5 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/TracedDelegatingConsumer.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/TracedDelegatingConsumer.java @@ -1,14 +1,15 @@ package datadog.trace.instrumentation.rabbitmq.amqp; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.rabbitmq.amqp.RabbitDecorator.CONSUMER_DECORATE; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.Envelope; import com.rabbitmq.client.ShutdownSignalException; +import datadog.context.ContextScope; import datadog.trace.api.Config; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.io.IOException; import org.slf4j.Logger; @@ -65,10 +66,10 @@ public void handleDelivery( final AMQP.BasicProperties properties, final byte[] body) throws IOException { - AgentScope scope = null; + ContextScope scope = null; try { scope = RabbitDecorator.startReceivingSpan(propagate, 0, properties, body, queue); - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); CONSUMER_DECORATE.onDeliver(span, queue, envelope); scope = activateSpan(span); } catch (final Exception e) { diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy b/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy index 09823e83e9e..b38f22902c4 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy @@ -1,6 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.Trace -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.Tags import io.opentelemetry.api.GlobalOpenTelemetry @@ -304,7 +304,7 @@ class ReactorCoreTest extends InstrumentationSpecification { Publisher publisher = publisherSupplier() AgentSpan intermediate = startSpan("test", "intermediate") - AgentScope scope = activateSpan(intermediate) + ContextScope scope = activateSpan(intermediate) try { if (publisher instanceof Mono) { return ((Mono) publisher).map(addTwo) @@ -564,7 +564,7 @@ class ReactorCoreTest extends InstrumentationSpecification { @Trace(operationName = "trace-parent", resourceName = "trace-parent") def cancelUnderTrace(def publisherSupplier) { final AgentSpan span = startSpan("test", "publisher-parent") - AgentScope scope = activateSpan(span) + ContextScope scope = activateSpan(span) def publisher = publisherSupplier() publisher.subscribe(new Subscriber() { diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy b/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy index f2654e4e1a4..acc7a8f1b27 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy @@ -1,6 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.Trace -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.Tags import io.opentelemetry.api.GlobalOpenTelemetry @@ -304,7 +304,7 @@ class ReactorCoreTest extends InstrumentationSpecification { Publisher publisher = publisherSupplier() AgentSpan intermediate = startSpan("test", "intermediate") - AgentScope scope = activateSpan(intermediate) + ContextScope scope = activateSpan(intermediate) try { if (publisher instanceof Mono) { return ((Mono) publisher).map(addTwo) @@ -564,7 +564,7 @@ class ReactorCoreTest extends InstrumentationSpecification { @Trace(operationName = "trace-parent", resourceName = "trace-parent") def cancelUnderTrace(def publisherSupplier) { final AgentSpan span = startSpan("test", "publisher-parent") - AgentScope scope = activateSpan(span) + ContextScope scope = activateSpan(span) def publisher = publisherSupplier() publisher.subscribe(new Subscriber() { diff --git a/dd-java-agent/instrumentation/reactor-netty-1.0/src/test/java/ReactorNettyBaggagePropagationTest.java b/dd-java-agent/instrumentation/reactor-netty-1.0/src/test/java/ReactorNettyBaggagePropagationTest.java index 7ecca93164d..412127622de 100644 --- a/dd-java-agent/instrumentation/reactor-netty-1.0/src/test/java/ReactorNettyBaggagePropagationTest.java +++ b/dd-java-agent/instrumentation/reactor-netty-1.0/src/test/java/ReactorNettyBaggagePropagationTest.java @@ -5,7 +5,6 @@ import datadog.context.Context; import datadog.context.ContextScope; import datadog.trace.agent.test.AbstractInstrumentationTest; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.Baggage; @@ -82,7 +81,7 @@ void baggageHeaderPropagatedOnOutgoingRequest() { Baggage baggage = Baggage.create(Collections.singletonMap("user.id", "abc123")); AgentSpan span = AgentTracer.startSpan("test", "parent"); - try (AgentScope spanScope = AgentTracer.activateSpan(span)) { + try (ContextScope spanScope = AgentTracer.activateSpan(span)) { // Active context now carries both the span and the baggage — the exact shape the connect-span // path must carry across the subscription -> I/O thread hand-off. try (ContextScope baggageScope = Context.current().with(baggage).attach()) { diff --git a/dd-java-agent/instrumentation/rediscala-1.8/src/main/java/datadog/trace/instrumentation/rediscala/RediscalaInstrumentation.java b/dd-java-agent/instrumentation/rediscala-1.8/src/main/java/datadog/trace/instrumentation/rediscala/RediscalaInstrumentation.java index 0dd5e434c21..8ca0e477e9d 100644 --- a/dd-java-agent/instrumentation/rediscala-1.8/src/main/java/datadog/trace/instrumentation/rediscala/RediscalaInstrumentation.java +++ b/dd-java-agent/instrumentation/rediscala-1.8/src/main/java/datadog/trace/instrumentation/rediscala/RediscalaInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.rediscala.RediscalaClientDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; @@ -13,12 +14,12 @@ import akka.actor.ActorRef; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Collections; import java.util.Map; @@ -83,7 +84,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class RediscalaAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.Argument(0) final RedisCommand cmd) { + public static ContextScope onEnter(@Advice.Argument(0) final RedisCommand cmd) { final AgentSpan span = startSpan("redis-command", RediscalaClientDecorator.OPERATION_NAME); DECORATE.afterStart(span); DECORATE.onStatement(span, DECORATE.className(cmd.getClass())); @@ -92,13 +93,13 @@ public static AgentScope onEnter(@Advice.Argument(0) final RedisCommand cmd) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.This final Object thiz, @Advice.FieldValue("executionContext") final ExecutionContext ctx, @Advice.Return(readOnly = false) final Future responseFuture) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); final ContextStore contextStore = InstrumentationContext.get(ActorRef.class, RedisConnectionInfo.class); ActorRef connection = null; diff --git a/dd-java-agent/instrumentation/redisson/redisson-2.0.0/src/main/java/datadog/trace/instrumentation/redisson/RedissonInstrumentation.java b/dd-java-agent/instrumentation/redisson/redisson-2.0.0/src/main/java/datadog/trace/instrumentation/redisson/RedissonInstrumentation.java index 6a688940065..c166fb19c64 100644 --- a/dd-java-agent/instrumentation/redisson/redisson-2.0.0/src/main/java/datadog/trace/instrumentation/redisson/RedissonInstrumentation.java +++ b/dd-java-agent/instrumentation/redisson/redisson-2.0.0/src/main/java/datadog/trace/instrumentation/redisson/RedissonInstrumentation.java @@ -9,9 +9,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.ArrayList; import java.util.List; @@ -60,7 +60,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class RedissonCommandAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final CommandData command, @Advice.This RedisConnection thiz) { if (command.getPromise() == null) { return null; @@ -74,7 +74,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void after(@Advice.Enter final AgentScope scope) { + public static void after(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } @@ -84,7 +84,7 @@ public static void after(@Advice.Enter final AgentScope scope) { public static class RedissonCommandsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final CommandsData command, @Advice.This final RedisConnection thiz) { if (command.getPromise() == null) { return null; @@ -104,7 +104,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void after(@Advice.Enter final AgentScope scope) { + public static void after(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/redisson/redisson-2.3.0/src/main/java/datadog/trace/instrumentation/redisson23/RedissonInstrumentation.java b/dd-java-agent/instrumentation/redisson/redisson-2.3.0/src/main/java/datadog/trace/instrumentation/redisson23/RedissonInstrumentation.java index b044e959aa3..3d6b8ab8354 100644 --- a/dd-java-agent/instrumentation/redisson/redisson-2.3.0/src/main/java/datadog/trace/instrumentation/redisson23/RedissonInstrumentation.java +++ b/dd-java-agent/instrumentation/redisson/redisson-2.3.0/src/main/java/datadog/trace/instrumentation/redisson23/RedissonInstrumentation.java @@ -8,9 +8,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.ArrayList; import java.util.List; @@ -60,7 +60,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class RedissonCommandAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final CommandData command, @Advice.This RedisConnection thiz) { if (command.getPromise() == null) { return null; @@ -75,7 +75,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void after(@Advice.Enter final AgentScope scope) { + public static void after(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } @@ -85,7 +85,7 @@ public static void after(@Advice.Enter final AgentScope scope) { public static class RedissonCommandsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final CommandsData command, @Advice.This final RedisConnection thiz) { if (command.getPromise() == null) { return null; @@ -106,7 +106,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void after(@Advice.Enter final AgentScope scope) { + public static void after(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/redisson/redisson-3.10.3/src/main/java/datadog/trace/instrumentation/redisson30/RedissonInstrumentation.java b/dd-java-agent/instrumentation/redisson/redisson-3.10.3/src/main/java/datadog/trace/instrumentation/redisson30/RedissonInstrumentation.java index 15ff0d6416b..85e5f4aaa6e 100644 --- a/dd-java-agent/instrumentation/redisson/redisson-3.10.3/src/main/java/datadog/trace/instrumentation/redisson30/RedissonInstrumentation.java +++ b/dd-java-agent/instrumentation/redisson/redisson-3.10.3/src/main/java/datadog/trace/instrumentation/redisson30/RedissonInstrumentation.java @@ -8,9 +8,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.ArrayList; import java.util.List; @@ -63,7 +63,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class RedissonCommandAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final CommandData command, @Advice.This RedisConnection thiz) { final CompletionStage promise = PromiseHelper.getPromise(PromiseHelper.COMMAND_GET_PROMISE_HANDLE, command); @@ -79,7 +79,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void after(@Advice.Enter final AgentScope scope) { + public static void after(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } @@ -94,7 +94,7 @@ public static void muzzleCheck(final RTransaction b) { public static class RedissonCommandsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final CommandsData command, @Advice.This final RedisConnection thiz) { final CompletionStage promise = PromiseHelper.getPromise(PromiseHelper.COMMANDS_GET_PROMISE_HANDLE, command); @@ -115,7 +115,7 @@ public static AgentScope onEnter( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void after(@Advice.Enter final AgentScope scope) { + public static void after(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/renaissance-0.7/src/main/java/datadog/trace/instrumentation/renaissance/RenaissanceInstrumentation.java b/dd-java-agent/instrumentation/renaissance-0.7/src/main/java/datadog/trace/instrumentation/renaissance/RenaissanceInstrumentation.java index b77b9f983d8..5364853ecc5 100644 --- a/dd-java-agent/instrumentation/renaissance-0.7/src/main/java/datadog/trace/instrumentation/renaissance/RenaissanceInstrumentation.java +++ b/dd-java-agent/instrumentation/renaissance-0.7/src/main/java/datadog/trace/instrumentation/renaissance/RenaissanceInstrumentation.java @@ -3,13 +3,14 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.slf4j.Logger; @@ -43,7 +44,7 @@ protected boolean defaultEnabled() { public static final class BenchmarkAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) int index, @Advice.FieldValue("benchmarkName") String benchmarkName) { AgentSpan span = startSpan("renaissance", "renaissance.benchmark").setResourceName(benchmarkName); @@ -52,9 +53,9 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/WrapperWithContext.java b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/WrapperWithContext.java index 6d4553508d1..98236acbe1c 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/WrapperWithContext.java +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/WrapperWithContext.java @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.resilience4j; import datadog.context.ContextScope; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import io.github.resilience4j.core.functions.CheckedConsumer; @@ -308,7 +307,7 @@ protected WrapperWithContext(Resilience4jSpanDecorator spanDecorator, T data) this.data = data; } - public AgentScope activateScope() { + public ContextScope activateScope() { AgentSpan current = Resilience4jSpan.current(); AgentSpan owned = current == null ? Resilience4jSpan.start() : null; if (owned != null) { diff --git a/dd-java-agent/instrumentation/resteasy/filter-resteasy/filter-resteasy-3.0/src/main/java/datadog/trace/instrumentation/jaxrs2/Resteasy30RequestContextInstrumentation.java b/dd-java-agent/instrumentation/resteasy/filter-resteasy/filter-resteasy-3.0/src/main/java/datadog/trace/instrumentation/jaxrs2/Resteasy30RequestContextInstrumentation.java index df54ac159bd..bf9559671c8 100644 --- a/dd-java-agent/instrumentation/resteasy/filter-resteasy/filter-resteasy-3.0/src/main/java/datadog/trace/instrumentation/jaxrs2/Resteasy30RequestContextInstrumentation.java +++ b/dd-java-agent/instrumentation/resteasy/filter-resteasy/filter-resteasy-3.0/src/main/java/datadog/trace/instrumentation/jaxrs2/Resteasy30RequestContextInstrumentation.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.jaxrs2; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import java.lang.reflect.Method; import javax.ws.rs.container.ContainerRequestContext; import net.bytebuddy.asm.Advice; @@ -24,7 +24,8 @@ public class Resteasy30RequestContextInstrumentation extends AbstractRequestCont public static class ContainerRequestContextAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope decorateAbortSpan(@Advice.This final ContainerRequestContext context) { + public static ContextScope decorateAbortSpan( + @Advice.This final ContainerRequestContext context) { if (context.getProperty(JaxRsAnnotationsDecorator.ABORT_HANDLED) == null && context instanceof PostMatchContainerRequestContext) { @@ -41,7 +42,7 @@ public static AgentScope decorateAbortSpan(@Advice.This final ContainerRequestCo @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { RequestFilterHelper.closeSpanAndScope(scope, throwable); } } diff --git a/dd-java-agent/instrumentation/resteasy/filter-resteasy/filter-resteasy-3.1/src/main/java/datadog/trace/instrumentation/jaxrs2/Resteasy31RequestContextInstrumentation.java b/dd-java-agent/instrumentation/resteasy/filter-resteasy/filter-resteasy-3.1/src/main/java/datadog/trace/instrumentation/jaxrs2/Resteasy31RequestContextInstrumentation.java index bf302acccc0..e2c5f5d7322 100644 --- a/dd-java-agent/instrumentation/resteasy/filter-resteasy/filter-resteasy-3.1/src/main/java/datadog/trace/instrumentation/jaxrs2/Resteasy31RequestContextInstrumentation.java +++ b/dd-java-agent/instrumentation/resteasy/filter-resteasy/filter-resteasy-3.1/src/main/java/datadog/trace/instrumentation/jaxrs2/Resteasy31RequestContextInstrumentation.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.jaxrs2; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import java.lang.reflect.Method; import javax.ws.rs.container.ContainerRequestContext; import net.bytebuddy.asm.Advice; @@ -23,7 +23,8 @@ public class Resteasy31RequestContextInstrumentation extends AbstractRequestContextInstrumentation { public static class ContainerRequestContextAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope decorateAbortSpan(@Advice.This final ContainerRequestContext context) { + public static ContextScope decorateAbortSpan( + @Advice.This final ContainerRequestContext context) { if (context.getProperty(JaxRsAnnotationsDecorator.ABORT_HANDLED) == null && context instanceof PostMatchContainerRequestContext) { @@ -40,7 +41,7 @@ public static AgentScope decorateAbortSpan(@Advice.This final ContainerRequestCo @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { RequestFilterHelper.closeSpanAndScope(scope, throwable); } } diff --git a/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/ResourceInstrumentation.java b/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/ResourceInstrumentation.java index b38af4491e7..809e1069ddb 100644 --- a/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/ResourceInstrumentation.java +++ b/dd-java-agent/instrumentation/restlet-2.2/src/main/java/datadog/trace/instrumentation/restlet/ResourceInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.restlet.ResourceDecorator.DECORATE; import static datadog.trace.instrumentation.restlet.ResourceDecorator.RESTLET_CONTROLLER; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -12,9 +13,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.restlet.engine.resource.AnnotationInfo; @@ -58,7 +59,7 @@ public String[] helperClassNames() { public static class ResourceHandleAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest( + public static ContextScope beginRequest( @Advice.This final ServerResource serverResource, @Advice.Argument(0) final AnnotationInfo annotationInfo) { final AgentSpan parent = activeSpan(); @@ -73,8 +74,8 @@ public static AgentScope beginRequest( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishRequest( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable error) { - AgentSpan span = scope.span(); + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable error) { + AgentSpan span = spanFromScope(scope); if (null != error) { DECORATE.onError(span, error); diff --git a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/DefaultRequestContextInstrumentation.java b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/DefaultRequestContextInstrumentation.java index ec65e37549e..ceced5726ba 100644 --- a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/DefaultRequestContextInstrumentation.java +++ b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/DefaultRequestContextInstrumentation.java @@ -3,13 +3,14 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jakarta3.JakartaRsAnnotationsDecorator.DECORATE; import static datadog.trace.instrumentation.jakarta3.JakartaRsAnnotationsDecorator.JAKARTA_RS_CONTROLLER; import static datadog.trace.instrumentation.jakarta3.JakartaRsAnnotationsDecorator.JAKARTA_RS_REQUEST_ABORT; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import jakarta.ws.rs.container.ContainerRequestContext; import java.lang.reflect.Method; @@ -28,7 +29,8 @@ public class DefaultRequestContextInstrumentation extends AbstractRequestContextInstrumentation { public static class ContainerRequestContextAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope createGenericSpan(@Advice.This final ContainerRequestContext context) { + public static ContextScope createGenericSpan( + @Advice.This final ContainerRequestContext context) { if (context.getProperty(JakartaRsAnnotationsDecorator.ABORT_HANDLED) == null) { final AgentSpan parent = activeSpan(); @@ -49,7 +51,7 @@ public static AgentScope createGenericSpan(@Advice.This final ContainerRequestCo // can only be aborted inside the filter method } - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); DECORATE.afterStart(span); DECORATE.onJakartaRsSpan(span, parent, filterClass, method); @@ -62,12 +64,12 @@ public static AgentScope createGenericSpan(@Advice.This final ContainerRequestCo @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); } diff --git a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAnnotationsInstrumentation.java index d7fbe26311d..c0c2ec9031c 100644 --- a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAnnotationsInstrumentation.java @@ -10,18 +10,19 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jakarta3.JakartaRsAnnotationsDecorator.DECORATE; import static datadog.trace.instrumentation.jakarta3.JakartaRsAnnotationsDecorator.JAKARTA_RS_CONTROLLER; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import jakarta.ws.rs.container.AsyncResponse; import java.lang.reflect.Method; @@ -91,7 +92,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class JakartaRsAnnotationsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope nameSpan( + public static ContextScope nameSpan( @Advice.This final Object target, @Advice.Origin final Method method, @Advice.AllArguments final Object[] args, @@ -123,7 +124,7 @@ public static AgentScope nameSpan( DECORATE.onJakartaRsSpan(span, parent, target.getClass(), method); DECORATE.afterStart(span); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); if (contextStore != null && asyncResponse != null) { contextStore.put(asyncResponse, span); @@ -134,13 +135,13 @@ public static AgentScope nameSpan( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Local("asyncResponse") final AsyncResponse asyncResponse) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/RequestFilterHelper.java b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/RequestFilterHelper.java index 08bc75c1173..65fa0265970 100644 --- a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/RequestFilterHelper.java +++ b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/RequestFilterHelper.java @@ -3,17 +3,18 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jakarta3.JakartaRsAnnotationsDecorator.DECORATE; import static datadog.trace.instrumentation.jakarta3.JakartaRsAnnotationsDecorator.JAKARTA_RS_CONTROLLER; import static datadog.trace.instrumentation.jakarta3.JakartaRsAnnotationsDecorator.JAKARTA_RS_REQUEST_ABORT; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import jakarta.ws.rs.container.ContainerRequestContext; import java.lang.reflect.Method; public class RequestFilterHelper { - public static AgentScope createOrUpdateAbortSpan( + public static ContextScope createOrUpdateAbortSpan( final ContainerRequestContext context, final Class resourceClass, final Method method) { if (method != null && resourceClass != null) { @@ -29,7 +30,7 @@ public static AgentScope createOrUpdateAbortSpan( parent = activeSpan(); span = startSpan(JAKARTA_RS_CONTROLLER.toString(), JAKARTA_RS_REQUEST_ABORT); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); DECORATE.afterStart(span); DECORATE.onJakartaRsSpan(span, parent, resourceClass, method); @@ -44,12 +45,12 @@ public static AgentScope createOrUpdateAbortSpan( } } - public static void closeSpanAndScope(final AgentScope scope, final Throwable throwable) { + public static void closeSpanAndScope(final ContextScope scope, final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); } diff --git a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-1.1.1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-1.1.1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java index 8dc6dfdead0..13ade269bc4 100644 --- a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-1.1.1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-1.1.1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java @@ -11,16 +11,17 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jaxrs1.JaxRsAnnotationsDecorator.DECORATE; import static datadog.trace.instrumentation.jaxrs1.JaxRsAnnotationsDecorator.JAX_RS_CONTROLLER; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.reflect.Method; import java.util.Collection; @@ -89,7 +90,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class JaxRsAnnotationsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope nameSpan( + public static ContextScope nameSpan( @Advice.This final Object target, @Advice.Origin final Method method) { // Rename the parent span according to the path represented by these annotations. final AgentSpan parent = activeSpan(); @@ -104,12 +105,12 @@ public static AgentScope nameSpan( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { - final AgentSpan span = scope.span(); + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { + final AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/DefaultRequestContextInstrumentation.java b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/DefaultRequestContextInstrumentation.java index 8dc0da68fbd..220855d932e 100644 --- a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/DefaultRequestContextInstrumentation.java +++ b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/DefaultRequestContextInstrumentation.java @@ -3,13 +3,14 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.DECORATE; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.JAX_RS_CONTROLLER; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.JAX_RS_REQUEST_ABORT; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.reflect.Method; import javax.ws.rs.container.ContainerRequestContext; @@ -28,7 +29,8 @@ public class DefaultRequestContextInstrumentation extends AbstractRequestContextInstrumentation { public static class ContainerRequestContextAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope createGenericSpan(@Advice.This final ContainerRequestContext context) { + public static ContextScope createGenericSpan( + @Advice.This final ContainerRequestContext context) { if (context.getProperty(JaxRsAnnotationsDecorator.ABORT_HANDLED) == null) { final AgentSpan parent = activeSpan(); @@ -48,7 +50,7 @@ public static AgentScope createGenericSpan(@Advice.This final ContainerRequestCo // can only be aborted inside the filter method } - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); DECORATE.afterStart(span); DECORATE.onJaxRsSpan(span, parent, filterClass, method); @@ -61,12 +63,12 @@ public static AgentScope createGenericSpan(@Advice.This final ContainerRequestCo @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); } diff --git a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java index 963637e91f8..4f7605a508e 100644 --- a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java @@ -11,18 +11,19 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.DECORATE; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.JAX_RS_CONTROLLER; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.reflect.Method; import java.util.Collection; @@ -99,7 +100,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class JaxRsAnnotationsAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope nameSpan( + public static ContextScope nameSpan( @Advice.This final Object target, @Advice.Origin final Method method, @Advice.AllArguments final Object[] args, @@ -130,7 +131,7 @@ public static AgentScope nameSpan( DECORATE.onJaxRsSpan(span, parent, target.getClass(), method); DECORATE.afterStart(span); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); if (contextStore != null && asyncResponse != null) { contextStore.put(asyncResponse, span); @@ -141,13 +142,13 @@ public static AgentScope nameSpan( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Local("asyncResponse") final AsyncResponse asyncResponse) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/RequestFilterHelper.java b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/RequestFilterHelper.java index d99232893fe..43213c32241 100644 --- a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/RequestFilterHelper.java +++ b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/RequestFilterHelper.java @@ -3,17 +3,18 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.DECORATE; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.JAX_RS_CONTROLLER; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.JAX_RS_REQUEST_ABORT; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.reflect.Method; import javax.ws.rs.container.ContainerRequestContext; public class RequestFilterHelper { - public static AgentScope createOrUpdateAbortSpan( + public static ContextScope createOrUpdateAbortSpan( final ContainerRequestContext context, final Class resourceClass, final Method method) { if (method != null && resourceClass != null) { @@ -28,7 +29,7 @@ public static AgentScope createOrUpdateAbortSpan( parent = activeSpan(); span = startSpan(JAX_RS_CONTROLLER.toString(), JAX_RS_REQUEST_ABORT); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); DECORATE.afterStart(span); DECORATE.onJaxRsSpan(span, parent, resourceClass, method); @@ -43,12 +44,12 @@ public static AgentScope createOrUpdateAbortSpan( } } - public static void closeSpanAndScope(final AgentScope scope, final Throwable throwable) { + public static void closeSpanAndScope(final ContextScope scope, final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { DECORATE.onError(span, throwable); } diff --git a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-client/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-client/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index 6f3e92f6813..db778d1ed05 100644 --- a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-client/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-client/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -7,6 +7,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.currentContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_CONTEXT_ATTRIBUTE; import static datadog.trace.instrumentation.jaxrs.v1.InjectAdapter.SETTER; import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; @@ -19,10 +20,10 @@ import com.sun.jersey.api.client.ClientHandler; import com.sun.jersey.api.client.ClientRequest; import com.sun.jersey.api.client.ClientResponse; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -66,7 +67,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class HandleAdvice { @Advice.OnMethodEnter - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(value = 0) final ClientRequest request, @Advice.This final ClientHandler thisObj) { @@ -84,18 +85,18 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Return final ClientResponse response, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onResponse(span, response); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } diff --git a/dd-java-agent/instrumentation/rxjava/rxjava-2.0/src/test/groovy/RxJava2Test.groovy b/dd-java-agent/instrumentation/rxjava/rxjava-2.0/src/test/groovy/RxJava2Test.groovy index ad858348316..c133e3fb77f 100644 --- a/dd-java-agent/instrumentation/rxjava/rxjava-2.0/src/test/groovy/RxJava2Test.groovy +++ b/dd-java-agent/instrumentation/rxjava/rxjava-2.0/src/test/groovy/RxJava2Test.groovy @@ -1,6 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.Trace -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.Tags import io.reactivex.Flowable @@ -295,7 +295,7 @@ class RxJava2Test extends InstrumentationSpecification { def publisher = publisherSupplier() AgentSpan intermediate = startSpan("test", "intermediate") - AgentScope scope = activateSpan(intermediate) + ContextScope scope = activateSpan(intermediate) try { if (publisher instanceof Maybe) { return ((Maybe) publisher).map(addTwo) @@ -399,7 +399,7 @@ class RxJava2Test extends InstrumentationSpecification { @Trace(operationName = "trace-parent", resourceName = "trace-parent") def cancelUnderTrace(def publisherSupplier) { final AgentSpan span = startSpan("test", "publisher-parent") - AgentScope scope = activateSpan(span) + ContextScope scope = activateSpan(span) def publisher = publisherSupplier() if (publisher instanceof Maybe) { diff --git a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3Test.java b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3Test.java index 092156d84ee..89278800e57 100644 --- a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3Test.java +++ b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3Test.java @@ -15,11 +15,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import datadog.context.ContextScope; import datadog.trace.agent.test.AbstractInstrumentationTest; import datadog.trace.agent.test.assertions.SpanMatcher; import datadog.trace.agent.test.assertions.TagsMatcher; import datadog.trace.api.Trace; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.Tags; import io.reactivex.rxjava3.core.BackpressureStrategy; @@ -83,7 +83,7 @@ static Object assemblePublisherUnderTrace(Supplier publisherSupplier) { traceParentId = activeSpan().getSpanId(); AgentSpan span = startSpan("test", "publisher-parent"); publisherParentId = span.getSpanId(); - AgentScope scope = activateSpan(span); + ContextScope scope = activateSpan(span); Object publisher = publisherSupplier.get(); try { @@ -105,7 +105,7 @@ static void cancelUnderTrace(Supplier publisherSupplier) { traceParentId = activeSpan().getSpanId(); AgentSpan span = startSpan("test", "publisher-parent"); publisherParentId = span.getSpanId(); - AgentScope scope = activateSpan(span); + ContextScope scope = activateSpan(span); // Normalize every reactive type to a Flowable so a single Subscriber can cancel the // subscription right away, exercising the cancellation path of each instrumentation. @@ -500,7 +500,7 @@ void correctParentsFromSubscriptionTime(String name, int workItems, Supplier) publisher).map(Worker::addTwo); diff --git a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/SubscriptionTest.java b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/SubscriptionTest.java index d2f76d17a9b..cc0a84b42fc 100644 --- a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/SubscriptionTest.java +++ b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/SubscriptionTest.java @@ -6,8 +6,8 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import datadog.context.ContextScope; import datadog.trace.agent.test.AbstractInstrumentationTest; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.reactivex.rxjava3.core.BackpressureStrategy; import io.reactivex.rxjava3.core.Completable; @@ -26,7 +26,7 @@ void maybeSubscriptionPropagatesParentSpan() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); AgentSpan parent = startSpan("test", "parent"); - try (AgentScope scope = activateSpan(parent)) { + try (ContextScope scope = activateSpan(parent)) { Maybe connection = Maybe.create(emitter -> emitter.onSuccess(new Connection())); connection.subscribe( c -> { @@ -50,7 +50,7 @@ void singleSubscriptionPropagatesParentSpan() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); AgentSpan parent = startSpan("test", "parent"); - try (AgentScope scope = activateSpan(parent)) { + try (ContextScope scope = activateSpan(parent)) { Single connection = Single.create(emitter -> emitter.onSuccess(new Connection())); connection.subscribe( c -> { @@ -74,7 +74,7 @@ void completableSubscriptionPropagatesParentSpan() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); AgentSpan parent = startSpan("test", "parent"); - try (AgentScope scope = activateSpan(parent)) { + try (ContextScope scope = activateSpan(parent)) { Completable action = Completable.create(emitter -> emitter.onComplete()); action.subscribe( () -> { @@ -98,7 +98,7 @@ void observableSubscriptionPropagatesParentSpan() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); AgentSpan parent = startSpan("test", "parent"); - try (AgentScope scope = activateSpan(parent)) { + try (ContextScope scope = activateSpan(parent)) { Observable connection = Observable.create( emitter -> { @@ -127,7 +127,7 @@ void flowableSubscriptionPropagatesParentSpan() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); AgentSpan parent = startSpan("test", "parent"); - try (AgentScope scope = activateSpan(parent)) { + try (ContextScope scope = activateSpan(parent)) { Flowable connection = Flowable.create( emitter -> { diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ContextPreservingInstrumentation.java b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ContextPreservingInstrumentation.java index f175ada8f4b..dbf10ef5a2d 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ContextPreservingInstrumentation.java +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ContextPreservingInstrumentation.java @@ -3,10 +3,10 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import io.servicetalk.context.api.ContextMap; @@ -53,7 +53,7 @@ public void methodAdvice(MethodTransformer transformer) { public static final class Wrapper { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter(@Advice.FieldValue("saved") final ContextMap contextMap) { + public static ContextScope enter(@Advice.FieldValue("saved") final ContextMap contextMap) { AgentSpan parent = InstrumentationContext.get(ContextMap.class, AgentSpan.class).get(contextMap); if (parent != null) { @@ -63,7 +63,7 @@ public static AgentScope enter(@Advice.FieldValue("saved") final ContextMap cont } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void exit(@Advice.Enter final AgentScope agentScope) { + public static void exit(@Advice.Enter final ContextScope agentScope) { if (agentScope != null) { agentScope.close(); } diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DatadogCapturedContextProvider.java b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DatadogCapturedContextProvider.java index 6b8f2b0d9cb..b13df7f0d91 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DatadogCapturedContextProvider.java +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DatadogCapturedContextProvider.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.servicetalk0_42_56; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import io.servicetalk.concurrent.api.CapturedContext; @@ -40,7 +40,7 @@ public ContextMap captured() { @Override public Scope attachContext() { Scope stScope = underlying.attachContext(); - AgentScope ddScope = AgentTracer.activateSpan(agentSpan); + ContextScope ddScope = AgentTracer.activateSpan(agentSpan); return () -> { ddScope.close(); stScope.close(); diff --git a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java index cab293136c0..e8e2d863039 100644 --- a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.servlet.filter.FilterDecorator.DECORATE; import static datadog.trace.instrumentation.servlet.filter.FilterDecorator.JAVA_WEB_SERVLET_FILTER; import static datadog.trace.instrumentation.servlet.filter.FilterDecorator.SERVLET_FILTER; @@ -12,9 +13,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import javax.servlet.Filter; import net.bytebuddy.asm.Advice; @@ -63,7 +64,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class FilterAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope start(@Advice.This final Filter filter) { + public static ContextScope start(@Advice.This final Filter filter) { if (activeSpan() == null) { // Don't want to generate a new top-level span return null; @@ -80,14 +81,14 @@ public static AgentScope start(@Advice.This final Filter filter) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java index b1af9e2ea13..d35d91b0055 100644 --- a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.servlet.SpanNameCache.SERVLET_PREFIX; import static datadog.trace.instrumentation.servlet.SpanNameCache.SPAN_NAME_CACHE; import static datadog.trace.instrumentation.servlet.http.HttpServletDecorator.DECORATE; @@ -14,9 +15,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.reflect.Method; import net.bytebuddy.asm.Advice; @@ -70,7 +71,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class HttpServletAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope start(@Advice.Origin final Method method) { + public static ContextScope start(@Advice.Origin final Method method) { if (activeSpan() == null) { // Don't want to generate a new top-level span @@ -91,14 +92,14 @@ public static AgentScope start(@Advice.Origin final Method method) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletResponseInstrumentation.java b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletResponseInstrumentation.java index 10e6c530212..27a1d8ef7aa 100644 --- a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletResponseInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletResponseInstrumentation.java @@ -6,15 +6,16 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.servlet.http.HttpServletResponseDecorator.DECORATE; import static datadog.trace.instrumentation.servlet.http.HttpServletResponseDecorator.JAVA_WEB_SERVLET_RESPONSE; import static datadog.trace.instrumentation.servlet.http.HttpServletResponseDecorator.SERVLET_RESPONSE; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import javax.servlet.http.HttpServletResponse; import net.bytebuddy.asm.Advice; @@ -56,7 +57,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class SendAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope start( + public static ContextScope start( @Advice.Origin("#m") final String method, @Advice.This final HttpServletResponse resp) { if (activeSpan() == null) { // Don't want to generate a new top-level span @@ -78,7 +79,7 @@ public static AgentScope start( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope == null) { return; } @@ -88,7 +89,7 @@ public static void stopSpan( DECORATE.onError(scope, throwable); DECORATE.beforeFinish(scope); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/main/java/datadog/trace/instrumentation/sofarpc/AbstractClusterInstrumentation.java b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/main/java/datadog/trace/instrumentation/sofarpc/AbstractClusterInstrumentation.java index 798de2632dd..218750a794f 100644 --- a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/main/java/datadog/trace/instrumentation/sofarpc/AbstractClusterInstrumentation.java +++ b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/main/java/datadog/trace/instrumentation/sofarpc/AbstractClusterInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.sofarpc.SofaRpcClientDecorator.DECORATE; import static datadog.trace.instrumentation.sofarpc.SofaRpcClientDecorator.SOFA_RPC_CLIENT; import static datadog.trace.instrumentation.sofarpc.SofaRpcInjectAdapter.SETTER; @@ -15,8 +16,8 @@ import com.alipay.sofa.rpc.config.ConsumerConfig; import com.alipay.sofa.rpc.core.request.SofaRequest; import com.alipay.sofa.rpc.core.response.SofaResponse; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; @@ -40,7 +41,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class InvokeAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter( + public static ContextScope enter( @Advice.This AbstractCluster self, @Advice.Argument(0) SofaRequest request) { ConsumerConfig config = self.getConsumerConfig(); String protocol = config != null ? config.getProtocol() : null; @@ -50,20 +51,20 @@ public static AgentScope enter( if (protocol != null) { span.setTag("sofarpc.protocol", protocol); } - AgentScope scope = activateSpan(span); + ContextScope scope = activateSpan(span); defaultPropagator().inject(span, request, SETTER); return scope; } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter AgentScope scope, + @Advice.Enter ContextScope scope, @Advice.Return SofaResponse response, @Advice.Thrown Throwable throwable) { if (scope == null) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onResponse(span, response); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/main/java/datadog/trace/instrumentation/sofarpc/ProviderProxyInvokerInstrumentation.java b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/main/java/datadog/trace/instrumentation/sofarpc/ProviderProxyInvokerInstrumentation.java index 18c0650bd3f..90adc43122e 100644 --- a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/main/java/datadog/trace/instrumentation/sofarpc/ProviderProxyInvokerInstrumentation.java +++ b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/main/java/datadog/trace/instrumentation/sofarpc/ProviderProxyInvokerInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.sofarpc.SofaRpcExtractAdapter.GETTER; import static datadog.trace.instrumentation.sofarpc.SofaRpcServerDecorator.DECORATE; import static datadog.trace.instrumentation.sofarpc.SofaRpcServerDecorator.SOFA_RPC_SERVER; @@ -13,8 +14,8 @@ import com.alipay.sofa.rpc.core.request.SofaRequest; import com.alipay.sofa.rpc.core.response.SofaResponse; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; @@ -39,7 +40,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class InvokeAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter(@Advice.Argument(0) SofaRequest request) { + public static ContextScope enter(@Advice.Argument(0) SofaRequest request) { // Protocol is set in thread-local by transport-specific instrumentation before this call. // If null, the transport is not instrumented — skip. String protocol = SofaRpcProtocolContext.get(); @@ -63,13 +64,13 @@ public static AgentScope enter(@Advice.Argument(0) SofaRequest request) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter AgentScope scope, + @Advice.Enter ContextScope scope, @Advice.Return SofaResponse response, @Advice.Thrown Throwable throwable) { if (scope == null) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onResponse(span, response); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcRestTest.java b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcRestTest.java index d2e37d64761..a7ed308db8e 100644 --- a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcRestTest.java +++ b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcRestTest.java @@ -11,8 +11,8 @@ import com.alipay.sofa.rpc.config.ConsumerConfig; import com.alipay.sofa.rpc.config.ProviderConfig; import com.alipay.sofa.rpc.config.ServerConfig; +import datadog.context.ContextScope; import datadog.trace.agent.test.AbstractInstrumentationTest; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.core.DDSpan; import java.util.ArrayList; @@ -80,7 +80,7 @@ void clientAndServerSpansForRestCall() throws InterruptedException, TimeoutExcep String serviceUniqueName = RestGreeterService.class.getName() + ":1.0"; AgentSpan callerSpan = startSpan("test", "caller"); - AgentScope callerScope = activateSpan(callerSpan); + ContextScope callerScope = activateSpan(callerSpan); String reply; try { reply = greeterService.sayHello("World"); diff --git a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcTest.java b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcTest.java index 1ce32632e97..b91900d5db6 100644 --- a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcTest.java +++ b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcTest.java @@ -12,8 +12,8 @@ import com.alipay.sofa.rpc.config.ConsumerConfig; import com.alipay.sofa.rpc.config.ProviderConfig; import com.alipay.sofa.rpc.config.ServerConfig; +import datadog.context.ContextScope; import datadog.trace.agent.test.AbstractInstrumentationTest; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.core.DDSpan; import java.util.ArrayList; @@ -94,7 +94,7 @@ void clientAndServerSpansForBoltCall() throws InterruptedException, TimeoutExcep String serviceUniqueName = GreeterService.class.getName() + ":1.0"; AgentSpan callerSpan = startSpan("test", "caller"); - AgentScope callerScope = activateSpan(callerSpan); + ContextScope callerScope = activateSpan(callerSpan); String reply; try { reply = greeterService.sayHello("World"); diff --git a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcTripleWithGrpcForkedTest.java b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcTripleWithGrpcForkedTest.java index 1645a809ab8..ec6eb153068 100644 --- a/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcTripleWithGrpcForkedTest.java +++ b/dd-java-agent/instrumentation/sofarpc/sofarpc-5.0/src/test/java/datadog/trace/instrumentation/sofarpc/SofaRpcTripleWithGrpcForkedTest.java @@ -9,8 +9,8 @@ import com.alipay.sofa.rpc.config.ConsumerConfig; import com.alipay.sofa.rpc.config.ProviderConfig; import com.alipay.sofa.rpc.config.ServerConfig; +import datadog.context.ContextScope; import datadog.trace.agent.test.AbstractInstrumentationTest; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.core.DDSpan; import java.util.ArrayList; @@ -99,7 +99,7 @@ void tearDownServer() { @Test void tripleServerSpanIsNestedUnderGrpcServer() throws InterruptedException, TimeoutException { AgentSpan callerSpan = startSpan("test", "caller"); - AgentScope callerScope = activateSpan(callerSpan); + ContextScope callerScope = activateSpan(callerSpan); String reply; try { reply = greeterService.sayHello("World"); diff --git a/dd-java-agent/instrumentation/spark/spark-executor-common/src/main/java/datadog/trace/instrumentation/spark/SparkExecutorInstrumentation.java b/dd-java-agent/instrumentation/spark/spark-executor-common/src/main/java/datadog/trace/instrumentation/spark/SparkExecutorInstrumentation.java index 738d86be143..b06228b9d37 100644 --- a/dd-java-agent/instrumentation/spark/spark-executor-common/src/main/java/datadog/trace/instrumentation/spark/SparkExecutorInstrumentation.java +++ b/dd-java-agent/instrumentation/spark/spark-executor-common/src/main/java/datadog/trace/instrumentation/spark/SparkExecutorInstrumentation.java @@ -3,15 +3,16 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.spark.SparkExecutorDecorator.DECORATE; import static datadog.trace.instrumentation.spark.SparkExecutorDecorator.SPARK_TASK; import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import org.apache.spark.executor.Executor; @@ -52,7 +53,7 @@ public void methodAdvice(MethodTransformer transformer) { public static final class RunAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope enter(@Advice.This Executor.TaskRunner taskRunner) { + public static ContextScope enter(@Advice.This Executor.TaskRunner taskRunner) { final AgentSpan span = startSpan("spark", SPARK_TASK); DECORATE.afterStart(span); @@ -63,12 +64,12 @@ public static AgentScope enter(@Advice.This Executor.TaskRunner taskRunner) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, @Advice.This final Executor.TaskRunner taskRunner) { + @Advice.Enter final ContextScope scope, @Advice.This final Executor.TaskRunner taskRunner) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onTaskEnd(span, taskRunner); DECORATE.beforeFinish(scope); diff --git a/dd-java-agent/instrumentation/spring/spring-data-1.8/src/main/java/datadog/trace/instrumentation/springdata/RepositoryInterceptor.java b/dd-java-agent/instrumentation/spring/spring-data-1.8/src/main/java/datadog/trace/instrumentation/springdata/RepositoryInterceptor.java index 3a94388e8a6..4461ab68576 100644 --- a/dd-java-agent/instrumentation/spring/spring-data-1.8/src/main/java/datadog/trace/instrumentation/springdata/RepositoryInterceptor.java +++ b/dd-java-agent/instrumentation/spring/spring-data-1.8/src/main/java/datadog/trace/instrumentation/springdata/RepositoryInterceptor.java @@ -5,7 +5,7 @@ import static datadog.trace.instrumentation.springdata.SpringDataDecorator.DECORATOR; import static datadog.trace.instrumentation.springdata.SpringDataDecorator.REPOSITORY_OPERATION; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.lang.reflect.Method; import org.aopalliance.intercept.MethodInterceptor; @@ -35,7 +35,7 @@ public Object invoke(final MethodInvocation methodInvocation) throws Throwable { DECORATOR.afterStart(span); DECORATOR.onOperation(span, invokedMethod, repositoryInterface); - final AgentScope scope = activateSpan(span); + final ContextScope scope = activateSpan(span); Object result = null; try { diff --git a/dd-java-agent/instrumentation/spring/spring-messaging-4.0/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java b/dd-java-agent/instrumentation/spring/spring-messaging-4.0/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java index 69e8d73408e..a42e4bfdfd6 100644 --- a/dd-java-agent/instrumentation/spring/spring-messaging-4.0/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/spring/spring-messaging-4.0/src/main/java/datadog/trace/instrumentation/springmessaging/SpringMessageHandlerInstrumentation.java @@ -7,6 +7,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.rootContext; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.springmessaging.SpringMessageDecorator.COMPONENT_NAME; import static datadog.trace.instrumentation.springmessaging.SpringMessageDecorator.DECORATE; import static datadog.trace.instrumentation.springmessaging.SpringMessageDecorator.SPRING_INBOUND; @@ -19,7 +20,6 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.annotation.AppliesOn; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.java.concurrent.AsyncResultExtensions; import net.bytebuddy.asm.Advice; @@ -80,7 +80,7 @@ public static void onExit(@Advice.Local("ctxScope") ContextScope scope) { public static class HandleMessageAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter(@Advice.This InvocableHandlerMethod thiz) { + public static ContextScope onEnter(@Advice.This InvocableHandlerMethod thiz) { AgentSpan span = startSpan(COMPONENT_NAME.toString(), SPRING_INBOUND); DECORATE.afterStart(span); span.setResourceName(DECORATE.spanNameForMethod(thiz.getMethod())); @@ -89,13 +89,13 @@ public static AgentScope onEnter(@Advice.This InvocableHandlerMethod thiz) { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Enter AgentScope scope, + @Advice.Enter ContextScope scope, @Advice.Return(readOnly = false) Object result, @Advice.Thrown Throwable error) { if (null == scope) { return; } - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); scope.close(); if (null != error) { DECORATE.onError(span, error); diff --git a/dd-java-agent/instrumentation/spring/spring-rabbit-1.5/src/main/java/datadog/trace/instrumentation/springamqp/AbstractMessageListenerContainerInstrumentation.java b/dd-java-agent/instrumentation/spring/spring-rabbit-1.5/src/main/java/datadog/trace/instrumentation/springamqp/AbstractMessageListenerContainerInstrumentation.java index 6a9fa4bec55..42c3f674506 100644 --- a/dd-java-agent/instrumentation/spring/spring-rabbit-1.5/src/main/java/datadog/trace/instrumentation/springamqp/AbstractMessageListenerContainerInstrumentation.java +++ b/dd-java-agent/instrumentation/spring/spring-rabbit-1.5/src/main/java/datadog/trace/instrumentation/springamqp/AbstractMessageListenerContainerInstrumentation.java @@ -3,6 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE; import static datadog.trace.instrumentation.springamqp.RabbitListenerDecorator.AMQP_CONSUME; import static datadog.trace.instrumentation.springamqp.RabbitListenerDecorator.DECORATE; @@ -17,7 +18,6 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter; import datadog.trace.bootstrap.instrumentation.java.concurrent.State; @@ -66,7 +66,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ActivateContinuation { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope activate(@Advice.Argument(1) Object data) { + public static ContextScope activate(@Advice.Argument(1) Object data) { if (data instanceof Message) { Message message = (Message) data; State state = InstrumentationContext.get(Message.class, State.class).get(message); @@ -87,9 +87,9 @@ public static AgentScope activate(@Advice.Argument(1) Object data) { } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void close(@Advice.Enter AgentScope scope, @Advice.Thrown Throwable error) { + public static void close(@Advice.Enter ContextScope scope, @Advice.Thrown Throwable error) { if (null != scope) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (null != error) { DECORATE.onError(span, error); } diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/DispatcherHandlerAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/DispatcherHandlerAdvice.java index 2f5cdcbeae8..3ee18dd164e 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/DispatcherHandlerAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/DispatcherHandlerAdvice.java @@ -3,11 +3,12 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.springwebflux.server.SpringWebfluxHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.springwebflux.server.SpringWebfluxHttpServerDecorator.DISPATCHER_HANDLE_HANDLER; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.reactivestreams.HandoffContext; import java.util.function.Consumer; @@ -23,7 +24,7 @@ public class DispatcherHandlerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter(@Advice.Argument(0) final ServerWebExchange exchange) { + public static ContextScope methodEnter(@Advice.Argument(0) final ServerWebExchange exchange) { // Unfortunately Netty EventLoop is not instrumented well enough to attribute all work to the // right things so we have to store span in request itself. We also store parent (netty's) // span @@ -43,12 +44,12 @@ public static AgentScope methodEnter(@Advice.Argument(0) final ServerWebExchange @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Argument(0) final ServerWebExchange exchange, @Advice.Return(readOnly = false) Mono mono) { if (throwable == null && mono != null) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); final Consumer finisher = new AdviceUtils.MonoSpanFinisher(span); mono = mono.doOnError(finisher).doFinally(finisher); InstrumentationContext.get(Publisher.class, HandoffContext.class) diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java index 326ddce3ff4..c6a7cc1e3ea 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java @@ -1,12 +1,13 @@ package datadog.trace.instrumentation.springwebflux.server; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; import static datadog.trace.instrumentation.springwebflux.server.AdviceUtils.constructOperationName; import static datadog.trace.instrumentation.springwebflux.server.SpringWebfluxHttpServerDecorator.DECORATE; +import datadog.context.ContextScope; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.reactivestreams.HandoffContext; import net.bytebuddy.asm.Advice; @@ -22,11 +23,11 @@ public class HandlerAdapterAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.Argument(0) final ServerWebExchange exchange, @Advice.Argument(1) final Object handler) { - AgentScope scope = null; + ContextScope scope = null; final AgentSpan span = exchange.getAttribute(AdviceUtils.SPAN_ATTRIBUTE); if (handler != null && span != null) { final String handlerType; @@ -66,14 +67,14 @@ public static AgentScope methodEnter( public static void methodExit( @Advice.Return(readOnly = false) Mono mono, @Advice.Argument(0) final ServerWebExchange exchange, - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { if (scope != null) { if (throwable != null) { DECORATE.onError(scope, throwable); } else if (mono != null) { InstrumentationContext.get(Publisher.class, HandoffContext.class) - .put(mono, HandoffContext.anyThread(scope.span())); + .put(mono, HandoffContext.anyThread(spanFromScope(scope))); } scope.close(); // span finished in SpanFinishingSubscriber diff --git a/dd-java-agent/instrumentation/spymemcached-2.10/src/main/java/datadog/trace/instrumentation/spymemcached/MemcachedClientInstrumentation.java b/dd-java-agent/instrumentation/spymemcached-2.10/src/main/java/datadog/trace/instrumentation/spymemcached/MemcachedClientInstrumentation.java index aa6b5adfc4e..840429b1cb4 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.10/src/main/java/datadog/trace/instrumentation/spymemcached/MemcachedClientInstrumentation.java +++ b/dd-java-agent/instrumentation/spymemcached-2.10/src/main/java/datadog/trace/instrumentation/spymemcached/MemcachedClientInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.spymemcached.MemcacheClientDecorator.COMPONENT_NAME; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; @@ -11,10 +12,10 @@ import static net.bytebuddy.matcher.ElementMatchers.returns; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.spy.memcached.MemcachedClient; @@ -75,7 +76,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class AsyncOperationAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter() { + public static ContextScope methodEnter() { if (CallDepthThreadLocalMap.incrementCallDepth(MemcachedClient.class) > 0) { return null; } @@ -85,17 +86,17 @@ public static AgentScope methodEnter() { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Origin("#m") final String methodName, @Advice.Return final OperationFuture future) { if (scope == null) { return; } CallDepthThreadLocalMap.reset(MemcachedClient.class); - try (final AgentScope toClose = scope) { + try (final ContextScope toClose = scope) { if (future != null) { final OperationCompletionListener listener = - new OperationCompletionListener(scope.span(), methodName); + new OperationCompletionListener(spanFromScope(scope), methodName); future.addListener(listener); } } @@ -105,7 +106,7 @@ public static void methodExit( public static class AsyncGetAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter() { + public static ContextScope methodEnter() { if (CallDepthThreadLocalMap.incrementCallDepth(MemcachedClient.class) > 0) { return null; } @@ -115,17 +116,17 @@ public static AgentScope methodEnter() { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Origin("#m") final String methodName, @Advice.Return final GetFuture future) { if (scope == null) { return; } CallDepthThreadLocalMap.reset(MemcachedClient.class); - try (final AgentScope toClose = scope) { + try (final ContextScope toClose = scope) { if (future != null) { final GetCompletionListener listener = - new GetCompletionListener(scope.span(), methodName); + new GetCompletionListener(spanFromScope(scope), methodName); future.addListener(listener); } } @@ -135,7 +136,7 @@ public static void methodExit( public static class AsyncBulkAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter() { + public static ContextScope methodEnter() { if (CallDepthThreadLocalMap.incrementCallDepth(MemcachedClient.class) > 0) { return null; } @@ -145,17 +146,17 @@ public static AgentScope methodEnter() { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Origin("#m") final String methodName, @Advice.Return final BulkFuture future) { if (scope == null) { return; } CallDepthThreadLocalMap.reset(MemcachedClient.class); - try (final AgentScope toClose = scope) { + try (final ContextScope toClose = scope) { if (future != null) { final BulkGetCompletionListener listener = - new BulkGetCompletionListener(scope.span(), methodName); + new BulkGetCompletionListener(spanFromScope(scope), methodName); future.addListener(listener); } } diff --git a/dd-java-agent/instrumentation/spymemcached-2.10/src/main/java/datadog/trace/instrumentation/spymemcached/SyncCompletionListener.java b/dd-java-agent/instrumentation/spymemcached-2.10/src/main/java/datadog/trace/instrumentation/spymemcached/SyncCompletionListener.java index 4c68c360df0..dbb2db12f8c 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.10/src/main/java/datadog/trace/instrumentation/spymemcached/SyncCompletionListener.java +++ b/dd-java-agent/instrumentation/spymemcached-2.10/src/main/java/datadog/trace/instrumentation/spymemcached/SyncCompletionListener.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.spymemcached; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import java.util.concurrent.ExecutionException; @@ -9,7 +9,7 @@ public class SyncCompletionListener extends CompletionListener { private static final Logger log = LoggerFactory.getLogger(SyncCompletionListener.class); - private final AgentScope scope; + private final ContextScope scope; public SyncCompletionListener(final AgentSpan span, final String methodName) { super(span, methodName); diff --git a/dd-java-agent/instrumentation/tibco-businessworks/tibco-businessworks-5.14/src/main/java/datadog/trace/instrumentation/tibcobw5/TaskInstrumentation.java b/dd-java-agent/instrumentation/tibco-businessworks/tibco-businessworks-5.14/src/main/java/datadog/trace/instrumentation/tibcobw5/TaskInstrumentation.java index d99a6c9b5a9..7fc80718d74 100644 --- a/dd-java-agent/instrumentation/tibco-businessworks/tibco-businessworks-5.14/src/main/java/datadog/trace/instrumentation/tibcobw5/TaskInstrumentation.java +++ b/dd-java-agent/instrumentation/tibco-businessworks/tibco-businessworks-5.14/src/main/java/datadog/trace/instrumentation/tibcobw5/TaskInstrumentation.java @@ -17,7 +17,6 @@ import datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Map; import net.bytebuddy.asm.Advice; @@ -54,7 +53,7 @@ public static boolean before( @Advice.This Task self, @Advice.Argument(0) ProcessContext processContext, @Advice.Local("ddActivityInfo") ActivityHelper.ActivityInfo ddActivityInfo, - @Advice.Local("ddScope") AgentScope ddScope) { + @Advice.Local("ddScope") ContextScope ddScope) { ContextStore store = InstrumentationContext.get(ProcessContext.class, Map.class); @@ -87,7 +86,7 @@ public static void after( @Advice.Return String ret, @Advice.Enter boolean traced, @Advice.Local("ddActivityInfo") ActivityHelper.ActivityInfo ddActivityInfo, - @Advice.Local("ddScope") AgentScope ddScope) { + @Advice.Local("ddScope") ContextScope ddScope) { try (ContextScope closeMe = ddScope) { if (!traced) { return; diff --git a/dd-java-agent/instrumentation/tibco-businessworks/tibco-businessworks-6.5/src/main/java/datadog/trace/instrumentation/tibcobw6/BehaviorInstrumentation.java b/dd-java-agent/instrumentation/tibco-businessworks/tibco-businessworks-6.5/src/main/java/datadog/trace/instrumentation/tibcobw6/BehaviorInstrumentation.java index c777f20d872..ea80578b11f 100644 --- a/dd-java-agent/instrumentation/tibco-businessworks/tibco-businessworks-6.5/src/main/java/datadog/trace/instrumentation/tibcobw6/BehaviorInstrumentation.java +++ b/dd-java-agent/instrumentation/tibco-businessworks/tibco-businessworks-6.5/src/main/java/datadog/trace/instrumentation/tibcobw6/BehaviorInstrumentation.java @@ -5,6 +5,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -16,11 +17,11 @@ import com.tibco.pvm.api.behavior.PmBehavior; import com.tibco.pvm.api.event.PmEvent; import com.tibco.pvm.api.session.PmContext; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -69,7 +70,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ActivityEvalAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope activityBegin( + public static ContextScope activityBegin( @Advice.This final Object self, @Advice.Argument(0) final PmContext pmContext, @Advice.Argument(1) final PmTask pmTask) { @@ -101,14 +102,14 @@ public static AgentScope activityBegin( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void activityEnd( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.This final PmBehavior self, @Advice.Argument(0) final PmContext pmContext, @Advice.Argument(1) final PmTask pmTask) { if (scope == null) { return; } - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); boolean finished = false; try { finished = self.isFinished(pmContext, pmTask); diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/WsHttpUpgradeHandlerInstrumentation.java b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/WsHttpUpgradeHandlerInstrumentation.java index bc178cba700..d075465806d 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/WsHttpUpgradeHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/WsHttpUpgradeHandlerInstrumentation.java @@ -4,10 +4,10 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Collections; import java.util.Map; @@ -44,7 +44,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class CaptureHandshakeSpanAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.FieldValue("handshakeRequest") final WsHandshakeRequest request) { final AgentSpan span = InstrumentationContext.get(WsHandshakeRequest.class, AgentSpan.class).get(request); @@ -52,7 +52,7 @@ public static AgentScope before( } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void after(@Advice.Enter final AgentScope scope) { + public static void after(@Advice.Enter final ContextScope scope) { if (scope != null) { scope.close(); } diff --git a/dd-java-agent/instrumentation/twilio-0.0.1/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java b/dd-java-agent/instrumentation/twilio-0.0.1/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java index 4af01fc11ad..d5f195939d1 100644 --- a/dd-java-agent/instrumentation/twilio-0.0.1/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java +++ b/dd-java-agent/instrumentation/twilio-0.0.1/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.twilio.TwilioClientDecorator.DECORATE; import static datadog.trace.instrumentation.twilio.TwilioClientDecorator.TWILIO_SDK; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -16,10 +17,10 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.twilio.Twilio; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -89,7 +90,7 @@ public static class TwilioClientAsyncAdvice { /** Method entry instrumentation. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.This final Object that, @Advice.Origin("#m") final String methodName) { // Ensure that we only create a span for the top-level Twilio client method; except in the @@ -114,14 +115,14 @@ public static AgentScope methodEnter( /** Method exit instrumentation. */ @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return final ListenableFuture response) { if (scope == null) { return; } // If we have a scope (i.e. we were the top-level Twilio SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); if (throwable != null) { // There was a synchronous error, // which means we shouldn't wait for a callback to close the span. diff --git a/dd-java-agent/instrumentation/twilio-0.0.1/src/main/java/datadog/trace/instrumentation/twilio/TwilioSyncInstrumentation.java b/dd-java-agent/instrumentation/twilio-0.0.1/src/main/java/datadog/trace/instrumentation/twilio/TwilioSyncInstrumentation.java index d7697800f90..b83bd611637 100644 --- a/dd-java-agent/instrumentation/twilio-0.0.1/src/main/java/datadog/trace/instrumentation/twilio/TwilioSyncInstrumentation.java +++ b/dd-java-agent/instrumentation/twilio-0.0.1/src/main/java/datadog/trace/instrumentation/twilio/TwilioSyncInstrumentation.java @@ -4,6 +4,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.twilio.TwilioClientDecorator.DECORATE; import static datadog.trace.instrumentation.twilio.TwilioClientDecorator.TWILIO_SDK; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -11,10 +12,10 @@ import com.google.auto.service.AutoService; import com.twilio.Twilio; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -73,7 +74,7 @@ public static class TwilioClientAdvice { /** Method entry instrumentation. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.This final Object that, @Advice.Origin("#m") final String methodName) { // Ensure that we only create a span for the top-level Twilio client method; except in the @@ -95,7 +96,7 @@ public static AgentScope methodEnter( /** Method exit instrumentation. */ @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable, @Advice.Return final Object response) { if (scope == null) { @@ -103,7 +104,7 @@ public static void methodExit( } // If we have a scope (i.e. we were the top-level Twilio SDK invocation), - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onResult(span, response); DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); diff --git a/dd-java-agent/instrumentation/valkey-java-5.3/src/main/java/datadog/trace/instrumentation/valkey/ValkeyInstrumentation.java b/dd-java-agent/instrumentation/valkey-java-5.3/src/main/java/datadog/trace/instrumentation/valkey/ValkeyInstrumentation.java index 5aa4b9766a9..5fa6a62eee3 100644 --- a/dd-java-agent/instrumentation/valkey-java-5.3/src/main/java/datadog/trace/instrumentation/valkey/ValkeyInstrumentation.java +++ b/dd-java-agent/instrumentation/valkey-java-5.3/src/main/java/datadog/trace/instrumentation/valkey/ValkeyInstrumentation.java @@ -3,15 +3,16 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static io.valkey.ValkeyClientDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.valkey.CommandObject; import io.valkey.Connection; @@ -53,7 +54,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class ValkeyAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Argument(0) final CommandObject commandObject, @Advice.This final Connection thiz) { final AgentSpan span = startSpan("valkey-command", ValkeyClientDecorator.OPERATION_NAME); @@ -72,11 +73,11 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable throwable) { - DECORATE.onError(scope.span(), throwable); - DECORATE.beforeFinish(scope.span()); + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { + DECORATE.onError(spanFromScope(scope), throwable); + DECORATE.beforeFinish(spanFromScope(scope)); scope.close(); - scope.span().finish(); + spanFromScope(scope).finish(); } } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisAPICallAdvice.java b/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisAPICallAdvice.java index 7d7e599ec64..3c30d57b825 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisAPICallAdvice.java +++ b/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisAPICallAdvice.java @@ -6,9 +6,9 @@ import static datadog.trace.instrumentation.vertx_redis_client.VertxRedisClientDecorator.DECORATE; import datadog.context.ContextContinuation; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.vertx.core.AsyncResult; import io.vertx.core.Handler; @@ -21,7 +21,7 @@ public class RedisAPICallAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beforeCall( + public static ContextScope beforeCall( @Advice.Origin final Method currentMethod, @Advice.This final RedisAPI self, @Advice.Argument( @@ -110,7 +110,7 @@ public static AgentScope beforeCall( The potential racy condition when the handler may be added to an already finished task is handled by RedisAPIImplSendAdvice. */ - AgentScope scope = activateSpan(clientSpan); + ContextScope scope = activateSpan(clientSpan); ResponseHandlerWrapper respHandler = new ResponseHandlerWrapper(handler, clientSpan, parentContinuation); handler = respHandler; @@ -144,7 +144,7 @@ public static AgentScope beforeCall( public static void afterCall( @Advice.Thrown final Throwable throwable, @Advice.This final RedisAPI self, - @Advice.Enter final AgentScope scope) { + @Advice.Enter final ContextScope scope) { CallDepthThreadLocalMap.decrementCallDepth(RedisAPI.class); if (null == scope) { diff --git a/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisFutureSendAdvice.java b/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisFutureSendAdvice.java index 0b105d498f1..cddcaf380cc 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisFutureSendAdvice.java +++ b/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisFutureSendAdvice.java @@ -3,14 +3,15 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.vertx_redis_client.VertxRedisClientDecorator.DECORATE; import static datadog.trace.instrumentation.vertx_redis_client.VertxRedisClientDecorator.REDIS_COMMAND; import datadog.context.ContextContinuation; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import io.vertx.core.Future; @@ -26,7 +27,7 @@ public class RedisFutureSendAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beforeSend( + public static ContextScope beforeSend( @Advice.Argument(value = 0, readOnly = false) Request request, @Advice.Local("ddParentContinuation") ContextContinuation parentContinuation) throws Throwable { @@ -73,14 +74,14 @@ public static AgentScope beforeSend( public static void afterSend( @Advice.Return(readOnly = false) Future responseFuture, @Advice.Local("ddParentContinuation") ContextContinuation parentContinuation, - @Advice.Enter final AgentScope clientScope, + @Advice.Enter final ContextScope clientScope, @Advice.This final Object thiz) { CallDepthThreadLocalMap.decrementCallDepth(RedisAPI.class); if (thiz instanceof RedisConnection) { final SocketAddress socketAddress = InstrumentationContext.get(RedisConnection.class, SocketAddress.class) .get((RedisConnection) thiz); - final AgentSpan span = clientScope != null ? clientScope.span() : activeSpan(); + final AgentSpan span = clientScope != null ? spanFromScope(clientScope) : activeSpan(); // Verify the activeSpan() fallback is actually a REDIS_COMMAND span if (socketAddress != null && span != null && REDIS_COMMAND.equals(span.getOperationName())) { DECORATE.onConnection(span, socketAddress); @@ -90,7 +91,7 @@ public static void afterSend( if (clientScope != null) { Promise promise = Promise.promise(); responseFuture.onComplete( - new ResponseHandler(promise, clientScope.span(), parentContinuation)); + new ResponseHandler(promise, spanFromScope(clientScope), parentContinuation)); responseFuture = promise.future(); clientScope.close(); } diff --git a/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisSendAdvice.java b/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisSendAdvice.java index e7b4303e3b8..7a127a51b83 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisSendAdvice.java +++ b/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_redis_client/RedisSendAdvice.java @@ -3,14 +3,15 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.vertx_redis_client.VertxRedisClientDecorator.DECORATE; import static datadog.trace.instrumentation.vertx_redis_client.VertxRedisClientDecorator.REDIS_COMMAND; import datadog.context.ContextContinuation; +import datadog.context.ContextScope; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import io.vertx.core.AsyncResult; @@ -27,7 +28,7 @@ public class RedisSendAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beforeSend( + public static ContextScope beforeSend( @Advice.Argument(value = 0, readOnly = false) Request request, @Advice.Argument(value = 1, readOnly = false) Handler> handler) throws Throwable { @@ -75,13 +76,13 @@ public static AgentScope beforeSend( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterSend( - @Advice.Enter final AgentScope clientScope, @Advice.This final Object thiz) { + @Advice.Enter final ContextScope clientScope, @Advice.This final Object thiz) { CallDepthThreadLocalMap.decrementCallDepth(RedisAPI.class); if (thiz instanceof RedisConnection) { final SocketAddress socketAddress = InstrumentationContext.get(RedisConnection.class, SocketAddress.class) .get((RedisConnection) thiz); - final AgentSpan span = clientScope != null ? clientScope.span() : activeSpan(); + final AgentSpan span = clientScope != null ? spanFromScope(clientScope) : activeSpan(); // Verify the activeSpan() fallback is actually a REDIS_COMMAND span if (socketAddress != null && span != null && REDIS_COMMAND.equals(span.getOperationName())) { DECORATE.onConnection(span, socketAddress); diff --git a/dd-java-agent/instrumentation/vertx/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorReadAdvice.java b/dd-java-agent/instrumentation/vertx/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorReadAdvice.java index bba044739d7..b02165e8b0f 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorReadAdvice.java +++ b/dd-java-agent/instrumentation/vertx/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorReadAdvice.java @@ -5,9 +5,9 @@ import static datadog.trace.instrumentation.vertx_sql_client_39.VertxSqlClientDecorator.DECORATE; import datadog.context.ContextContinuation; +import datadog.context.ContextScope; import datadog.trace.api.Pair; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.vertx.core.AsyncResult; import io.vertx.core.Handler; @@ -19,7 +19,7 @@ public class CursorReadAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beforeRead( + public static ContextScope beforeRead( @Advice.Argument(value = 1, readOnly = false) Handler>> handler, @Advice.FieldValue(value = "ps", typing = Assigner.Typing.DYNAMIC) final PreparedStatement ps) { @@ -42,7 +42,7 @@ public static AgentScope beforeRead( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterRead( - @Advice.Thrown final Throwable throwable, @Advice.Enter final AgentScope clientScope) { + @Advice.Thrown final Throwable throwable, @Advice.Enter final ContextScope clientScope) { if (null != clientScope) { clientScope.close(); } diff --git a/dd-java-agent/instrumentation/vertx/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryAdvice.java b/dd-java-agent/instrumentation/vertx/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryAdvice.java index d0145be97cd..f647c9b6c90 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryAdvice.java +++ b/dd-java-agent/instrumentation/vertx/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryAdvice.java @@ -5,10 +5,10 @@ import static datadog.trace.instrumentation.vertx_sql_client_39.VertxSqlClientDecorator.DECORATE; import datadog.context.ContextContinuation; +import datadog.context.ContextScope; import datadog.trace.api.Pair; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.vertx.core.AsyncResult; import io.vertx.core.Handler; @@ -29,7 +29,7 @@ public static void afterCopy( public static class Execute { @Advice.OnMethodEnter(suppress = Throwable.class) - public static > AgentScope beforeExecute( + public static > ContextScope beforeExecute( @Advice.This final Query zis, @Advice.Argument( value = 0, @@ -62,7 +62,7 @@ public static > AgentScope beforeExecute( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterExecute( - @Advice.Thrown final Throwable throwable, @Advice.Enter final AgentScope clientScope) { + @Advice.Thrown final Throwable throwable, @Advice.Enter final ContextScope clientScope) { if (null != clientScope) { clientScope.close(); } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/client/HttpClientRequestBaseInstrumentation.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/client/HttpClientRequestBaseInstrumentation.java index 5c617ce0275..8ce9f0e1255 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/client/HttpClientRequestBaseInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/client/HttpClientRequestBaseInstrumentation.java @@ -11,9 +11,9 @@ import com.google.auto.service.AutoService; import datadog.context.Context; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.instrumentation.netty41.AttributeKeys; import io.vertx.core.http.impl.HttpClientStream; @@ -63,7 +63,7 @@ public static void onExit( stream.connection().channel().attr(AttributeKeys.CONTEXT_ATTRIBUTE_KEY).get(); AgentSpan nettySpan = spanFromContext(storedContext); if (nettySpan != null) { - try (final AgentScope scope = activateSpan(nettySpan)) { + try (final ContextScope scope = activateSpan(nettySpan)) { DECORATE.onError(scope, cause); } } diff --git a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/AsyncRemoteEndpointInstrumentation.java b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/AsyncRemoteEndpointInstrumentation.java index 575d7a8cded..31e17cfc779 100644 --- a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/AsyncRemoteEndpointInstrumentation.java +++ b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/AsyncRemoteEndpointInstrumentation.java @@ -10,10 +10,10 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.websocket.HandlerContext; import java.nio.ByteBuffer; @@ -78,7 +78,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class SendTextAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final RemoteEndpoint.Async self, @Advice.Argument(0) String text, @Advice.Argument( @@ -108,7 +108,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext, @Advice.Thrown final Throwable throwable, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Future future) { @@ -135,7 +135,7 @@ public static void after( public static class SendBinaryAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final RemoteEndpoint.Async self, @Advice.Argument(0) ByteBuffer buffer, @Advice.Argument( @@ -165,7 +165,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext, @Advice.Thrown final Throwable throwable, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Future future) { @@ -192,7 +192,7 @@ public static void after( public static class SendObjectAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final RemoteEndpoint.Async self, @Advice.Argument( value = 1, @@ -219,7 +219,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext, @Advice.Thrown final Throwable throwable, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Future future) { diff --git a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/BasicRemoteEndpointInstrumentation.java b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/BasicRemoteEndpointInstrumentation.java index 04c3fc1c8d6..f150e195d29 100644 --- a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/BasicRemoteEndpointInstrumentation.java +++ b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/BasicRemoteEndpointInstrumentation.java @@ -12,10 +12,10 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.websocket.HandlerContext; import java.io.OutputStream; @@ -73,7 +73,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class SendTextAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final RemoteEndpoint.Basic self, @Advice.Argument(0) String text, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { @@ -94,7 +94,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext, @Advice.Thrown final Throwable throwable, @Advice.Argument(value = 1, optional = true) final Boolean last) { @@ -114,7 +114,7 @@ public static void after( public static class SendBinaryAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final RemoteEndpoint.Basic self, @Advice.Argument(0) ByteBuffer buffer, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { @@ -135,7 +135,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext, @Advice.Thrown final Throwable throwable, @Advice.Argument(value = 1, optional = true) final Boolean last) { @@ -154,7 +154,7 @@ public static void after( public static class SendObjectAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final RemoteEndpoint.Basic self, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { handlerContext = @@ -174,7 +174,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext, @Advice.Thrown final Throwable throwable) { CallDepthThreadLocalMap.decrementCallDepth(RemoteEndpoint.class); diff --git a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/EndpointInstrumentation.java b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/EndpointInstrumentation.java index ef50904e530..d41ac1d07f6 100644 --- a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/EndpointInstrumentation.java +++ b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/EndpointInstrumentation.java @@ -3,15 +3,16 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.extendsClass; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.decorator.WebsocketDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.Config; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.websocket.HandlerContext; @@ -76,7 +77,7 @@ public static void onEnter(@Advice.Argument(0) final Session session) { public static class SessionCloseAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.Local("handlerContext") HandlerContext.Receiver handlerContext, @Advice.Argument(0) final Session session, @Advice.Argument(1) final CloseReason closeReason) { @@ -95,11 +96,11 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Local("handlerContext") HandlerContext.Receiver handlerContext, @Advice.Thrown final Throwable thrown) { if (scope != null) { - final AgentSpan span = scope.span(); + final AgentSpan span = spanFromScope(scope); DECORATE.onError(span, thrown); DECORATE.onFrameEnd(handlerContext); scope.close(); diff --git a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/MessageHandlerInstrumentation.java b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/MessageHandlerInstrumentation.java index 846955c332c..ddb35680e95 100644 --- a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/MessageHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/MessageHandlerInstrumentation.java @@ -8,10 +8,10 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.websocket.HandlerContext; import javax.websocket.MessageHandler; @@ -51,7 +51,7 @@ public void methodAdvice(MethodTransformer transformer) { public static class OnMessageAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope onEnter( + public static ContextScope onEnter( @Advice.This final MessageHandler handler, @Advice.Argument(value = 0, typing = Assigner.Typing.DYNAMIC) final Object data, @Advice.Argument(value = 1, optional = true) final Boolean last, @@ -73,7 +73,7 @@ public static AgentScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Local("handlerContext") HandlerContext.Receiver handlerContext, @Advice.Thrown final Throwable throwable, @Advice.Argument(value = 1, optional = true) final Boolean last) { diff --git a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/SessionInstrumentation.java b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/SessionInstrumentation.java index b8ceed2f78d..b7cd90d7ea1 100644 --- a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/SessionInstrumentation.java +++ b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/main/java/datadog/trace/instrumentation/websocket/jsr256/SessionInstrumentation.java @@ -10,9 +10,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.websocket.HandlerContext; import javax.websocket.CloseReason; import javax.websocket.MessageHandler; @@ -147,7 +147,7 @@ public static void onExit( public static class SessionCloseAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final Session session, @Advice.Argument(0) final CloseReason reason, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { @@ -163,7 +163,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable thrown, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { if (scope != null) { @@ -176,7 +176,7 @@ public static void after( public static class DefaultSessionCloseAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope before( + public static ContextScope before( @Advice.This final Session session, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { @@ -190,7 +190,7 @@ public static AgentScope before( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void after( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable thrown, @Advice.Local("handlerContext") HandlerContext.Sender handlerContext) { if (scope != null) { diff --git a/dd-java-agent/instrumentation/ws/jakarta-ws-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakartaws/WebServiceInstrumentation.java b/dd-java-agent/instrumentation/ws/jakarta-ws-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakartaws/WebServiceInstrumentation.java index aba631a4552..fbe061a13ab 100644 --- a/dd-java-agent/instrumentation/ws/jakarta-ws-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakartaws/WebServiceInstrumentation.java +++ b/dd-java-agent/instrumentation/ws/jakarta-ws-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakartaws/WebServiceInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jakartaws.WebServiceDecorator.DECORATE; import static datadog.trace.instrumentation.jakartaws.WebServiceDecorator.JAKARTA_WS_REQUEST; import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy; @@ -15,10 +16,10 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import jakarta.jws.WebService; import net.bytebuddy.asm.Advice; @@ -68,7 +69,7 @@ public void methodAdvice(MethodTransformer transformer) { public static final class InvokeAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest( + public static ContextScope beginRequest( @Advice.This Object thiz, @Advice.Origin("#m") String method) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(WebService.class); if (callDepth > 0) { @@ -84,14 +85,14 @@ public static AgentScope beginRequest( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishRequest( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable error) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable error) { if (null == scope) { return; } CallDepthThreadLocalMap.reset(WebService.class); - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (null != error) { DECORATE.onError(span, error); } diff --git a/dd-java-agent/instrumentation/ws/jax-ws/jax-ws-annotations-1.1/src/main/java/datadog/trace/instrumentation/jaxws1/WebServiceInstrumentation.java b/dd-java-agent/instrumentation/ws/jax-ws/jax-ws-annotations-1.1/src/main/java/datadog/trace/instrumentation/jaxws1/WebServiceInstrumentation.java index 68642dbcc30..416317891df 100644 --- a/dd-java-agent/instrumentation/ws/jax-ws/jax-ws-annotations-1.1/src/main/java/datadog/trace/instrumentation/jaxws1/WebServiceInstrumentation.java +++ b/dd-java-agent/instrumentation/ws/jax-ws/jax-ws-annotations-1.1/src/main/java/datadog/trace/instrumentation/jaxws1/WebServiceInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jaxws1.WebServiceDecorator.DECORATE; import static datadog.trace.instrumentation.jaxws1.WebServiceDecorator.JAX_WS_REQUEST; import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy; @@ -15,10 +16,10 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import javax.jws.WebService; import net.bytebuddy.asm.Advice; @@ -68,7 +69,7 @@ public void methodAdvice(MethodTransformer transformer) { public static final class InvokeAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest( + public static ContextScope beginRequest( @Advice.This Object thiz, @Advice.Origin("#m") String method) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(WebService.class); if (callDepth > 0) { @@ -84,14 +85,14 @@ public static AgentScope beginRequest( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishRequest( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable error) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable error) { if (null == scope) { return; } CallDepthThreadLocalMap.reset(WebService.class); - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (null != error) { DECORATE.onError(span, error); } diff --git a/dd-java-agent/instrumentation/ws/jax-ws/jax-ws-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxws2/WebServiceProviderInstrumentation.java b/dd-java-agent/instrumentation/ws/jax-ws/jax-ws-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxws2/WebServiceProviderInstrumentation.java index c8241e54ee7..5e7d2f76842 100644 --- a/dd-java-agent/instrumentation/ws/jax-ws/jax-ws-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxws2/WebServiceProviderInstrumentation.java +++ b/dd-java-agent/instrumentation/ws/jax-ws/jax-ws-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxws2/WebServiceProviderInstrumentation.java @@ -5,16 +5,17 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.jaxws2.WebServiceProviderDecorator.DECORATE; import static datadog.trace.instrumentation.jaxws2.WebServiceProviderDecorator.JAX_WS_REQUEST; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import javax.xml.ws.WebServiceProvider; import net.bytebuddy.asm.Advice; @@ -62,7 +63,7 @@ public void methodAdvice(MethodTransformer transformer) { public static final class InvokeAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beginRequest( + public static ContextScope beginRequest( @Advice.This Object thiz, @Advice.Origin("#m") String method) { final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(WebServiceProvider.class); if (callDepth > 0) { @@ -78,14 +79,14 @@ public static AgentScope beginRequest( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void finishRequest( - @Advice.Enter final AgentScope scope, @Advice.Thrown final Throwable error) { + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable error) { if (null == scope) { return; } CallDepthThreadLocalMap.reset(WebServiceProvider.class); - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (null != error) { DECORATE.onError(span, error); } From eb9e39fe04c39f7f911757b65de778a3fdcfe72f Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:00:44 +0100 Subject: [PATCH 07/20] Migrate AgentScope to ContextScope (debugger) --- .../java/com/datadog/debugger/agent/DebuggerTracer.java | 8 ++++---- .../com/datadog/debugger/agent/DebuggerTracerTest.java | 6 ++++-- .../com/datadog/debugger/CapturedSnapshot29.java | 2 +- .../test/resources/com/datadog/debugger/CodeOrigin01.java | 6 +++--- .../test/resources/com/datadog/debugger/CodeOrigin02.java | 6 +++--- .../test/resources/com/datadog/debugger/CodeOrigin03.java | 6 +++--- .../test/resources/com/datadog/debugger/CodeOrigin04.java | 4 ++-- .../test/resources/com/datadog/debugger/CodeOrigin05.java | 6 +++--- .../resources/com/datadog/debugger/TriggerProbe01.java | 6 +++--- .../resources/com/datadog/debugger/TriggerProbe02.java | 6 +++--- 10 files changed, 29 insertions(+), 27 deletions(-) diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTracer.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTracer.java index a00a93d268e..23b49fe57cc 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTracer.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTracer.java @@ -3,9 +3,9 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.NOOP_TRACER; import com.datadog.debugger.sink.ProbeStatusSink; +import datadog.context.ContextScope; import datadog.trace.bootstrap.debugger.DebuggerContext; import datadog.trace.bootstrap.debugger.DebuggerSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -38,19 +38,19 @@ public DebuggerSpan createSpan(String encodedProbeId, String resourceName, Strin dynamicSpan.setTag(tag.substring(0, idx), tag.substring(idx + 1)); } } - AgentScope scope = tracerAPI.activateManualSpan(dynamicSpan); + ContextScope scope = tracerAPI.activateManualSpan(dynamicSpan); return new DebuggerSpanImpl(dynamicSpan, scope, probeStatusSink, encodedProbeId); } static class DebuggerSpanImpl implements DebuggerSpan { final AgentSpan underlyingSpan; - final AgentScope currentScope; + final ContextScope currentScope; final ProbeStatusSink probeStatusSink; final String encodedProbeId; public DebuggerSpanImpl( AgentSpan underlyingSpan, - AgentScope currentScope, + ContextScope currentScope, ProbeStatusSink probeStatusSink, String encodedProbeId) { this.underlyingSpan = underlyingSpan; diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerTracerTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerTracerTest.java index 4477078add2..a0f24c7f1ab 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerTracerTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerTracerTest.java @@ -38,9 +38,11 @@ public void createSpan() { assertEquals(0, underlyingSpan.getDurationNano()); assertEquals( "dd.dynamic.span", - ((DebuggerTracer.DebuggerSpanImpl) span).currentScope.span().getSpanName()); + AgentSpan.fromScope(((DebuggerTracer.DebuggerSpanImpl) span).currentScope).getSpanName()); assertEquals( - "a-span", ((DebuggerTracer.DebuggerSpanImpl) span).currentScope.span().getResourceName()); + "a-span", + AgentSpan.fromScope(((DebuggerTracer.DebuggerSpanImpl) span).currentScope) + .getResourceName()); span.finish(); assertNotEquals(0, underlyingSpan.getDurationNano()); verify(probeStatusSink).addEmitting(eq(SPAN_ID.getEncodedId())); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot29.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot29.java index 246b7791b6a..c3402a9c86a 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot29.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot29.java @@ -1,7 +1,7 @@ package com.datadog.debugger; import datadog.trace.agent.tooling.TracerInstaller; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.core.CoreTracer; diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin01.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin01.java index 986f26494b9..0efbd50863b 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin01.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin01.java @@ -2,7 +2,7 @@ import com.datadog.debugger.origin.CodeOrigin; import datadog.trace.bootstrap.debugger.DebuggerContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI; @@ -18,7 +18,7 @@ public class CodeOrigin01 { public static int main(String arg) throws ReflectiveOperationException { AgentSpan span = newSpan("main"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); marker(); captureCodeOrigin(CodeOrigin01.class.getDeclaredMethod("main", String.class), true); if (arg.equals("debug_1")) { @@ -38,7 +38,7 @@ public static int main(String arg) throws ReflectiveOperationException { @CodeOrigin public static void fullTrace() throws NoSuchMethodException { AgentSpan span = newSpan("entry"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); entry(); span.finish(); scope.close(); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin02.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin02.java index 0858edd5d34..9b60cfc17b3 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin02.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin02.java @@ -1,7 +1,7 @@ package com.datadog.debugger; import datadog.trace.bootstrap.debugger.DebuggerContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI; @@ -14,7 +14,7 @@ public class CodeOrigin02 { public static int main(String arg) throws ReflectiveOperationException { AgentSpan span = newSpan("main"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); if (arg.equals("debug_1")) { ((DDSpan) span.getLocalRootSpan()).setTag("_dd.p.debug", "1"); } else if (arg.equals("debug_0")) { @@ -31,7 +31,7 @@ public static int main(String arg) throws ReflectiveOperationException { private static void fullTrace() throws NoSuchMethodException { AgentSpan span = newSpan("entry"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); entry(); span.finish(); scope.close(); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin03.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin03.java index 42d2949694e..e40dd4a9101 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin03.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin03.java @@ -1,7 +1,7 @@ package com.datadog.debugger; import datadog.trace.bootstrap.debugger.DebuggerContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI; @@ -16,7 +16,7 @@ public class CodeOrigin03 { public static int main(String arg) throws ReflectiveOperationException { AgentSpan span = newSpan("main"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); if (arg.equals("debug_1")) { ((DDSpan) span.getLocalRootSpan()).setTag("_dd.p.debug", "1"); } else if (arg.equals("debug_0")) { @@ -33,7 +33,7 @@ public static int main(String arg) throws ReflectiveOperationException { private static void fullTrace() throws NoSuchMethodException { AgentSpan span = newSpan("entry"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); marker(); DebuggerContext.captureCodeOrigin(true); entry(); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin04.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin04.java index ad67ae8341e..b0daecf58a1 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin04.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin04.java @@ -1,6 +1,6 @@ package com.datadog.debugger; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI; @@ -21,7 +21,7 @@ private static void doExit(int level) { doExit(level - 1); } else { AgentSpan span; - AgentScope scope; + ContextScope scope; span = newSpan("exit"); scope = tracerAPI.activateManualSpan(span); exit(); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin05.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin05.java index 341d8391736..aa3fedfbfd9 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin05.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CodeOrigin05.java @@ -1,6 +1,6 @@ package com.datadog.debugger; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI; @@ -13,7 +13,7 @@ public class CodeOrigin05 { public static int main(String arg) throws ReflectiveOperationException { AgentSpan span = newSpan("main"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); if (arg.equals("debug_1")) { ((DDSpan) span.getLocalRootSpan()).setTag("_dd.p.debug", "1"); } else if (arg.equals("debug_0")) { @@ -30,7 +30,7 @@ public static int main(String arg) throws ReflectiveOperationException { private static void fullTrace() throws NoSuchMethodException { AgentSpan span = newSpan("entry"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); entry(); span.finish(); scope.close(); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/TriggerProbe01.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/TriggerProbe01.java index 73cc5f843b0..25a5b84bb60 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/TriggerProbe01.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/TriggerProbe01.java @@ -1,6 +1,6 @@ package com.datadog.debugger; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI; @@ -12,7 +12,7 @@ public class TriggerProbe01 { public static int main(String arg) throws ReflectiveOperationException { AgentSpan span = newSpan("main"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); fullTrace(); @@ -24,7 +24,7 @@ public static int main(String arg) throws ReflectiveOperationException { private static void fullTrace() throws NoSuchMethodException { AgentSpan span = newSpan("entry"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); entry(); span.finish(); scope.close(); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/TriggerProbe02.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/TriggerProbe02.java index 2e200c10727..60ccbd364d1 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/TriggerProbe02.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/TriggerProbe02.java @@ -1,6 +1,6 @@ package com.datadog.debugger; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI; @@ -12,7 +12,7 @@ public class TriggerProbe02 { public static int main(Integer value) throws ReflectiveOperationException { AgentSpan span = newSpan("main"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); fullTrace(value); @@ -24,7 +24,7 @@ public static int main(Integer value) throws ReflectiveOperationException { private static void fullTrace(int value) throws NoSuchMethodException { AgentSpan span = newSpan("entry"); - AgentScope scope = tracerAPI.activateManualSpan(span); + ContextScope scope = tracerAPI.activateManualSpan(span); entry(value); span.finish(); scope.close(); From e8f652a595c92458adfee33ee083fadcf9c44d75 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:01:08 +0100 Subject: [PATCH 08/20] Migrate AgentScope to ContextScope (llmobs) --- .../trace/llmobs/domain/DDLLMObsSpan.java | 3 +- .../DDLLMObsSpanAgentAttributionTest.java | 41 ++++++++++--------- .../domain/DDLLMObsSpanAgentVersionTest.java | 18 ++++---- .../domain/DDLLMObsSpanSamplingTest.java | 6 +-- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/dd-java-agent/agent-llmobs/src/main/java/datadog/trace/llmobs/domain/DDLLMObsSpan.java b/dd-java-agent/agent-llmobs/src/main/java/datadog/trace/llmobs/domain/DDLLMObsSpan.java index 473d118cdc3..b6194de857e 100644 --- a/dd-java-agent/agent-llmobs/src/main/java/datadog/trace/llmobs/domain/DDLLMObsSpan.java +++ b/dd-java-agent/agent-llmobs/src/main/java/datadog/trace/llmobs/domain/DDLLMObsSpan.java @@ -12,7 +12,6 @@ import datadog.trace.api.llmobs.LLMObsSpan; import datadog.trace.api.llmobs.LLMObsTags; import datadog.trace.api.telemetry.LLMObsMetricCollector; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -77,7 +76,7 @@ public class DDLLMObsSpan implements LLMObsSpan { // Non-null only for agent-kind spans started without an ambient APM root. Activating the // agent's APM span keeps children in the same APM trace so the trace-ID gate passes and // they inherit agent attribution correctly. - private final AgentScope standaloneApmScope; + private final ContextScope standaloneApmScope; private boolean finished = false; diff --git a/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanAgentAttributionTest.java b/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanAgentAttributionTest.java index db45fa7ce33..1096fa8d219 100644 --- a/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanAgentAttributionTest.java +++ b/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanAgentAttributionTest.java @@ -1,12 +1,13 @@ package datadog.trace.llmobs.domain; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.TracerInstaller; import datadog.trace.api.WellKnownTags; import datadog.trace.api.llmobs.LLMObs; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.Tags; @@ -56,14 +57,14 @@ private static AgentSpan innerSpan(DDLLMObsSpan llmObsSpan) throws IllegalAccess } /** Starts a root APM span and activates it, so all LLMObs spans created within share a trace. */ - private static AgentScope startRootApmScope() { + private static ContextScope startRootApmScope() { AgentSpan root = AgentTracer.get().buildSpan("apm", "http.server.request").start(); return AgentTracer.activateSpan(root); } @Test void agentSpanStoresOwnIdAndNameAsPagent() throws Exception { - try (AgentScope apmScope = startRootApmScope()) { + try (ContextScope apmScope = startRootApmScope()) { DDLLMObsSpan agentSpan = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "my-agent"); try { AgentSpan inner = innerSpan(agentSpan); @@ -74,7 +75,7 @@ void agentSpanStoresOwnIdAndNameAsPagent() throws Exception { assertEquals("my-agent", parentAgentName); } finally { agentSpan.finish(); - apmScope.span().finish(); + spanFromScope(apmScope).finish(); } } } @@ -83,7 +84,7 @@ void agentSpanStoresOwnIdAndNameAsPagent() throws Exception { void agentSpanNameIsPreservedRegardlessOfCharacters() throws Exception { // Agent names are stored as-is — no character restrictions since the only wire consumer // is the msgpack intake mapper, which accepts any string. - try (AgentScope apmScope = startRootApmScope()) { + try (ContextScope apmScope = startRootApmScope()) { DDLLMObsSpan agentSpan = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "router~v2,résumé"); try { AgentSpan inner = innerSpan(agentSpan); @@ -91,7 +92,7 @@ void agentSpanNameIsPreservedRegardlessOfCharacters() throws Exception { assertEquals("router~v2,résumé", inner.getTag(PAGENT_NAME_TAG)); } finally { agentSpan.finish(); - apmScope.span().finish(); + spanFromScope(apmScope).finish(); } } } @@ -99,7 +100,7 @@ void agentSpanNameIsPreservedRegardlessOfCharacters() throws Exception { @Test void innerAgentNameOverridesOuterAgentNameForDescendants() throws Exception { // Descendants of an inner agent must see the inner agent's name, not the outer agent's. - try (AgentScope apmScope = startRootApmScope()) { + try (ContextScope apmScope = startRootApmScope()) { DDLLMObsSpan outerAgent = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "outer-agent"); try { DDLLMObsSpan innerAgent = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "inner-agent"); @@ -119,7 +120,7 @@ void innerAgentNameOverridesOuterAgentNameForDescendants() throws Exception { } } finally { outerAgent.finish(); - apmScope.span().finish(); + spanFromScope(apmScope).finish(); } } } @@ -127,7 +128,7 @@ void innerAgentNameOverridesOuterAgentNameForDescendants() throws Exception { @Test void nonAgentChildUnderAgentInheritsAttribution() throws Exception { // All LLMObs spans share the same APM trace so the trace-ID consistency gate passes. - try (AgentScope apmScope = startRootApmScope()) { + try (ContextScope apmScope = startRootApmScope()) { DDLLMObsSpan agentSpan = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "parent-agent"); try { AgentSpan agentInner = innerSpan(agentSpan); @@ -144,14 +145,14 @@ void nonAgentChildUnderAgentInheritsAttribution() throws Exception { } } finally { agentSpan.finish(); - apmScope.span().finish(); + spanFromScope(apmScope).finish(); } } } @Test void transitiveInheritanceAgentToLlmToTool() throws Exception { - try (AgentScope apmScope = startRootApmScope()) { + try (ContextScope apmScope = startRootApmScope()) { DDLLMObsSpan agentSpan = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "root-agent"); try { AgentSpan agentInner = innerSpan(agentSpan); @@ -173,14 +174,14 @@ void transitiveInheritanceAgentToLlmToTool() throws Exception { } } finally { agentSpan.finish(); - apmScope.span().finish(); + spanFromScope(apmScope).finish(); } } } @Test void noAgentAncestorProducesNoPagentTags() throws Exception { - try (AgentScope apmScope = startRootApmScope()) { + try (ContextScope apmScope = startRootApmScope()) { DDLLMObsSpan workflowSpan = newSpan(Tags.LLMOBS_WORKFLOW_SPAN_KIND, "standalone-workflow"); try { AgentSpan inner = innerSpan(workflowSpan); @@ -188,7 +189,7 @@ void noAgentAncestorProducesNoPagentTags() throws Exception { assertNull(inner.getTag(PAGENT_NAME_TAG)); } finally { workflowSpan.finish(); - apmScope.span().finish(); + spanFromScope(apmScope).finish(); } } } @@ -198,7 +199,7 @@ void innerAgentFinishRestoresOuterAgentPropagationTags() throws Exception { // Outer agent's LLMObsContext is active. Inner agent starts (its own context pushed on top). // After inner agent finishes its context is popped, restoring outer agent's context. // A sibling span then sees outer agent's attribution via LLMObsContext. - try (AgentScope apmScope = startRootApmScope()) { + try (ContextScope apmScope = startRootApmScope()) { DDLLMObsSpan outerAgent = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "outer-agent"); try { AgentSpan outerInner = innerSpan(outerAgent); @@ -219,7 +220,7 @@ void innerAgentFinishRestoresOuterAgentPropagationTags() throws Exception { } } finally { outerAgent.finish(); - apmScope.span().finish(); + spanFromScope(apmScope).finish(); } } } @@ -229,7 +230,7 @@ void staleContextInDifferentTraceDoesNotInheritPagent() throws Exception { // Create an agent span in one APM trace, then create a non-agent span in a different APM // trace. The stale LLMObsContext from the first trace must not leak pagent attribution. AgentSpan firstRoot = AgentTracer.get().buildSpan("apm", "http.request.1").start(); - AgentScope firstScope = AgentTracer.activateSpan(firstRoot); + ContextScope firstScope = AgentTracer.activateSpan(firstRoot); DDLLMObsSpan agentSpan = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "first-trace-agent"); // agentSpan's LLMObsContext is now active in the current thread @@ -240,7 +241,7 @@ void staleContextInDifferentTraceDoesNotInheritPagent() throws Exception { // Start a fresh APM root (different trace) while the first trace's LLMObsContext is active AgentSpan secondRoot = AgentTracer.get().buildSpan("apm", "http.request.2").start(); - AgentScope secondScope = AgentTracer.activateSpan(secondRoot); + ContextScope secondScope = AgentTracer.activateSpan(secondRoot); try { DDLLMObsSpan toolInSecondTrace = newSpan(Tags.LLMOBS_TOOL_SPAN_KIND, "second-trace-tool"); try { @@ -262,7 +263,7 @@ void staleContextInDifferentTraceDoesNotInheritPagent() throws Exception { @Test void manifestNameOverridesSpanNameForPagent() throws Exception { - try (AgentScope apmScope = startRootApmScope()) { + try (ContextScope apmScope = startRootApmScope()) { DDLLMObsSpan agentSpan = newSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "span-name"); try { AgentSpan inner = innerSpan(agentSpan); @@ -276,7 +277,7 @@ void manifestNameOverridesSpanNameForPagent() throws Exception { assertEquals("manifest-name", inner.getTag(PAGENT_NAME_TAG)); } finally { agentSpan.finish(); - apmScope.span().finish(); + spanFromScope(apmScope).finish(); } } } diff --git a/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanAgentVersionTest.java b/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanAgentVersionTest.java index 0f221ac5bd5..3e36b979c62 100644 --- a/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanAgentVersionTest.java +++ b/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanAgentVersionTest.java @@ -4,10 +4,10 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.TracerInstaller; import datadog.trace.api.WellKnownTags; import datadog.trace.api.llmobs.LLMObsTags; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.Tags; @@ -67,7 +67,7 @@ void agentSpanWithExplicitVersionTagsItself() { @Test void childSpanInheritsAgentVersionFromParentContext() { DDLLMObsSpan agent = llmObsSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "agent1", "v3"); - try (AgentScope ignored = AgentTracer.activateSpan(spanOf(agent))) { + try (ContextScope ignored = AgentTracer.activateSpan(spanOf(agent))) { DDLLMObsSpan child = llmObsSpan(Tags.LLMOBS_TOOL_SPAN_KIND, "tool1", null); try { assertEquals("v3", spanOf(child).getTag(AGENT_VERSION_TAG)); @@ -82,9 +82,9 @@ void childSpanInheritsAgentVersionFromParentContext() { @Test void grandchildTransitivelyInheritsAgentVersionThroughIntermediateSpan() { DDLLMObsSpan agent = llmObsSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "agent1", "v3"); - try (AgentScope agentScope = AgentTracer.activateSpan(spanOf(agent))) { + try (ContextScope agentScope = AgentTracer.activateSpan(spanOf(agent))) { DDLLMObsSpan workflow = llmObsSpan(Tags.LLMOBS_WORKFLOW_SPAN_KIND, "workflow1", null); - try (AgentScope workflowScope = AgentTracer.activateSpan(spanOf(workflow))) { + try (ContextScope workflowScope = AgentTracer.activateSpan(spanOf(workflow))) { DDLLMObsSpan grandchild = llmObsSpan(Tags.LLMOBS_LLM_SPAN_KIND, "llm1", null); try { assertEquals("v3", spanOf(grandchild).getTag(AGENT_VERSION_TAG)); @@ -102,9 +102,9 @@ void grandchildTransitivelyInheritsAgentVersionThroughIntermediateSpan() { @Test void nestedAgentWithOwnVersionOverridesForItsOwnSubtree() { DDLLMObsSpan outerAgent = llmObsSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "outer-agent", "v1"); - try (AgentScope outerScope = AgentTracer.activateSpan(spanOf(outerAgent))) { + try (ContextScope outerScope = AgentTracer.activateSpan(spanOf(outerAgent))) { DDLLMObsSpan innerAgent = llmObsSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "inner-agent", "v2"); - try (AgentScope innerScope = AgentTracer.activateSpan(spanOf(innerAgent))) { + try (ContextScope innerScope = AgentTracer.activateSpan(spanOf(innerAgent))) { assertEquals("v2", spanOf(innerAgent).getTag(AGENT_VERSION_TAG)); DDLLMObsSpan child = llmObsSpan(Tags.LLMOBS_TOOL_SPAN_KIND, "inner-tool", null); @@ -127,7 +127,7 @@ void nestedAgentWithOwnVersionOverridesForItsOwnSubtree() { @Test void noVersionSetAnywhereMeansNoTagOnAnySpanInTheSubtree() { DDLLMObsSpan agent = llmObsSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "agent1", null); - try (AgentScope agentScope = AgentTracer.activateSpan(spanOf(agent))) { + try (ContextScope agentScope = AgentTracer.activateSpan(spanOf(agent))) { DDLLMObsSpan child = llmObsSpan(Tags.LLMOBS_TOOL_SPAN_KIND, "tool1", null); try { assertNull(spanOf(agent).getTag(AGENT_VERSION_TAG)); @@ -150,13 +150,13 @@ void childDoesNotInheritAgentVersionWhenStaleContextIsFromADifferentTrace() DDLLMObsSpan agent = llmObsSpan(Tags.LLMOBS_AGENT_SPAN_KIND, "stale-agent", "stale-v1"); // Close the standalone APM scope to simulate async boundary — LLMObs context leaks but // APM scope does not. - AgentScope apmScope = (AgentScope) STANDALONE_APM_SCOPE_FIELD.get(agent); + ContextScope apmScope = (ContextScope) STANDALONE_APM_SCOPE_FIELD.get(agent); if (apmScope != null) { apmScope.close(); } try { DDLLMObsSpan child = llmObsSpan(Tags.LLMOBS_TOOL_SPAN_KIND, "tool1", null); - try (AgentScope childScope = AgentTracer.activateSpan(spanOf(child))) { + try (ContextScope childScope = AgentTracer.activateSpan(spanOf(child))) { assertNotEquals( spanOf(agent).getTraceId(), spanOf(child).getTraceId(), diff --git a/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanSamplingTest.java b/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanSamplingTest.java index 5b411e32edf..3b105bae69b 100644 --- a/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanSamplingTest.java +++ b/dd-java-agent/agent-llmobs/src/test/java/datadog/trace/llmobs/domain/DDLLMObsSpanSamplingTest.java @@ -2,10 +2,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import datadog.context.ContextScope; import datadog.trace.agent.tooling.TracerInstaller; import datadog.trace.api.WellKnownTags; import datadog.trace.api.llmobs.LLMObsSampler; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.Tags; @@ -82,7 +82,7 @@ void childInheritsTheRootDecisionInsteadOfRecomputingIt() throws IllegalAccessEx AgentSpan rootSpan = spanOf(root); // Inheritance is gated on the two spans sharing an APM trace, so the root's APM span has to // be active for the child to be started under it. - try (AgentScope ignored = AgentTracer.activateSpan(rootSpan)) { + try (ContextScope ignored = AgentTracer.activateSpan(rootSpan)) { DDLLMObsSpan child = newSpan(new LLMObsSampler(0.0)); try { AgentSpan childSpan = spanOf(child); @@ -106,7 +106,7 @@ void childOfADroppedRootStaysDropped() throws IllegalAccessException { // is an unambiguous signal, so a child never mistakes an inherited drop for being a root. DDLLMObsSpan root = newSpan(new LLMObsSampler(0.0)); try { - try (AgentScope ignored = AgentTracer.activateSpan(spanOf(root))) { + try (ContextScope ignored = AgentTracer.activateSpan(spanOf(root))) { DDLLMObsSpan child = newSpan(new LLMObsSampler(1.0)); try { AgentSpan childSpan = spanOf(child); From 781c2375f2c30530e2cb2cfb5a09675e7c072b6d Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:01:38 +0100 Subject: [PATCH 09/20] Migrate AgentScope to ContextScope (testing) --- .../log/injection/LogContextInjectionTestBase.groovy | 10 +++++----- .../src/test/groovy/AgentTestRunnerTest.groovy | 4 ++-- .../datadog/trace/agent/test/utils/TraceUtils.groovy | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy index a0c9bf9c9bc..f376a4208a2 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy @@ -2,7 +2,7 @@ package datadog.trace.agent.test.log.injection import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.CorrelationIdentifier -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import java.util.concurrent.atomic.AtomicReference @@ -42,7 +42,7 @@ abstract class LogContextInjectionTestBase extends InstrumentationSpecification when: put("foo", "bar") AgentSpan rootSpan = startSpan("test", "root") - AgentScope rootScope = activateSpan(rootSpan) + ContextScope rootScope = activateSpan(rootSpan) then: get(CorrelationIdentifier.getTraceIdKey()) == CorrelationIdentifier.getTraceId() @@ -51,7 +51,7 @@ abstract class LogContextInjectionTestBase extends InstrumentationSpecification when: AgentSpan childSpan = startSpan("test", "child") - AgentScope childScope = activateSpan(childSpan) + ContextScope childScope = activateSpan(childSpan) then: get(CorrelationIdentifier.getTraceIdKey()) == CorrelationIdentifier.getTraceId() @@ -94,7 +94,7 @@ abstract class LogContextInjectionTestBase extends InstrumentationSpecification void run() { // other trace in scope final AgentSpan thread2Span = startSpan("test", "root2") - final AgentScope thread2Scope = activateSpan(thread2Span) + final ContextScope thread2Scope = activateSpan(thread2Span) try { thread2TraceId.set(get(CorrelationIdentifier.getTraceIdKey())) } finally { @@ -105,7 +105,7 @@ abstract class LogContextInjectionTestBase extends InstrumentationSpecification } final AgentSpan mainSpan = startSpan("test", "root") - final AgentScope mainScope = activateSpan(mainSpan) + final ContextScope mainScope = activateSpan(mainSpan) thread1.start() thread2.start() final String mainThreadTraceId = get(CorrelationIdentifier.getTraceIdKey()) diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/AgentTestRunnerTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/AgentTestRunnerTest.groovy index 4dcdb0dd9d7..ad4e27d5558 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/AgentTestRunnerTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/AgentTestRunnerTest.groovy @@ -5,7 +5,7 @@ import datadog.trace.agent.test.BootstrapClasspathSetupListener import datadog.trace.api.GlobalTracer import datadog.trace.api.Platform import datadog.trace.bootstrap.Constants -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentTracer import spock.lang.Shared @@ -114,7 +114,7 @@ class AgentTestRunnerTest extends InstrumentationSpecification { def "waiting for noop span returns immediately"() { when: - AgentScope scope + ContextScope scope runUnderTrace("parent") { scope = TEST_TRACER.activateManualSpan(noopSpan()) diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/TraceUtils.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/TraceUtils.groovy index db3fa988dd9..d022b7bab0d 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/TraceUtils.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/TraceUtils.groovy @@ -1,7 +1,7 @@ package datadog.trace.agent.test.utils import datadog.trace.agent.test.asserts.TraceAssert -import datadog.trace.bootstrap.instrumentation.api.AgentScope +import datadog.context.ContextScope import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext import datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator @@ -48,7 +48,7 @@ class TraceUtils { final AgentSpan span = inheritCurrent ? startSpan("test", rootOperationName) : startSpan("test", rootOperationName, (AgentSpanContext) null) DECORATOR.afterStart(span) - AgentScope scope = activateSpan(span) + ContextScope scope = activateSpan(span) try { return r.call() From 8cd1efa0219e3ce2a53a7c34b82906ac55e205ac Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:02:17 +0100 Subject: [PATCH 10/20] Migrate AgentScope to ContextScope (misc) --- .../bootstrap/instrumentation/decorator/BaseDecorator.java | 7 ------- .../com/datadog/iast/propagation/AbstractBenchmark.java | 4 ++-- .../src/test/groovy/com/datadog/iast/ReporterTest.groovy | 4 ++-- .../java/datadog/opentelemetry/shim/trace/OtelSpan.java | 4 ++-- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java index c72533768ef..5c6628c5d35 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/BaseDecorator.java @@ -10,7 +10,6 @@ import datadog.trace.api.Functions; import datadog.trace.api.TagMap; import datadog.trace.api.cache.QualifiedClassNameCache; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; import datadog.trace.bootstrap.instrumentation.api.Tags; @@ -148,12 +147,6 @@ public final void beforeFinish(final Context context) { protected void doBeforeFinish(final Context context) {} - public final void onError(@Nullable final AgentScope scope, @Nullable final Throwable throwable) { - if (scope != null) { - onError(scope.span(), throwable); - } - } - public final void onError(@Nullable final AgentSpan span, @Nullable final Throwable throwable) { onError(span, throwable, ErrorPriorities.DEFAULT); } diff --git a/dd-java-agent/agent-iast/src/jmh/java/com/datadog/iast/propagation/AbstractBenchmark.java b/dd-java-agent/agent-iast/src/jmh/java/com/datadog/iast/propagation/AbstractBenchmark.java index d6f0a7e7b90..a2b152b1a90 100644 --- a/dd-java-agent/agent-iast/src/jmh/java/com/datadog/iast/propagation/AbstractBenchmark.java +++ b/dd-java-agent/agent-iast/src/jmh/java/com/datadog/iast/propagation/AbstractBenchmark.java @@ -6,12 +6,12 @@ import com.datadog.iast.model.Range; import com.datadog.iast.model.Source; import com.datadog.iast.taint.TaintedObjects; +import datadog.context.ContextScope; import datadog.trace.api.Config; import datadog.trace.api.ProductActivation; import datadog.trace.api.gateway.InstrumentationGateway; import datadog.trace.api.gateway.RequestContextSlot; import datadog.trace.api.iast.IastContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.TagContext; @@ -44,7 +44,7 @@ public abstract class AbstractBenchmark> ctx diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java index 5433600a1b7..86581c215b0 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java @@ -11,7 +11,7 @@ import static io.opentelemetry.api.trace.StatusCode.OK; import static io.opentelemetry.api.trace.StatusCode.UNSET; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AttachableWrapper; @@ -166,7 +166,7 @@ public boolean isRecording() { return this.recording; } - public AgentScope activate() { + public ContextScope activate() { return activateSpan(this.delegate); } From 0bd6490fdfb53a6ec20240742f58020818afa346 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:19:06 +0100 Subject: [PATCH 11/20] Avoid repeatedly extracting the same span --- .../client/ClientCallImplInstrumentation.java | 5 ++-- .../datastax/cassandra/TracingSession.java | 28 +++++++++++-------- .../cache/IgniteCacheSyncInstrumentation.java | 14 ++++++---- ...tractPreparedStatementInstrumentation.java | 7 +++-- .../jdbc/StatementInstrumentation.java | 7 +++-- .../jedis/JedisInstrumentation.java | 7 +++-- .../jedis30/JedisInstrumentation.java | 7 +++-- .../jedis40/JedisInstrumentation.java | 7 +++-- .../JaxRsAnnotationsInstrumentation.java | 2 +- .../v1/JaxRsClientV1Instrumentation.java | 2 +- .../valkey/ValkeyInstrumentation.java | 7 +++-- 11 files changed, 53 insertions(+), 40 deletions(-) diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java index 0d2511b4d84..0c436799290 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/ClientCallImplInstrumentation.java @@ -212,9 +212,10 @@ public static ContextScope before(@Advice.This ClientCall call) { public static void closeObserver( @Advice.Enter ContextScope scope, @Advice.Argument(0) Status status) { if (null != scope) { - DECORATE.onClose(spanFromScope(scope), status); + AgentSpan span = spanFromScope(scope); + DECORATE.onClose(span, status); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } } diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java index 3a568c9118d..076d57e1157 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java @@ -79,15 +79,16 @@ public ListenableFuture initAsync() { @Override public ResultSet execute(final String query) { try (final ContextScope scope = startSpanWithScope(query)) { + final AgentSpan span = spanFromScope(scope); try { final ResultSet resultSet = session.execute(query); - beforeSpanFinish(spanFromScope(scope), resultSet); + beforeSpanFinish(span, resultSet); return resultSet; } catch (final RuntimeException e) { - beforeSpanFinish(spanFromScope(scope), e); + beforeSpanFinish(span, e); throw e; } finally { - spanFromScope(scope).finish(); + span.finish(); } } } @@ -95,15 +96,16 @@ public ResultSet execute(final String query) { @Override public ResultSet execute(final String query, final Object... values) { try (final ContextScope scope = startSpanWithScope(query)) { + final AgentSpan span = spanFromScope(scope); try { final ResultSet resultSet = session.execute(query, values); - beforeSpanFinish(spanFromScope(scope), resultSet); + beforeSpanFinish(span, resultSet); return resultSet; } catch (final RuntimeException e) { - beforeSpanFinish(spanFromScope(scope), e); + beforeSpanFinish(span, e); throw e; } finally { - spanFromScope(scope).finish(); + span.finish(); } } } @@ -111,15 +113,16 @@ public ResultSet execute(final String query, final Object... values) { @Override public ResultSet execute(final String query, final Map values) { try (final ContextScope scope = startSpanWithScope(query)) { + final AgentSpan span = spanFromScope(scope); try { final ResultSet resultSet = session.execute(query, values); - beforeSpanFinish(spanFromScope(scope), resultSet); + beforeSpanFinish(span, resultSet); return resultSet; } catch (final RuntimeException e) { - beforeSpanFinish(spanFromScope(scope), e); + beforeSpanFinish(span, e); throw e; } finally { - spanFromScope(scope).finish(); + span.finish(); } } } @@ -128,15 +131,16 @@ public ResultSet execute(final String query, final Map values) { public ResultSet execute(final Statement statement) { final String query = getQuery(statement); try (final ContextScope scope = startSpanWithScope(query)) { + final AgentSpan span = spanFromScope(scope); try { final ResultSet resultSet = session.execute(statement); - beforeSpanFinish(spanFromScope(scope), resultSet); + beforeSpanFinish(span, resultSet); return resultSet; } catch (final RuntimeException e) { - beforeSpanFinish(spanFromScope(scope), e); + beforeSpanFinish(span, e); throw e; } finally { - spanFromScope(scope).finish(); + span.finish(); } } } diff --git a/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheSyncInstrumentation.java b/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheSyncInstrumentation.java index 6c7bd1a2433..29ba55521da 100644 --- a/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheSyncInstrumentation.java +++ b/dd-java-agent/instrumentation/ignite-2.0/src/main/java/datadog/trace/instrumentation/ignite/v2/cache/IgniteCacheSyncInstrumentation.java @@ -137,10 +137,11 @@ public static void stopSpan( return; } - DECORATE.onError(spanFromScope(scope), throwable); - DECORATE.beforeFinish(spanFromScope(scope)); + AgentSpan span = spanFromScope(scope); + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); CallDepthThreadLocalMap.reset(IgniteCache.class); // reset call depth count } } @@ -174,10 +175,11 @@ public static void stopSpan( return; } - DECORATE.onError(spanFromScope(scope), throwable); - DECORATE.beforeFinish(spanFromScope(scope)); + AgentSpan span = spanFromScope(scope); + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); CallDepthThreadLocalMap.reset(IgniteCache.class); // reset call depth count } } diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java index c6a260ade54..cc2dbcfc2ef 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java @@ -131,10 +131,11 @@ public static void stopSpan( if (scope == null) { return; } - DECORATE.onError(spanFromScope(scope), throwable); - DECORATE.beforeFinish(spanFromScope(scope)); + AgentSpan span = spanFromScope(scope); + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } } diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java index ccee8c1f95f..edb245a6dcf 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java @@ -198,10 +198,11 @@ public static void stopSpan( if (scope == null) { return; } - DECORATE.onError(spanFromScope(scope), throwable); - DECORATE.beforeFinish(spanFromScope(scope)); + AgentSpan span = spanFromScope(scope); + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } } diff --git a/dd-java-agent/instrumentation/jedis/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java b/dd-java-agent/instrumentation/jedis/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java index baf23d05739..039a8364f60 100644 --- a/dd-java-agent/instrumentation/jedis/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java +++ b/dd-java-agent/instrumentation/jedis/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java @@ -81,10 +81,11 @@ public static void stopSpan( return; } CallDepthThreadLocalMap.reset(Connection.class); - DECORATE.onError(spanFromScope(scope), throwable); - DECORATE.beforeFinish(spanFromScope(scope)); + AgentSpan span = spanFromScope(scope); + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } } diff --git a/dd-java-agent/instrumentation/jedis/jedis-3.0/src/main/java/datadog/trace/instrumentation/jedis30/JedisInstrumentation.java b/dd-java-agent/instrumentation/jedis/jedis-3.0/src/main/java/datadog/trace/instrumentation/jedis30/JedisInstrumentation.java index 329f944cf65..74d10559c10 100644 --- a/dd-java-agent/instrumentation/jedis/jedis-3.0/src/main/java/datadog/trace/instrumentation/jedis30/JedisInstrumentation.java +++ b/dd-java-agent/instrumentation/jedis/jedis-3.0/src/main/java/datadog/trace/instrumentation/jedis30/JedisInstrumentation.java @@ -78,10 +78,11 @@ public static void stopSpan( return; } CallDepthThreadLocalMap.reset(Connection.class); - DECORATE.onError(spanFromScope(scope), throwable); - DECORATE.beforeFinish(spanFromScope(scope)); + AgentSpan span = spanFromScope(scope); + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } } diff --git a/dd-java-agent/instrumentation/jedis/jedis-4.0/src/main/java/datadog/trace/instrumentation/jedis40/JedisInstrumentation.java b/dd-java-agent/instrumentation/jedis/jedis-4.0/src/main/java/datadog/trace/instrumentation/jedis40/JedisInstrumentation.java index 6ff705389b3..ab081fb3248 100644 --- a/dd-java-agent/instrumentation/jedis/jedis-4.0/src/main/java/datadog/trace/instrumentation/jedis40/JedisInstrumentation.java +++ b/dd-java-agent/instrumentation/jedis/jedis-4.0/src/main/java/datadog/trace/instrumentation/jedis40/JedisInstrumentation.java @@ -76,10 +76,11 @@ public static ContextScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { - DECORATE.onError(spanFromScope(scope), throwable); - DECORATE.beforeFinish(spanFromScope(scope)); + AgentSpan span = spanFromScope(scope); + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } } diff --git a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-1.1.1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-1.1.1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java index 13ade269bc4..22f54fb0f03 100644 --- a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-1.1.1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-1.1.1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java @@ -110,7 +110,7 @@ public static void stopSpan( DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } } diff --git a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-client/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-client/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index db778d1ed05..6d62a70b43c 100644 --- a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-client/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-client/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -96,7 +96,7 @@ public static void onExit( DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } diff --git a/dd-java-agent/instrumentation/valkey-java-5.3/src/main/java/datadog/trace/instrumentation/valkey/ValkeyInstrumentation.java b/dd-java-agent/instrumentation/valkey-java-5.3/src/main/java/datadog/trace/instrumentation/valkey/ValkeyInstrumentation.java index 5fa6a62eee3..a6c23153391 100644 --- a/dd-java-agent/instrumentation/valkey-java-5.3/src/main/java/datadog/trace/instrumentation/valkey/ValkeyInstrumentation.java +++ b/dd-java-agent/instrumentation/valkey-java-5.3/src/main/java/datadog/trace/instrumentation/valkey/ValkeyInstrumentation.java @@ -74,10 +74,11 @@ public static ContextScope onEnter( @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable throwable) { - DECORATE.onError(spanFromScope(scope), throwable); - DECORATE.beforeFinish(spanFromScope(scope)); + AgentSpan span = spanFromScope(scope); + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); scope.close(); - spanFromScope(scope).finish(); + span.finish(); } } } From bc7376016554997cf46643aca55d9e2fe2b22a19 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:22:03 +0100 Subject: [PATCH 12/20] Avoid anonymous class --- .../aws/v2/AwsHttpClientInstrumentation.java | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java index c9e08e7d356..7d8df3683cb 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java @@ -12,10 +12,9 @@ import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import datadog.context.Context; -import datadog.context.ContextScope; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -69,7 +68,7 @@ public static class AwsHttpClientAdvice { * stored in channel attributes. */ @Advice.OnMethodEnter(suppress = Throwable.class) - public static ContextScope methodEnter( + public static AutoCloseable methodEnter( @Advice.This final Object thiz, @Advice.Argument(1) final RequestExecutionContext requestExecutionContext) { final AgentSpan activeSpan = activeSpan(); @@ -84,24 +83,14 @@ public static ContextScope methodEnter( closeActive(); // then drop-through and activate no-op span } else { // keep sync legacy HTTP span alive for duration of call - return new ContextScope() { - @Override - public Context context() { - return activeSpan; - } - - @Override - public void close() { - closeActive(); - } - }; + return AgentTracer::closeActive; } } return activateSpan(noopSpan()); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void methodExit(@Advice.Enter final ContextScope scope) { + public static void methodExit(@Advice.Enter final AutoCloseable scope) throws Exception { scope.close(); } From bae17341705248fbf60d57a3e81856881519afbf Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:35:39 +0100 Subject: [PATCH 13/20] Remove AgentScope from docs --- .../references/advice-class.md | 8 ++++---- ARCHITECTURE.md | 3 ++- docs/add_new_instrumentation.md | 18 +++++++++--------- docs/how_instrumentations_work.md | 14 +++++++------- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/.agents/skills/apm-integrations/references/advice-class.md b/.agents/skills/apm-integrations/references/advice-class.md index ad140b8d94e..876e55e823e 100644 --- a/.agents/skills/apm-integrations/references/advice-class.md +++ b/.agents/skills/apm-integrations/references/advice-class.md @@ -23,7 +23,7 @@ Enter method: 1. `AgentSpan span = startSpan(DECORATE.operationName(), ...)` 2. `DECORATE.afterStart(span)` + set domain-specific tags -3. `AgentScope scope = activateSpan(span)` — return or store via `@Advice.Local` +3. `ContextScope scope = activateSpan(span)` — return or store via `@Advice.Local` Exit method: 4. `DECORATE.onError(span, throwable)` — only if throwable is non-null @@ -39,10 +39,10 @@ The `onThrowable = Throwable.class` attribute on `@Advice.OnMethodExit` controls // Standard pattern — exit fires whether the target method returned or threw @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit( - @Advice.Enter final AgentScope scope, + @Advice.Enter final ContextScope scope, @Advice.Thrown final Throwable thrown) { if (scope != null) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onError(span, thrown); DECORATE.beforeFinish(span); scope.close(); @@ -147,7 +147,7 @@ if (span != null && routeMatch != null) { } ``` -For route-only enrichers: no `AgentScope`, no `startSpan()`, no `decorator.afterStart()`. This rule does NOT apply to standalone HTTP clients (which own their own span identity) or to handler-owning frameworks like JAX-RS / Ratpack (which legitimately create controller spans). +For route-only enrichers: no `ContextScope`, no `startSpan()`, no `decorator.afterStart()`. This rule does NOT apply to standalone HTTP clients (which own their own span identity) or to handler-owning frameworks like JAX-RS / Ratpack (which legitimately create controller spans). ### Advice classes must not declare non-constant static fields diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index ce12897532f..1b67fae9ceb 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -157,7 +157,8 @@ Core tracing abstractions: - `AgentTracer` — Static tracer facade. Instrumentations call `AgentTracer.startSpan()`, `AgentTracer.activateSpan()`, etc. -- `AgentSpan` / `AgentScope` / `AgentSpanContext` — Internal span/scope/context interfaces. +- `AgentSpan` / `AgentSpanContext` — Internal span/context interfaces. Scopes use the tracer-agnostic + `ContextScope` (`components/context`); `AgentSpan.fromScope(scope)` extracts the active span from one. - `AgentPropagation` — Context propagation interfaces (`Getter`, `Setter`) that instrumentations implement to inject/extract trace context from framework-specific carriers (HTTP headers, message properties, etc.). diff --git a/docs/add_new_instrumentation.md b/docs/add_new_instrumentation.md index 5ecf9c06db8..40d0c1d8f0b 100644 --- a/docs/add_new_instrumentation.md +++ b/docs/add_new_instrumentation.md @@ -286,13 +286,13 @@ public String[] helperClassNames() { reference which must be of the same `HttpRequest` type. 3. Add a parameter, `@Advice.Local("inherited") boolean inheritedScope`. This shared local variable will be visible to both `OnMethodEnter` and `OnMethodExit` methods. - 4. Use `activeScope()` __to __see if an `AgentScope` is already active. If so, return that `AgentScope`, but first + 4. Use `activeScope()` __to __see if a `ContextScope` is already active. If so, return that `ContextScope`, but first let the exit method know by setting the shared `inheritedScope` boolean. - 5. If an `AgentScope` was not active then start a new span, decorate it, activate it and return it. + 5. If a `ContextScope` was not active then start a new span, decorate it, activate it and return it. 4. With `methodExit:` 1. Annotate the method using `@Advice.OnMethodExit(onThrowable=Throwable.class, suppress=Throwable.class). `( see [Exceptions in Advice](./how_instrumentations_work.md#exceptions-in-advice)) - 2. Add parameter `@Advice.Enter AgentScope scope. `This is the `AgentScope` object returned earlier + 2. Add parameter `@Advice.Enter ContextScope scope. `This is the `ContextScope` object returned earlier by `methodEnter()`. Note this is not the return value of the target `execute()` method. 3. Add a parameter, `@Advice.Local("inherited") boolean inheritedScope`. This is the shared local variable created earlier. @@ -301,19 +301,19 @@ public String[] helperClassNames() { of `methodEnter()`.` ` 5. Add a parameter `@Advice.Thrown final Throwable throwable`. This makes available any exception thrown by the target `execute()` method. - 6. Use `scope.span() `to obtain the `AgentSpan` and decorate the span as needed. + 6. Use `Java8BytecodeBridge.spanFromScope(scope) `to obtain the `AgentSpan` and decorate the span as needed. 7. If the scope was just created (not inherited), close it. ```java public static class GoogleHttpClientAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope methodEnter( + public static ContextScope methodEnter( @Advice.This HttpRequest request, @Advice.Local("inherited") boolean inheritedScope ) { - AgentScope scope = activeScope(); + ContextScope scope = activeScope(); if (null != scope) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); if (HTTP_REQUEST == span.getOperationName()) { inheritedScope = true; return scope; @@ -326,11 +326,11 @@ public static class GoogleHttpClientAdvice { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void methodExit( - @Advice.Enter AgentScope scope, + @Advice.Enter ContextScope scope, @Advice.Local("inherited") boolean inheritedScope, @Advice.Return final HttpResponse response, @Advice.Thrown final Throwable throwable) { - AgentSpan span = scope.span(); + AgentSpan span = spanFromScope(scope); DECORATE.onError(span, throwable); DECORATE.onResponse(span, response); DECORATE.beforeFinish(span); diff --git a/docs/how_instrumentations_work.md b/docs/how_instrumentations_work.md index bfe4e6232bb..5ae5904ee12 100644 --- a/docs/how_instrumentations_work.md +++ b/docs/how_instrumentations_work.md @@ -788,25 +788,25 @@ The basic span lifecycle in an Advice class looks like: 1. Start the span 2. Decorate the span -3. Activate the span and get the AgentScope +3. Activate the span and get the ContextScope 4. Run the instrumented target method 5. While the scope is still active: call final decorator methods (`DECORATE.beforeFinish`, etc.) and register any async callbacks -6. Close the Agent Scope +6. Close the scope 7. Finish the span Step 5 must complete before step 6: `beforeFinish` fires IAST/AppSec request-end callbacks that resolve the current span via `AgentTracer.activeSpan()`, and async callback frameworks (e.g. `CompletableFuture`) capture the active span at registration time — both break if the scope is closed first. ```java @Advice.OnMethodEnter(suppress = Throwable.class) -public static AgentScope begin() { +public static ContextScope begin() { final AgentSpan span = startSpan(/* */); DECORATE.afterStart(span); return activateSpan(span); } @Advice.OnMethodExit(suppress = Throwable.class) -public static void end(@Advice.Enter final AgentScope scope) { - AgentSpan span = scope.span(); +public static void end(@Advice.Enter final ContextScope scope) { + AgentSpan span = spanFromScope(scope); DECORATE.beforeFinish(span); scope.close(); span.finish(); @@ -824,7 +824,7 @@ methods. ## Continuations -- [`AgentScope.Continuation`](https://github.com/DataDog/dd-trace-java/blob/09ac78ff0b54fbbbee0ab1c89c901d2043fda40b/dd-trace-api/src/main/java/datadog/trace/context/TraceScope.java#L47) +- [`TraceScope.Continuation`](https://github.com/DataDog/dd-trace-java/blob/09ac78ff0b54fbbbee0ab1c89c901d2043fda40b/dd-trace-api/src/main/java/datadog/trace/context/TraceScope.java#L47) is used to pass context between threads. - Continuations must be either activated or canceled. - If a Continuation is activated it returns a TraceScope which must eventually be closed. @@ -832,7 +832,7 @@ methods. Notice in [`HttpClientRequestTracingHandler`](https://github.com/DataDog/dd-trace-java/blob/3fe1b2d6010e50f61518fa25af3bdeb03ae7712b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java#L56) -how the AgentScope.Continuation is used to obtain the `parentScope` which is +how the Continuation is used to obtain the `parentScope` which is finally [closed](https://github.com/DataDog/dd-trace-java/blob/3fe1b2d6010e50f61518fa25af3bdeb03ae7712b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java#L111). ## Naming From 5a5a1734619160582b10529cbebdc4cc9b75e229 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:35:55 +0100 Subject: [PATCH 14/20] Remove AgentScope from codebase --- internal-api/build.gradle.kts | 2 -- .../instrumentation/api/AgentScope.java | 17 ----------------- 2 files changed, 19 deletions(-) delete mode 100644 internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentScope.java diff --git a/internal-api/build.gradle.kts b/internal-api/build.gradle.kts index f36aa876e34..05092fca982 100644 --- a/internal-api/build.gradle.kts +++ b/internal-api/build.gradle.kts @@ -87,8 +87,6 @@ extra["excludedClassesCoverage"] = listOf( // Caused by empty 'default' interface method "datadog.trace.bootstrap.instrumentation.api.AgentPropagation", "datadog.trace.bootstrap.instrumentation.api.AgentPropagation.ContextVisitor", - "datadog.trace.bootstrap.instrumentation.api.AgentScope", - "datadog.trace.bootstrap.instrumentation.api.AgentScope.Continuation", "datadog.trace.bootstrap.instrumentation.api.AgentSpan", "datadog.trace.bootstrap.instrumentation.api.AgentSpanContext", "datadog.trace.bootstrap.instrumentation.api.AgentTracer", diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentScope.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentScope.java deleted file mode 100644 index d85644b287a..00000000000 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentScope.java +++ /dev/null @@ -1,17 +0,0 @@ -package datadog.trace.bootstrap.instrumentation.api; - -import datadog.context.Context; -import datadog.context.ContextScope; -import java.io.Closeable; - -public interface AgentScope extends ContextScope, Closeable { - AgentSpan span(); - - @Override - default Context context() { - return span(); - } - - @Override - void close(); -} From 532618a5e802819bdcbb6d47f1f4d4a9b18246a4 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:43:02 +0100 Subject: [PATCH 15/20] Fix stray AgentScope comments --- .../datadog/gradle/plugin/config/ConfigInversionLinter.kt | 2 +- .../datadog/trace/llmobs/domain/DDLLMObsSpanTest.groovy | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt index 418f0e2b3e0..77e89e62c93 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt @@ -89,7 +89,7 @@ private fun registerLogEnvVarUsages(target: Project, extension: SupportedTracerC val javaFiles = target.fileTree(target.projectDir) { include("**/src/main/java/**/*.java") exclude("**/build/**", "**/dd-smoke-tests/**") - // Undertow uses DD_UNDERTOW_CONTINUATION as a legacy key to store an AgentScope. It is not related to an environment variable + // Undertow uses DD_UNDERTOW_CONTINUATION as a legacy key to store a ContextScope. It is not related to an environment variable exclude("dd-java-agent/instrumentation/undertow/undertow-common/src/main/java/datadog/trace/instrumentation/undertow/UndertowDecorator.java") } inputs.files(javaFiles) diff --git a/dd-java-agent/agent-llmobs/src/test/groovy/datadog/trace/llmobs/domain/DDLLMObsSpanTest.groovy b/dd-java-agent/agent-llmobs/src/test/groovy/datadog/trace/llmobs/domain/DDLLMObsSpanTest.groovy index 0a728d0dafc..c2b5b4851e9 100644 --- a/dd-java-agent/agent-llmobs/src/test/groovy/datadog/trace/llmobs/domain/DDLLMObsSpanTest.groovy +++ b/dd-java-agent/agent-llmobs/src/test/groovy/datadog/trace/llmobs/domain/DDLLMObsSpanTest.groovy @@ -702,7 +702,7 @@ class DDLLMObsSpanTest extends DDSpecification{ setup: def expectedSessionId = "session-abc-123" def parent = llmObsSpan(Tags.LLMOBS_WORKFLOW_SPAN_KIND, "parent-workflow", expectedSessionId) - // Activate the parent's AgentScope so the child span is created in the same trace. + // Activate the parent's ContextScope so the child span is created in the same trace. // Without this, the child gets a fresh trace_id and the trace-consistency gate in // DDLLMObsSpan would (correctly) skip session_id inheritance. def parentScope = AgentTracer.activateSpan((AgentSpan) parent.span) @@ -741,7 +741,7 @@ class DDLLMObsSpanTest extends DDSpecification{ setup: def expectedSessionId = "session-grandparent-xyz" def grandparent = llmObsSpan(Tags.LLMOBS_WORKFLOW_SPAN_KIND, "grandparent-workflow", expectedSessionId) - // Activate each ancestor's AgentScope so descendants stay in the same trace — + // Activate each ancestor's ContextScope so descendants stay in the same trace — // session_id inheritance is gated on trace-id consistency in DDLLMObsSpan. def grandparentScope = AgentTracer.activateSpan((AgentSpan) grandparent.span) def parent = llmObsSpan(Tags.LLMOBS_WORKFLOW_SPAN_KIND, "parent-workflow", null) @@ -767,7 +767,7 @@ class DDLLMObsSpanTest extends DDSpecification{ def "child does NOT inherit session_id when stale LLMObsContext is from a different trace (e.g. async boundary leak)"() { setup: // Simulates a stale LLMObsContext (e.g. leaked across an async boundary). The parent's - // LLMObsContext is attached, but its AgentScope is deliberately NOT activated — so the + // LLMObsContext is attached, but its ContextScope is deliberately NOT activated — so the // next span we create starts a fresh trace and the trace-consistency gate must skip // session_id inheritance. def parent = llmObsSpan(Tags.LLMOBS_WORKFLOW_SPAN_KIND, "stale-workflow", "stale-session-id") From 7758623f92703a7aa8c5daaf2a9d1b75d6a5f3ca Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 00:48:00 +0100 Subject: [PATCH 16/20] Fix stray AgentScope references --- .../KafkaStreamTaskInstrumentation.java | 12 ++++++------ .../kafka_streams/StreamTaskContext.java | 10 +++++----- internal-api/build.gradle.kts | 1 - 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java index c362047e9c2..0da251f1cd5 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamTaskInstrumentation.java @@ -316,7 +316,7 @@ public static void start( CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, record, node); - ContextScope agentScope = activateSpan(span); + ContextScope scope = activateSpan(span); if (null != queueSpan) { queueSpan.finish(); } @@ -324,7 +324,7 @@ public static void start( if (streamTaskContext == null) { streamTaskContext = new StreamTaskContext(); } - streamTaskContext.setAgentScope(agentScope); + streamTaskContext.setScope(scope); InstrumentationContext.get(StreamTask.class, StreamTaskContext.class) .put(task, streamTaskContext); } @@ -388,7 +388,7 @@ public static void start( CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onConsume(span, record, node); - ContextScope agentScope = activateSpan(span); + ContextScope scope = activateSpan(span); if (null != queueSpan) { queueSpan.finish(); } @@ -396,7 +396,7 @@ public static void start( if (streamTaskContext == null) { streamTaskContext = new StreamTaskContext(); } - streamTaskContext.setAgentScope(agentScope); + streamTaskContext.setScope(scope); InstrumentationContext.get(StreamTask.class, StreamTaskContext.class) .put(task, streamTaskContext); } @@ -410,14 +410,14 @@ public static void stop( StreamTaskContext streamTaskContext = InstrumentationContext.get(StreamTask.class, StreamTaskContext.class).get(task); if (streamTaskContext != null) { - ContextScope scope = streamTaskContext.getAgentScope(); + ContextScope scope = streamTaskContext.getScope(); if (scope != null) { AgentSpan span = spanFromScope(scope); CONSUMER_DECORATE.onError(span, throwable); CONSUMER_DECORATE.beforeFinish(span); scope.close(); span.finish(); - streamTaskContext.setAgentScope(null); + streamTaskContext.setScope(null); } } } diff --git a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/StreamTaskContext.java b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/StreamTaskContext.java index 1cf30286453..e1f6a8f5b3c 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/StreamTaskContext.java +++ b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/StreamTaskContext.java @@ -3,17 +3,17 @@ import datadog.context.ContextScope; public class StreamTaskContext { - private ContextScope agentScope; + private ContextScope scope; private String applicationId; public StreamTaskContext() {} - public void setAgentScope(ContextScope agentScope) { - this.agentScope = agentScope; + public void setScope(ContextScope scope) { + this.scope = scope; } - public ContextScope getAgentScope() { - return agentScope; + public ContextScope getScope() { + return scope; } public void setApplicationId(String applicationId) { diff --git a/internal-api/build.gradle.kts b/internal-api/build.gradle.kts index 05092fca982..56684064eb4 100644 --- a/internal-api/build.gradle.kts +++ b/internal-api/build.gradle.kts @@ -105,7 +105,6 @@ extra["excludedClassesCoverage"] = listOf( "datadog.trace.bootstrap.instrumentation.api.InstrumentationTags", "datadog.trace.bootstrap.instrumentation.api.InternalContextKeys", "datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes", - "datadog.trace.bootstrap.instrumentation.api.NoopAgentScope", "datadog.trace.bootstrap.instrumentation.api.NoopAgentSpan", "datadog.trace.bootstrap.instrumentation.api.NoopContinuation", "datadog.trace.bootstrap.instrumentation.api.NoopScope", From a002980bb4d9d76298ad06712044fbd7f0f0d2ed Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 08:28:21 +0100 Subject: [PATCH 17/20] Fix import ordering missed by spotlessApply --- .../trace/instrumentation/akkahttp106/SingleRequestAdvice.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java index 6054d7845c6..f35f13707a6 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/main/java11/datadog/trace/instrumentation/akkahttp106/SingleRequestAdvice.java @@ -1,9 +1,8 @@ package datadog.trace.instrumentation.akkahttp106; -import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; - import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.instrumentation.akkahttp106.AkkaHttpClientDecorator.AKKA_CLIENT_REQUEST; import static datadog.trace.instrumentation.akkahttp106.AkkaHttpClientDecorator.AKKA_HTTP_CLIENT; import static datadog.trace.instrumentation.akkahttp106.AkkaHttpClientDecorator.DECORATE; From 8a136127df042fdadbb63975032a6e832db01f72 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 09:59:23 +0100 Subject: [PATCH 18/20] Address stale comment --- .../datadog/gradle/plugin/config/ConfigInversionLinter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt index 77e89e62c93..44a92c16d46 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt @@ -89,7 +89,7 @@ private fun registerLogEnvVarUsages(target: Project, extension: SupportedTracerC val javaFiles = target.fileTree(target.projectDir) { include("**/src/main/java/**/*.java") exclude("**/build/**", "**/dd-smoke-tests/**") - // Undertow uses DD_UNDERTOW_CONTINUATION as a legacy key to store a ContextScope. It is not related to an environment variable + // Undertow uses DD_UNDERTOW_CONTINUATION as a legacy key to store a ContextContinuation. It is not related to an environment variable exclude("dd-java-agent/instrumentation/undertow/undertow-common/src/main/java/datadog/trace/instrumentation/undertow/UndertowDecorator.java") } inputs.files(javaFiles) From c1c5a4da5e291baae7a38581ea34df0e59eef283 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 18 Sep 2026 11:16:32 +0100 Subject: [PATCH 19/20] Update doc to refer to ContextContinuation --- docs/how_instrumentations_work.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/how_instrumentations_work.md b/docs/how_instrumentations_work.md index 5ae5904ee12..97e97fa062a 100644 --- a/docs/how_instrumentations_work.md +++ b/docs/how_instrumentations_work.md @@ -824,11 +824,11 @@ methods. ## Continuations -- [`TraceScope.Continuation`](https://github.com/DataDog/dd-trace-java/blob/09ac78ff0b54fbbbee0ab1c89c901d2043fda40b/dd-trace-api/src/main/java/datadog/trace/context/TraceScope.java#L47) +- [`ContextContinuation`](https://github.com/DataDog/dd-trace-java/blob/b1db32e43c88eeab3c734c1826753bbc6fae9975/components/context/src/main/java/datadog/context/ContextContinuation.java) is used to pass context between threads. -- Continuations must be either activated or canceled. -- If a Continuation is activated it returns a TraceScope which must eventually be closed. -- Only after all TraceScopes are closed and any non-activated Continuations are canceled may the Trace finally close. +- Continuations must be either resumed or released. +- If a Continuation is resumed it returns a `ContextScope` which must eventually be closed. +- Only after all scopes are closed and any non-resumed continuations are released may the Trace finally close. Notice in [`HttpClientRequestTracingHandler`](https://github.com/DataDog/dd-trace-java/blob/3fe1b2d6010e50f61518fa25af3bdeb03ae7712b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/client/HttpClientRequestTracingHandler.java#L56) From 7e1a35500a5e6468c247aa65661753b80d8c9fc4 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Mon, 21 Sep 2026 21:00:08 +0100 Subject: [PATCH 20/20] Fix merge conflicts --- .../com/datadog/aiguard/AIGuardInternalRedactionTest.java | 4 ++-- .../src/test/java/TimingReadinessForkedTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/agent-aiguard/src/test/java/com/datadog/aiguard/AIGuardInternalRedactionTest.java b/dd-java-agent/agent-aiguard/src/test/java/com/datadog/aiguard/AIGuardInternalRedactionTest.java index d4a9def36b9..4822bdf432d 100644 --- a/dd-java-agent/agent-aiguard/src/test/java/com/datadog/aiguard/AIGuardInternalRedactionTest.java +++ b/dd-java-agent/agent-aiguard/src/test/java/com/datadog/aiguard/AIGuardInternalRedactionTest.java @@ -21,6 +21,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import datadog.context.ContextScope; import datadog.trace.api.aiguard.AIGuard.AIGuardAbortError; import datadog.trace.api.aiguard.AIGuard.AIGuardClientError; import datadog.trace.api.aiguard.AIGuard.Evaluation; @@ -28,7 +29,6 @@ import datadog.trace.api.aiguard.AIGuard.Options; import datadog.trace.api.telemetry.MetricCollector; import datadog.trace.api.telemetry.WafMetricCollector; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.test.junit.utils.config.WithConfigExtension; @@ -86,7 +86,7 @@ void setUp() { lenient().when(builder.start()).thenReturn(span); final AgentTracer.TracerAPI tracer = mock(AgentTracer.TracerAPI.class); lenient().when(tracer.buildSpan(anyString(), anyString())).thenReturn(builder); - lenient().when(tracer.activateSpan(any())).thenReturn(mock(AgentScope.class)); + lenient().when(tracer.activateSpan(any())).thenReturn(mock(ContextScope.class)); AgentTracer.forceRegister(tracer); } diff --git a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/TimingReadinessForkedTest.java b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/TimingReadinessForkedTest.java index a34d09f0486..204419d287a 100644 --- a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/TimingReadinessForkedTest.java +++ b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/TimingReadinessForkedTest.java @@ -8,10 +8,10 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import datadog.context.ContextScope; import datadog.trace.agent.test.AbstractInstrumentationTest; import datadog.trace.agent.test.TestProfilingContextIntegration; import datadog.trace.agent.tooling.TracerInstaller; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.jfr.InstrumentationBasedProfiling; @@ -65,7 +65,7 @@ void skipsQueueMetadataUntilJfrIsReadyWhilePropagatingTrace() throws Exception { private static void submitTask(TestExecutor executor) throws Exception { AgentSpan span = startSpan("test", "submit"); - try (AgentScope scope = activateSpan(span)) { + try (ContextScope scope = activateSpan(span)) { ContextCheckingTask task = new ContextCheckingTask(); executor.submit(task).get(5, SECONDS); assertEquals(span.getSpanId(), task.spanId);