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

Reply via email to