From f78c290b40ee815cdd4c91940542f59db2d1505d Mon Sep 17 00:00:00 2001 From: Jon Mort Date: Thu, 8 Feb 2018 17:43:34 +0000 Subject: [PATCH] Closes #222: Introduce a ScopeManager property --- .../java/datadog/opentracing/DDTracer.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java index 4c5292e2ee..f52f0fb522 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java @@ -34,7 +34,7 @@ import lombok.extern.slf4j.Slf4j; /** DDTracer makes it easy to send traces and span to DD using the OpenTracing API. */ @Slf4j -public class DDTracer extends ThreadLocalScopeManager implements io.opentracing.Tracer { +public class DDTracer implements io.opentracing.Tracer { public static final String UNASSIGNED_DEFAULT_SERVICE_NAME = "unnamed-java-app"; @@ -44,6 +44,10 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing. final Writer writer; /** Sampler defines the sampling policy in order to reduce the number of traces for instance */ final Sampler sampler; + /** + * Scope manager is in charge of managing the scopes from which spans are created + */ + final ScopeManager scopeManager; /** A set of tags that are added to every span */ private final Map spanTags; @@ -68,7 +72,8 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing. config.getProperty(DDTraceConfig.SERVICE_NAME), Writer.Builder.forConfig(config), Sampler.Builder.forConfig(config), - DDTraceConfig.parseMap(config.getProperty(DDTraceConfig.SPAN_TAGS))); + new ThreadLocalScopeManager(), + DDTraceConfig.parseMap(config.getProperty(DDTraceConfig.SPAN_TAGS))); log.debug("Using config: {}", config); // Create decorators from resource files @@ -80,18 +85,20 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing. } public DDTracer(final String serviceName, final Writer writer, final Sampler sampler) { - this(serviceName, writer, sampler, Collections.emptyMap()); + this(serviceName, writer, sampler, new ThreadLocalScopeManager(), Collections.emptyMap()); } public DDTracer( final String serviceName, final Writer writer, final Sampler sampler, + final ScopeManager scopeManager, final Map spanTags) { this.serviceName = serviceName; this.writer = writer; this.writer.start(); this.sampler = sampler; + this.scopeManager = scopeManager; this.spanTags = spanTags; registry = new CodecRegistry(); @@ -109,7 +116,8 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing. UNASSIGNED_DEFAULT_SERVICE_NAME, writer, new AllSampler(), - DDTraceConfig.parseMap(new DDTraceConfig().getProperty(DDTraceConfig.SPAN_TAGS))); + new ThreadLocalScopeManager(), + DDTraceConfig.parseMap(new DDTraceConfig().getProperty(DDTraceConfig.SPAN_TAGS))); } /** @@ -139,18 +147,18 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing. @Override public ScopeManager scopeManager() { - return this; + return scopeManager; } @Override public Span activeSpan() { - final Scope active = active(); + final Scope active = scopeManager.active(); return active == null ? null : active.span(); } @Override public DDSpanBuilder buildSpan(final String operationName) { - return new DDSpanBuilder(operationName, this); + return new DDSpanBuilder(operationName, scopeManager); } @Override @@ -412,7 +420,7 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing. SpanContext parentContext = this.parent; if (parentContext == null && !ignoreScope) { // use the Scope as parent unless overridden or ignored. - final Scope scope = active(); + final Scope scope = scopeManager.active(); if (scope != null) parentContext = scope.span().context(); }