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/04/16 21:55:45 UTC

incubator-tinkerpop git commit: Reduce the size of RequestMessage serialization a bit in Gryo.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master f366285c2 -> 0aea49591


Reduce the size of RequestMessage serialization a bit in Gryo.


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

Branch: refs/heads/master
Commit: 0aea49591d08b7214f3ecce3ef0aef87b2af6dc2
Parents: f366285
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 16 15:54:48 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 16 15:54:48 2015 -0400

----------------------------------------------------------------------
 .../driver/ser/GryoMessageSerializerV1d0.java   | 27 +++++++++++---------
 .../ser/GryoMessageSerializerV1D0Test.java      | 21 +++++++++++++++
 2 files changed, 36 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0aea4959/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0.java
index 40e23bd..71cca0f 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0.java
@@ -242,11 +242,17 @@ public class GryoMessageSerializerV1d0 implements MessageSerializer {
             final byte[] payload = new byte[msg.readableBytes()];
             msg.readBytes(payload);
             try (final Input input = new Input(payload)) {
-                final Map<String, Object> requestData = (Map<String, Object>) kryo.readClassAndObject(input);
-                final RequestMessage.Builder builder = RequestMessage.build((String) requestData.get(SerTokens.TOKEN_OP))
-                        .overrideRequestId((UUID) requestData.get(SerTokens.TOKEN_REQUEST))
-                        .processor((String) requestData.get(SerTokens.TOKEN_PROCESSOR));
-                final Map<String, Object> args = (Map<String, Object>) requestData.get(SerTokens.TOKEN_ARGS);
+                // by the time the message gets here, the mime length/type have been already read, so this part just
+                // needs to process the payload.
+                final UUID id = kryo.readObject(input, UUID.class);
+                final String processor = input.readString();
+                final String op = input.readString();
+
+                final RequestMessage.Builder builder = RequestMessage.build(op)
+                        .overrideRequestId(id)
+                        .processor(processor);
+
+                final Map<String, Object> args = kryo.readObject(input, HashMap.class);
                 args.forEach(builder::addArg);
                 return builder.create();
             }
@@ -267,13 +273,10 @@ public class GryoMessageSerializerV1d0 implements MessageSerializer {
                 output.writeByte(mimeType.length());
                 output.write(mimeType.getBytes(UTF8));
 
-                final Map<String, Object> request = new HashMap<>();
-                request.put(SerTokens.TOKEN_REQUEST, requestMessage.getRequestId());
-                request.put(SerTokens.TOKEN_PROCESSOR, requestMessage.getProcessor());
-                request.put(SerTokens.TOKEN_OP, requestMessage.getOp());
-                request.put(SerTokens.TOKEN_ARGS, requestMessage.getArgs());
-
-                kryo.writeClassAndObject(output, request);
+                kryo.writeObject(output, requestMessage.getRequestId());
+                output.writeString(requestMessage.getProcessor());
+                output.writeString(requestMessage.getOp());
+                kryo.writeObject(output, requestMessage.getArgs());
 
                 final long size = output.total();
                 if (size > Integer.MAX_VALUE)

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0aea4959/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1D0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1D0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1D0Test.java
index 978c8a2..20bc308 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1D0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1D0Test.java
@@ -19,6 +19,7 @@
 package org.apache.tinkerpop.gremlin.driver.ser;
 
 import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
+import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
@@ -279,6 +280,26 @@ public class GryoMessageSerializerV1D0Test {
         assertEquals("worked", deserialized.getStatus().getMessage());
     }
 
+    @Test
+    public void serializeFullRequestMessage() throws Exception {
+        final UUID id = UUID.randomUUID();
+
+        final RequestMessage request = RequestMessage.build("try")
+                .overrideRequestId(id)
+                .processor("pro")
+                .addArg("test", "this")
+                .create();
+        final ByteBuf bb = binarySerializer.serializeRequestAsBinary(request, allocator);
+        final int mimeLen = bb.readByte();
+        bb.readBytes(new byte[mimeLen]);
+        final RequestMessage deserialized = binarySerializer.deserializeRequest(bb);
+
+        assertEquals(id, deserialized.getRequestId());
+        assertEquals("pro", deserialized.getProcessor());
+        assertEquals("try", deserialized.getOp());
+        assertEquals("this", deserialized.getArgs().get("test"));
+    }
+
     private void assertCommon(final ResponseMessage response) {
         assertEquals(requestId, response.getRequestId());
         assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());