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 2019/06/17 20:45:08 UTC

[tinkerpop] branch TINKERPOP-2238 updated: TINKERPOP-2238 Fixed iterator leak in subgraph() step

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch TINKERPOP-2238
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/TINKERPOP-2238 by this push:
     new 05143f4  TINKERPOP-2238 Fixed iterator leak in subgraph() step
05143f4 is described below

commit 05143f49d61a81b27a25e413a882700471976a19
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Mon Jun 17 16:44:32 2019 -0400

    TINKERPOP-2238 Fixed iterator leak in subgraph() step
---
 .../process/traversal/step/sideEffect/SubgraphStep.java | 17 +++++++++++++++--
 .../process/traversal/TraversalInterruptionTest.java    |  2 --
 .../process/traversal/step/sideEffect/SubgraphTest.java |  2 --
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java
index ca5100b..0bd8197 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java
@@ -29,6 +29,7 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator;
 import org.apache.tinkerpop.gremlin.structure.util.GraphFactory;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
@@ -111,7 +112,13 @@ public final class SubgraphStep extends SideEffectStep<Edge> implements SideEffe
 
     private Vertex getOrCreate(final Vertex vertex) {
         final Iterator<Vertex> vertexIterator = subgraph.vertices(vertex.id());
-        if (vertexIterator.hasNext()) return vertexIterator.next();
+
+        try {
+            if (vertexIterator.hasNext()) return vertexIterator.next();
+        } finally {
+            CloseableIterator.closeIterator(vertexIterator);
+        }
+
         final Vertex subgraphVertex = subgraph.addVertex(T.id, vertex.id(), T.label, vertex.label());
 
         vertex.properties().forEachRemaining(vertexProperty -> {
@@ -130,7 +137,13 @@ public final class SubgraphStep extends SideEffectStep<Edge> implements SideEffe
 
     private void addEdgeToSubgraph(final Edge edge) {
         final Iterator<Edge> edgeIterator = subgraph.edges(edge.id());
-        if (edgeIterator.hasNext()) return;
+
+        try {
+            if (edgeIterator.hasNext()) return;
+        } finally {
+            CloseableIterator.closeIterator(edgeIterator);
+        }
+
         final Iterator<Vertex> vertexIterator = edge.vertices(Direction.BOTH);
         final Vertex subGraphOutVertex = getOrCreate(vertexIterator.next());
         final Vertex subGraphInVertex = getOrCreate(vertexIterator.next());
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
index 6f68791..1fb54d4 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
@@ -19,7 +19,6 @@
 package org.apache.tinkerpop.gremlin.process.traversal;
 
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
-import org.apache.tinkerpop.gremlin.IgnoreIteratorLeak;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
@@ -43,7 +42,6 @@ import static org.junit.Assert.assertThat;
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 @RunWith(Parameterized.class)
-@IgnoreIteratorLeak
 public class TraversalInterruptionTest extends AbstractGremlinProcessTest {
 
     @Parameterized.Parameters(name = "expectInterruption({0})")
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java
index a31c233..51d8870 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
 import org.apache.commons.configuration.Configuration;
 import org.apache.tinkerpop.gremlin.FeatureRequirement;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
-import org.apache.tinkerpop.gremlin.IgnoreIteratorLeak;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
@@ -48,7 +47,6 @@ import static org.junit.Assert.fail;
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 @RunWith(GremlinProcessRunner.class)
-@IgnoreIteratorLeak
 public abstract class SubgraphTest extends AbstractGremlinProcessTest {
     public abstract Traversal<Vertex, Graph> get_g_V_withSideEffectXsgX_outEXknowsX_subgraphXsgX_name_capXsgX(final Object v1Id, final Graph subgraph);