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/28 20:00:44 UTC

[lucene-solr] branch jira/SOLR-14608-export updated: SOLR-14608: Code clean up

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 4e2cd9a  SOLR-14608: Code clean up
4e2cd9a is described below

commit 4e2cd9aaeaeeeed835af6b638faeefab231d7b9a
Author: Joel Bernstein <jb...@apache.org>
AuthorDate: Mon Dec 28 15:00:12 2020 -0500

    SOLR-14608: Code clean up
---
 .../solr/handler/export/BoolFieldWriter.java       |  8 +--
 .../solr/handler/export/DateFieldWriter.java       |  8 +--
 .../solr/handler/export/DoubleFieldWriter.java     |  8 +--
 .../apache/solr/handler/export/ExportBuffers.java  | 35 +++--------
 .../apache/solr/handler/export/ExportWriter.java   | 72 ++++++++--------------
 .../apache/solr/handler/export/FieldWriter.java    |  4 +-
 .../solr/handler/export/FloatFieldWriter.java      |  8 +--
 .../apache/solr/handler/export/IntFieldWriter.java |  8 +--
 .../solr/handler/export/LongFieldWriter.java       |  8 +--
 .../solr/handler/export/MultiFieldWriter.java      | 10 +--
 .../solr/handler/export/StringFieldWriter.java     | 29 ++-------
 11 files changed, 71 insertions(+), 127 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 0411b42..57c6dab 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
@@ -21,7 +21,7 @@ import java.io.IOException;
 
 import com.carrotsearch.hppc.IntObjectHashMap;
 import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.SortedDocValues;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.CharsRefBuilder;
@@ -40,7 +40,7 @@ class BoolFieldWriter extends FieldWriter {
     this.fieldType = fieldType;
   }
 
