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());