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/01/12 16:14:38 UTC

[3/9] incubator-tinkerpop git commit: Deprecated some old handlers in Gremlin Server.

Deprecated some old handlers in Gremlin Server.

No one should be using these directly but as they are public, it felt better to just deprecate for now.


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

Branch: refs/heads/master
Commit: 0b9556d8e3e2b025103564ba2e57dc128583f18e
Parents: f81d5c4
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Dec 16 10:18:54 2015 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Dec 16 10:18:54 2015 -0500

----------------------------------------------------------------------
 .../gremlin/server/channel/NioChannelizer.java  |   2 -
 .../gremlin/server/handler/IteratorHandler.java |   2 +
 .../handler/NioGremlinResponseEncoder.java      |   4 +
 .../handler/NioGremlinResponseFrameEncoder.java |   2 +
 .../handler/WsGremlinResponseEncoder.java       | 105 +++++++++++++++++++
 5 files changed, 113 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0b9556d8/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/channel/NioChannelizer.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/channel/NioChannelizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/channel/NioChannelizer.java
index d97cf83..d2ba520 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/channel/NioChannelizer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/channel/NioChannelizer.java
@@ -23,13 +23,11 @@ import org.apache.tinkerpop.gremlin.server.AbstractChannelizer;
 import org.apache.tinkerpop.gremlin.server.auth.AllowAllAuthenticator;
 import org.apache.tinkerpop.gremlin.server.handler.GremlinResponseFrameEncoder;
 import org.apache.tinkerpop.gremlin.server.handler.NioGremlinBinaryRequestDecoder;
-import org.apache.tinkerpop.gremlin.server.handler.NioGremlinResponseEncoder;
 import io.netty.channel.ChannelPipeline;
 import io.netty.handler.logging.LogLevel;
 import io.netty.handler.logging.LoggingHandler;
 import org.apache.tinkerpop.gremlin.server.handler.NioGremlinResponseFrameEncoder;
 import org.apache.tinkerpop.gremlin.server.handler.SaslAuthenticationHandler;
-import org.apache.tinkerpop.gremlin.server.handler.WsGremlinResponseFrameEncoder;
 import org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0b9556d8/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/IteratorHandler.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/IteratorHandler.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/IteratorHandler.java
index 2fcfc1b..527aa37 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/IteratorHandler.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/IteratorHandler.java
@@ -47,7 +47,9 @@ import java.util.concurrent.TimeoutException;
  * are passed to it, they do not contain large result sets or iterates over objects that require network calls.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.1.1-incubating, not directly replaced.
  */
