You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@htrace.apache.org by cm...@apache.org on 2014/12/12 08:20:50 UTC
incubator-htrace git commit: HTRACE-16. Remove guava dependency for
htrace-core (cmccabe)
Repository: incubator-htrace
Updated Branches:
refs/heads/master 10f2b8987 -> e20cb1ddb
HTRACE-16. Remove guava dependency for htrace-core (cmccabe)
Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/e20cb1dd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/e20cb1dd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/e20cb1dd
Branch: refs/heads/master
Commit: e20cb1ddb78c8adb9806ebdae4a7a1e351d69ad3
Parents: 10f2b89
Author: Colin P. Mccabe <cm...@apache.org>
Authored: Thu Dec 11 19:07:04 2014 -0800
Committer: Colin P. Mccabe <cm...@apache.org>
Committed: Thu Dec 11 23:20:24 2014 -0800
----------------------------------------------------------------------
htrace-core/pom.xml | 4 -
.../org/apache/htrace/HTraceConfiguration.java | 1 -
.../main/java/org/apache/htrace/TraceTree.java | 172 +++++++++++++------
.../test/java/org/apache/htrace/TestHTrace.java | 22 +--
htrace-hbase/pom.xml | 2 +-
.../htrace/impl/TestHBaseSpanReceiver.java | 21 ++-
6 files changed, 143 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/e20cb1dd/htrace-core/pom.xml
----------------------------------------------------------------------
diff --git a/htrace-core/pom.xml b/htrace-core/pom.xml
index 67b876e..28d772e 100644
--- a/htrace-core/pom.xml
+++ b/htrace-core/pom.xml
@@ -121,10 +121,6 @@ language governing permissions and limitations under the License. -->
<dependencies>
<!-- Global deps. -->
<dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/e20cb1dd/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java
----------------------------------------------------------------------
diff --git a/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java b/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java
index f674e0d..f4896e9 100644
--- a/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java
+++ b/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java
@@ -16,7 +16,6 @@
*/
package org.apache.htrace;
-import com.google.common.collect.ImmutableMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/e20cb1dd/htrace-core/src/main/java/org/apache/htrace/TraceTree.java
----------------------------------------------------------------------
diff --git a/htrace-core/src/main/java/org/apache/htrace/TraceTree.java b/htrace-core/src/main/java/org/apache/htrace/TraceTree.java
index 8dc6a30..a005c55 100644
--- a/htrace-core/src/main/java/org/apache/htrace/TraceTree.java
+++ b/htrace-core/src/main/java/org/apache/htrace/TraceTree.java
@@ -16,80 +16,146 @@
*/
package org.apache.htrace;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Multimap;
+import org.apache.htrace.impl.MilliSpan;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TreeSet;
/**
* Used to create the graph formed by spans.
*/
public class TraceTree {
public static final Log LOG = LogFactory.getLog(Tracer.class);
- private Multimap<Long, Span> spansByParentID;
- private Collection<Span> spans;
- private Multimap<String, Span> spansByPid;
- /**
- * Create a new TraceTree
- *
- * @param spans The collection of spans to use to create this TraceTree. Should
- * have at least one root span (span with parentId =
- * Span.ROOT_SPAN_ID
- */
- public TraceTree(Collection<Span> spans) {
- this.spans = ImmutableList.copyOf(spans);
- this.spansByParentID = HashMultimap.<Long, Span>create();
- this.spansByPid = HashMultimap.<String, Span>create();
-
- for (Span s : this.spans) {
- if (s.getProcessId() != null) {
- spansByPid.put(s.getProcessId(), s);
- } else {
- LOG.warn("Encountered span with null processId. This should not happen. Span: "
- + s);
+ public static class SpansByParent {
+ private static Comparator<Span> COMPARATOR =
+ new Comparator<Span>() {
+ @Override
+ public int compare(Span a, Span b) {
+ if (a.getParentId() < b.getParentId()) {
+ return -1;
+ } else if (a.getParentId() > b.getParentId()) {
+ return 1;
+ } else if (a.getSpanId() < b.getSpanId()) {
+ return -1;
+ } else if (a.getSpanId() > b.getSpanId()) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ };
+
+ private final TreeSet<Span> treeSet;
+
+ SpansByParent(Collection<Span> spans) {
+ TreeSet<Span> treeSet = new TreeSet<Span>(COMPARATOR);
+ for (Span span : spans) {
+ treeSet.add(span);
}
- spansByParentID.put(s.getParentId(), s);
+ this.treeSet = treeSet;
+ }
+
+ public List<Span> find(long parentId) {
+ List<Span> spans = new ArrayList<Span>();
+ Span span = new MilliSpan("", Long.MIN_VALUE,
+ parentId, Long.MIN_VALUE, "");
+ while (true) {
+ span = treeSet.higher(span);
+ if (span == null) {
+ break;
+ }
+ if (span.getParentId() != parentId) {
+ break;
+ }
+ spans.add(span);
+ }
+ return spans;
+ }
+
+ public Iterator<Span> iterator() {
+ return Collections.unmodifiableSortedSet(treeSet).iterator();
}
}
- /**
- * @return The collection of spans given to this TraceTree at construction.
- */
- public Collection<Span> getSpans() {
- return spans;
+ public static class SpansByProcessId {
+ private static Comparator<Span> COMPARATOR =
+ new Comparator<Span>() {
+ @Override
+ public int compare(Span a, Span b) {
+ int cmp = a.getProcessId().compareTo(b.getProcessId());
+ if (cmp != 0) {
+ return cmp;
+ } else if (a.getSpanId() < b.getSpanId()) {
+ return -1;
+ } else if (a.getSpanId() > b.getSpanId()) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ };
+
+ private final TreeSet<Span> treeSet;
+
+ SpansByProcessId(Collection<Span> spans) {
+ TreeSet<Span> treeSet = new TreeSet<Span>(COMPARATOR);
+ for (Span span : spans) {
+ treeSet.add(span);
+ }
+ this.treeSet = treeSet;
+ }
+
+ public List<Span> find(String processId) {
+ List<Span> spans = new ArrayList<Span>();
+ Span span = new MilliSpan("", Long.MIN_VALUE,
+ Long.MIN_VALUE, Long.MIN_VALUE, processId);
+ while (true) {
+ span = treeSet.higher(span);
+ if (span == null) {
+ break;
+ }
+ if (span.getProcessId().equals(processId)) {
+ break;
+ }
+ spans.add(span);
+ }
+ return spans;
+ }
+
+ public Iterator<Span> iterator() {
+ return Collections.unmodifiableSortedSet(treeSet).iterator();
+ }
}
+ private final SpansByParent spansByParent;
+ private final SpansByProcessId spansByProcessId;
+
/**
- * @return A copy of the MultiMap from parent span ID -> children of span with
- * that ID.
+ * Create a new TraceTree
+ *
+ * @param spans The collection of spans to use to create this TraceTree. Should
+ * have at least one root span (span with parentId =
+ * Span.ROOT_SPAN_ID
*/
- public Multimap<Long, Span> getSpansByParentIdMap() {
- return HashMultimap.<Long, Span>create(spansByParentID);
+ public TraceTree(Collection<Span> spans) {
+ this.spansByParent = new SpansByParent(spans);
+ this.spansByProcessId = new SpansByProcessId(spans);
}
- /**
- * @return A collection of the root spans (spans with parent ID =
- * Span.ROOT_SPAN_ID) in this tree.
- */
- public Collection<Span> getRoots() {
- Collection<Span> roots = spansByParentID.get(Span.ROOT_SPAN_ID);
- if (roots != null) {
- return roots;
- }
- throw new IllegalStateException(
- "TraceTree is not correctly formed - there are no root spans in the collection provided at construction.");
+ public SpansByParent getSpansByParent() {
+ return spansByParent;
}
- /**
- * @return A copy of the Multimap from String process ID -> spans with that
- * process ID. If process ID was not set in Trace.java, all spans will
- * have empty string process IDs.
- */
- public Multimap<String, Span> getSpansByPidMap() {
- return HashMultimap.<String, Span>create(spansByPid);
+ public SpansByProcessId getSpansByProcessId() {
+ return spansByProcessId;
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/e20cb1dd/htrace-core/src/test/java/org/apache/htrace/TestHTrace.java
----------------------------------------------------------------------
diff --git a/htrace-core/src/test/java/org/apache/htrace/TestHTrace.java b/htrace-core/src/test/java/org/apache/htrace/TestHTrace.java
index e3d8964..7b058d7 100644
--- a/htrace-core/src/test/java/org/apache/htrace/TestHTrace.java
+++ b/htrace-core/src/test/java/org/apache/htrace/TestHTrace.java
@@ -16,12 +16,11 @@
*/
package org.apache.htrace;
-import com.google.common.collect.Multimap;
-
import org.apache.htrace.HTraceConfiguration;
import org.apache.htrace.Span;
import org.apache.htrace.SpanReceiver;
import org.apache.htrace.TraceTree;
+import org.apache.htrace.TraceTree.SpansByParent;
import org.apache.htrace.impl.LocalFileSpanReceiver;
import org.apache.htrace.impl.POJOSpanReceiver;
import org.apache.htrace.impl.StandardOutSpanReceiver;
@@ -78,7 +77,8 @@ public class TestHTrace {
Collection<Span> spans = psr.getSpans();
TraceTree traceTree = new TraceTree(spans);
- Collection<Span> roots = traceTree.getRoots();
+ Collection<Span> roots = traceTree.getSpansByParent().find(Span.ROOT_SPAN_ID);
+ Assert.assertTrue("Trace tree must have roots", !roots.isEmpty());
Assert.assertEquals(numTraces, roots.size());
Map<String, Span> descriptionToRootSpan = new HashMap<String, Span>();
@@ -93,21 +93,21 @@ public class TestHTrace {
Assert.assertTrue(descriptionToRootSpan.keySet().contains(
TraceCreator.THREADED_TRACE_ROOT));
- Multimap<Long, Span> spansByParentId = traceTree.getSpansByParentIdMap();
+ SpansByParent spansByParentId = traceTree.getSpansByParent();
Span rpcTraceRoot = descriptionToRootSpan.get(TraceCreator.RPC_TRACE_ROOT);
- Assert.assertEquals(1, spansByParentId.get(rpcTraceRoot.getSpanId()).size());
+ Assert.assertEquals(1, spansByParentId.find(rpcTraceRoot.getSpanId()).size());
- Span rpcTraceChild1 = spansByParentId.get(rpcTraceRoot.getSpanId())
+ Span rpcTraceChild1 = spansByParentId.find(rpcTraceRoot.getSpanId())
.iterator().next();
- Assert.assertEquals(1, spansByParentId.get(rpcTraceChild1.getSpanId()).size());
+ Assert.assertEquals(1, spansByParentId.find(rpcTraceChild1.getSpanId()).size());
- Span rpcTraceChild2 = spansByParentId.get(rpcTraceChild1.getSpanId())
+ Span rpcTraceChild2 = spansByParentId.find(rpcTraceChild1.getSpanId())
.iterator().next();
- Assert.assertEquals(1, spansByParentId.get(rpcTraceChild2.getSpanId()).size());
+ Assert.assertEquals(1, spansByParentId.find(rpcTraceChild2.getSpanId()).size());
- Span rpcTraceChild3 = spansByParentId.get(rpcTraceChild2.getSpanId())
+ Span rpcTraceChild3 = spansByParentId.find(rpcTraceChild2.getSpanId())
.iterator().next();
- Assert.assertEquals(0, spansByParentId.get(rpcTraceChild3.getSpanId()).size());
+ Assert.assertEquals(0, spansByParentId.find(rpcTraceChild3.getSpanId()).size());
}
private void runTraceCreatorTraces(TraceCreator tc) {
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/e20cb1dd/htrace-hbase/pom.xml
----------------------------------------------------------------------
diff --git a/htrace-hbase/pom.xml b/htrace-hbase/pom.xml
index ccb43a6..bff6b81 100644
--- a/htrace-hbase/pom.xml
+++ b/htrace-hbase/pom.xml
@@ -30,7 +30,7 @@ language governing permissions and limitations under the License. -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <hbase.version>2.0.0-SNAPSHOT</hbase.version>
+ <hbase.version>0.99.2</hbase.version>
<!-- <hbase.version>0.99.0-SNAPSHOT</hbase.version> -->
<hadoop.version>2.4.0</hadoop.version>
<!-- <hadoop.version>3.0.0-SNAPSHOT</hadoop.version> -->
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/e20cb1dd/htrace-hbase/src/test/java/org/apache/htrace/impl/TestHBaseSpanReceiver.java
----------------------------------------------------------------------
diff --git a/htrace-hbase/src/test/java/org/apache/htrace/impl/TestHBaseSpanReceiver.java b/htrace-hbase/src/test/java/org/apache/htrace/impl/TestHBaseSpanReceiver.java
index 9fd3ca8..e6a6491 100644
--- a/htrace-hbase/src/test/java/org/apache/htrace/impl/TestHBaseSpanReceiver.java
+++ b/htrace-hbase/src/test/java/org/apache/htrace/impl/TestHBaseSpanReceiver.java
@@ -40,6 +40,7 @@ import org.apache.htrace.Span;
import org.apache.htrace.SpanReceiver;
import org.apache.htrace.TimelineAnnotation;
import org.apache.htrace.TraceCreator;
+import org.apache.htrace.TraceTree.SpansByParent;
import org.apache.htrace.TraceTree;
import org.apache.htrace.protobuf.generated.SpanProtos;
import org.junit.AfterClass;
@@ -95,7 +96,9 @@ public class TestHBaseSpanReceiver {
}
TraceTree traceTree = new TraceTree(spans);
- Collection<Span> roots = traceTree.getRoots();
+ Collection<Span> roots =
+ traceTree.getSpansByParent().find(Span.ROOT_SPAN_ID);
+ Assert.assertTrue("Trace tree must have roots", !roots.isEmpty());
Assert.assertEquals(3, roots.size());
Map<String, Span> descs = new HashMap<String, Span>();
@@ -106,15 +109,15 @@ public class TestHBaseSpanReceiver {
Assert.assertTrue(descs.keySet().contains(TraceCreator.SIMPLE_TRACE_ROOT));
Assert.assertTrue(descs.keySet().contains(TraceCreator.THREADED_TRACE_ROOT));
- Multimap<Long, Span> spansByParentId = traceTree.getSpansByParentIdMap();
+ SpansByParent spansByParentId = traceTree.getSpansByParent();
Span rpcRoot = descs.get(TraceCreator.RPC_TRACE_ROOT);
- Assert.assertEquals(1, spansByParentId.get(rpcRoot.getSpanId()).size());
- Span rpcChild1 = spansByParentId.get(rpcRoot.getSpanId()).iterator().next();
- Assert.assertEquals(1, spansByParentId.get(rpcChild1.getSpanId()).size());
- Span rpcChild2 = spansByParentId.get(rpcChild1.getSpanId()).iterator().next();
- Assert.assertEquals(1, spansByParentId.get(rpcChild2.getSpanId()).size());
- Span rpcChild3 = spansByParentId.get(rpcChild2.getSpanId()).iterator().next();
- Assert.assertEquals(0, spansByParentId.get(rpcChild3.getSpanId()).size());
+ Assert.assertEquals(1, spansByParentId.find(rpcRoot.getSpanId()).size());
+ Span rpcChild1 = spansByParentId.find(rpcRoot.getSpanId()).iterator().next();
+ Assert.assertEquals(1, spansByParentId.find(rpcChild1.getSpanId()).size());
+ Span rpcChild2 = spansByParentId.find(rpcChild1.getSpanId()).iterator().next();
+ Assert.assertEquals(1, spansByParentId.find(rpcChild2.getSpanId()).size());
+ Span rpcChild3 = spansByParentId.find(rpcChild2.getSpanId()).iterator().next();
+ Assert.assertEquals(0, spansByParentId.find(rpcChild3.getSpanId()).size());
Scan iscan = new Scan();
iscan.addColumn(Bytes.toBytes(HBaseSpanReceiver.DEFAULT_INDEXFAMILY),