Rare thread hazard in IndexWriter.commit() ------------------------------------------
Key: LUCENE-1547 URL: https://issues.apache.org/jira/browse/LUCENE-1547 Project: Lucene - Java Issue Type: Bug Components: Index Affects Versions: 2.4 Reporter: Michael McCandless Assignee: Michael McCandless Priority: Minor Fix For: 2.4.1, 2.9 Attachments: LUCENE-1547.patch The nightly build 2 nights ago hit this: {code} 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) {code} 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. -- 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: java-dev-unsubscr...@lucene.apache.org For additional commands, e-mail: java-dev-h...@lucene.apache.org