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 2016/08/15 19:42:27 UTC

tinkerpop git commit: Enabled bytecode to be represented as graphson string or Bytecode object in RequestMessage.

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 95e08c24d -> f0d0302ee


Enabled bytecode to be represented as graphson string or Bytecode object in RequestMessage.

Ultimately, perhaps this should just be a GraphSON string as that will universally work across all languages. The problem with doing that right now is that without embedTypes(true) graphson won't work so well given that it is type lossy. I think we should just save that change for GraphSON 2.0.


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

Branch: refs/heads/TINKERPOP-1278
Commit: f0d0302ee0066f6ea2b9774b3c08887c905a4556
Parents: 95e08c2
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 15 15:39:24 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 15 15:39:24 2016 -0400

----------------------------------------------------------------------
 .../DefaultRemoteTraverserSerializers.java          | 16 +++++++++++++++-
 .../structure/io/graphson/GraphSONSerializers.java  |  1 +
 .../structure/io/graphson/GraphSONMapperTest.java   |  6 +++++-
 .../server/op/traversal/TraversalOpProcessor.java   |  9 ++++++++-
 4 files changed, 29 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0d0302e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
index c5fd33e..2ff6cc6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
@@ -19,12 +19,15 @@
 package org.apache.tinkerpop.gremlin.process.remote.traversal;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.InputShim;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.KryoShim;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.OutputShim;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim;
 import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
 import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
 
 import java.io.IOException;
@@ -62,11 +65,22 @@ public final class DefaultRemoteTraverserSerializers {
         @Override
         public void serialize(final Traverser traverserInstance, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
+            ser(traverserInstance, jsonGenerator, serializerProvider, null);
+        }
+
+        @Override
+        public void serializeWithType(final Traverser traverserInstance, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            ser(traverserInstance, jsonGenerator, serializerProvider, typeSerializer);
+        }
+
+        private static void ser(final Traverser traverserInstance, final JsonGenerator jsonGenerator,
+                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
             jsonGenerator.writeStartObject();
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, Traverser.class.getName());
             jsonGenerator.writeObjectField("bulk", traverserInstance.bulk());
             jsonGenerator.writeObjectField("value", traverserInstance.get());
             jsonGenerator.writeEndObject();
         }
-
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0d0302e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
index aaca316..974952c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
@@ -95,6 +95,7 @@ final class GraphSONSerializers {
                 throws IOException {
             ser(property, jsonGenerator, serializerProvider, null);
         }
+
         @Override
         public void serializeWithType(final Property property, final JsonGenerator jsonGenerator,
                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0d0302e/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
index 02c4b56..c872aab 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
@@ -36,6 +36,8 @@ import java.time.Year;
 import java.time.YearMonth;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
+import java.util.HashMap;
+import java.util.Map;
 
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.__;
 import static org.junit.Assert.assertEquals;
@@ -145,6 +147,8 @@ public class GraphSONMapperTest {
     public void shouldHandleDefaultRemoteTraverser() throws Exception {
         final DefaultRemoteTraverser<String> traverser = new DefaultRemoteTraverser<>("test", 100);
         final String json = mapper.writeValueAsString(traverser);
-        // TODO: ASSERTION~~
+        final Map<String,Object> m = mapper.readValue(json, HashMap.class);
+        assertEquals("test", m.get("value"));
+        assertEquals(100, m.get("bulk"));
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0d0302e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index a8facbf..b041a32 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -46,6 +46,7 @@ import org.apache.tinkerpop.gremlin.server.util.TraversalIterator;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.apache.tinkerpop.gremlin.util.function.ThrowingConsumer;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,6 +69,7 @@ import static com.codahale.metrics.MetricRegistry.name;
  */
 public class TraversalOpProcessor extends AbstractOpProcessor {
     private static final Logger logger = LoggerFactory.getLogger(TraversalOpProcessor.class);
+    private static final ObjectMapper mapper = GraphSONMapper.build().create().createMapper();
     public static final String OP_PROCESSOR_NAME = "traversal";
     public static final Timer traversalOpTimer = MetricManager.INSTANCE.getTimer(name(GremlinServer.class, "op", "traversal"));
 
@@ -312,7 +314,12 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
         final RequestMessage msg = context.getRequestMessage();
         logger.debug("Traversal request {} for in thread {}", msg.getRequestId(), Thread.currentThread().getName());
 
-        final Bytecode bytecode = GraphSONMapper.build().create().createMapper().readValue(msg.getArgs().get(Tokens.ARGS_GREMLIN).toString(), Bytecode.class);
+        // TODO: Look to polish this up in GraphSON 2.0 when we don't have type lossiness anymore
+        // right now the TraversalOpPorcessor can take a direct GraphSON representation of Bytecode or directly take
+        // deserialized Bytecode object.
+        final Object bytecodeObj = msg.getArgs().get(Tokens.ARGS_GREMLIN);
+        final Bytecode bytecode = bytecodeObj instanceof Bytecode ? (Bytecode) bytecodeObj :
+            mapper.readValue(bytecodeObj.toString(), Bytecode.class);
 
         // earlier validation in selection of this op method should free us to cast this without worry
         final Map<String, String> aliases = (Map<String, String>) msg.optionalArgs(Tokens.ARGS_ALIASES).get();