This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch TINKERPOP-2250 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 41f26b4336af9b4cc5850b63cd0718e2afbda766 Author: Stephen Mallette <[email protected]> AuthorDate: Mon Jun 24 10:53:04 2019 -0400 TINKERPOP-2250 Setup GraphBinary toString serializer Configure default and test Gremlin Server configs to include the new serializer. --- .../gremlin-server-integration-secure.yaml | 1 + .../gremlin-server/gremlin-server-integration.yaml | 1 + gremlin-console/conf/remote-objects.yaml | 9 ++--- gremlin-console/conf/remote-secure.yaml | 2 +- gremlin-console/conf/remote.yaml | 4 ++- .../console/jsr223/DriverGremlinPlugin.java | 2 ++ .../console/jsr223/gremlin-server-integration.yaml | 2 +- .../tinkerpop/gremlin/console/jsr223/remote.yaml | 2 +- .../handler/WebSocketGremlinRequestEncoder.java | 3 -- .../driver/ser/GraphBinaryMessageSerializerV1.java | 39 +++++++++++++++++++--- .../binary/GraphBinaryMessageSerializerV1Test.java | 17 ++++++++++ gremlin-server/conf/gremlin-server-classic.yaml | 1 + gremlin-server/conf/gremlin-server-modern-py.yaml | 9 ++--- .../conf/gremlin-server-modern-readonly.yaml | 9 ++--- gremlin-server/conf/gremlin-server-modern.yaml | 9 ++--- gremlin-server/conf/gremlin-server-neo4j.yaml | 1 + gremlin-server/conf/gremlin-server-secure.yaml | 1 + gremlin-server/conf/gremlin-server-spark.yaml | 1 + gremlin-server/conf/gremlin-server.yaml | 9 ++--- .../gremlin/server/AbstractChannelizer.java | 5 ++- .../server/GremlinServerAuthKrb5IntegrateTest.java | 26 ++++++++------- .../gremlin/server/gremlin-server-integration.yaml | 1 + 22 files changed, 110 insertions(+), 44 deletions(-) diff --git a/docker/gremlin-server/gremlin-server-integration-secure.yaml b/docker/gremlin-server/gremlin-server-integration-secure.yaml index ff30233..2274852 100644 --- a/docker/gremlin-server/gremlin-server-integration-secure.yaml +++ b/docker/gremlin-server/gremlin-server-integration-secure.yaml @@ -44,6 +44,7 @@ serializers: - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} - { className: org.apache.tinkerpop.gremlin.server.op.standard.StandardOpProcessor, config: {}} diff --git a/docker/gremlin-server/gremlin-server-integration.yaml b/docker/gremlin-server/gremlin-server-integration.yaml index 51a9290..4ccaf32 100644 --- a/docker/gremlin-server/gremlin-server-integration.yaml +++ b/docker/gremlin-server/gremlin-server-integration.yaml @@ -44,6 +44,7 @@ serializers: - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} - { className: org.apache.tinkerpop.gremlin.server.op.standard.StandardOpProcessor, config: {}} diff --git a/gremlin-console/conf/remote-objects.yaml b/gremlin-console/conf/remote-objects.yaml index ba9bd69..70eb0fb 100644 --- a/gremlin-console/conf/remote-objects.yaml +++ b/gremlin-console/conf/remote-objects.yaml @@ -17,7 +17,7 @@ ############################################################## # This configuration is meant to have Gremlin Server return -# Gryo serialized objects. The TinkerGraph IoRegistry is +# GraphBinary serialized objects. The TinkerGraph IoRegistry is # assigned as this is the configuration defined in the # pre-packaged Gremlin Server configuration files. The # client configuration for serializers should match server. @@ -26,11 +26,12 @@ # - gremlin-server.yaml # - gremlin-server-classic.yaml # - gremlin-server-modern.yaml +# - gremlin-server-modern-py.yaml # - gremlin-server-modern-readonly.yaml -# - gremlin-server-secure.yaml +# - gremlin-server-neo4j.yaml +# - gremlin-server-spark.yaml ############################################################## hosts: [localhost] port: 8182 -serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, - config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} \ No newline at end of file +serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } \ No newline at end of file diff --git a/gremlin-console/conf/remote-secure.yaml b/gremlin-console/conf/remote-secure.yaml index 97b756b..a29d99a 100644 --- a/gremlin-console/conf/remote-secure.yaml +++ b/gremlin-console/conf/remote-secure.yaml @@ -31,4 +31,4 @@ password: password connectionPool: { enableSsl: true, sslEnabledProtocols: [TLSv1.2] } -serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} \ No newline at end of file +serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} \ No newline at end of file diff --git a/gremlin-console/conf/remote.yaml b/gremlin-console/conf/remote.yaml index 76da387..1a43250 100644 --- a/gremlin-console/conf/remote.yaml +++ b/gremlin-console/conf/remote.yaml @@ -24,9 +24,11 @@ # - gremlin-server.yaml # - gremlin-server-classic.yaml # - gremlin-server-modern.yaml +# - gremlin-server-modern-py.yaml # - gremlin-server-modern-readonly.yaml +# - gremlin-server-spark.yaml ############################################################## hosts: [localhost] port: 8182 -serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} \ No newline at end of file +serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} diff --git a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java index d6e67a6..80a78ab 100644 --- a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java +++ b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java @@ -36,6 +36,7 @@ import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode; import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection; import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal; import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversalSideEffects; +import org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1; import org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0; import org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0; import org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0; @@ -85,6 +86,7 @@ public class DriverGremlinPlugin extends AbstractGremlinPlugin { GryoLiteMessageSerializerV1d0.class, GryoMessageSerializerV1d0.class, GryoMessageSerializerV3d0.class, + GraphBinaryMessageSerializerV1.class, JsonBuilderGryoSerializer.class, MessageTextSerializer.class, SerializationException.class, diff --git a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/gremlin-server-integration.yaml b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/gremlin-server-integration.yaml index 23b7bae..3b1d570 100644 --- a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/gremlin-server-integration.yaml +++ b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/gremlin-server-integration.yaml @@ -25,7 +25,7 @@ scriptEngines: { org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {}, org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]}}}} serializers: - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }} # application/vnd.gremlin-v1.0+json - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json,application/vnd.gremlin-v3.0+json - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }} # application/vnd.gremlin-v2.0+json diff --git a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/remote.yaml b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/remote.yaml index 9bb27c7..68e482f 100644 --- a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/remote.yaml +++ b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/remote.yaml @@ -17,4 +17,4 @@ hosts: [localhost] port: 45940 -serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} \ No newline at end of file +serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} \ No newline at end of file diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java index 626b1ee..9ffbc60 100644 --- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java +++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java @@ -29,8 +29,6 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageEncoder; import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.List; @@ -39,7 +37,6 @@ import java.util.List; */ @ChannelHandler.Sharable public final class WebSocketGremlinRequestEncoder extends MessageToMessageEncoder<RequestMessage> { - private static final Logger logger = LoggerFactory.getLogger(WebSocketGremlinRequestEncoder.class); private final boolean binaryEncoding; private final MessageSerializer serializer; diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java index c368562..b555bff 100644 --- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java +++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java @@ -35,17 +35,24 @@ import org.javatuples.Pair; import java.lang.reflect.Constructor; import java.lang.reflect.Method; +import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static java.nio.charset.StandardCharsets.UTF_8; public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer { + public static final String TOKEN_CUSTOM = "custom"; public static final String TOKEN_BUILDER = "builder"; + public static final String TOKEN_SERIALIZE_RESULT_TO_STRING = "serializeResultToString"; + private static final String MIME_TYPE = SerTokens.MIME_GRAPHBINARY_V1D0; - private static final byte[] HEADER = MIME_TYPE.getBytes(UTF_8); + private static final String MIME_TYPE_STRINGD = SerTokens.MIME_GRAPHBINARY_V1D0 + "-stringd"; + private byte[] header = MIME_TYPE.getBytes(UTF_8); + private boolean serializeToString = false; private GraphBinaryReader reader; private GraphBinaryWriter writer; private RequestMessageSerializer requestSerializer; @@ -109,6 +116,9 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer { addCustomClasses(config, builder); + this.serializeToString = Boolean.parseBoolean(config.getOrDefault(TOKEN_SERIALIZE_RESULT_TO_STRING, "false").toString()); + this.header = this.serializeToString ? MIME_TYPE_STRINGD.getBytes(UTF_8) : MIME_TYPE.getBytes(UTF_8); + final TypeSerializerRegistry registry = builder.create(); reader = new GraphBinaryReader(registry); writer = new GraphBinaryWriter(registry); @@ -122,7 +132,15 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer { final ByteBuf buffer = allocator.buffer(); try { - responseSerializer.writeValue(responseMessage, buffer, writer); + final ResponseMessage msgToWrite = !serializeToString ? responseMessage : + ResponseMessage.build(responseMessage.getRequestId()) + .code(responseMessage.getStatus().getCode()) + .statusAttributes(responseMessage.getStatus().getAttributes()) + .responseMetaData(responseMessage.getResult().getMeta()) + .result(serializeResultToString(responseMessage)) + .statusMessage(responseMessage.getStatus().getMessage()).create(); + + responseSerializer.writeValue(msgToWrite, buffer, writer); } catch (Exception ex) { buffer.release(); throw ex; @@ -133,7 +151,7 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer { @Override public ByteBuf serializeRequestAsBinary(final RequestMessage requestMessage, final ByteBufAllocator allocator) throws SerializationException { - final ByteBuf buffer = allocator.buffer().writeByte(HEADER.length).writeBytes(HEADER); + final ByteBuf buffer = allocator.buffer().writeByte(header.length).writeBytes(header); try { requestSerializer.writeValue(requestMessage, buffer, writer); @@ -157,7 +175,7 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer { @Override public String[] mimeTypesSupported() { - return new String[] { MIME_TYPE }; + return new String[]{serializeToString ? MIME_TYPE_STRINGD : MIME_TYPE}; } private void addCustomClasses(final Map<String, Object> config, final TypeSerializerRegistry.Builder builder) { @@ -187,4 +205,17 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer { } }); } + + private Object serializeResultToString(final ResponseMessage msg) { + if (msg.getResult() == null) return "null"; + if (msg.getResult().getData() == null) return "null"; + + // the IteratorHandler should return a collection so keep it as such + final Object o = msg.getResult().getData(); + if (o instanceof Collection) { + return ((Collection) o).stream().map(d -> null == d ? "null" : d.toString()).collect(Collectors.toList()); + } else { + return o.toString(); + } + } } diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java index 7321d1e..8a8d27f 100644 --- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java +++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java @@ -28,6 +28,7 @@ import org.apache.tinkerpop.gremlin.driver.ser.SerializationException; import org.junit.Test; import org.mockito.internal.matchers.apachecommons.ReflectionEquals; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -157,6 +158,22 @@ public class GraphBinaryMessageSerializerV1Test { serializer.configure(config, null); } + @Test + public void shouldToStringSerialize() throws SerializationException { + final GraphBinaryMessageSerializerV1 serializer = new GraphBinaryMessageSerializerV1(); + final Map<String,Object> conf = new HashMap<String,Object>() {{ + put(GraphBinaryMessageSerializerV1.TOKEN_SERIALIZE_RESULT_TO_STRING, true); + }}; + serializer.configure(conf, Collections.emptyMap()); + + final ResponseMessage messageWithUnexpectedType = ResponseMessage.build(UUID.randomUUID()). + result(java.awt.Color.RED).create(); + final ByteBuf buffer = serializer.serializeResponseAsBinary(messageWithUnexpectedType, allocator); + final ResponseMessage deserialized = serializer.deserializeResponse(buffer); + + assertEquals(java.awt.Color.RED.toString(), deserialized.getResult().getData()); + } + private static void assertResponseEquals(ResponseMessage expected, ResponseMessage actual) { assertEquals(expected.getRequestId(), actual.getRequestId()); // Status diff --git a/gremlin-server/conf/gremlin-server-classic.yaml b/gremlin-server/conf/gremlin-server-classic.yaml index 8d53f1d..674c0f8 100644 --- a/gremlin-server/conf/gremlin-server-classic.yaml +++ b/gremlin-server/conf/gremlin-server-classic.yaml @@ -31,6 +31,7 @@ serializers: - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.graphbinary-v1.0-stringd metrics: { slf4jReporter: {enabled: true, interval: 180000}} strictTransactionManagement: false diff --git a/gremlin-server/conf/gremlin-server-modern-py.yaml b/gremlin-server/conf/gremlin-server-modern-py.yaml index 2c369a6..94752c5 100644 --- a/gremlin-server/conf/gremlin-server-modern-py.yaml +++ b/gremlin-server/conf/gremlin-server-modern-py.yaml @@ -42,10 +42,11 @@ scriptEngines: { gremlin-python: {} } serializers: - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/vnd.gremlin-v3.0+gryo - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json - - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/vnd.gremlin-v3.0+gryo + - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.graphbinary-v1.0-stringd metrics: { slf4jReporter: {enabled: true, interval: 180000}} strictTransactionManagement: false diff --git a/gremlin-server/conf/gremlin-server-modern-readonly.yaml b/gremlin-server/conf/gremlin-server-modern-readonly.yaml index 8fed279..9eec42f 100644 --- a/gremlin-server/conf/gremlin-server-modern-readonly.yaml +++ b/gremlin-server/conf/gremlin-server-modern-readonly.yaml @@ -27,10 +27,11 @@ scriptEngines: { org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]}, org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/generate-modern-readonly.groovy]}}}} serializers: - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/vnd.gremlin-v3.0+gryo - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json - - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/vnd.gremlin-v3.0+gryo + - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.graphbinary-v1.0-stringd metrics: { slf4jReporter: {enabled: true, interval: 180000}} strictTransactionManagement: false diff --git a/gremlin-server/conf/gremlin-server-modern.yaml b/gremlin-server/conf/gremlin-server-modern.yaml index 2e19e47..3a7ef42 100644 --- a/gremlin-server/conf/gremlin-server-modern.yaml +++ b/gremlin-server/conf/gremlin-server-modern.yaml @@ -28,10 +28,11 @@ scriptEngines: { org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]}, org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/generate-modern.groovy]}}}} serializers: - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/vnd.gremlin-v3.0+gryo - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json - - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/vnd.gremlin-v3.0+gryo + - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.graphbinary-v1.0-stringd metrics: { slf4jReporter: {enabled: true, interval: 180000}} strictTransactionManagement: false diff --git a/gremlin-server/conf/gremlin-server-neo4j.yaml b/gremlin-server/conf/gremlin-server-neo4j.yaml index 2fe5445..9e172e2 100644 --- a/gremlin-server/conf/gremlin-server-neo4j.yaml +++ b/gremlin-server/conf/gremlin-server-neo4j.yaml @@ -42,6 +42,7 @@ serializers: - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.graphbinary-v1.0-stringd processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} - { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }} diff --git a/gremlin-server/conf/gremlin-server-secure.yaml b/gremlin-server/conf/gremlin-server-secure.yaml index 8d6db69..f9ecf7f 100644 --- a/gremlin-server/conf/gremlin-server-secure.yaml +++ b/gremlin-server/conf/gremlin-server-secure.yaml @@ -41,6 +41,7 @@ serializers: - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.graphbinary-v1.0-stringd processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} - { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }} diff --git a/gremlin-server/conf/gremlin-server-spark.yaml b/gremlin-server/conf/gremlin-server-spark.yaml index ab7f1e1..e353957 100644 --- a/gremlin-server/conf/gremlin-server-spark.yaml +++ b/gremlin-server/conf/gremlin-server-spark.yaml @@ -55,6 +55,7 @@ serializers: - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.graphbinary-v1.0-stringd processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} - { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }} diff --git a/gremlin-server/conf/gremlin-server.yaml b/gremlin-server/conf/gremlin-server.yaml index b98622c..3d92907 100644 --- a/gremlin-server/conf/gremlin-server.yaml +++ b/gremlin-server/conf/gremlin-server.yaml @@ -28,10 +28,11 @@ scriptEngines: { org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]}, org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/empty-sample.groovy]}}}} serializers: - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/vnd.gremlin-v3.0+gryo - - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd - - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json - - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/vnd.gremlin-v3.0+gryo + - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v3.0+gryo-stringd + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }} # application/json + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } # application/vnd.graphbinary-v1.0 + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} # application/vnd.graphbinary-v1.0-stringd processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} - { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }} diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java index bf4df88..c969297 100644 --- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java +++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java @@ -84,7 +84,10 @@ public abstract class AbstractChannelizer extends ChannelInitializer<SocketChann put(AbstractGryoMessageSerializerV1d0.TOKEN_SERIALIZE_RESULT_TO_STRING, true); }}), new Settings.SerializerSettings(GraphSONMessageSerializerV2d0.class.getName(), Collections.emptyMap()), - new Settings.SerializerSettings(GraphBinaryMessageSerializerV1.class.getName(), Collections.emptyMap()) + new Settings.SerializerSettings(GraphBinaryMessageSerializerV1.class.getName(), Collections.emptyMap()), + new Settings.SerializerSettings(GraphBinaryMessageSerializerV1.class.getName(), new HashMap<String,Object>(){{ + put(AbstractGryoMessageSerializerV1d0.TOKEN_SERIALIZE_RESULT_TO_STRING, true); + }}) ); protected Settings settings; diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java index 7d99671..029a408 100644 --- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java +++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java @@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.driver.Cluster; import org.apache.tinkerpop.gremlin.driver.MessageSerializer; import org.apache.tinkerpop.gremlin.driver.exception.ResponseException; import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode; +import org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1; import org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0; import org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0; import org.apache.tinkerpop.gremlin.server.auth.Krb5Authenticator; @@ -197,21 +198,22 @@ public class GremlinServerAuthKrb5IntegrateTest extends AbstractGremlinServerInt } @Test - public void shouldAuthenticateWithSerializeResultToStringV1() throws Exception { - final MessageSerializer serializer = new GryoMessageSerializerV1d0(); - final Map<String,Object> config = new HashMap<>(); - config.put("serializeResultToString", true); - serializer.configure(config, null); - final Cluster cluster = TestClientFactory.build().jaasEntry(TESTCONSOLE) - .protocol(kdcServer.serverPrincipalName).addContactPoint(kdcServer.hostname).serializer(serializer).create(); - final Client client = cluster.connect(); - assertConnection(cluster, client); + public void shouldAuthenticateWithSerializeResultToStringGryoV1() throws Exception { + assertAuthViaToStringWithSpecifiedSerializer(new GryoMessageSerializerV1d0()); } @Test - public void shouldAuthenticateWithSerializeResultToStringV3() throws Exception { - final MessageSerializer serializer = new GryoMessageSerializerV3d0(); - final Map<String, Object> config = new HashMap<>(); + public void shouldAuthenticateWithSerializeResultToStringGryoV3() throws Exception { + assertAuthViaToStringWithSpecifiedSerializer(new GryoMessageSerializerV3d0()); + } + + @Test + public void shouldAuthenticateWithSerializeResultToStringGraphBinaryV1() throws Exception { + assertAuthViaToStringWithSpecifiedSerializer(new GraphBinaryMessageSerializerV1()); + } + + public void assertAuthViaToStringWithSpecifiedSerializer(final MessageSerializer serializer) throws InterruptedException, ExecutionException { + final Map<String,Object> config = new HashMap<>(); config.put("serializeResultToString", true); serializer.configure(config, null); final Cluster cluster = TestClientFactory.build().jaasEntry(TESTCONSOLE) diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml index 4b40095..5bcd81f 100644 --- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml +++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml @@ -54,6 +54,7 @@ serializers: - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 } + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} - { className: org.apache.tinkerpop.gremlin.server.op.standard.StandardOpProcessor, config: {}}
