Issue Details (XML | Word | Printable)

Key: LUCENE-1191
Type: Improvement Improvement
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Michael McCandless
Reporter: Michael McCandless
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Lucene - Java

If IndexWriter hits OutOfMemoryError it should not commit

Created: 25/Feb/08 09:25 PM   Updated: 08/May/08 07:47 PM
Return to search
Component/s: Index
Affects Version/s: 1.9, 2.0.0, 2.1, 2.2, 2.3, 2.3.1, 2.4
Fix Version/s: 2.3.2, 2.4

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works LUCENE-1191.patch 2008-02-25 09:26 PM Michael McCandless 26 kB

Lucene Fields: New
Resolution Date: 28/Feb/08 09:35 PM


 Description  « Hide
While progress has been made making IndexWriter robust to OOME, I
think there is still a real risk that an OOME at a bad time could put
IndexWriter into a bad state such that if close() is called and
somehow it succeeds without hitting another OOME, it risks
introducing messing up the index.

I'd like to detect if OOME has been hit in any of the methods that
alter IW's state, and if so, do not commit changes to the index. If
close is called after hitting OOME, I think writer should instead
abort.

Attached patch just adds try/catch clauses to catch OOME, note that
it was hit, and re-throw it. Then, sync() refuses to commit a new
segments_N if OOME was hit, and close instead calls abort when OOME
was hit. All tests pass. I plan to commit in a day or two.



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Michael McCandless made changes - 25/Feb/08 09:26 PM
Field Original Value New Value
Attachment LUCENE-1191.patch [ 12376444 ]
Karl Wettin added a comment - 25/Feb/08 10:04 PM
I think I hit that problem this weekend. One of my writer threads died due to an OOME, but the other threads kept going as memory was released from the dying thread. I then hit this SegmentMerger#appendPostings exception each flush:
if (doc < 0 || (df > 0 && doc <= lastDoc))
          throw new CorruptIndexException("docs out of order (" + doc +
              " <= " + lastDoc + " )");

Michael McCandless added a comment - 25/Feb/08 10:13 PM
Karl, was that with trunk, 2.3.0 or 2.3.1?

Karl Wettin added a comment - 25/Feb/08 10:17 PM
2.3.0

Michael McCandless added a comment - 25/Feb/08 10:24 PM
OK. LUCENE-1171 fixed certain OOM cases after 2.3.0, and was backported to 2.3.1, and it may have fixed this although I didn't think there were cases that would lead to corruption of the posting lists. If you also see this happen on 2.3.1 please report back!

Repository Revision Date User Message
ASF #632124 Thu Feb 28 21:35:42 UTC 2008 mikemccand LUCENE-1191: if we hit OOM then don't commit any changes to the index
Files Changed
MODIFY /lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java

Michael McCandless made changes - 28/Feb/08 09:35 PM
Resolution Fixed [ 1 ]
Status Open [ 1 ] Resolved [ 5 ]
Repository Revision Date User Message
ASF #635861 Tue Mar 11 09:51:15 UTC 2008 mikemccand LUCENE-1191 (porting to 2.3): on hitting OOME do not commit further changes to the index
Files Changed
MODIFY /lucene/java/branches/lucene_2_3/src/java/org/apache/lucene/index/IndexWriter.java
MODIFY /lucene/java/branches/lucene_2_3/CHANGES.txt

Hoss Man added a comment - 11/Mar/08 07:27 PM
targeted for 2.3.2 bug fix release

Hoss Man made changes - 11/Mar/08 07:27 PM
Fix Version/s 2.3.2 [ 12313057 ]
Michael Busch made changes - 08/May/08 07:47 PM
Status Resolved [ 5 ] Closed [ 6 ]