Norio Akagi created TINKERPOP-2416:
--------------------------------------

             Summary: MultiIterator should implement AutoCloseable
                 Key: TINKERPOP-2416
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2416
             Project: TinkerPop
          Issue Type: Improvement
          Components: structure
    Affects Versions: 3.4.8
            Reporter: Norio Akagi


TinkerPop has a handy set of util methods for Iterators and specifically 
IteratorUtils#concat provides a way to combine multiple iterators and treat it 
as if we have a single iterator.

[https://github.com/apache/tinkerpop/blob/master/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java#L352]

While this is convenient, when we use it we had some memory leak issue.
The reason is because sometimes an iterator we use needs to be explicitly 
closed when it holds underlying resource to be released. TinkerPop is aware of 
this pattern and it has [CloseableIterator#closeIterator 
|[https://github.com/apache/tinkerpop/blob/cff4c161615f2b50bda27b6ba523c7f52b833532/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/CloseableIterator.java#L50]]method
 that closes an iterator if it implements AutoCloseable.

However MultiIterator which Tinkerpop uses to combine multiple iterators when 
concat method is called does not implement AutoCloseable therefore when we use 
concat method while expecting the iterator is eventually closed by 
CloseableIterator#closeIterator method, it leaves the underlying iterators 
unclosed then it causes some resources never released.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to