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 2001d4f0af3..fea272bde9d 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 @@ -2,7 +2,6 @@ import static datadog.trace.api.ConfigDefaults.DEFAULT_ASYNC_PROPAGATING; import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import static datadog.trace.core.scopemanager.ContinuableScope.CONTEXT; import static datadog.trace.core.scopemanager.ContinuableScope.INSTRUMENTATION; @@ -25,6 +24,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentTraceCollector; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.NoopContinuation; +import datadog.trace.bootstrap.instrumentation.api.NoopScope; import datadog.trace.bootstrap.instrumentation.api.ProfilerContext; import datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration; import datadog.trace.core.monitor.HealthMetrics; @@ -52,6 +52,7 @@ public final class ContinuableScopeManager { static final RatelimitedLogger ratelimitedLog = new RatelimitedLogger(log, 1, MINUTES); private static final NoopContinuation ROOT_CONTINUATION = NoopContinuation.INSTANCE; + private static final NoopScope INVALID_SCOPE = NoopScope.INSTANCE; static final long iterationKeepAlive = SECONDS.toMillis(Config.get().getScopeIterationKeepAlive()); @@ -150,7 +151,7 @@ private AgentScope activate( if (depthLimit <= currentDepth) { healthMetrics.onScopeStackOverflow(); log.debug("Scope depth limit exceeded ({}). Returning NoopScope.", currentDepth); - return noopScope(); + return INVALID_SCOPE; } } @@ -187,7 +188,7 @@ private AgentScope activate(final Context context) { if (depthLimit <= currentDepth) { healthMetrics.onScopeStackOverflow(); log.debug("Scope depth limit exceeded ({}). Returning NoopScope.", currentDepth); - return noopScope(); + return INVALID_SCOPE; } } @@ -280,7 +281,7 @@ public AgentScope activateNext(final AgentSpan span) { if (hasDepthLimit && depthLimit <= currentDepth) { healthMetrics.onScopeStackOverflow(); log.debug("Scope depth limit exceeded ({}). Returning NoopScope.", currentDepth); - return noopScope(); + return INVALID_SCOPE; } assert span != null; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ScopeContinuation.java b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ScopeContinuation.java index be30cdd2150..820f28add07 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ScopeContinuation.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/scopemanager/ScopeContinuation.java @@ -1,11 +1,10 @@ package datadog.trace.core.scopemanager; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope; - import datadog.context.Context; import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentTraceCollector; +import datadog.trace.bootstrap.instrumentation.api.NoopScope; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; /** @@ -83,7 +82,7 @@ public ContextScope resume() { } else { // continuation cancelled or too many activations; rollback count COUNT.decrementAndGet(this); - return noopScope(); + return NoopScope.INSTANCE; } } 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 25406c47c80..fbf129c6ab8 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 @@ -1,15 +1,13 @@ package datadog.trace.core.scopemanager; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopSpan; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotSame; -import static org.junit.jupiter.api.Assertions.assertSame; 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; import datadog.trace.core.CoreTracer; import datadog.trace.core.DDCoreJavaSpecification; @@ -43,13 +41,13 @@ void scopeManagerReturnsNoopScopeIfDepthExceeded() { scope = tracer.activateSpan(span); // a noop instance is returned - assertSame(noopScope(), scope); + assertInstanceOf(NoopScope.class, scope); // activate a noop scope over the limit scope = scopeManager.activateManualSpan(noopSpan()); // still have a noop instance - assertSame(noopScope(), scope); + assertInstanceOf(NoopScope.class, scope); // scope stack not effected assertEquals(depth, scopeManager.scopeStack().depth()); @@ -83,14 +81,14 @@ void scopeManagerIgnoresDepthLimitWhenZero() { scope = tracer.activateSpan(span); // a real scope is returned - assertNotSame(noopScope(), scope); + assertInstanceOf(ContinuableScope.class, scope); assertEquals(defaultLimit + 1, scopeManager.scopeStack().depth()); // activate a noop span scope = scopeManager.activateManualSpan(noopSpan()); // a real instance is still returned - assertNotSame(noopScope(), scope); + assertInstanceOf(ContinuableScope.class, scope); // scope stack not effected assertEquals(defaultLimit + 2, scopeManager.scopeStack().depth()); 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 e10ee9e3fe7..d3a25d8ecfe 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 @@ -224,18 +224,6 @@ public static AgentSpanContext noopSpanContext() { return NoopSpanContext.INSTANCE; } - /** - * Returns the noop scope instance. - * - *
This instance will always be the same, and can be safely tested using object identity (ie - * {@code ==}). - * - * @return the noop scope instance. - */ - public static AgentScope noopScope() { - return NoopScope.INSTANCE; - } - public static final TracerAPI NOOP_TRACER = new NoopTracerAPI(); private static volatile TracerAPI provider = NOOP_TRACER; 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 b1c26cabc5f..10840e1d9fd 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 @@ -2,8 +2,8 @@ import datadog.trace.context.TraceScope; -final class NoopScope implements AgentScope { - static final NoopScope INSTANCE = new NoopScope(); +public final class NoopScope implements AgentScope { + public static final NoopScope INSTANCE = new NoopScope(); private NoopScope() {}