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/13 19:25:46 UTC

incubator-tinkerpop git commit: Add some additional "unexpected" error handling in OpExecutorHandler.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 77af1a030 -> ea4f4a2d5


Add some additional "unexpected" error handling in OpExecutorHandler.

The OpExecutorHandler was only handling the error expected to come out of OpProcessor execution.  Adding a general exception catch does a better job of notifying the client if something goes wrong.  While doing this I also improved the semantics of a test designed to ensure that the client doesn't just "hang" and do nothing in the event of server failure.


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

Branch: refs/heads/master
Commit: ea4f4a2d55a5687ce548267de66afddb323f1a9c
Parents: 77af1a0
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jan 13 13:23:25 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jan 13 13:23:25 2016 -0500

----------------------------------------------------------------------
 .../gremlin/server/handler/OpExecutorHandler.java       |  9 +++++++++
 .../gremlin/server/GremlinDriverIntegrateTest.java      | 12 ++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ea4f4a2d/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/OpExecutorHandler.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/OpExecutorHandler.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/OpExecutorHandler.java
index f624c21..eefe600 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/OpExecutorHandler.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/OpExecutorHandler.java
@@ -19,6 +19,8 @@
 package org.apache.tinkerpop.gremlin.server.handler;
 
 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.groovy.engine.GremlinExecutor;
 import org.apache.tinkerpop.gremlin.server.Context;
 import org.apache.tinkerpop.gremlin.server.GraphManager;
@@ -69,6 +71,13 @@ public class OpExecutorHandler extends SimpleChannelInboundHandler<Pair<RequestM
             // themselves
             logger.warn(ope.getMessage(), ope);
             ctx.writeAndFlush(ope.getResponseMessage());
+        } catch (Exception ex) {
+            // It is possible that an unplanned exception might raise out of an OpProcessor execution. Build a general
+            // error to send back to the client
+            logger.warn(ex.getMessage(), ex);
+            ctx.writeAndFlush(ResponseMessage.build(msg)
+                    .code(ResponseStatusCode.SERVER_ERROR)
+                    .statusMessage(ex.getMessage()).create());
         } finally {
             ReferenceCountUtil.release(objects);
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ea4f4a2d/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
index 848d2f4..7f53c3f 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
@@ -58,6 +58,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
+import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.endsWith;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -462,11 +463,18 @@ public class GremlinDriverIntegrateTest extends AbstractGremlinServerIntegration
         final Cluster cluster = Cluster.open();
         final Client client = cluster.connect();
 
-        final ResultSet results = client.submit("'should-not-ever-get-back-coz-we-killed-the-server'");
+        final ResultSet results = client.submit("Thread.sleep(10000); 'should-not-ever-get-back-coz-we-killed-the-server'");
 
         stopServer();
 
-        assertEquals(0, results.getAvailableItemCount());
+        try {
+            results.getAvailableItemCount();
+            fail("Server was stopped before the request could execute");
+        } catch (Exception ex) {
+            final Throwable cause = ex.getCause();
+            assertThat(cause, instanceOf(ResponseException.class));
+            assertThat(cause.getMessage(), containsString("rejected from java.util.concurrent.ThreadPoolExecutor"));
+        }
 
         cluster.close();
     }