You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/11/11 17:44:45 UTC

incubator-tinkerpop git commit: TINKERPOP3-955 Registered HashMap$Node to GryoMapper.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP3-955 [created] 8b70c5cf8


TINKERPOP3-955 Registered HashMap$Node to GryoMapper.

Note that this class had to be registered via reflection as it is a private class of HashMap. Added tests to validate that the change works with the code specified in the issue.


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

Branch: refs/heads/TINKERPOP3-955
Commit: 8b70c5cf81ac0fbd5246489c91ef864ae2247495
Parents: 49e2b35
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Nov 11 11:42:44 2015 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Nov 11 11:42:44 2015 -0500

----------------------------------------------------------------------
 .../gremlin/structure/io/gryo/GryoMapper.java   | 19 ++++++++++++-
 .../server/GremlinResultSetIntegrateTest.java   | 29 ++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8b70c5cf/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
index 5a0b516..1fec5c8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
@@ -174,6 +174,22 @@ public final class GryoMapper implements Mapper<Kryo> {
         private static final Class LINKED_HASH_MAP_ENTRY_CLASS = m.entrySet().iterator().next().getClass();
 
         /**
+         * The {@code HashMap$Node} class comes into serialization play when a {@code Map.entrySet()} is
+         * serialized.
+         */
+        private static final Class HASH_MAP_NODE;
+
+        static {
+            // have to instantiate this via reflection because it is a private inner class of HashMap
+            final String className = HashMap.class.getName() + "$Node";
+            try {
+                HASH_MAP_NODE = Class.forName(className);
+            } catch (Exception ex) {
+                throw new RuntimeException("Could not access " + className, ex);
+            }
+        }
+
+        /**
          * Note that the following are pre-registered boolean, Boolean, byte, Byte, char, Character, double, Double,
          * int, Integer, float, Float, long, Long, short, Short, String, void.
          */
@@ -212,6 +228,7 @@ public final class GryoMapper implements Mapper<Kryo> {
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(EnumSet.class, null, 46));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(HashMap.class, null, 11));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(HashMap.Entry.class, null, 16));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(HASH_MAP_NODE, null, 92));   // ***LAST ID**
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(KryoSerializable.class, null, 36));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(LinkedHashMap.class, null, 47));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(LinkedHashSet.class, null, 71));
@@ -248,7 +265,7 @@ public final class GryoMapper implements Mapper<Kryo> {
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_LP_O_S_SE_SL_Traverser.class, null, 87));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(O_OB_S_SE_SL_Traverser.class, null, 89));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(LP_O_OB_S_SE_SL_Traverser.class, null, 90));
-            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(LP_O_OB_P_S_SE_SL_TraverserGenerator.class, null, 91)); // ***LAST ID**
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(LP_O_OB_P_S_SE_SL_TraverserGenerator.class, null, 91));
 
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TraverserSet.class, null, 58));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Tree.class, null, 61));

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8b70c5cf/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
index 7315e71..1128d5a 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.server;
 
 import org.apache.tinkerpop.gremlin.driver.Client;
 import org.apache.tinkerpop.gremlin.driver.Cluster;
+import org.apache.tinkerpop.gremlin.driver.Result;
 import org.apache.tinkerpop.gremlin.driver.ResultSet;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -36,7 +37,12 @@ import org.junit.Before;
 import org.junit.Test;
 
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
+import static org.hamcrest.CoreMatchers.anyOf;
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.assertEquals;
@@ -119,4 +125,27 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
         final Path p = results.all().get().get(0).getPath();
         assertThat(p, instanceOf(DetachedPath.class));
     }
+
+    @Test
+    public void shouldHandleMapIteratedResult() throws Exception {
+        final ResultSet results = client.submit("g.V().groupCount().by(bothE().count())");
+        final List<Result> resultList = results.all().get();
+        final Map m = resultList.get(0).get(HashMap.class);
+        assertEquals(2, m.size());
+        assertEquals(3l, m.get(1l));
+        assertEquals(3l, m.get(3l));
+    }
+
+    @Test
+    public void shouldHandleMapObjectResult() throws Exception {
+        final ResultSet results = client.submit("g.V().groupCount().by(bothE().count()).next()");
+        final List<Result> resultList = results.all().get();
+        assertEquals(2, resultList.size());
+        final Map.Entry firstEntry = resultList.get(0).get(HashMap.Entry.class);
+        final Map.Entry secondEntry = resultList.get(1).get(HashMap.Entry.class);
+        assertThat(firstEntry.getKey(), anyOf(is(3l), is(1l)));
+        assertThat(firstEntry.getValue(), is(3l));
+        assertThat(secondEntry.getKey(), anyOf(is(3l), is(1l)));
+        assertThat(secondEntry.getValue(), is(3l));
+    }
 }