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/31 21:09:59 UTC

incubator-htrace git commit: HTRACE-40. MilliSpanDeserializer throws NumberFormatException when Span has negative Long value (Long Zhou via Colin P. McCabe)

Repository: incubator-htrace
Updated Branches:
  refs/heads/master d7207a5ae -> d5a6cf7ea


HTRACE-40. MilliSpanDeserializer throws NumberFormatException when Span has negative Long value (Long Zhou via Colin P. McCabe)


Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/d5a6cf7e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/d5a6cf7e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/d5a6cf7e

Branch: refs/heads/master
Commit: d5a6cf7eaccbfde714dc74f8c1ba2dd79056c8ac
Parents: d7207a5
Author: Colin P. Mccabe <cm...@apache.org>
Authored: Wed Dec 31 12:09:37 2014 -0800
Committer: Colin P. Mccabe <cm...@apache.org>
Committed: Wed Dec 31 12:09:37 2014 -0800

----------------------------------------------------------------------
 .../java/org/apache/htrace/impl/MilliSpan.java  | 11 ++++--
 .../org/apache/htrace/impl/TestMilliSpan.java   | 35 ++++++++++++++++++++
 2 files changed, 43 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/d5a6cf7e/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
----------------------------------------------------------------------
diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java b/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
index 77e289e..7f3e81a 100644
--- a/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
+++ b/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
@@ -30,6 +30,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.io.IOException;
 import java.io.StringWriter;
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -282,6 +283,10 @@ public class MilliSpan implements Span {
     return writer.toString();
   }
 
+  private static long parseUnsignedLong(String s) {
+    return new BigInteger(s, 16).longValue();
+  }
+
   public static class MilliSpanDeserializer
         extends JsonDeserializer<MilliSpan> {
     @Override
@@ -292,15 +297,15 @@ public class MilliSpan implements Span {
       builder.begin(root.get("b").asLong()).
               end(root.get("e").asLong()).
               description(root.get("d").asText()).
-              traceId(Long.parseLong(root.get("i").asText(), 16)).
-              spanId(Long.parseLong(root.get("s").asText(), 16)).
+              traceId(parseUnsignedLong(root.get("i").asText())).
+              spanId(parseUnsignedLong(root.get("s").asText())).
               processId(root.get("r").asText());
       JsonNode parentsNode = root.get("p");
       LinkedList<Long> parents = new LinkedList<Long>();
       for (Iterator<JsonNode> iter = parentsNode.elements();
            iter.hasNext(); ) {
         JsonNode parentIdNode = iter.next();
-        parents.add(Long.parseLong(parentIdNode.asText(), 16));
+        parents.add(parseUnsignedLong(parentIdNode.asText()));
       }
       builder.parents(parents);
       JsonNode traceInfoNode = root.get("n");

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/d5a6cf7e/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
----------------------------------------------------------------------
diff --git a/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java b/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
index 908e74e..677ec61 100644
--- a/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
+++ b/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
@@ -24,11 +24,13 @@ import org.apache.htrace.Span;
 import org.apache.htrace.TimelineAnnotation;
 import org.junit.Test;
 
+import java.security.SecureRandom;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Random;
 
 public class TestMilliSpan {
   private void compareSpans(Span expected, Span got) throws Exception {
@@ -93,6 +95,39 @@ public class TestMilliSpan {
   }
 
   @Test
+  public void testJsonSerializationWithNegativeLongValue() throws Exception {
+    MilliSpan span = new MilliSpan.Builder().
+        description("foospan").
+        begin(-1L).
+        end(-1L).
+        parents(new long[] { -1L }).
+        processId("b2404.halxg.com:8080").
+        spanId(-1L).
+        traceId(-1L).build();
+    String json = span.toJson();
+    ObjectMapper mapper = new ObjectMapper();
+    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    compareSpans(span, dspan);
+  }
+
+  @Test
+  public void testJsonSerializationWithRandomLongValue() throws Exception {
+    Random random = new SecureRandom();
+    MilliSpan span = new MilliSpan.Builder().
+        description("foospan").
+        begin(random.nextLong()).
+        end(random.nextLong()).
+        parents(new long[] { random.nextLong() }).
+        processId("b2404.halxg.com:8080").
+        spanId(random.nextLong()).
+        traceId(random.nextLong()).build();
+    String json = span.toJson();
+    ObjectMapper mapper = new ObjectMapper();
+    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    compareSpans(span, dspan);
+  }
+
+  @Test
   public void testJsonSerializationWithOptionalFields() throws Exception {
     MilliSpan.Builder builder = new MilliSpan.Builder().
         description("foospan").