diff --git a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java index bc01ee69aa..797b80e6e5 100644 --- a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java +++ b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java @@ -107,12 +107,17 @@ public class HttpUrlConnectionInstrumentation extends Instrumenter.Default { return null; } + final Tracer tracer = GlobalTracer.get(); + if (tracer.activeSpan() == null) { + // httpurlconnection doesn't play nicely with top-level spans + return null; + } + final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(HttpURLConnection.class); if (callDepth > 0) { return null; } - final Tracer tracer = GlobalTracer.get(); final Scope scope = tracer .buildSpan("http.request") diff --git a/dd-java-agent/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy b/dd-java-agent/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy index 8876b4fca7..76589df27e 100644 --- a/dd-java-agent/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy +++ b/dd-java-agent/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy @@ -332,6 +332,20 @@ class HttpUrlConnectionTest extends AgentTestRunner { } } + def "top level httpurlconnection tracing disabled"() { + setup: + HttpURLConnection connection = server.address.toURL().openConnection() + connection.addRequestProperty("is-dd-server", "false") + def stream = connection.inputStream + def lines = stream.readLines() + stream.close() + assert connection.getResponseCode() == STATUS + assert lines == [RESPONSE] + + expect: + assertTraces(TEST_WRITER, 0) {} + } + def "rest template"() { setup: runUnderTrace("someTrace") {