You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2018/09/05 14:36:46 UTC
lucene-solr:master: LUCENE-8484: Only drop fully deleted segments in
SoftDeletesDirectoryReaderWrapper
Repository: lucene-solr
Updated Branches:
refs/heads/master 7223a8bf7 -> c8b47e202
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/master
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();