You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by di...@apache.org on 2020/10/08 22:51:13 UTC
[tinkerpop] branch 3.4-dev updated: TINKERPOP-2410 Release server
threads waiting on connection if the connection is dead. (#1318)
This is an automated email from the ASF dual-hosted git repository.
divijv pushed a commit to branch 3.4-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/3.4-dev by this push:
new a454d52 TINKERPOP-2410 Release server threads waiting on connection if the connection is dead. (#1318)
a454d52 is described below
commit a454d52054841c97ee666d4237bb1554bef5a521
Author: Divij Vaidya <di...@amazon.com>
AuthorDate: Thu Oct 8 15:51:06 2020 -0700
TINKERPOP-2410 Release server threads waiting on connection if the connection is dead. (#1318)
---
CHANGELOG.asciidoc | 1 +
.../apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java | 9 +++++++++
.../gremlin/server/op/traversal/TraversalOpProcessor.java | 7 +++++++
3 files changed, 17 insertions(+)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 8a228e4..f2d430e 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -38,6 +38,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
* Avoid creating unnecessary detached objects in JVM.
* Added support for `TraversalStrategy` usage in Javascript.
* Added `Traversal.getTraverserSetSupplier()` to allow providers to supply their own `TraverserSet` instances.
+* Release server threads waiting on connection if the connection is dead.
[[release-3-4-8]]
=== TinkerPop 3.4.8 (Release Date: August 3, 2020)
diff --git 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
index 6254b1d..8c7ec55 100644
--- 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
@@ -134,6 +134,15 @@ public abstract class AbstractOpProcessor implements OpProcessor {
// while waiting for the client to catch up
if (aggregate.size() < resultIterationBatchSize && itty.hasNext() && !forceFlush) aggregate.add(itty.next());
+ // Don't keep executor busy if client has already given up; there is no way to catch up if the channel is
+ // not active, and hence we should break the loop.
+ if (!nettyContext.channel().isActive()) {
+ if (managedTransactionsForRequest) {
+ attemptRollback(msg, context.getGraphManager(), settings.strictTransactionManagement);
+ }
+ break;
+ }
+
// send back a page of results if batch size is met or if it's the end of the results being iterated.
// also check writeability of the channel to prevent OOME for slow clients.
//
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index 418c66c..07ca83b 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -558,6 +558,13 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
// while waiting for the client to catch up
if (aggregate.size() < resultIterationBatchSize && itty.hasNext() && !forceFlush) aggregate.add(itty.next());
+ // Don't keep executor busy if client has already given up; there is no way to catch up if the channel is
+ // not active, and hence we should break the loop.
+ if (!nettyContext.channel().isActive()) {
+ onError(graph, context);
+ break;
+ }
+
// send back a page of results if batch size is met or if it's the end of the results being iterated.
// also check writeability of the channel to prevent OOME for slow clients.
//