You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2018/09/17 09:43:54 UTC

[08/47] lucene-solr:jira/solr-12709: LUCENE-8484: Only drop fully deleted segments in SoftDeletesDirectoryReaderWrapper

LUCENE-8484: Only drop fully deleted segments in SoftDeletesDirectoryReaderWrapper

This specializes the change in LUCENE-8484 since there are valid usecases
where filtered reader should not modify the number of readers if a higher
level reader wants to expose the deleted or soft-deleted docs.


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

Branch: refs/heads/jira/solr-12709
Commit: c8b47e2024ddef066b297b7bd67983ebf458b060
Parents: 7223a8b
Author: Simon Willnauer <si...@apache.org>
Authored: Wed Sep 5 15:26:37 2018 +0200
Committer: Simon Willnauer <si...@apache.org>
Committed: Wed Sep 5 16:00:54 2018 +0200

----------------------------------------------------------------------
 .../apache/lucene/index/FilterDirectoryReader.java | 17 ++++++++++-------
 .../index/SoftDeletesDirectoryReaderWrapper.java   | 14 ++++++++++++++
 2 files changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c8b47e20/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java b/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java
index 1efd482..4a9cd68 100644
--- a/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java
@@ -18,7 +18,6 @@ package org.apache.lucene.index;
 
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -51,16 +50,20 @@ public abstract class FilterDirectoryReader extends DirectoryReader {
    */
   public static abstract class SubReaderWrapper {
 
-    private LeafReader[] wrap(List<? extends LeafReader> readers) {
-      List<LeafReader> wrapped = new ArrayList<>(readers.size());
+    /**
+     * Wraps a list of LeafReaders
+     * @return an array of wrapped LeafReaders. The returned array might contain less elements compared to the given
+     * reader list if an entire reader is filtered out.
+     */
+    protected LeafReader[] wrap(List<? extends LeafReader> readers) {
+      LeafReader[] wrapped = new LeafReader[readers.size()];
+      int i = 0;
       for (LeafReader reader : readers) {
         LeafReader wrap = wrap(reader);
         assert wrap != null;
-        if (wrap.numDocs() > 0) {
-          wrapped.add(wrap);
-        }
+        wrapped[i++] = wrap;
       }
-      return wrapped.toArray(new LeafReader[0]);
+      return wrapped;
     }
 
     /** Constructor */

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c8b47e20/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java b/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java
index cf3e437..21aac96 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java
@@ -19,8 +19,10 @@ package org.apache.lucene.index;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -86,6 +88,18 @@ public final class SoftDeletesDirectoryReaderWrapper extends FilterDirectoryRead
       this.field = field;
     }
 
+    protected LeafReader[] wrap(List<? extends LeafReader> readers) {
+      List<LeafReader> wrapped = new ArrayList<>(readers.size());
+      for (LeafReader reader : readers) {
+        LeafReader wrap = wrap(reader);
+        assert wrap != null;
+        if (wrap.numDocs() != 0) {
+          wrapped.add(wrap);
+        }
+      }
+      return wrapped.toArray(new LeafReader[0]);
+    }
+
     @Override
     public LeafReader wrap(LeafReader reader) {
       CacheHelper readerCacheHelper = reader.getReaderCacheHelper();