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