Issue Details (XML | Word | Printable)

Key: LUCENE-1547
Type: Bug Bug
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

Rare thread hazard in IndexWriter.commit()

Created: 22/Feb/09 12:17 PM   Updated: 25/Sep/09 04:23 PM
Return to search
Component/s: Index
Affects Version/s: 2.4
Fix Version/s: 2.4.1, 2.9

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works LUCENE-1547.patch 2009-02-22 12:18 PM Michael McCandless 5 kB

Lucene Fields: New
Resolution Date: 24/Feb/09 10:41 AM


 Description  « Hide
The nightly build 2 nights ago hit this:
NOTE: random seed of testcase 'testAtomicUpdates' was: -5065675995121791051
    [junit] ------------- ---------------- ---------------
    [junit] Testcase: testAtomicUpdates(org.apache.lucene.index.TestAtomicUpdate):	FAILED
    [junit] expected:<100> but was:<91>
    [junit] junit.framework.AssertionFailedError: expected:<100> but was:<91>
    [junit] 	at org.apache.lucene.index.TestAtomicUpdate.runTest(TestAtomicUpdate.java:142)
    [junit] 	at org.apache.lucene.index.TestAtomicUpdate.testAtomicUpdates(TestAtomicUpdate.java:194)
    [junit] 	at org.apache.lucene.util.LuceneTestCase.runTest(LuceneTestCase.java:88)

It's an intermittant failure that only happens when multiple threads
are calling commit() at once. With autoComit=true and
ConcurrentMergeScheduler, this can happen more often because each
merge thread calls commit after it's done.

The problem happens when one thread has already begun the commit
process, but another two or more threads then come along wanting to
also commit after further changes have happened. Those two or more
threads would wait until the currently committing thread finished, and
then they'd wake up and do their commit. The problem was, after
waking up they would fail to check whether they had been superseded,
ie whether another thread had already committed more up-to-date
changes.

The fix is simple – after waking up, check again if your commit has
been superseded, and skip your commit if so.



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Michael McCandless added a comment - 22/Feb/09 12:18 PM
Attached patch. I plan to commit in a day or so.

Michael McCandless added a comment - 24/Feb/09 10:41 AM
Fixed on 2.9 & 2.4.1.