You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jb...@apache.org on 2020/12/27 18:56:51 UTC

[lucene-solr] branch jira/SOLR-14608-export updated: SOLR-14608: Fix bug when caching docvalues objects related to the leafreader ord

This is an automated email from the ASF dual-hosted git repository.

jbernste pushed a commit to branch jira/SOLR-14608-export
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/jira/SOLR-14608-export by this push:
     new 894141b  SOLR-14608: Fix bug when caching docvalues objects related to the leafreader ord
894141b is described below

commit 894141b3c9461880917de471285d3b8a96c0a4fe
Author: Joel Bernstein <jb...@apache.org>
AuthorDate: Sun Dec 27 13:56:25 2020 -0500

    SOLR-14608: Fix bug when caching docvalues objects related to the leafreader ord
---
 .../solr/handler/export/BoolFieldWriter.java       |  4 ++--
 .../solr/handler/export/DateFieldWriter.java       |  2 +-
 .../solr/handler/export/DoubleFieldWriter.java     |  4 ++--
 .../solr/handler/export/FloatFieldWriter.java      |  4 ++--
 .../apache/solr/handler/export/IntFieldWriter.java |  4 ++--
 .../solr/handler/export/LongFieldWriter.java       |  4 ++--
 .../solr/handler/export/MultiFieldWriter.java      |  6 +++---
 .../solr/handler/export/StringFieldWriter.java     | 25 ++++++++++++++++------
 8 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/handler/export/BoolFieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/BoolFieldWriter.java
