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").