-  public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
+  public boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
     BytesRef ref;
     SortValue sortValue = sortDoc.getSortValue(this.field);
     if (sortValue != null) {
@@ -51,7 +51,7 @@ class BoolFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = sortDoc.ord;
+      int readerOrd = readerContext.ord;
       SortedDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         SortedDocValues sortedDocValues = docValuesCache.get(readerOrd);
@@ -62,7 +62,7 @@ class BoolFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getSorted(reader, this.field);
+        vals = DocValues.getSorted(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
 
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 905f9c3..e44ba08 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
@@ -22,7 +22,7 @@ import java.util.Date;
 
 import com.carrotsearch.hppc.IntObjectHashMap;
 import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.solr.common.MapWriter;
 
@@ -35,7 +35,7 @@ class DateFieldWriter extends FieldWriter {
     this.field = field;
   }
 
-  public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
+  public boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
     Long val;
     SortValue sortValue = sortDoc.getSortValue(this.field);
     if (sortValue != null) {
@@ -46,7 +46,7 @@ class DateFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = reader.getContext().ord;
+      int readerOrd = readerContext.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
@@ -57,7 +57,7 @@ class DateFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getNumeric(reader, this.field);
+        vals = DocValues.getNumeric(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
 
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 89e1aa0..cb36a75 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
@@ -21,7 +21,7 @@ import java.io.IOException;
 
 import com.carrotsearch.hppc.IntObjectHashMap;
 import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.solr.common.MapWriter;
 
@@ -33,7 +33,7 @@ class DoubleFieldWriter extends FieldWriter {
     this.field = field;
   }
 
-  public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
+  public boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
     SortValue sortValue = sortDoc.getSortValue(this.field);
     if (sortValue != null) {
       if (sortValue.isPresent()) {
@@ -45,7 +45,7 @@ class DoubleFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = sortDoc.ord;
+      int readerOrd = readerContext.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
@@ -56,7 +56,7 @@ class DoubleFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getNumeric(reader, this.field);
+        vals = DocValues.getNumeric(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
       if (vals.advance(sortDoc.docId) == sortDoc.docId) {
diff --git a/solr/core/src/java/org/apache/solr/handler/export/ExportBuffers.java b/solr/core/src/java/org/apache/solr/handler/export/ExportBuffers.java
index da25344..3ddcdfe 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/ExportBuffers.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/ExportBuffers.java
@@ -28,7 +28,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.LongAdder;
 import java.util.concurrent.BrokenBarrierException;
 
-import com.codahale.metrics.Timer;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.search.Sort;
 import org.apache.lucene.util.FixedBitSet;
@@ -54,9 +53,6 @@ class ExportBuffers {
   final List<LeafReaderContext> leaves;
   final ExportWriter exportWriter;
   final OutputStream os;
-  final Timer writeOutputBufferTimer;
-  final Timer fillerWaitTimer;
-  final Timer writerWaitTimer;
   final IteratorWriter.ItemWriter rawWriter;
   final IteratorWriter.ItemWriter writer;
   final CyclicBarrier barrier;
@@ -71,7 +67,7 @@ class ExportBuffers {
 
   ExportBuffers(ExportWriter exportWriter, List<LeafReaderContext> leaves, SolrIndexSearcher searcher,
                 OutputStream os, IteratorWriter.ItemWriter rawWriter, Sort sort, int queueSize, int totalHits,
-                Timer writeOutputBufferTimer, Timer fillerWaitTimer, Timer writerWaitTimer, FixedBitSet[] sets) throws IOException {
+                FixedBitSet[] sets) throws IOException {
     this.exportWriter = exportWriter;
     this.leaves = leaves;
     this.os = os;
@@ -84,9 +80,7 @@ class ExportBuffers {
         return this;
       }
     };
-    this.writeOutputBufferTimer = writeOutputBufferTimer;
-    this.fillerWaitTimer = fillerWaitTimer;
-    this.writerWaitTimer = writerWaitTimer;
+
     this.bufferOne = new Buffer(queueSize);
     this.bufferTwo = new Buffer(queueSize);
     this.totalHits = totalHits;
@@ -106,30 +100,29 @@ class ExportBuffers {
         long lastOutputCounter = 0;
         for (int count = 0; count < totalHits; ) {
           // log.debug("--- filler fillOutDocs in {}", fillBuffer);
-
           exportWriter.fillOutDocs(mergeIterator, buffer);
           count += (buffer.outDocsIndex + 1);
           // log.debug("--- filler count={}, exchange buffer from {}", count, buffer);
-          Timer.Context timerContext = getFillerWaitTimer().time();
           try {
+            long startBufferWait = System.nanoTime();
             exchangeBuffers();
+            long endBufferWait = System.nanoTime();
+            log.debug("Waited for write thread:"+Long.toString(((endBufferWait-startBufferWait)/1000000000)));
           } finally {
-            timerContext.stop();
+
           }
+
           buffer = getFillBuffer();
           if (outputCounter.longValue() > lastOutputCounter) {
             lastOutputCounter = outputCounter.longValue();
             flushOutput();
           }
-          // log.debug("--- filler got empty buffer {}", buffer);
         }
         buffer.outDocsIndex = Buffer.NO_MORE_DOCS;
-        // log.debug("--- filler final exchange buffer from {}", buffer);
-        Timer.Context timerContext = getFillerWaitTimer().time();
         try {
           exchangeBuffers();
         } finally {
-          timerContext.stop();
+
         }
         buffer = getFillBuffer();
         // log.debug("--- filler final got buffer {}", buffer);
@@ -185,18 +178,6 @@ class ExportBuffers {
     return fillBuffer;
   }
 
-  public Timer getWriteOutputBufferTimer() {
-    return writeOutputBufferTimer;
-  }
-
-  public Timer getFillerWaitTimer() {
-    return fillerWaitTimer;
-  }
-
-  public Timer getWriterWaitTimer() {
-    return writerWaitTimer;
-  }
-
   // decorated writer that keeps track of number of writes
   public IteratorWriter.ItemWriter getWriter() {
     return writer;
diff --git a/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java b/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
index d278021..158a7cd 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
@@ -17,8 +17,6 @@
 
 package org.apache.solr.handler.export;
 
-
-
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -29,7 +27,6 @@ import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.TreeSet;
 
-import com.codahale.metrics.Timer;
 import org.apache.lucene.index.LeafReader;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.SortedDocValues;
@@ -77,12 +74,12 @@ import org.apache.solr.schema.StrField;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.search.SortSpec;
 import org.apache.solr.search.SyntaxError;
+import org.eclipse.jetty.util.IO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static java.util.Collections.singletonList;
 import static java.util.Collections.singletonMap;
-import java.util.LinkedList;
 import static org.apache.solr.common.util.Utils.makeMap;
 
 /**
@@ -118,13 +115,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
   FixedBitSet[] sets = null;
   PushWriter writer;
   private String wt;
-  final Timer transferBatchToBufferTimer;
-  final Timer getMergeIteratorTimer;
-  final Timer writeOutputBufferTimer;
-  final Timer writerWaitTimer;
-  final Timer fillerWaitTimer;
-  final Timer topDocsTimer;
-  final Timer totalTimer;
+
 
 
   public ExportWriter(SolrQueryRequest req, SolrQueryResponse res, String wt,
@@ -139,13 +130,6 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
     // may be too tricky to get this right? always use default for now
     //this.batchSize = req.getParams().getInt(BATCH_SIZE_PARAM, DEFAULT_BATCH_SIZE);
     this.batchSize = DEFAULT_BATCH_SIZE;
-    getMergeIteratorTimer = solrMetricsContext.timer("createMergeIterator", metricsPath);
-    transferBatchToBufferTimer = solrMetricsContext.timer("transferBatchToBuffer", metricsPath);
-    writeOutputBufferTimer = solrMetricsContext.timer("writeOutputBuffer", metricsPath);
-    writerWaitTimer = solrMetricsContext.timer("writerWait", metricsPath);
-    fillerWaitTimer = solrMetricsContext.timer("fillerWait", metricsPath);
-    topDocsTimer = solrMetricsContext.timer("segTopDocs", metricsPath);
-    totalTimer = solrMetricsContext.timer("totalTime", metricsPath);
   }
 
   @Override
@@ -188,11 +172,10 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
   }
 
   public void write(OutputStream os) throws IOException {
-    Timer.Context timerContext = totalTimer.time();
     try {
       _write(os);
     } finally {
-      timerContext.stop();
+
     }
   }
 
@@ -333,7 +316,6 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
 
   private void transferBatchToBufferForOutput(MergeIterator mergeIterator,
                                               ExportBuffers.Buffer destination) throws IOException {
-    Timer.Context timerContext = transferBatchToBufferTimer.time();
     try {
       int outDocsIndex = -1;
       for (int i = 0; i < batchSize; i++) {
@@ -352,7 +334,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
       }
       throw t;
     } finally {
-      timerContext.stop();
+
     }
   }
 
@@ -361,8 +343,15 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
     final int queueSize = Math.min(batchSize, totalHits);
 
 
-    ExportBuffers buffers = new ExportBuffers(this, leaves, req.getSearcher(), os, writer, sort, queueSize, totalHits,
-        writeOutputBufferTimer, fillerWaitTimer, writerWaitTimer, sets);
+    ExportBuffers buffers = new ExportBuffers(this,
+                                              leaves,
+                                              req.getSearcher(),
+                                              os,
+                                              writer,
+                                              sort,
+                                              queueSize,
+                                              totalHits,
+                                              sets);
 
 
     if (streamExpression != null) {
@@ -415,7 +404,6 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
             log.debug("--- writer interrupted");
             break;
           }
-          Timer.Context timerContext = writeOutputBufferTimer.time();
           try {
             for (int i = 0; i <= buffer.outDocsIndex; ++i) {
               // we're using the raw writer here because there's no potential
@@ -425,14 +413,14 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
               writer.add((MapWriter) ew -> writeDoc(currentDoc, leaves, ew, fieldWriters));
             }
           } finally {
-            timerContext.stop();
           }
           log.debug("--- writer exchanging from {}", buffer);
-          timerContext = writerWaitTimer.time();
           try {
+            long startExchangeBuffers = System.nanoTime();
             buffers.exchangeBuffers();
+            long endExchangeBuffers = System.nanoTime();
+            log.debug("Waited for reader thread:"+Long.toString(((endExchangeBuffers-startExchangeBuffers)/1000000000)));
           } finally {
-            timerContext.stop();
           }
           buffer = buffers.getOutputBuffer();
           log.debug("--- writer got {}", buffer);
@@ -624,7 +612,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
     private SegmentIterator[] segmentIterators;
     private SortDoc outDoc;
 
-    public MergeIterator(SegmentIterator[] segmentIterators, SortDoc proto) {
+    public MergeIterator(SegmentIterator[] segmentIterators, SortDoc proto) throws IOException {
       outDoc = proto.copy();
       this.segmentIterators = segmentIterators;
       for (int i = 0; i < segmentIterators.length; i++) {
@@ -633,11 +621,10 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
           if (sortDoc != null) {
             set.add(sortDoc);
           }
-        } catch (Exception e) {
-          e.printStackTrace();
+        } catch (IOException e) {
+          log.error("Error in MergeIterator: ", e);
           throw e;
         }
-
       }
     }
 
@@ -646,7 +633,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
     * Returns null when all docs are iterated.
     */
 
-    public SortDoc next() {
+    public SortDoc next() throws IOException {
       SortDoc sortDoc = set.pollLast();
       //We've exhausted all documents
       if (sortDoc == null) {
@@ -665,7 +652,6 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
   }
 
   public MergeIterator getMergeIterator(List<LeafReaderContext> leaves, FixedBitSet[] bits, SortDoc sortDoc) throws IOException {
-    Timer.Context timerContext = getMergeIteratorTimer.time();
     try {
       long totalDocs = 0;
       for (int i = 0; i < leaves.size(); i++) {
@@ -682,12 +668,11 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
       SegmentIterator[] segmentIterators = new SegmentIterator[leaves.size()];
       for (int i = 0; i < segmentIterators.length; i++) {
         SortQueue sortQueue = new SortQueue(sizes[i], sortDoc.copy());
-        segmentIterators[i] = new SegmentIterator(bits[i], leaves.get(i), sortQueue, sortDoc.copy(), topDocsTimer);
+        segmentIterators[i] = new SegmentIterator(bits[i], leaves.get(i), sortQueue, sortDoc.copy());
       }
 
       return new MergeIterator(segmentIterators, sortDoc);
     } finally {
-      timerContext.stop();
     }
   }
 
@@ -698,25 +683,22 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
     private final SortDoc sortDoc;
     private final LeafReaderContext context;
     private final SortDoc[] outDocs;
-    private final Timer topDocsTimer;
 
     private SortDoc nextDoc;
     private int index;
 
 
-    public SegmentIterator(FixedBitSet bits, LeafReaderContext context, SortQueue sortQueue, SortDoc sortDoc,
-                           Timer topDocsTimer) throws IOException {
+    public SegmentIterator(FixedBitSet bits, LeafReaderContext context, SortQueue sortQueue, SortDoc sortDoc) throws IOException {
       this.bits = bits;
       this.queue = sortQueue;
       this.sortDoc = sortDoc;
       this.nextDoc = sortDoc.copy();
       this.context = context;
       this.outDocs = new SortDoc[sortQueue.maxSize];
-      this.topDocsTimer = topDocsTimer;
       topDocs();
     }
 
-    public SortDoc next() {
+    public SortDoc next() throws IOException {
       SortDoc sortDoc = null;
       if (index > -1) {
         sortDoc = outDocs[index--];
@@ -745,8 +727,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
       return nextDoc;
     }
 
-    private void topDocs() {
-      Timer.Context timerContext = topDocsTimer.time();
+    private void topDocs() throws IOException {
       try {
         queue.reset();
         SortDoc top = queue.top();
@@ -771,9 +752,10 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
           }
         }
       } catch (Exception e) {
-        e.printStackTrace();
+        log.error("Segment Iterator Error:", e);
+        throw new IOException(e);
       } finally {
-        timerContext.stop();
+
       }
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/handler/export/FieldWriter.java b/solr/core/src/java/org/apache/solr/handler/export/FieldWriter.java
index 9c1361c..fd8cd58 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/FieldWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/FieldWriter.java
@@ -19,9 +19,9 @@ package org.apache.solr.handler.export;
 
 import java.io.IOException;
 
-import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.solr.common.MapWriter;
 
 abstract class FieldWriter {
-  public abstract boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter out, int fieldIndex) throws IOException;
+  public abstract boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter out, int fieldIndex) throws IOException;
 }
\ No newline at end of file
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 1da4641..9a498f6 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
@@ -21,7 +21,7 @@ import java.io.IOException;
 
 import com.carrotsearch.hppc.IntObjectHashMap;
 import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.solr.common.MapWriter;
 
@@ -33,7 +33,7 @@ class FloatFieldWriter extends FieldWriter {
     this.field = field;
   }
 
-  public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
+  public boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
     SortValue sortValue = sortDoc.getSortValue(this.field);
     if (sortValue != null) {
       if (sortValue.isPresent()) {
@@ -45,7 +45,7 @@ class FloatFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = sortDoc.ord;
+      int readerOrd = readerContext.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
@@ -56,7 +56,7 @@ class FloatFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getNumeric(reader, this.field);
+        vals = DocValues.getNumeric(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
 
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 5ad522f..1ce5426 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
@@ -21,7 +21,7 @@ import java.io.IOException;
 
 import com.carrotsearch.hppc.IntObjectHashMap;
 import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.solr.common.MapWriter;
 
@@ -33,7 +33,7 @@ class IntFieldWriter extends FieldWriter {
     this.field = field;
   }
 
-  public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
+  public boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
     int val;
     SortValue sortValue = sortDoc.getSortValue(this.field);
     if (sortValue != null) {
@@ -44,7 +44,7 @@ class IntFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = sortDoc.ord;
+      int readerOrd = readerContext.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
@@ -55,7 +55,7 @@ class IntFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getNumeric(reader, this.field);
+        vals = DocValues.getNumeric(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
 
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 62e503b..457adf4 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
@@ -21,7 +21,7 @@ import java.io.IOException;
 
 import com.carrotsearch.hppc.IntObjectHashMap;
 import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.solr.common.MapWriter;
 
@@ -34,7 +34,7 @@ class LongFieldWriter extends FieldWriter {
     this.field = field;
   }
 
-  public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
+  public boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
     long val;
     SortValue sortValue = sortDoc.getSortValue(this.field);
     if (sortValue != null) {
@@ -45,7 +45,7 @@ class LongFieldWriter extends FieldWriter {
       }
     } else {
       // field is not part of 'sort' param, but part of 'fl' param
-      int readerOrd = sortDoc.ord;
+      int readerOrd = readerContext.ord;
       NumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         NumericDocValues numericDocValues = docValuesCache.get(readerOrd);
@@ -56,7 +56,7 @@ class LongFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getNumeric(reader, this.field);
+        vals = DocValues.getNumeric(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
 
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 7a02b22..2748b71 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
@@ -53,9 +53,9 @@ class MultiFieldWriter extends FieldWriter {
     }
   }
 
-  public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter out, int fieldIndex) throws IOException {
+  public boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter out, int fieldIndex) throws IOException {
     if (this.fieldType.isPointField()) {
-      int readerOrd = sortDoc.ord;
+      int readerOrd = readerContext.ord;
       SortedNumericDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         SortedNumericDocValues sortedNumericDocValues = (SortedNumericDocValues) docValuesCache.get(readerOrd);
@@ -66,7 +66,7 @@ class MultiFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getSortedNumeric(reader, this.field);
+        vals = DocValues.getSortedNumeric(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
 
@@ -82,7 +82,7 @@ class MultiFieldWriter extends FieldWriter {
           });
       return true;
     } else {
-      int readerOrd = sortDoc.ord;
+      int readerOrd = readerContext.ord;
       SortedSetDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         SortedSetDocValues sortedSetDocValues = (SortedSetDocValues) docValuesCache.get(readerOrd);
@@ -93,7 +93,7 @@ class MultiFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getSortedSet(reader, this.field);
+        vals = DocValues.getSortedSet(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
 
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 b497ec2..fdbc954 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
@@ -18,12 +18,9 @@
 package org.apache.solr.handler.export;
 
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
 import com.carrotsearch.hppc.IntObjectHashMap;
 import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.SortedDocValues;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.CharsRefBuilder;
@@ -57,7 +54,7 @@ class StringFieldWriter extends FieldWriter {
     this.fieldType = fieldType;
   }
 
-  public boolean write(SortDoc sortDoc, LeafReader reader, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
+  public boolean write(SortDoc sortDoc, LeafReaderContext readerContext, MapWriter.EntryWriter ew, int fieldIndex) throws IOException {
     StringValue stringValue = (StringValue) sortDoc.getSortValue(this.field);
     BytesRef ref = null;
 
@@ -65,7 +62,7 @@ class StringFieldWriter extends FieldWriter {
       /*
         We already have the top level ordinal used for sorting.
         Now let's use it for caching the BytesRef so we don't have to look it up.
-        When we have long runs of repeated values do to the sort order of the docs this is huge win.
+        When we have long runs of repeated values do to the sort order of the docs this is a huge win.
        */
 
       if (this.lastOrd == stringValue.currentOrd) {
@@ -77,7 +74,7 @@ class StringFieldWriter extends FieldWriter {
 
     if (ref == null) {
       //Reuse the last DocValues object if possible
-      int readerOrd = sortDoc.ord;
+      int readerOrd = readerContext.ord;
       SortedDocValues vals = null;
       if(docValuesCache.containsKey(readerOrd)) {
         SortedDocValues sortedDocValues = docValuesCache.get(readerOrd);
@@ -88,7 +85,7 @@ class StringFieldWriter extends FieldWriter {
       }
 
       if(vals == null) {
-        vals = DocValues.getSorted(reader, this.field);
+        vals = DocValues.getSorted(readerContext.reader(), this.field);
         docValuesCache.put(readerOrd, vals);
       }
 
@@ -101,22 +98,6 @@ 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 {