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 2020/07/30 13:49:14 UTC
[lucene-solr] branch jira/SOLR-14608-export updated: SOLR-14608:
More cleanups. Fix a bug in compareTo. Add SortDoc.equals() / hashCode().
This is an automated email from the ASF dual-hosted git repository.
ab 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 8e9a7af SOLR-14608: More cleanups. Fix a bug in compareTo. Add SortDoc.equals() / hashCode().
8e9a7af is described below
commit 8e9a7afddde80080150e3fd078005a8add29ac7f
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Jul 30 15:48:28 2020 +0200
SOLR-14608: More cleanups. Fix a bug in compareTo. Add SortDoc.equals() / hashCode().
---
.../solr/handler/export/DoubleValueSortDoc.java | 15 ++++++++++-
.../apache/solr/handler/export/ExportWriter.java | 31 +++++++++++++---------
.../solr/handler/export/QuadValueSortDoc.java | 10 ++++++-
.../solr/handler/export/SingleValueSortDoc.java | 11 +++++++-
.../org/apache/solr/handler/export/SortDoc.java | 18 ++++++++++++-
.../org/apache/solr/handler/export/SortValue.java | 20 +++++++-------
.../solr/handler/export/TripleValueSortDoc.java | 10 ++++++-
7 files changed, 87 insertions(+), 28 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/handler/export/DoubleValueSortDoc.java b/solr/core/src/java/org/apache/solr/handler/export/DoubleValueSortDoc.java
index 8bca043..bb510ec 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/DoubleValueSortDoc.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/DoubleValueSortDoc.java
@@ -25,6 +25,7 @@ class DoubleValueSortDoc extends SingleValueSortDoc {
protected SortValue value2;
+ @Override
public SortValue getSortValue(String field) {
if (value1.getField().equals(field)) {
return value1;
@@ -34,6 +35,7 @@ class DoubleValueSortDoc extends SingleValueSortDoc {
return null;
}
+ @Override
public void setNextReader(LeafReaderContext context) throws IOException {
this.ord = context.ord;
this.docBase = context.docBase;
@@ -41,6 +43,7 @@ class DoubleValueSortDoc extends SingleValueSortDoc {
value2.setNextReader(context);
}
+ @Override
public void reset() {
this.docId = -1;
this.docBase = -1;
@@ -49,6 +52,7 @@ class DoubleValueSortDoc extends SingleValueSortDoc {
value2.reset();
}
+ @Override
public void setValues(int docId) throws IOException {
this.docId = docId;
value1.setCurrentValue(docId);
@@ -62,6 +66,7 @@ class DoubleValueSortDoc extends SingleValueSortDoc {
value2.toGlobalValue(doubleValueSortDoc.value2);
}
+ @Override
public void setValues(SortDoc sortDoc) {
this.docId = sortDoc.docId;
this.ord = sortDoc.ord;
@@ -75,10 +80,12 @@ class DoubleValueSortDoc extends SingleValueSortDoc {
this.value2 = value2;
}
+ @Override
public SortDoc copy() {
return new DoubleValueSortDoc(value1.copy(), value2.copy());
}
+ @Override
public boolean lessThan(Object o) {
DoubleValueSortDoc sd = (DoubleValueSortDoc) o;
int comp = value1.compareTo(sd.value1);
@@ -98,11 +105,17 @@ class DoubleValueSortDoc extends SingleValueSortDoc {
}
}
+ @Override
public int compareTo(SortDoc o) {
DoubleValueSortDoc sd = (DoubleValueSortDoc) o;
int comp = value1.compareTo(sd.value1);
if (comp == 0) {
- return value2.compareTo(sd.value2);
+ comp = value2.compareTo(sd.value2);
+ if (comp == 0) {
+ return docId + docBase - sd.docId - sd.docBase;
+ } else {
+ return comp;
+ }
} else {
return comp;
}
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 3954605..9ad0755 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
@@ -121,6 +121,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
final Timer writeOutputBufferTimer;
final Timer writerWaitTimer;
final Timer fillerWaitTimer;
+ final Timer topDocsTimer;
final Timer totalTimer;
@@ -141,6 +142,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
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);
}
@@ -668,7 +670,7 @@ 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());
+ segmentIterators[i] = new SegmentIterator(bits[i], leaves.get(i), sortQueue, sortDoc.copy(), topDocsTimer);
}
return new MergeIterator(segmentIterators, sortDoc);
@@ -679,26 +681,26 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
private static class SegmentIterator {
- private FixedBitSet bits;
- private SortQueue queue;
- private SortDoc sortDoc;
- private SortDoc lastDoc;
+ private final FixedBitSet bits;
+ private final SortQueue queue;
+ private final SortDoc sortDoc;
+ private final LeafReaderContext context;
+ private final SortDoc[] outDocs;
+ private final Timer topDocsTimer;
+
private SortDoc nextDoc;
- private int ord;
- private LeafReaderContext context;
- private SortDoc[] outDocs;
private int index;
- public SegmentIterator(FixedBitSet bits, LeafReaderContext context, SortQueue sortQueue, SortDoc sortDoc) throws IOException {
+ public SegmentIterator(FixedBitSet bits, LeafReaderContext context, SortQueue sortQueue, SortDoc sortDoc,
+ Timer topDocsTimer) throws IOException {
this.bits = bits;
this.queue = sortQueue;
this.sortDoc = sortDoc;
- this.lastDoc = sortDoc.copy();
this.nextDoc = sortDoc.copy();
this.context = context;
- this.ord = context.ord;
this.outDocs = new SortDoc[sortQueue.maxSize];
+ this.topDocsTimer = topDocsTimer;
topDocs();
}
@@ -732,6 +734,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
}
private void topDocs() {
+ Timer.Context timerContext = topDocsTimer.time();
try {
queue.reset();
SortDoc top = queue.top();
@@ -749,14 +752,16 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
//Pop the queue and load up the array.
index = -1;
- while (true) {
- SortDoc sortDoc = queue.pop();
+ SortDoc sortDoc;
+ while ((sortDoc = queue.pop()) != null) {
if (sortDoc.docId > -1) {
outDocs[++index] = sortDoc;
}
}
} catch (Exception e) {
e.printStackTrace();
+ } finally {
+ timerContext.stop();
}
}
}
diff --git a/solr/core/src/java/org/apache/solr/handler/export/QuadValueSortDoc.java b/solr/core/src/java/org/apache/solr/handler/export/QuadValueSortDoc.java
index 38ecaf9..aa389f8 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/QuadValueSortDoc.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/QuadValueSortDoc.java
@@ -25,6 +25,7 @@ class QuadValueSortDoc extends TripleValueSortDoc {
protected SortValue value4;
+ @Override
public SortValue getSortValue(String field) {
if (value1.getField().equals(field)) {
return value1;
@@ -38,6 +39,7 @@ class QuadValueSortDoc extends TripleValueSortDoc {
return null;
}
+ @Override
public void setNextReader(LeafReaderContext context) throws IOException {
this.ord = context.ord;
this.docBase = context.docBase;
@@ -57,6 +59,7 @@ class QuadValueSortDoc extends TripleValueSortDoc {
value4.toGlobalValue(quadValueSortDoc.value4);
}
+ @Override
public void reset() {
this.docId = -1;
this.docBase = -1;
@@ -67,6 +70,7 @@ class QuadValueSortDoc extends TripleValueSortDoc {
value4.reset();
}
+ @Override
public void setValues(int docId) throws IOException {
this.docId = docId;
value1.setCurrentValue(docId);
@@ -75,6 +79,7 @@ class QuadValueSortDoc extends TripleValueSortDoc {
value4.setCurrentValue(docId);
}
+ @Override
public void setValues(SortDoc sortDoc) {
this.docId = sortDoc.docId;
this.ord = sortDoc.ord;
@@ -90,10 +95,12 @@ class QuadValueSortDoc extends TripleValueSortDoc {
this.value4 = value4;
}
+ @Override
public SortDoc copy() {
return new QuadValueSortDoc(value1.copy(), value2.copy(), value3.copy(), value4.copy());
}
+ @Override
public boolean lessThan(Object o) {
QuadValueSortDoc sd = (QuadValueSortDoc) o;
@@ -128,6 +135,7 @@ class QuadValueSortDoc extends TripleValueSortDoc {
}
}
+ @Override
public int compareTo(SortDoc o) {
QuadValueSortDoc sd = (QuadValueSortDoc) o;
int comp = value1.compareTo(sd.value1);
@@ -138,7 +146,7 @@ class QuadValueSortDoc extends TripleValueSortDoc {
if (comp == 0) {
comp = value4.compareTo(sd.value4);
if (comp == 0) {
- return docId + docBase - sd.docId + sd.docBase;
+ return docId + docBase - sd.docId - sd.docBase;
} else {
return comp;
}
diff --git a/solr/core/src/java/org/apache/solr/handler/export/SingleValueSortDoc.java b/solr/core/src/java/org/apache/solr/handler/export/SingleValueSortDoc.java
index 61f20b4..d502f97 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/SingleValueSortDoc.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/SingleValueSortDoc.java
@@ -25,6 +25,7 @@ class SingleValueSortDoc extends SortDoc {
protected SortValue value1;
+ @Override
public SortValue getSortValue(String field) {
if (value1.getField().equals(field)) {
return value1;
@@ -32,12 +33,14 @@ class SingleValueSortDoc extends SortDoc {
return null;
}
+ @Override
public void setNextReader(LeafReaderContext context) throws IOException {
this.ord = context.ord;
this.docBase = context.docBase;
value1.setNextReader(context);
}
+ @Override
public void reset() {
this.docId = -1;
this.docBase = -1;
@@ -45,11 +48,13 @@ class SingleValueSortDoc extends SortDoc {
this.value1.reset();
}
+ @Override
public void setValues(int docId) throws IOException {
this.docId = docId;
value1.setCurrentValue(docId);
}
+ @Override
public void setValues(SortDoc sortDoc) {
this.docId = sortDoc.docId;
this.ord = sortDoc.ord;
@@ -62,15 +67,18 @@ class SingleValueSortDoc extends SortDoc {
this.value1 = value1;
}
+ @Override
public void setGlobalValues(SortDoc previous) {
SortValue previousValue = ((SingleValueSortDoc) previous).value1;
value1.toGlobalValue(previousValue);
}
+ @Override
public SortDoc copy() {
return new SingleValueSortDoc(value1.copy());
}
+ @Override
public boolean lessThan(Object o) {
SingleValueSortDoc sd = (SingleValueSortDoc) o;
int comp = value1.compareTo(sd.value1);
@@ -83,11 +91,12 @@ class SingleValueSortDoc extends SortDoc {
}
}
+ @Override
public int compareTo(SortDoc o) {
SingleValueSortDoc sd = (SingleValueSortDoc) o;
int comp = value1.compareTo(sd.value1);
if (comp == 0) {
- return docId + docBase - sd.docId + sd.docBase;
+ return docId + docBase - sd.docId - sd.docBase;
} else {
return comp;
}
diff --git a/solr/core/src/java/org/apache/solr/handler/export/SortDoc.java b/solr/core/src/java/org/apache/solr/handler/export/SortDoc.java
index 2bad3c8..d0022c7 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/SortDoc.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/SortDoc.java
@@ -18,6 +18,7 @@
package org.apache.solr.handler.export;
import java.io.IOException;
+import java.util.Objects;
import org.apache.lucene.index.LeafReaderContext;
@@ -37,6 +38,20 @@ class SortDoc implements Comparable<SortDoc> {
}
+ @Override
+ public boolean equals(Object obj) {
+ // subclasses are not equal
+ if (!obj.getClass().equals(getClass())) {
+ return false;
+ }
+ return compareTo((SortDoc) obj) == 0;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(docId, ord, docBase);
+ }
+
public SortValue getSortValue(String field) {
for (SortValue value : sortValues) {
if (value.getField().equals(field)) {
@@ -112,6 +127,7 @@ class SortDoc implements Comparable<SortDoc> {
return docId + docBase > sd.docId + sd.docBase; //index order
}
+ @Override
public int compareTo(SortDoc sd) {
for (int i = 0; i < sortValues.length; i++) {
int comp = sortValues[i].compareTo(sd.sortValues[i]);
@@ -119,7 +135,7 @@ class SortDoc implements Comparable<SortDoc> {
return comp;
}
}
- return 0;
+ return docId + docBase - sd.docId - sd.docBase;
}
public String toString() {
diff --git a/solr/core/src/java/org/apache/solr/handler/export/SortValue.java b/solr/core/src/java/org/apache/solr/handler/export/SortValue.java
index 93f342e..da42be0 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/SortValue.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/SortValue.java
@@ -21,19 +21,19 @@ import java.io.IOException;
import org.apache.lucene.index.LeafReaderContext;
-public interface SortValue extends Comparable<SortValue> {
- public void setCurrentValue(int docId) throws IOException;
- public void setNextReader(LeafReaderContext context) throws IOException;
- public void setCurrentValue(SortValue value);
- public void toGlobalValue(SortValue previousValue);
- public void reset();
- public SortValue copy();
- public Object getCurrentValue() throws IOException;
- public String getField();
+interface SortValue extends Comparable<SortValue> {
+ void setCurrentValue(int docId) throws IOException;
+ void setNextReader(LeafReaderContext context) throws IOException;
+ void setCurrentValue(SortValue value);
+ void toGlobalValue(SortValue previousValue);
+ void reset();
+ SortValue copy();
+ Object getCurrentValue() throws IOException;
+ String getField();
/**
*
* @return true if document has a value for the specified field
*/
- public boolean isPresent();
+ boolean isPresent();
}
\ No newline at end of file
diff --git a/solr/core/src/java/org/apache/solr/handler/export/TripleValueSortDoc.java b/solr/core/src/java/org/apache/solr/handler/export/TripleValueSortDoc.java
index bbcf230..9863183 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/TripleValueSortDoc.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/TripleValueSortDoc.java
@@ -25,6 +25,7 @@ class TripleValueSortDoc extends DoubleValueSortDoc {
protected SortValue value3;
+ @Override
public SortValue getSortValue(String field) {
if (value1.getField().equals(field)) {
return value1;
@@ -36,6 +37,7 @@ class TripleValueSortDoc extends DoubleValueSortDoc {
return null;
}
+ @Override
public void setNextReader(LeafReaderContext context) throws IOException {
this.ord = context.ord;
this.docBase = context.docBase;
@@ -44,6 +46,7 @@ class TripleValueSortDoc extends DoubleValueSortDoc {
value3.setNextReader(context);
}
+ @Override
public void reset() {
this.docId = -1;
this.docBase = -1;
@@ -53,6 +56,7 @@ class TripleValueSortDoc extends DoubleValueSortDoc {
value3.reset();
}
+ @Override
public void setValues(int docId) throws IOException {
this.docId = docId;
value1.setCurrentValue(docId);
@@ -68,6 +72,7 @@ class TripleValueSortDoc extends DoubleValueSortDoc {
value3.toGlobalValue(tripleValueSortDoc.value3);
}
+ @Override
public void setValues(SortDoc sortDoc) {
this.docId = sortDoc.docId;
this.ord = sortDoc.ord;
@@ -82,10 +87,12 @@ class TripleValueSortDoc extends DoubleValueSortDoc {
this.value3 = value3;
}
+ @Override
public SortDoc copy() {
return new TripleValueSortDoc(value1.copy(), value2.copy(), value3.copy());
}
+ @Override
public boolean lessThan(Object o) {
TripleValueSortDoc sd = (TripleValueSortDoc) o;
int comp = value1.compareTo(sd.value1);
@@ -112,6 +119,7 @@ class TripleValueSortDoc extends DoubleValueSortDoc {
}
}
+ @Override
public int compareTo(SortDoc o) {
TripleValueSortDoc sd = (TripleValueSortDoc) o;
int comp = value1.compareTo(sd.value1);
@@ -120,7 +128,7 @@ class TripleValueSortDoc extends DoubleValueSortDoc {
if (comp == 0) {
comp = value3.compareTo(sd.value3);
if (comp == 0) {
- return docId + docBase - sd.docId + sd.docBase;
+ return docId + docBase - sd.docId - sd.docBase;
} else {
return comp;
}