Make sure span is opened and closed with scope in http_url_connection
This commit is contained in:
parent
fb18b559ef
commit
bfb48f31c1
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue