TINKERPOP-1589 Re-introduced CloseableIterator https://issues.apache.org/jira/browse/TINKERPOP-1589 Add support for the closing of Iterators returned from `Vertex.vertices()` and `Vertex.edges()`. Make `FlatMapStep` close iterator after read to completion. Make `EdgeVertexStep`, `PropertiesStep`, `VertexStep` `AutoCloseable` in case iterator is not read to completion to ensure closed when Traversal is closed. OLTP mode support only. More extensive changes required for OLAP. Add unchecked `close()` helper method to `CloseableIterator`
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/49449668 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/49449668 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/49449668 Branch: refs/heads/TINKERPOP-1599 Commit: 494496681b57cd9f4f72c5c1a7e5abd13e8ccb91 Parents: 30bad4b Author: PaulJackson123 <[email protected]> Authored: Fri Jan 27 18:54:28 2017 -0500 Committer: PaulJackson123 <[email protected]> Committed: Fri Jan 27 18:54:28 2017 -0500 ---------------------------------------------------------------------- .../traversal/step/map/EdgeVertexStep.java | 7 +++++- .../process/traversal/step/map/FlatMapStep.java | 23 +++++--------------- .../traversal/step/map/PropertiesStep.java | 7 +++++- .../process/traversal/step/map/VertexStep.java | 7 +++++- .../structure/util/CloseableIterator.java | 11 ++++++++++ 5 files changed, 34 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/49449668/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/EdgeVertexStep.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/EdgeVertexStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/EdgeVertexStep.java index df20587..87c1561 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/EdgeVertexStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/EdgeVertexStep.java @@ -33,7 +33,7 @@ import java.util.Set; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public final class EdgeVertexStep extends FlatMapStep<Edge, Vertex> { +public final class EdgeVertexStep extends FlatMapStep<Edge, Vertex> implements AutoCloseable { private Direction direction; @@ -69,4 +69,9 @@ public final class EdgeVertexStep extends FlatMapStep<Edge, Vertex> { public Set<TraverserRequirement> getRequirements() { return Collections.singleton(TraverserRequirement.OBJECT); } + + @Override + public void close() throws Exception { + closeIterator(); + } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/49449668/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java index ce79bdf..59fc4e7 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java @@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.Traverser; import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep; +import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator; import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator; import java.util.Iterator; @@ -28,7 +29,7 @@ import java.util.Iterator; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public abstract class FlatMapStep<S, E> extends AbstractStep<S, E> implements AutoCloseable { +public abstract class FlatMapStep<S, E> extends AbstractStep<S, E> { private Traverser.Admin<S> head = null; private Iterator<E> iterator = EmptyIterator.instance(); @@ -56,24 +57,10 @@ public abstract class FlatMapStep<S, E> extends AbstractStep<S, E> implements Au public void reset() { super.reset(); closeIterator(); + this.iterator = EmptyIterator.instance(); } - @Override - public void close() { - closeIterator(); - } - - private void closeIterator() { - try { - if (this.iterator instanceof AutoCloseable) { - ((AutoCloseable) this.iterator).close(); - } - } - catch (Exception e) { - throw new RuntimeException(e); - } - finally { - this.iterator = EmptyIterator.instance(); - } + protected void closeIterator() { + CloseableIterator.closeIterator(iterator); } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/49449668/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesStep.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesStep.java index d91ec36..cbfc475 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesStep.java @@ -33,7 +33,7 @@ import java.util.Set; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public class PropertiesStep<E> extends FlatMapStep<Element, E> { +public class PropertiesStep<E> extends FlatMapStep<Element, E> implements AutoCloseable { protected final String[] propertyKeys; protected final PropertyType returnType; @@ -77,4 +77,9 @@ public class PropertiesStep<E> extends FlatMapStep<Element, E> { public Set<TraverserRequirement> getRequirements() { return Collections.singleton(TraverserRequirement.OBJECT); } + + @Override + public void close() throws Exception { + closeIterator(); + } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/49449668/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStep.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStep.java index 9e24953..9ac6d0c 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStep.java @@ -35,7 +35,7 @@ import java.util.Set; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public class VertexStep<E extends Element> extends FlatMapStep<Vertex, E> { +public class VertexStep<E extends Element> extends FlatMapStep<Vertex, E> implements AutoCloseable { private final String[] edgeLabels; private Direction direction; @@ -97,4 +97,9 @@ public class VertexStep<E extends Element> extends FlatMapStep<Vertex, E> { public Set<TraverserRequirement> getRequirements() { return Collections.singleton(TraverserRequirement.OBJECT); } + + @Override + public void close() throws Exception { + closeIterator(); + } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/49449668/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/CloseableIterator.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/CloseableIterator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/CloseableIterator.java index 5f334a5..3d813b7 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/CloseableIterator.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/CloseableIterator.java @@ -46,4 +46,15 @@ public interface CloseableIterator<T> extends Iterator<T>, Closeable { public default void close() { // do nothing by default } + + public static <T> void closeIterator(Iterator<T> iterator) { + if (iterator instanceof AutoCloseable) { + try { + ((AutoCloseable) iterator).close(); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + } }
