You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2018/08/09 17:27:47 UTC
[27/41] tinkerpop git commit: Merge branch 'tp33'
Merge branch 'tp33'
Conflicts:
gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9357d6a1
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9357d6a1
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9357d6a1
Branch: refs/heads/TINKERPOP-1990
Commit: 9357d6a1fd91cac4bd7149b94ed757399aa810a4
Parents: 1e8baec fa7a7f6
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Aug 7 12:54:18 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Aug 7 12:54:18 2018 -0400
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../driver/message/ResponseStatusCode.java | 7 +
.../driver/message/ResponseStatusCodeTest.java | 36 +++++
.../gremlin/server/ResponseHandlerContext.java | 85 +++++++++++
.../server/op/AbstractEvalOpProcessor.java | 38 ++++-
.../gremlin/server/op/AbstractOpProcessor.java | 34 ++++-
.../AbstractGremlinServerIntegrationTest.java | 20 ++-
.../server/GremlinServerIntegrateTest.java | 51 +++++++
.../server/ResponseHandlerContextTest.java | 143 +++++++++++++++++++
.../server/op/AbstractEvalOpProcessorTest.java | 62 ++++++++
.../server/op/AbstractOpProcessorTest.java | 53 +++++++
11 files changed, 515 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9357d6a1/CHANGELOG.asciidoc
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9357d6a1/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
----------------------------------------------------------------------
diff --cc gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
index bb368c5,38ca3e1..331b762
--- 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
@@@ -66,8 -72,20 +67,20 @@@ public abstract class AbstractOpProcess
*
* @param context The Gremlin Server {@link Context} object containing settings, request message, etc.
* @param itty The result to iterator
+ * @throws TimeoutException if the time taken to serialize the entire result set exceeds the allowable time.
+ * @see #handleIterator(ResponseHandlerContext, Iterator)
*/
- protected void handleIterator(final Context context, final Iterator itty) throws TimeoutException, InterruptedException {
+ protected void handleIterator(final Context context, final Iterator itty) throws InterruptedException {
+ handleIterator(new ResponseHandlerContext(context), itty);
+ }
+
+ /**
+ * 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.
+ * @see #handleIterator(Context, Iterator)
+ */
- protected void handleIterator(final ResponseHandlerContext rhc, final Iterator itty) throws TimeoutException, InterruptedException {
++ protected void handleIterator(final ResponseHandlerContext rhc, final Iterator itty) throws InterruptedException {
+ final Context context = rhc.getContext();
final ChannelHandlerContext ctx = context.getChannelHandlerContext();
final RequestMessage msg = context.getRequestMessage();
final Settings settings = context.getSettings();
@@@ -228,9 -261,32 +241,22 @@@
return Collections.emptyMap();
}
+ /**
- * @deprecated As of release 3.2.2, replaced by {@link #makeFrame(ChannelHandlerContext, 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.
+ */
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);
+ }
+
+ 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 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();
try {
if (useBinary) {
return new Frame(serializer.serializeResponseAsBinary(ResponseMessage.build(msg)
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9357d6a1/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
----------------------------------------------------------------------
diff --cc gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
index 08b8526,67ad021..f97fb1f
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
@@@ -69,7 -71,9 +70,8 @@@ import org.junit.Test
import java.lang.reflect.Field;
import java.nio.channels.ClosedChannelException;
-import java.util.ArrayList;
import java.util.HashMap;
+ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9357d6a1/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessorTest.java
----------------------------------------------------------------------
diff --cc gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessorTest.java
index 0000000,a7cee1a..aba1603
mode 000000,100644..100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessorTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessorTest.java
@@@ -1,0 -1,73 +1,53 @@@
+ /*
+ * 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.op;
+
+ import io.netty.channel.ChannelHandlerContext;
+ 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.junit.Test;
+ import org.mockito.ArgumentCaptor;
+ import org.mockito.Mockito;
+
+ import static org.junit.Assert.assertEquals;
+ import static org.junit.Assert.fail;
+
+ public class AbstractOpProcessorTest {
+
+ @Test
- public void deprecatedMakeFrameMethodShouldRedirectCorrectly() throws Exception {
- final ChannelHandlerContext ctx = Mockito.mock(ChannelHandlerContext.class);
- final RequestMessage request = RequestMessage.build("test").create();
- final ArgumentCaptor<ResponseMessage> responseCaptor = ArgumentCaptor.forClass(ResponseMessage.class);
-
- try {
- // Induce a NullPointerException to validate error response message writing
- //noinspection deprecation
- AbstractOpProcessor.makeFrame(ctx, request, null, true, null, ResponseStatusCode.PARTIAL_CONTENT);
- fail("Expected a NullPointerException");
- } catch (NullPointerException expected) {
- // nop
- }
-
- Mockito.verify(ctx, Mockito.times(1)).writeAndFlush(responseCaptor.capture());
- assertEquals(ResponseStatusCode.SERVER_ERROR_SERIALIZATION, responseCaptor.getValue().getStatus().getCode());
- assertEquals(request.getRequestId(), responseCaptor.getValue().getRequestId());
- }
-
- @Test
+ public void alternativeMakeFrameMethodShouldRedirectCorrectly() throws Exception {
+ final ChannelHandlerContext ctx = Mockito.mock(ChannelHandlerContext.class);
+ final RequestMessage request = RequestMessage.build("test").create();
+ final ArgumentCaptor<ResponseMessage> responseCaptor = ArgumentCaptor.forClass(ResponseMessage.class);
+
+ try {
+ // Induce a NullPointerException to validate error response message writing
+ AbstractOpProcessor.makeFrame(ctx, request, null, true, null, ResponseStatusCode.PARTIAL_CONTENT, null);
+ fail("Expected a NullPointerException");
+ } catch (NullPointerException expected) {
+ // nop
+ }
+
+ Mockito.verify(ctx, Mockito.times(1)).writeAndFlush(responseCaptor.capture());
+ assertEquals(ResponseStatusCode.SERVER_ERROR_SERIALIZATION, responseCaptor.getValue().getStatus().getCode());
+ assertEquals(request.getRequestId(), responseCaptor.getValue().getRequestId());
+ }
+
+ }