+@Deprecated
 @ChannelHandler.Sharable
 public class IteratorHandler extends ChannelOutboundHandlerAdapter {
     private static final Logger logger = LoggerFactory.getLogger(IteratorHandler.class);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0b9556d8/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseEncoder.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseEncoder.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseEncoder.java
index e62703f..6a98b8b 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseEncoder.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseEncoder.java
@@ -37,7 +37,11 @@ import static com.codahale.metrics.MetricRegistry.name;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.1.1-incubating, replaced by {@link NioGremlinResponseFrameEncoder} and
+ * {@link GremlinResponseFrameEncoder}
+ * @see <a href="https://issues.apache.org/jira/browse/TINKERPOP-1035">TINKERPOP-1035</a>
  */
+@Deprecated
 @ChannelHandler.Sharable
 public class NioGremlinResponseEncoder extends MessageToByteEncoder<ResponseMessage> {
     private static final Logger logger = LoggerFactory.getLogger(NioGremlinResponseEncoder.class);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0b9556d8/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseFrameEncoder.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseFrameEncoder.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseFrameEncoder.java
index 7c1c9d8..119b3ef 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseFrameEncoder.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/NioGremlinResponseFrameEncoder.java
@@ -25,6 +25,8 @@ import io.netty.handler.codec.MessageToByteEncoder;
 import io.netty.util.CharsetUtil;
 
 /**
+ * Encodes {@code ByteBuf} and {@code String} values to bytes to be written over NIO.
+ *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 @ChannelHandler.Sharable

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0b9556d8/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinResponseEncoder.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinResponseEncoder.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinResponseEncoder.java
new file mode 100644
index 0000000..80565f1
--- /dev/null
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinResponseEncoder.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.server.handler;
+
+import com.codahale.metrics.Meter;
+import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.driver.ser.MessageTextSerializer;
+import org.apache.tinkerpop.gremlin.server.GremlinServer;
+import org.apache.tinkerpop.gremlin.server.op.session.Session;
+import org.apache.tinkerpop.gremlin.server.util.MetricManager;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandler;
+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;
+
+import static com.codahale.metrics.MetricRegistry.name;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.1.1-incubating, replaced by {@link WsGremlinResponseFrameEncoder} and
+ * {@link GremlinResponseFrameEncoder}
+ * @see <a href="https://issues.apache.org/jira/browse/TINKERPOP-1035">TINKERPOP-1035</a>
+ */
+@Deprecated
+@ChannelHandler.Sharable
+public class WsGremlinResponseEncoder extends MessageToMessageEncoder<ResponseMessage> {
+    private static final Logger logger = LoggerFactory.getLogger(WsGremlinResponseEncoder.class);
+    static final Meter errorMeter = MetricManager.INSTANCE.getMeter(name(GremlinServer.class, "errors"));
+
+    @Override
+    protected void encode(final ChannelHandlerContext ctx, final ResponseMessage o, final List<Object> objects) throws Exception {
+        final MessageSerializer serializer = ctx.channel().attr(StateKey.SERIALIZER).get();
+        final boolean useBinary = ctx.channel().attr(StateKey.USE_BINARY).get();
+        final Session session = ctx.channel().attr(StateKey.SESSION).get();
+
+        try {
+            if (!o.getStatus().getCode().isSuccess())
+                errorMeter.mark();
+
+            if (useBinary) {
+                final ByteBuf serialized;
+
+                // if the request came in on a session then the serialization must occur in that same thread.
+                if (null == session)
+                    serialized = serializer.serializeResponseAsBinary(o, ctx.alloc());
+                else
+                    serialized = session.getExecutor().submit(() -> serializer.serializeResponseAsBinary(o, ctx.alloc())).get();
+
+                objects.add(new BinaryWebSocketFrame(serialized));
+            } else {
+                // the expectation is that the GremlinTextRequestDecoder will have placed a MessageTextSerializer
+                // instance on the channel.
+                final MessageTextSerializer textSerializer = (MessageTextSerializer) serializer;
+
+                final String serialized;
+
+                // if the request came in on a session then the serialization must occur in that same thread.
+                if (null == session)
+                    serialized = textSerializer.serializeResponseAsString(o);
+                else
+                    serialized = session.getExecutor().submit(() -> textSerializer.serializeResponseAsString(o)).get();
+
+                objects.add(new TextWebSocketFrame(true, 0, serialized));
+            }
+        } catch (Exception ex) {
+            errorMeter.mark();
+            logger.warn("The result [{}] in the request {} could not be serialized and returned.", o.getResult(), o.getRequestId(), ex);
+            final String errorMessage = String.format("Error during serialization: %s",
+                    ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage());
+            final ResponseMessage error = ResponseMessage.build(o.getRequestId())
+                    .statusMessage(errorMessage)
+                    .code(ResponseStatusCode.SERVER_ERROR_SERIALIZATION).create();
+            if (useBinary) {
+                objects.add(new BinaryWebSocketFrame(serializer.serializeResponseAsBinary(error, ctx.alloc())));
+            } else {
+                final MessageTextSerializer textSerializer = (MessageTextSerializer) serializer;
+                objects.add(new TextWebSocketFrame(textSerializer.serializeResponseAsString(error)));
+            }
+        }
+    }
+}
\ No newline at end of file