Make sure span is opened and closed with scope in http_url_connection

This commit is contained in:
Nikolay Martynov 2019-04-03 16:49:06 -04:00
parent fb18b559ef
commit bfb48f31c1
2 changed files with 28 additions and 22 deletions

View File

@ -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;
}
}
}
}

View File

@ -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();
}
}
}