Lucene fails to close file handles under certain situations
-----------------------------------------------------------
Key: LUCENE-823
URL: https://issues.apache.org/jira/browse/LUCENE-823
Project: Lucene - Java
Issue Type: Bug
Components: Index
Affects Versions: 2.1
Reporter: Michael McCandless
Assigned To: Michael McCandless
Priority: Minor
Fix For: 2.2
Attachments: LUCENE-823.patch
As a followon to LUCENE-820, I've added a further check in
MockRAMDirectory to assert that there are no open files when the
directory is closed.
That check caused a few unit tests to fail, and in digging into the
reason I uncovered these cases where Lucene fails to close file
handles:
* TermInfosReader.close() was setting its ThreadLocal enumerators to
null without first closing the SegmentTermEnum in there. It looks
like this was part of the fix for LUCENE-436. I just added the
call to close.
This is somewhat severe since we could leak many file handles for
use cases that burn through threads and/or indexes. Though,
FSIndexInput does have a finalize() to close itself.
* Flushing of deletes in IndexWriter opens SegmentReader to do the
flushing, and it correctly calls close() to close the reader. But
if an exception is hit during commit and before actually closing,
it will leave open those handles. I fixed this first calling
doCommit() and then doClose() in a finally. The "disk full" tests
we now have were hitting this.
* IndexWriter's addIndexes(IndexReader[]) method was opening a
reader but not closing it with a try/finally. I just put a
try/finally in.
I've also changed some unit tests to use MockRAMDirectory instead of
RAMDirectory to increase testing coverage of "leaking open file
handles".
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]