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 2019/07/25 11:13:33 UTC

[tinkerpop] 01/02: Merge branch 'pr-1148' into TINKERPOP-2246

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch TINKERPOP-2246
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 5e19a8888d56c9f81e7cdda5662667e5ec3a831a
Merge: dc3e984 746fb68
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Thu Jul 25 07:12:38 2019 -0400

    Merge branch 'pr-1148' into TINKERPOP-2246

 CHANGELOG.asciidoc                                 |  2 +
 .../apache/tinkerpop/gremlin/server/Context.java   | 47 ++++++++++-
 .../tinkerpop/gremlin/server/OpProcessor.java      |  4 +-
 .../gremlin/server/ResponseHandlerContext.java     | 90 ----------------------
 .../gremlin/server/handler/OpExecutorHandler.java  |  5 +-
 .../gremlin/server/handler/OpSelectorHandler.java  |  2 +-
 .../server/handler/SaslAuthenticationHandler.java  |  1 +
 .../gremlin/server/op/AbstractEvalOpProcessor.java | 80 +++++++------------
 .../gremlin/server/op/AbstractOpProcessor.java     | 77 ++++++++++--------
 .../server/op/session/SessionOpProcessor.java      |  9 ++-
 .../server/op/standard/StandardOpProcessor.java    |  3 +-
 .../server/op/traversal/TraversalOpProcessor.java  | 81 ++++++++++---------
 ...nseHandlerContextTest.java => ContextTest.java} | 33 ++++----
 .../server/op/AbstractEvalOpProcessorTest.java     | 15 ++--
 .../gremlin/server/op/AbstractOpProcessorTest.java | 26 +------
 15 files changed, 202 insertions(+), 273 deletions(-)

diff --cc CHANGELOG.asciidoc
index da43e36,aa1303f..7bede60
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -42,7 -40,7 +42,9 @@@ image::https://raw.githubusercontent.co
  * Fixed bug where client/server exception mismatch when server throw StackOverflowError
  * Prevent exception when closing a session that doesn't exist
  * Allow predicates and traversals to be used as options in `BranchStep`.
 -* Ensure only a single final response is sent to the client. 
++* Ensure only a single final response is sent to the client with Gremlin Server.
++* Deprecated `ResponseHandlerContext` and folded its functionality into `Context` in Gremlin Server.
 +* Improved performance of `aggregate()` by avoiding excessive calls to `hasNext()` when the barrier is empty.
  
  [[release-3-3-7]]
  === TinkerPop 3.3.7 (Release Date: May 28, 2019)
diff --cc gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
index 39b68c1,f05f7a3..1a26284
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
@@@ -191,10 -193,10 +193,10 @@@ public abstract class AbstractEvalOpPro
       * A generalized implementation of the "eval" operation.  It handles script evaluation and iteration of results
       * so as to write {@link ResponseMessage} objects down the Netty pipeline.  It also handles script timeouts,
       * iteration timeouts, metrics and building bindings.  Note that result iteration is delegated to the
