You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2017/07/05 20:54:46 UTC

lucene-solr:branch_7_0: LUCENE-7868: fix race condition when reader pooling is disabled

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_7_0 ec306dce2 -> 9ec400c4f


LUCENE-7868: fix race condition when reader pooling is disabled


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/9ec400c4
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/9ec400c4
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/9ec400c4

Branch: refs/heads/branch_7_0
Commit: 9ec400c4f69432773edd3678e21c4c08590cddf6
Parents: ec306dc
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Jul 5 16:53:05 2017 -0400
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Jul 5 16:54:12 2017 -0400

----------------------------------------------------------------------
 lucene/core/src/java/org/apache/lucene/index/IndexWriter.java | 2 +-
 .../src/java/org/apache/lucene/index/ReadersAndUpdates.java   | 7 ++++---
 2 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9ec400c4/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
index 26a25a5..5ed062e 100644
--- a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
@@ -3760,7 +3760,6 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable {
       // and re-resolve against the newly merged segment:
       
       Map<String,List<DocValuesFieldUpdates>> mergingDVUpdates = rld.getMergingDVUpdates();
-
       for (Map.Entry<String,List<DocValuesFieldUpdates>> ent : mergingDVUpdates.entrySet()) {
 
         String field = ent.getKey();
@@ -4358,6 +4357,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable {
         // Hold onto the "live" reader; we will use this to
         // commit merged deletes
         final ReadersAndUpdates rld = readerPool.get(info, true);
+        rld.setIsMerging();
 
         SegmentReader reader = rld.getReaderForMerge(context);
         int delCount = reader.numDeletedDocs();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9ec400c4/lucene/core/src/java/org/apache/lucene/index/ReadersAndUpdates.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/ReadersAndUpdates.java b/lucene/core/src/java/org/apache/lucene/index/ReadersAndUpdates.java
index dd49fcb..0e32256 100644
--- a/lucene/core/src/java/org/apache/lucene/index/ReadersAndUpdates.java
+++ b/lucene/core/src/java/org/apache/lucene/index/ReadersAndUpdates.java
@@ -811,9 +811,10 @@ class ReadersAndUpdates {
   synchronized public void setIsMerging() {
     // This ensures any newly resolved doc value updates while we are merging are
     // saved for re-applying after this segment is done merging:
-    isMerging = true;
-
-    assert mergingDVUpdates.isEmpty();
+    if (isMerging == false) {
+      isMerging = true;
+      assert mergingDVUpdates.isEmpty();
+    }
   }
 
   /** Returns a reader for merge, with the latest doc values updates and deletions. */