Michael McCandless created LUCENE-5263:
------------------------------------------
Summary: Deletes may be silently lost if disk fills up and then
frees up
Key: LUCENE-5263
URL: https://issues.apache.org/jira/browse/LUCENE-5263
Project: Lucene - Core
Issue Type: Bug
Components: core/index
Reporter: Michael McCandless
Assignee: Michael McCandless
Fix For: 5.0, 4.6
Attachments: LUCENE-5263.patch
This case is tricky to handle, yet I think realistic: disk fills up
temporarily, causes an exception in writeLiveDocs, and then the app
keeps using the IW instance.
Meanwhile disk later frees up again, IW is closed "successfully". In
certain cases, we can silently lose deletes in this case.
I had already committed
TestIndexWriterDeletes.testNoLostDeletesOnDiskFull, and Jenkins seems
happy with it so far, but when I added fangs to the test (cutover to
RandomIndexWriter from IndexWriter, allow IOE during getReader, add
randomness to when exc is thrown, etc.), it uncovered some real/nasty
bugs:
* ReaderPool.dropAll was suppressing any exception it hit, because
{code}if (priorE != null){code} should instead be {code}if (priorE ==
null){code}
* After a merge, we have to write deletes before committing the
segment, because an exception when writing deletes means we need
to abort the merge
* Several places that were directly calling deleter.checkpoint must
also increment the changeCount else on close IW thinks there are
no changes and doesn't write a new segments file.
* closeInternal was dropping pooled readers after writing the
segments file, which would lose deletes still buffered due to a
previous exc.
--
This message was sent by Atlassian JIRA
(v6.1#6144)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]