From 0f486eea66688d58fa235a1c8f04c7afcc18c6a1 Mon Sep 17 00:00:00 2001 From: Mike Drob Date: Tue, 19 Apr 2016 10:44:54 -0500 Subject: [PATCH] HTRACE-359. TraceRunnable and TraceCallable should store parent SpanId not scope --- .../java/org/apache/htrace/core/TraceCallable.java | 8 ++++---- .../java/org/apache/htrace/core/TraceRunnable.java | 15 ++++++++++++--- .../main/java/org/apache/htrace/core/Tracer.java | 2 +- .../org/apache/htrace/core/TestTraceExecutor.java | 22 ++++++++++++++++++++++ 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java b/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java index 9cf478d..2318552 100644 --- a/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java +++ b/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java @@ -24,14 +24,14 @@ import java.util.concurrent.Callable; public class TraceCallable implements Callable { private final Tracer tracer; private final Callable impl; - private final TraceScope parent; + private final SpanId parentId; private final String description; - TraceCallable(Tracer tracer, TraceScope parent, Callable impl, + public TraceCallable(Tracer tracer, SpanId parentId, Callable impl, String description) { this.tracer = tracer; this.impl = impl; - this.parent = parent; + this.parentId = parentId; this.description = description; } @@ -41,7 +41,7 @@ public class TraceCallable implements Callable { if (description == null) { description = Thread.currentThread().getName(); } - try (TraceScope chunk = tracer.newScope(description, parent.getSpan().getSpanId())) { + try (TraceScope chunk = tracer.newScope(description, parentId)) { return impl.call(); } } diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java b/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java index f2db5c2..ad5b36a 100644 --- a/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java +++ b/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java @@ -21,14 +21,23 @@ package org.apache.htrace.core; */ public class TraceRunnable implements Runnable { private final Tracer tracer; - private final TraceScope parent; + private final SpanId parentId; private final Runnable runnable; private final String description; + /** + * @deprecated Use {@link #TraceRunnable(Tracer, SpanId, Runnable, String)} instead. + */ + @Deprecated public TraceRunnable(Tracer tracer, TraceScope parent, Runnable runnable, String description) { + this(tracer, parent.getSpanId(), runnable, description); + } + + public TraceRunnable(Tracer tracer, SpanId parentId, + Runnable runnable, String description) { this.tracer = tracer; - this.parent = parent; + this.parentId = parentId; this.runnable = runnable; this.description = description; } @@ -39,7 +48,7 @@ public class TraceRunnable implements Runnable { if (description == null) { description = Thread.currentThread().getName(); } - try (TraceScope chunk = tracer.newScope(description, parent.getSpan().getSpanId())) { + try (TraceScope chunk = tracer.newScope(description, parentId)) { runnable.run(); } } diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java b/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java index 83a8a3e..4b712fb 100644 --- a/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java +++ b/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java @@ -447,7 +447,7 @@ public class Tracer implements Closeable { if (parentScope == null) { return callable; } - return new TraceCallable(this, parentScope, callable, description); + return new TraceCallable(this, parentScope.getSpanId(), callable, description); } /** diff --git a/htrace-core4/src/test/java/org/apache/htrace/core/TestTraceExecutor.java b/htrace-core4/src/test/java/org/apache/htrace/core/TestTraceExecutor.java index 426d9fe..a43b732 100644 --- a/htrace-core4/src/test/java/org/apache/htrace/core/TestTraceExecutor.java +++ b/htrace-core4/src/test/java/org/apache/htrace/core/TestTraceExecutor.java @@ -123,6 +123,28 @@ public class TestTraceExecutor { } } + @Test + public void testWrappingFromSpan() throws Exception { + HTraceConfiguration conf = HTraceConfiguration.fromKeyValuePairs("sampler.classes", "AlwaysSampler"); + + ExecutorService es = Executors.newSingleThreadExecutor(); + try (Tracer tracer = new Tracer.Builder("TestTraceExecutor").conf(conf).build()) { + SpanId random = SpanId.fromRandom(); + try (TraceScope parentScope = tracer.newScope("parent")) { + Callable callable = new TraceCallable(tracer, random, new Callable() { + @Override + public SpanId call() throws Exception { + return Tracer.getCurrentSpan().getParents()[0]; + } + }, "child"); + SpanId result = es.submit(callable).get(WAIT_TIME_SECONDS, TimeUnit.SECONDS); + assertEquals(random, result); + } + } finally { + es.shutdown(); + } + } + /* * Inspired by org.apache.solr.util.DefaultSolrThreadFactory */ -- 1.9.1