diff --git a/opentracing-adapter/src/main/java/io/opentracing/contrib/specialagent/LocalSpanContext.java b/opentracing-adapter/src/main/java/io/opentracing/contrib/specialagent/LocalSpanContext.java index a627afa95..e981a49ff 100644 --- a/opentracing-adapter/src/main/java/io/opentracing/contrib/specialagent/LocalSpanContext.java +++ b/opentracing-adapter/src/main/java/io/opentracing/contrib/specialagent/LocalSpanContext.java @@ -15,18 +15,20 @@ package io.opentracing.contrib.specialagent; -import io.opentracing.Scope; -import io.opentracing.Span; import java.util.HashMap; import java.util.Map; +import io.opentracing.Scope; +import io.opentracing.Span; + /** - * Thread local map holder for Span, Scope and counter to control stack of calls. - * Map is used to avoid suppressing of creation of new span when active span of another component exists. - * Key of the map is component name. + * Thread local map holder for Span, Scope and counter to control stack of + * calls. Map is used to avoid suppressing of creation of new span when active + * span of another component exists. Key of the map is component name. */ public class LocalSpanContext { - private static final ThreadLocal> instance = new ThreadLocal<>(); + private static final ThreadLocal> instance = new ThreadLocal<>(); + private final String name; private final Span span; private final Scope scope; @@ -39,15 +41,14 @@ private LocalSpanContext(final String name, final Span span, final Scope scope) } public static LocalSpanContext get(final String name) { - final Map map = instance.get(); - if (map != null) - return map.get(name); - return null; + final Map map = instance.get(); + return map == null ? null : map.get(name); } public static void set(final String name, final Span span, final Scope scope) { if (instance.get() == null) - instance.set(new HashMap()); + instance.set(new HashMap()); + instance.get().put(name, new LocalSpanContext(name, span, scope)); } @@ -70,12 +71,13 @@ public void closeAndFinish() { } public void closeScope() { - final Map map = instance.get(); + final Map map = instance.get(); if (map != null) { map.remove(name); if (map.isEmpty()) instance.remove(); } + if (scope != null) scope.close(); } diff --git a/rule/play/src/main/java/io/opentracing/contrib/specialagent/rule/play/PlayAgentIntercept.java b/rule/play/src/main/java/io/opentracing/contrib/specialagent/rule/play/PlayAgentIntercept.java index 8e1a5d150..f8dcb8835 100644 --- a/rule/play/src/main/java/io/opentracing/contrib/specialagent/rule/play/PlayAgentIntercept.java +++ b/rule/play/src/main/java/io/opentracing/contrib/specialagent/rule/play/PlayAgentIntercept.java @@ -77,12 +77,10 @@ public static void applyEnd(final Object thiz, final Object returned, final Thro ((Future)returned).onComplete(new Function1,Object>() { @Override public Object apply(final Try response) { - if (response.isFailure()) { + if (response.isFailure()) OpenTracingApiUtil.setErrorTag(span, response.failed().get()); - } - else { + else span.setTag(Tags.HTTP_STATUS, response.get().header().status()); - } span.finish(); return null;