You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2010/11/27 20:59:59 UTC
svn commit: r1039744 - in /lucene/java/branches/lucene_2_9: CHANGES.txt
src/java/org/apache/lucene/index/IndexWriter.java
src/java/org/apache/lucene/index/SegmentInfos.java
Author: mikemccand
Date: Sat Nov 27 19:59:59 2010
New Revision: 1039744
URL: http://svn.apache.org/viewvc?rev=1039744&view=rev
Log:
LUCENE-2782: fix rare thread hazard with IW.commit
Modified:
lucene/java/branches/lucene_2_9/CHANGES.txt
lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/IndexWriter.java
lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/SegmentInfos.java
Modified: lucene/java/branches/lucene_2_9/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_9/CHANGES.txt?rev=1039744&r1=1039743&r2=1039744&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_9/CHANGES.txt (original)
+++ lucene/java/branches/lucene_2_9/CHANGES.txt Sat Nov 27 19:59:59 2010
@@ -117,6 +117,9 @@ Bug fixes
* LUCENE-2216: OpenBitSet.hashCode returned different hash codes for
sets that only differed by trailing zeros. (Dawid Weiss, yonik)
+* LUCENE-2782: Fix rare potential thread hazard with
+ IndexWriter.commit (Mike McCandless)
+
API Changes
* LUCENE-2773: LogMergePolicy accepts a double noCFSRatio (default =
Modified: lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/IndexWriter.java?rev=1039744&r1=1039743&r2=1039744&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/IndexWriter.java Sat Nov 27 19:59:59 2010
@@ -5531,6 +5531,7 @@ public class IndexWriter {
try {
assert lastCommitChangeCount <= changeCount;
+ myChangeCount = changeCount;
if (changeCount == lastCommitChangeCount) {
if (infoStream != null)
@@ -5550,13 +5551,29 @@ public class IndexWriter {
readerPool.commit();
+ // It's possible another flush (that did not close
+ // the open do stores) snuck in after the flush we
+ // just did, so we remove any tail segments
+ // referencing the open doc store from the
+ // SegmentInfos we are about to sync (the main
+ // SegmentInfos will keep them):
toSync = (SegmentInfos) segmentInfos.clone();
-
+ final String dss = docWriter.getDocStoreSegment();
+ if (dss != null) {
+ while(true) {
+ final String dss2 = toSync.info(toSync.size()-1).getDocStoreSegment();
+ if (dss2 == null || !dss2.equals(dss)) {
+ break;
+ }
+ toSync.remove(toSync.size()-1);
+ changeCount++;
+ }
+ }
+
if (commitUserData != null)
toSync.setUserData(commitUserData);
deleter.incRef(toSync, false);
- myChangeCount = changeCount;
Iterator it = toSync.files(directory, false).iterator();
while(it.hasNext()) {
Modified: lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/SegmentInfos.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/SegmentInfos.java?rev=1039744&r1=1039743&r2=1039744&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/SegmentInfos.java (original)
+++ lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/SegmentInfos.java Sat Nov 27 19:59:59 2010
@@ -681,9 +681,7 @@ public final class SegmentInfos extends
try {
Object v = doBody(segmentFileName);
- if (exc != null) {
- message("success on " + segmentFileName);
- }
+ message("success on " + segmentFileName);
return v;
} catch (IOException err) {