HTRACE-359. TraceRunnable and TraceCallable should be built using parent spanId not scope (Mike Drob via cmccabe)
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 @@
public class TraceCallable<V> implements Callable<V> {
private final Tracer tracer;
private final Callable<V> impl;
- private final TraceScope parent;
+ private final SpanId parentId;
private final String description;
- TraceCallable(Tracer tracer, TraceScope parent, Callable<V> impl,
+ public TraceCallable(Tracer tracer, SpanId parentId, Callable<V> impl,
String description) {
this.tracer = tracer;
this.impl = impl;
- this.parent = parent;
+ this.parentId = parentId;
this.description = description;
}
@@ -41,7 +41,7 @@
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 @@
*/
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 @@
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 a04c9b9..f78e0a0 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
@@ -446,7 +446,7 @@
if (parentScope == null) {
return callable;
}
- return new TraceCallable<V>(this, parentScope, callable, description);
+ return new TraceCallable<V>(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 bf98a1a..dbdd27c 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
@@ -66,6 +66,28 @@
}
}
+ @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<SpanId> callable = new TraceCallable<SpanId>(tracer, random, new Callable<SpanId>() {
+ @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
*/