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 d703ba033f..2e473474b8 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 @@ -13,6 +13,7 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; +import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.Tracer; import io.opentracing.propagation.Format; @@ -178,9 +179,11 @@ public class HttpUrlConnectionInstrumentation extends Instrumenter.Default { public Span startSpan(final HttpURLConnection connection) { final Tracer.SpanBuilder builder = GlobalTracer.get().buildSpan(OPERATION_NAME); span = builder.start(); - DECORATE.afterStart(span); - DECORATE.onRequest(span, connection); - return span; + try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) { + DECORATE.afterStart(span); + DECORATE.onRequest(span, connection); + return span; + } } public boolean hasSpan() { @@ -196,11 +199,12 @@ public class HttpUrlConnectionInstrumentation extends Instrumenter.Default { } public void finishSpan(final Throwable throwable) { - DECORATE.onError(span, throwable); - DECORATE.beforeFinish(span); - span.finish(); - span = null; - finished = true; + try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, true)) { + DECORATE.onError(span, throwable); + DECORATE.beforeFinish(span); + span = null; + finished = true; + } } public void finishSpan(final int responseCode) { @@ -210,11 +214,12 @@ public class HttpUrlConnectionInstrumentation extends Instrumenter.Default { * (e.g. breaks getOutputStream). */ if (responseCode > 0) { - DECORATE.onResponse(span, responseCode); - DECORATE.beforeFinish(span); - span.finish(); - span = null; - finished = true; + try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, true)) { + DECORATE.onResponse(span, responseCode); + DECORATE.beforeFinish(span); + span = null; + finished = true; + } } } } diff --git a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/UrlInstrumentation.java b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/UrlInstrumentation.java index 12b7b34e1f..0179540e27 100644 --- a/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/UrlInstrumentation.java +++ b/dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/UrlInstrumentation.java @@ -12,6 +12,7 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.Config; import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDTags; +import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.tag.Tags; import io.opentracing.util.GlobalTracer; @@ -65,17 +66,17 @@ public class UrlInstrumentation extends Instrumenter.Default { .withTag(DDTags.SPAN_TYPE, DDSpanTypes.HTTP_CLIENT) .withTag(Tags.COMPONENT.getKey(), COMPONENT) .start(); + try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, true)) { + Tags.HTTP_URL.set(span, url.toString()); + Tags.PEER_PORT.set(span, url.getPort() == -1 ? 80 : url.getPort()); + Tags.PEER_HOSTNAME.set(span, url.getHost()); + if (Config.get().isHttpClientSplitByDomain()) { + span.setTag(DDTags.SERVICE_NAME, url.getHost()); + } - Tags.HTTP_URL.set(span, url.toString()); - Tags.PEER_PORT.set(span, url.getPort() == -1 ? 80 : url.getPort()); - Tags.PEER_HOSTNAME.set(span, url.getHost()); - if (Config.get().isHttpClientSplitByDomain()) { - span.setTag(DDTags.SERVICE_NAME, url.getHost()); + Tags.ERROR.set(span, true); + span.log(Collections.singletonMap(ERROR_OBJECT, throwable)); } - - Tags.ERROR.set(span, true); - span.log(Collections.singletonMap(ERROR_OBJECT, throwable)); - span.finish(); } } }