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),