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 2019/08/14 16:51:29 UTC
[lucene-solr] branch master updated: SOLR-13694: IndexSizeEstimator
NullPointerException.
This is an automated email from the ASF dual-hosted git repository.
ab pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/master by this push:
new 7c2d45d SOLR-13694: IndexSizeEstimator NullPointerException.
7c2d45d is described below
commit 7c2d45d53ecb2adeaccac9c81a4d195109fcb65f
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Wed Aug 14 17:57:13 2019 +0200
SOLR-13694: IndexSizeEstimator NullPointerException.
---
solr/CHANGES.txt | 2 ++
.../solr/handler/admin/IndexSizeEstimator.java | 8 ++++---
.../solr/handler/admin/IndexSizeEstimatorTest.java | 25 ++++++++++++++++++++++
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index cff9eb2..a5cfc9d 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -149,6 +149,8 @@ Bug Fixes
* SOLR-13141: CDCR bootstrap does not replicate index to the replicas of target cluster.
(Krzysztof Watral, Amrit Sarkar, Tim, Tdspringsteen, shalin)
+* SOLR-13694: IndexSizeEstimator NullPointerException. (ab, hossman)
+
Other Changes
----------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java b/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java
index 5ef02ff..be25029 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java
@@ -505,14 +505,16 @@ public class IndexSizeEstimator {
CodecReader codecReader = (CodecReader)leafReader;
StoredFieldsReader storedFieldsReader = codecReader.getFieldsReader();
// this instance may be faster for a full sequential pass
- storedFieldsReader = storedFieldsReader.getMergeInstance();
+ StoredFieldsReader mergeInstance = storedFieldsReader.getMergeInstance();
for (int docId = 0; docId < leafReader.maxDoc(); docId += samplingStep) {
if (liveDocs != null && !liveDocs.get(docId)) {
continue;
}
- storedFieldsReader.visitDocument(docId, visitor);
+ mergeInstance.visitDocument(docId, visitor);
+ }
+ if (mergeInstance != storedFieldsReader) {
+ mergeInstance.close();
}
- storedFieldsReader.close();
} else {
for (int docId = 0; docId < leafReader.maxDoc(); docId += samplingStep) {
if (liveDocs != null && !liveDocs.get(docId)) {
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/IndexSizeEstimatorTest.java b/solr/core/src/test/org/apache/solr/handler/admin/IndexSizeEstimatorTest.java
index 16cf270..2ad9b87 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/IndexSizeEstimatorTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/IndexSizeEstimatorTest.java
@@ -23,6 +23,14 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import org.apache.lucene.codecs.StoredFieldsReader;
+import org.apache.lucene.document.DocumentStoredFieldVisitor;
+import org.apache.lucene.index.CodecReader;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
+import org.apache.lucene.index.StoredFieldVisitor;
+import org.apache.lucene.util.Bits;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.TestUtil;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
@@ -124,6 +132,23 @@ public class IndexSizeEstimatorTest extends SolrCloudTestCase {
double delta = (double) size * 0.5;
assertEquals("sampled size of " + field + " is wildly off", (double)size, (double)sampledSize, delta);
});
+ // verify the reader is still usable - SOLR-13694
+ IndexReader reader = searcher.getRawReader();
+ for (LeafReaderContext context : reader.leaves()) {
+ LeafReader leafReader = context.reader();
+ assertTrue("unexpected LeafReader class: " + leafReader.getClass().getName(), leafReader instanceof CodecReader);
+ Bits liveDocs = leafReader.getLiveDocs();
+ CodecReader codecReader = (CodecReader) leafReader;
+ StoredFieldsReader storedFieldsReader = codecReader.getFieldsReader();
+ StoredFieldVisitor visitor = new DocumentStoredFieldVisitor();
+ assertNotNull(storedFieldsReader);
+ for (int docId = 0; docId < leafReader.maxDoc(); docId++) {
+ if (liveDocs != null && !liveDocs.get(docId)) {
+ continue;
+ }
+ storedFieldsReader.visitDocument(docId, visitor);
+ }
+ }
} finally {
searcherRef.decref();
core.close();