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)