index b7edf98..0411b42 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/BoolFieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/BoolFieldWriter.java
@@ -32,7 +32,7 @@ class BoolFieldWriter extends FieldWriter {
   private String field;
   private FieldType fieldType;
   private CharsRefBuilder cref = new CharsRefBuilder();
-  private IntObjectHashMap<SortedDocValues> docValuesCache = new IntObjectHashMap();
+  private IntObjectHashMap<SortedDocValues> docValuesCache = new IntObjectHashMap<>();
 
 
   public BoolFieldWriter(String field, FieldType fieldType) {
@@ -51,7 +51,7 @@ class BoolFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = reader.getContext().ord;
+      int readerOrd = sortDoc.ord;
       SortedDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         SortedDocValues sortedDocValues = docValuesCache.get(readerOrd);
diff --git a/solr/core/src/java/org/apache/solr/handler/export/DateFieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/DateFieldWriter.java
index 143f13b7..905f9c3 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/DateFieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/DateFieldWriter.java
@@ -28,7 +28,7 @@ import org.apache.solr.common.MapWriter;
 
 class DateFieldWriter extends FieldWriter {
   private String field;
-  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap();
+  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap<>();
 
 
   public DateFieldWriter(String field) {
diff --git a/solr/core/src/java/org/apache/solr/handler/export/DoubleFieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/DoubleFieldWriter.java
index 96bda09..89e1aa0 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/DoubleFieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/DoubleFieldWriter.java
@@ -27,7 +27,7 @@ import org.apache.solr.common.MapWriter;
 
 class DoubleFieldWriter extends FieldWriter {
   private String field;
-  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap();
+  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap<>();
 
   public DoubleFieldWriter(String field) {
     this.field = field;
@@ -45,7 +45,7 @@ class DoubleFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = reader.getContext().ord;
+      int readerOrd = sortDoc.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
diff --git a/solr/core/src/java/org/apache/solr/handler/export/FloatFieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/FloatFieldWriter.java
index 6c2bd81..1da4641 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/FloatFieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/FloatFieldWriter.java
@@ -27,7 +27,7 @@ import org.apache.solr.common.MapWriter;
 
 class FloatFieldWriter extends FieldWriter {
   private String field;
-  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap();
+  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap<>();
 
   public FloatFieldWriter(String field) {
     this.field = field;
@@ -45,7 +45,7 @@ class FloatFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = reader.getContext().ord;
+      int readerOrd = sortDoc.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
diff --git a/solr/core/src/java/org/apache/solr/handler/export/IntFieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/IntFieldWriter.java
index 5a48df7..5ad522f 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/IntFieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/IntFieldWriter.java
@@ -27,7 +27,7 @@ import org.apache.solr.common.MapWriter;
 
 class IntFieldWriter extends FieldWriter {
   private String field;
-  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap();
+  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap<>();
 
   public IntFieldWriter(String field) {
     this.field = field;
@@ -44,7 +44,7 @@ class IntFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = reader.getContext().ord;
+      int readerOrd = sortDoc.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
diff --git a/solr/core/src/java/org/apache/solr/handler/export/LongFieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/LongFieldWriter.java
index 3af795d..62e503b 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/LongFieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/LongFieldWriter.java
@@ -28,7 +28,7 @@ import org.apache.solr.common.MapWriter;
 class LongFieldWriter extends FieldWriter {
   private String field;
 
-  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap();
+  private IntObjectHashMap<NumericDocValues> docValuesCache = new IntObjectHashMap<>();
 
   public LongFieldWriter(String field) {
     this.field = field;
@@ -45,7 +45,7 @@ class LongFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = reader.getContext().ord;
+      int readerOrd = sortDoc.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
diff --git a/solr/core/src/java/org/apache/solr/handler/export/MultiFieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/MultiFieldWriter.java
index 2110aa8..7a02b22 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/MultiFieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/MultiFieldWriter.java
@@ -38,7 +38,7 @@ class MultiFieldWriter extends FieldWriter {
   private boolean numeric;
   private CharsRefBuilder cref = new CharsRefBuilder();
   private final LongFunction<Object> bitsToValue;
-  private IntObjectHashMap docValuesCache = new IntObjectHashMap();
+  private IntObjectHashMap<Object> docValuesCache = new IntObjectHashMap<>();
 
 
   public MultiFieldWriter(String field, FieldType fieldType, SchemaField schemaField, boolean numeric) {
@@ -55,7 +55,7 @@ class MultiFieldWriter extends FieldWriter {
 
   public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter out, int fieldIndex) throws IOException {
     if (this.fieldType.isPointField()) {
-      int readerOrd = reader.getContext().ord;
+      int readerOrd = sortDoc.ord;
       SortedNumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         SortedNumericDocValues sortedNumericDocValues = (SortedNumericDocValues) docValuesCache.get(readerOrd);
@@ -82,7 +82,7 @@ class MultiFieldWriter extends FieldWriter {
           });
       return true;
     } else {
-      int readerOrd = reader.getContext().ord;
+      int readerOrd = sortDoc.ord;
       SortedSetDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         SortedSetDocValues sortedSetDocValues = (SortedSetDocValues) docValuesCache.get(readerOrd);
diff --git a/solr/core/src/java/org/apache/solr/handler/export/StringFieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/StringFieldWriter.java
index 7b51da0..b497ec2 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/StringFieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/StringFieldWriter.java
@@ -37,7 +37,7 @@ class StringFieldWriter extends FieldWriter {
   private FieldType fieldType;
   private BytesRef lastRef;
   private int lastOrd = -1;
-  private IntObjectHashMap<SortedDocValues> docValuesCache = new IntObjectHashMap();
+  private IntObjectHashMap<SortedDocValues> docValuesCache = new IntObjectHashMap<>();
 
   private CharsRefBuilder cref = new CharsRefBuilder();
   final ByteArrayUtf8CharSequence utf8 = new ByteArrayUtf8CharSequence(new byte[0], 0, 0) {
@@ -76,11 +76,8 @@ class StringFieldWriter extends FieldWriter {
     }
 
     if (ref == null) {
-
-      /*
-        Reuse the last DocValues object if possible
-       */
-      int readerOrd = reader.getContext().ord;
+      //Reuse the last DocValues object if possible
+      int readerOrd = sortDoc.ord;
       SortedDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         SortedDocValues sortedDocValues = docValuesCache.get(readerOrd);
@@ -104,6 +101,22 @@ class StringFieldWriter extends FieldWriter {
       lastRef = ref.clone();
     }
 
+
+/*
+    if (ref == null) {
+      SortedDocValues vals = DocValues.getSorted(reader, this.field);
+      if (vals.advance(sortDoc.docId) != sortDoc.docId) {
+        return false;
+      }
+
+      int ord = vals.ordValue();
+      ref = vals.lookupOrd(ord);
+      lastRef = ref.clone();
+    }
+
+ */
+
+
     if (ew instanceof JavaBinCodec.BinEntryWriter) {
       ew.put(this.field, utf8.reset(ref.bytes, ref.offset, ref.length, null));
     } else {