[ https://issues.apache.org/jira/browse/TINKERPOP-1589?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15801081#comment-15801081 ]
ASF GitHub Bot commented on TINKERPOP-1589: ------------------------------------------- GitHub user spmallette opened a pull request: https://github.com/apache/tinkerpop/pull/521 TINKERPOP-1589 Re-introduced CloseableIterator https://issues.apache.org/jira/browse/TINKERPOP-1589 Made it so that the `CloseableIterator` is closed by `GraphStep` if it is provided by the iterator supplier. Furthermore, any steps in a `Traversal` implement `AutoCloseable` then its `close()` method will be called. In this way `Traversal.close()`, the common API a user will work with, has a way to release resources in `Graph` implementations that require it. Builds with `docker/build.sh -t - i -n`. You can merge this pull request into a Git repository by running: $ git pull https://github.com/apache/tinkerpop TINKERPOP-1589 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/tinkerpop/pull/521.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #521 ---- commit 3597dc5f06407a8b1ada0e49a52b36b2f31b8a34 Author: Stephen Mallette <sp...@genoprime.com> Date: 2017-01-04T21:14:23Z TINKERPOP-1589 Re-introduced CloseableIterator Made it so that the CloseableIterator is closed by GraphStep if it is provided by the iterator supplier. Furthermore, any steps in a Traversal implement AutoCloseable then its close() method will be called. ---- > Re-Introduce CloseableIterator > ------------------------------ > > Key: TINKERPOP-1589 > URL: https://issues.apache.org/jira/browse/TINKERPOP-1589 > Project: TinkerPop > Issue Type: Improvement > Components: structure > Affects Versions: 3.2.3 > Reporter: stephen mallette > Assignee: stephen mallette > Fix For: 3.2.4 > > > In Blueprints, we used to have {{CloseableIterable}}, which allowed users to > release resources that might have been held by the underlying graph database. > We didn't port that interface to TinkerPop 3.x for some reason. Graphs like > OrientDB require a {{close()}} method for iterators returned from methods > like {{Graph.vertices()}} and {{Graph.edges()}}. In addition, allowing > {{close()}} from those iterators would make the {{close()}} on {{Traversal}} > (non-remote) more useful and meaningful (right now it is an empty method by > default). > In Blueprints, {{Graph.getVertices()}} and {{Graph.getEdges()}} returned a > {{Iterable}} and the Graph could choose to return {{CloseableIterator}}. > Users who wanted to write provider agnostic code would then have to do: > {code} > if (iterable instanceof CloseableIterable)) > ((CloseableIterable) iterable).close(); > {code} > I'm not sure why we didn't simply return {{CloseableIterable}} from those > methods. Any reason we shouldn't do that now? Perhaps the approach is to > introduce {{CloseableIterator}} to 3.2.4, but keep the return type of > {{edges/vertices()}} as {{Iterator}} and then for 3.3.0 change the return > type to {{CloseableIterator}}. In this way, the feature can be available in > next release of 3.2.4 without any API changes and users can do the > {{instanceof}} check above if they need to. Then for 3.3.0 when we allow API > changes we can just make it more convenient with a {{CloseableIterator}} > return type. -- This message was sent by Atlassian JIRA (v6.3.4#6332)