Skip to content

Commit cbafd31

Browse files
authored
TINKERPOP-3144 Close traversal on failure (#3075)
* Close traversal for failure * close-iterator-in-abstract-op
1 parent afc5c29 commit cbafd31

3 files changed

Lines changed: 9 additions & 0 deletions

File tree

gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.apache.tinkerpop.gremlin.server.GraphManager;
4141
import org.apache.tinkerpop.gremlin.server.Settings;
4242
import org.apache.tinkerpop.gremlin.server.util.MetricManager;
43+
import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator;
4344
import org.apache.tinkerpop.gremlin.structure.util.TemporaryException;
4445
import org.apache.tinkerpop.gremlin.util.function.ThrowingConsumer;
4546
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -269,6 +270,8 @@ protected void evalOpInternal(final Context ctx, final Supplier<GremlinExecutor>
269270
} catch (Exception ex) {
270271
if (managedTransactionsForRequest) attemptRollback(msg, ctx.getGraphManager(), settings.strictTransactionManagement);
271272

273+
CloseableIterator.closeIterator(itty);
274+
272275
// wrap up the exception and rethrow. the error will be written to the client by the evalFuture
273276
// as it will completeExceptionally in the GremlinExecutor
274277
throw new RuntimeException(ex);

gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.apache.tinkerpop.gremlin.structure.Graph;
4949
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
5050
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
51+
import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator;
5152
import org.apache.tinkerpop.gremlin.structure.util.TemporaryException;
5253
import org.apache.tinkerpop.gremlin.util.function.ThrowingConsumer;
5354
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
@@ -423,6 +424,8 @@ private void iterateBytecodeTraversal(final Context context) throws Exception {
423424
if (ex instanceof UndeclaredThrowableException)
424425
t = t.getCause();
425426

427+
CloseableIterator.closeIterator(traversal);
428+
426429
// if any exception in the chain is TemporaryException or Failure then we should respond with the
427430
// right error code so that the client knows to retry
428431
final Optional<Throwable> possibleSpecialException = determineIfSpecialException(ex);

gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.apache.tinkerpop.gremlin.server.util.MetricManager;
4848
import org.apache.tinkerpop.gremlin.server.util.TraverserIterator;
4949
import org.apache.tinkerpop.gremlin.structure.Graph;
50+
import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator;
5051
import org.apache.tinkerpop.gremlin.structure.util.TemporaryException;
5152
import org.apache.tinkerpop.gremlin.util.function.ThrowingConsumer;
5253
import org.slf4j.Logger;
@@ -227,6 +228,8 @@ private void iterateBytecodeTraversal(final Context context) throws Exception {
227228
if (ex instanceof UndeclaredThrowableException)
228229
t = t.getCause();
229230

231+
CloseableIterator.closeIterator(traversal);
232+
230233
// if any exception in the chain is TemporaryException or Failure then we should respond with the
231234
// right error code so that the client knows to retry
232235
final Optional<Throwable> possibleSpecialException = determineIfSpecialException(ex);

0 commit comments

Comments
 (0)