mirror of https://github.com/apache/lucene.git
LUCENE-845: fixed a case that was allowing same segment name to be used twice when a concurrent merge was aborted in between
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@576934 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ddb17c6397
commit
963635448e
|
@ -1472,6 +1472,12 @@ public class IndexWriter {
|
|||
// Cannot synchronize on IndexWriter because that causes
|
||||
// deadlock
|
||||
synchronized(segmentInfos) {
|
||||
// Important to set commitPending so that the
|
||||
// segmentInfos is written on close. Otherwise we
|
||||
// could close, re-open and re-return the same segment
|
||||
// name that was previously returned which can cause
|
||||
// problems at least with ConcurrentMergeScheduler.
|
||||
commitPending = true;
|
||||
return "_" + Integer.toString(segmentInfos.counter++, Character.MAX_RADIX);
|
||||
}
|
||||
}
|
||||
|
@ -1906,6 +1912,7 @@ public class IndexWriter {
|
|||
private synchronized void checkpoint() throws IOException {
|
||||
if (autoCommit) {
|
||||
segmentInfos.write(directory);
|
||||
commitPending = false;
|
||||
if (infoStream != null)
|
||||
message("checkpoint: wrote segments file \"" + segmentInfos.getCurrentSegmentFileName() + "\"");
|
||||
} else {
|
||||
|
|
|
@ -698,6 +698,7 @@ public class TestIndexWriterDelete extends TestCase {
|
|||
}
|
||||
public void eval(MockRAMDirectory dir) throws IOException {
|
||||
if (!failed) {
|
||||
failed = true;
|
||||
throw new IOException("fail in add doc");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue