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();
}