[
https://issues.apache.org/jira/browse/LUCENE-3800?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Uwe Schindler resolved LUCENE-3800.
-----------------------------------
Resolution: Fixed
Committed trunk revision: 1292293
> Readers wrapping other readers don't prevent usage if any of their subreaders
> was closed
> ----------------------------------------------------------------------------------------
>
> Key: LUCENE-3800
> URL: https://issues.apache.org/jira/browse/LUCENE-3800
> Project: Lucene - Java
> Issue Type: Bug
> Components: core/index
> Affects Versions: 4.0
> Reporter: Uwe Schindler
> Assignee: Uwe Schindler
> Fix For: 4.0
>
> Attachments: LUCENE-3800.patch, LUCENE-3800.patch, LUCENE-3800.patch
>
>
> On recent trunk test we got this problem:
> org.apache.lucene.index.TestReaderClosed.test
> fails because the inner reader is closed but the wrapped outer ones are still
> open.
> I fixed the issue partially for SlowCompositeReaderWrapper and
> ParallelAtomicReader but it failed again. The cool thing with this test is
> the following:
> The test opens an DirectoryReader and then creates a searcher, closes the
> reader and executes a search. This is not an issue, if the reader is closed
> that the search is running on. This test uses LTC.newSearcher(wrap=true),
> which randomly wraps the passed Reader with SlowComposite or ParallelReader -
> or with both!!! If you then close the original inner reader, the close is not
> detected when excuting search. This can cause SIGSEGV when MMAP is used.
> The problem in (in Slow* and Parallel*) is, that both have their own Fields
> instances thats are kept alive until the reader itsself is closed. If the
> child reader is closed, the wrapping reader does not know and still uses its
> own Fields instance that delegates to the inner readers. On this step no more
> ensureOpen checks are done, causing the failures.
> The first fix done in Slow and Parallel was to call ensureOpen() on the
> subReader, too when requesting fields(). This works fine until you wrap two
> times:
> ParallelAtomicReader(SlowCompositeReaderWrapper(StandardDirectoryReader(segments_1:3:nrt
> _0(4.0):C42)))
> One solution would be to make ensureOpen also check all subreaders, but that
> would do the volatile checks way too often (with n is the total number of
> subreaders and m is the number of hierarchical levels this is n^m) - we
> cannot do this. Currently we only have n*m which is fine.
> The proposal how to solve this (closing subreaders under the hood of parent
> readers is to use the readerClosedListeners. Whenever a composite or slow
> reader wraps another readers, it registers itself as interested in
> readerClosed events. When a subreader is then forcefully closed (e.g by a
> programming error or this crazy test), we automatically close the parents,
> too.
> We should also fix this in 3.x, if we have similar problems there (needs
> investigation).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]