--     * {@link #handleIterator} method, so those extending this class could override that method for better control
--     * over result iteration.
-      *
-      * @param context The current Gremlin Server {@link Context}
++     * {@link #handleIterator(Context, Iterator)} method, so those extending this class could override that method for
++     * better control over result iteration.
+      *  @param ctx The current Gremlin Server {@link Context}. This handler ensures that only a single final
+      *            response is sent to the client.
       * @param gremlinExecutorSupplier A function that returns the {@link GremlinExecutor} to use in executing the
       *                                script evaluation.
       * @param bindingsSupplier A function that returns the {@link Bindings} to provide to the
diff --cc gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
index 0077f3d,e024fda..11540d8
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
@@@ -65,6 -64,6 +65,16 @@@ public abstract class AbstractOpProcess
      }
  
      /**
++     * A variant of {@link #handleIterator(Context, Iterator)} that is suitable for use in situations when multiple
++     * threads may produce {@link ResponseStatusCode#isFinalResponse() final} response messages concurrently.
++     * @deprecated As of release 3.3.8, not replaced.
++     */
++    @Deprecated
++    protected void handleIterator(final ResponseHandlerContext rhc, final Iterator itty) throws TimeoutException, InterruptedException {
++        handleIterator(rhc.getContext(), itty);
++    }
++
++    /**
       * Provides a generic way of iterating a result set back to the client. Implementers should respect the
       * {@link Settings#serializedResponseTimeout} configuration and break the serialization process if
       * it begins to take too long to do so, throwing a {@link java.util.concurrent.TimeoutException} in such
@@@ -261,33 -250,12 +261,44 @@@
          return Collections.emptyMap();
      }
  
 +    /**
-      * @deprecated As of release 3.2.2, replaced by {@link #makeFrame(ChannelHandlerContext, RequestMessage, MessageSerializer, boolean, List, ResponseStatusCode, Map)}.
++     * @deprecated As of release 3.2.2, replaced by {@link #makeFrame(Context, RequestMessage, MessageSerializer, boolean, List, ResponseStatusCode, Map)}.
 +     */
 +    @Deprecated
 +    protected static Frame makeFrame(final ChannelHandlerContext ctx, final RequestMessage msg,
 +                                     final MessageSerializer serializer, final boolean useBinary, final List<Object> aggregate,
 +                                     final ResponseStatusCode code) throws Exception {
 +        return makeFrame(ctx, msg, serializer, useBinary, aggregate, code, Collections.emptyMap());
 +    }
 +
 +    /**
-      * Caution: {@link #makeFrame(ResponseHandlerContext, RequestMessage, MessageSerializer, boolean, List, ResponseStatusCode, Map)}
-      * should be used instead of this method whenever a {@link ResponseHandlerContext} is available.
++     * @deprecated As of release 3.3.8, replaced by {@link #makeFrame(Context, RequestMessage, MessageSerializer, boolean, List, ResponseStatusCode, Map)}.
 +     */
++    @Deprecated
 +    protected static Frame makeFrame(final ChannelHandlerContext ctx, final RequestMessage msg,
-                                    final MessageSerializer serializer, final boolean useBinary, final List<Object> aggregate,
-                                    final ResponseStatusCode code, final Map<String,Object> responseMetaData) throws Exception {
++                                     final MessageSerializer serializer, final boolean useBinary, final List<Object> aggregate,
++                                     final ResponseStatusCode code, final Map<String,Object> responseMetaData) throws Exception {
 +        final Context context = new Context(msg, ctx, null, null, null, null); // dummy context, good only for writing response messages to the channel
 +        final ResponseHandlerContext rhc = new ResponseHandlerContext(context);
 +        return makeFrame(rhc, msg, serializer, useBinary, aggregate, code, responseMetaData);
 +    }
 +
++    /**
++     * @deprecated As of release 3.3.8, replaced by {@link #makeFrame(Context, RequestMessage, MessageSerializer, boolean, List, ResponseStatusCode, Map)}.
++     */
++    @Deprecated
 +    protected static Frame makeFrame(final ResponseHandlerContext rhc, final RequestMessage msg,
-                                    final MessageSerializer serializer, final boolean useBinary, final List<Object> aggregate,
-                                    final ResponseStatusCode code, final Map<String,Object> responseMetaData) throws Exception {
-         final ChannelHandlerContext ctx = rhc.getContext().getChannelHandlerContext();
++                                     final MessageSerializer serializer, final boolean useBinary, final List<Object> aggregate,
++                                     final ResponseStatusCode code, final Map<String,Object> responseMetaData) throws Exception {
++        return makeFrame(rhc.getContext(), msg, serializer, useBinary,aggregate, code, responseMetaData);
++    }
++
+     protected static Frame makeFrame(final Context ctx, final RequestMessage msg,
+                                      final MessageSerializer serializer, final boolean useBinary, final List<Object> aggregate,
+                                      final ResponseStatusCode code, final Map<String,Object> responseMetaData) throws Exception {
          try {
+             final ChannelHandlerContext nettyContext = ctx.getChannelHandlerContext();
+ 
              if (useBinary) {
                  return new Frame(serializer.serializeResponseAsBinary(ResponseMessage.build(msg)
                          .code(code)