diff --git a/server/src/main/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapper.java
index f531f60d2e0ae..472fb5f2d763d 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapper.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapper.java
@@ -92,12 +92,12 @@ protected BoundsBlockLoader(String fieldName) {
}
@Override
- public BlockLoader.AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public BlockLoader.ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
breaker.addEstimateBytesAndMaybeBreak(BLOCK_LOADER_ESTIMATED_SIZE, "load blocks");
BinaryDocValues binaryDocValues = context.reader().getBinaryDocValues(fieldName);
if (binaryDocValues == null) {
breaker.addWithoutBreaking(-BLOCK_LOADER_ESTIMATED_SIZE);
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
return new BoundsReader(breaker, binaryDocValues);
}
@@ -108,7 +108,7 @@ public BlockLoader.Builder builder(BlockLoader.BlockFactory factory, int expecte
}
}
- private static class BoundsReader implements BlockLoader.AllReader {
+ private static class BoundsReader implements BlockLoader.ColumnAtATimeReader {
private final GeometryDocValueReader reader = new GeometryDocValueReader();
private final CircuitBreaker breaker;
private final BinaryDocValues binaryDocValues;
@@ -129,11 +129,6 @@ public BlockLoader.Block read(BlockLoader.BlockFactory factory, BlockLoader.Docs
}
}
- @Override
- public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.Builder builder) throws IOException {
- read(binaryDocValues, docId, (org.elasticsearch.index.mapper.BlockLoader.IntBuilder) builder);
- }
-
private void read(BinaryDocValues binaryDocValues, int doc, org.elasticsearch.index.mapper.BlockLoader.IntBuilder builder)
throws IOException {
if (binaryDocValues.advanceExact(doc) == false) {
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/BlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/BlockLoader.java
index 1485b49d6e6e3..a41d3925ea180 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/BlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/BlockLoader.java
@@ -146,14 +146,14 @@
* but to disable {@code _source} and {@code doc_values}. Nothing's perfect. Especially
* code.
*
- * Why is {@link AllReader}?
+ * Column-at-a-time vs row-stride
*
- * When we described how to read from {@code doc_values} we said we prefer
- * to use {@link ColumnAtATimeReader}. But some callers don't support reading column-at-a-time
- * and need to read row-by-row. So we also need an implementation of {@link RowStrideReader}
- * that reads from {@code doc_values}. Usually it's most convenient to implement both of those
- * in the same {@code class}. {@link AllReader} is an interface for those sorts of classes, and
- * you'll see it in the {@code doc_values} code frequently.
+ * Readers may load {@link ColumnAtATimeReader column-at-a-time} or {@link RowStrideReader row-by-row}.
+ * They need only return non-null from {@link #columnAtATimeReader} or {@link #rowStrideReader}.
+ * {@link ColumnAtATimeReader}s have the lowest overhead and get access to a large batch of document
+ * ids to load at once, making them must faster for loading dense on disk structures like doc values
+ * or vector distances. {@link RowStrideReader}s can use {@link StoredFields} to access Lucene's
+ * compressed {@code stored} fields, include Elasticsearch's {@code _source}.
*
* Why is {@link #rowStrideStoredFieldSpec}?
*
@@ -294,13 +294,6 @@ interface RowStrideReader extends Reader {
void read(int docId, StoredFields storedFields, Builder builder) throws IOException;
}
- /**
- * @deprecated we no longer need to implement {@link RowStrideReader} when
- * storage prefers column-at-a-time
- */
- @Deprecated
- interface AllReader extends ColumnAtATimeReader, RowStrideReader {}
-
interface StoredFields {
/**
* The {@code _source} of the document.
@@ -431,31 +424,57 @@ public RowStrideReader rowStrideReader(CircuitBreaker breaker, LeafReaderContext
if (preferLoader.rowStrideStoredFieldSpec().noRequirements() == false) {
return fallbackLoader.rowStrideReader(breaker, context);
}
- RowStrideReader preferReader = preferLoader.rowStrideReader(breaker, context);
- if (canUsePreferLoaderForLeaf(context)) {
- return preferReader;
- }
- RowStrideReader fallbackReader = fallbackLoader.rowStrideReader(breaker, context);
- return new RowStrideReader() {
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- if (storedFields.loaded() == false && canUsePreferLoaderForDoc(docId)) {
- preferReader.read(docId, storedFields, builder);
- } else {
- fallbackReader.read(docId, storedFields, builder);
- }
+ RowStrideReader preferReader = null;
+ RowStrideReader fallbackReader = null;
+ boolean success = false;
+ try {
+ preferReader = preferLoader.rowStrideReader(breaker, context);
+ if (preferReader == null) {
+ throw new IllegalStateException(
+ "ConditionalBlockLoader requires sub-readers to support both row-at-a-time and column-at-a-time: " + preferLoader
+ );
}
-
- @Override
- public boolean canReuse(int startingDocID) {
- return fallbackReader.canReuse(startingDocID) && preferReader.canReuse(startingDocID);
+ if (canUsePreferLoaderForLeaf(context)) {
+ success = true;
+ return preferReader;
}
-
- @Override
- public void close() {
+ fallbackReader = fallbackLoader.rowStrideReader(breaker, context);
+ success = true;
+ return new ConditionalRowStrideReader(preferReader, fallbackReader);
+ } finally {
+ if (success == false) {
Releasables.close(preferReader, fallbackReader);
}
- };
+ }
+ }
+
+ class ConditionalRowStrideReader implements RowStrideReader {
+ private final RowStrideReader preferReader;
+ private final RowStrideReader fallbackReader;
+
+ ConditionalRowStrideReader(RowStrideReader preferReader, RowStrideReader fallbackReader) {
+ this.preferReader = preferReader;
+ this.fallbackReader = fallbackReader;
+ }
+
+ @Override
+ public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
+ if (storedFields.loaded() == false && canUsePreferLoaderForDoc(docId)) {
+ preferReader.read(docId, storedFields, builder);
+ } else {
+ fallbackReader.read(docId, storedFields, builder);
+ }
+ }
+
+ @Override
+ public boolean canReuse(int startingDocID) {
+ return fallbackReader.canReuse(startingDocID) && preferReader.canReuse(startingDocID);
+ }
+
+ @Override
+ public void close() {
+ Releasables.close(preferReader, fallbackReader);
+ }
}
@Override
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/BlockSourceReader.java b/server/src/main/java/org/elasticsearch/index/mapper/BlockSourceReader.java
index 66da2d304b99a..350d6f7df3978 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/BlockSourceReader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/BlockSourceReader.java
@@ -139,7 +139,7 @@ public final RowStrideReader rowStrideReader(CircuitBreaker breaker, LeafReaderC
DocIdSetIterator iter = lookup.lookup(context);
if (iter == null) {
breaker.addWithoutBreaking(-ESTIMATED_SIZE);
- return ConstantNull.READER;
+ return ConstantNull.ROW_READER;
}
return rowStrideReader(breaker, context, iter);
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java
index 1080522132622..1bf27b3288210 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java
@@ -135,8 +135,7 @@ public Query existsQuery(SearchExecutionContext context) {
@Override
public BlockLoader blockLoader(BlockLoaderContext blContext) {
- return IdLoader.create(blContext.indexSettings(), blContext.mappingLookup())
- .blockLoader(blContext.ordinalsByteSize().getBytes());
+ return IdLoader.create(blContext.indexSettings(), blContext.mappingLookup()).blockLoader(blContext.ordinalsByteSize());
}
@Override
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IdLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/IdLoader.java
index 1d34cc548f587..b356a314cfb37 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/IdLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/IdLoader.java
@@ -20,12 +20,17 @@
import org.elasticsearch.cluster.routing.IndexRouting;
import org.elasticsearch.cluster.routing.RoutingHashBuilder;
import org.elasticsearch.common.breaker.CircuitBreaker;
+import org.elasticsearch.common.unit.ByteSizeValue;
+import org.elasticsearch.core.Releasables;
import org.elasticsearch.index.IndexMode;
import org.elasticsearch.index.IndexSettings;
import org.elasticsearch.index.IndexVersions;
import org.elasticsearch.index.fieldvisitor.LeafStoredFieldLoader;
import org.elasticsearch.index.mapper.blockloader.docvalues.BlockDocValuesReader;
-import org.elasticsearch.index.mapper.blockloader.docvalues.tracking.TrackingNumericDocValues;
+import org.elasticsearch.index.mapper.blockloader.docvalues.tracking.NumericDvSingletonOrSorted;
+import org.elasticsearch.index.mapper.blockloader.docvalues.tracking.SortedDvSingletonOrSet;
+import org.elasticsearch.index.mapper.blockloader.docvalues.tracking.TrackingSortedDocValues;
+import org.elasticsearch.index.mapper.blockloader.docvalues.tracking.TrackingSortedNumericDocValues;
import java.io.IOException;
import java.util.ArrayList;
@@ -89,7 +94,7 @@ static IdLoader createTsIdLoader(
Leaf leaf(LeafStoredFieldLoader loader, LeafReader reader, int[] docIdsInLeaf) throws IOException;
- BlockLoader blockLoader(long ordinalsByteSize);
+ BlockLoader blockLoader(ByteSizeValue ordinalsByteSize);
/**
* Returns a leaf instance for a leaf reader that returns the _id for segment level doc ids.
@@ -179,14 +184,14 @@ public IdLoader.Leaf leaf(LeafStoredFieldLoader loader, LeafReader reader, int[]
}
@Override
- public BlockLoader blockLoader(long ordinalsByteSize) {
+ public BlockLoader blockLoader(ByteSizeValue ordinalsByteSize) {
return new BlockDocValuesReader.DocValuesBlockLoader() {
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
if (indexRouting != null) {
- return new LegacyTsIdFieldReader(breaker, ordinalsByteSize, context.reader(), indexRouting, routingPaths);
+ return new LegacyTsIdFieldReader(breaker, ordinalsByteSize, context, indexRouting, routingPaths);
} else {
- return new TsIdFieldReader(breaker, ordinalsByteSize, context.reader(), useSyntheticId);
+ return new TsIdFieldReader(breaker, ordinalsByteSize, context, useSyntheticId);
}
}
@@ -198,26 +203,38 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
private static class TsIdFieldReader extends BlockDocValuesReader {
- final long ordinalsByteSize;
- final SortedDocValues tsidDVs;
- final SortedNumericDocValues timestampDVs;
- final SortedDocValues routingHashDVs;
+ final TrackingSortedDocValues tsidDVs;
+ final TrackingSortedNumericDocValues timestampDVs;
+ final TrackingSortedDocValues routingHashDVs;
final boolean useSyntheticId;
- TsIdFieldReader(CircuitBreaker breaker, long ordinalsByteSize, LeafReader leafReader, boolean useSyntheticId)
+ TsIdFieldReader(CircuitBreaker breaker, ByteSizeValue ordinalsByteSize, LeafReaderContext ctx, boolean useSyntheticId)
throws IOException {
- super(breaker);
- this.ordinalsByteSize = ordinalsByteSize;
- breaker.addWithoutBreaking(estimatedSize(ordinalsByteSize));
- this.tsidDVs = DocValues.getSorted(leafReader, TimeSeriesIdFieldMapper.NAME);
- this.timestampDVs = DocValues.getSortedNumeric(leafReader, DataStream.TIMESTAMP_FIELD_NAME);
- this.routingHashDVs = DocValues.getSorted(leafReader, TimeSeriesRoutingHashFieldMapper.NAME);
+ super(null);
+ boolean success = false;
+ TrackingSortedDocValues tsidDVs = null;
+ TrackingSortedNumericDocValues timestampDVs = null;
+ TrackingSortedDocValues routingHashDVs = null;
+ try {
+ tsidDVs = SortedDvSingletonOrSet.get(breaker, ordinalsByteSize, ctx, TimeSeriesIdFieldMapper.NAME).forceSingle();
+ timestampDVs = NumericDvSingletonOrSorted.get(breaker, ctx, DataStream.TIMESTAMP_FIELD_NAME).forceSorted();
+ routingHashDVs = SortedDvSingletonOrSet.get(breaker, ordinalsByteSize, ctx, TimeSeriesRoutingHashFieldMapper.NAME)
+ .forceSingle();
+ success = true;
+ } finally {
+ if (success == false) {
+ Releasables.close(tsidDVs, timestampDVs, routingHashDVs);
+ }
+ }
+ this.tsidDVs = tsidDVs;
+ this.timestampDVs = timestampDVs;
+ this.routingHashDVs = routingHashDVs;
this.useSyntheticId = useSyntheticId;
}
@Override
protected int docId() {
- return tsidDVs.docID();
+ return tsidDVs.docValues().docID();
}
@Override
@@ -230,23 +247,22 @@ public BlockLoader.Block read(BlockLoader.BlockFactory factory, BlockLoader.Docs
throws IOException {
try (var builder = factory.bytesRefs(docs.count() - offset)) {
for (int i = offset; i < docs.count(); i++) {
- read(docs.get(i), null, builder);
+ read(docs.get(i), builder);
}
return builder.build();
}
}
- @Override
- public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.Builder builder) throws IOException {
- if (tsidDVs.advanceExact(docId) == false
- || timestampDVs.advanceExact(docId) == false
- || routingHashDVs.advanceExact(docId) == false) {
+ private void read(int docId, BlockLoader.BytesRefBuilder builder) throws IOException {
+ if (tsidDVs.docValues().advanceExact(docId) == false
+ || timestampDVs.docValues().advanceExact(docId) == false
+ || routingHashDVs.docValues().advanceExact(docId) == false) {
assert false : "_tsid or @timestamp or _ts_routing_hash missing for docId " + docId;
throw new IllegalStateException("_tsid or @timestamp or _ts_routing_hash missing for docId " + docId);
}
- BytesRef tsid = tsidDVs.lookupOrd(tsidDVs.ordValue());
- long timestamp = timestampDVs.nextValue();
- BytesRef routingHashBytes = routingHashDVs.lookupOrd(routingHashDVs.ordValue());
+ BytesRef tsid = tsidDVs.docValues().lookupOrd(tsidDVs.docValues().ordValue());
+ long timestamp = timestampDVs.docValues().nextValue();
+ BytesRef routingHashBytes = routingHashDVs.docValues().lookupOrd(routingHashDVs.docValues().ordValue());
int routingHash = TimeSeriesRoutingHashFieldMapper.decode(
Uid.decodeId(routingHashBytes.bytes, routingHashBytes.offset, routingHashBytes.length)
);
@@ -256,52 +272,56 @@ public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.B
} else {
id = TsidExtractingIdFieldMapper.createId(routingHash, tsid, timestamp);
}
- ((BlockLoader.BytesRefBuilder) builder).appendBytesRef(new BytesRef(id));
+ builder.appendBytesRef(new BytesRef(id));
}
@Override
public void close() {
- breaker.addWithoutBreaking(-estimatedSize(ordinalsByteSize));
+ Releasables.close(tsidDVs, timestampDVs, routingHashDVs);
}
-
- private static long estimatedSize(long ordinalsByteSize) {
- return TrackingNumericDocValues.ESTIMATED_SIZE + ordinalsByteSize + TrackingNumericDocValues.ESTIMATED_SIZE;
- }
-
}
private static class LegacyTsIdFieldReader extends BlockDocValuesReader {
- final long ordinalsByteSize;
final RoutingHashBuilder routingBuilder;
- final SortedDocValues tsidDVs;
- final SortedNumericDocValues timestampDVs;
- final SortedDocValues[] routingHashDVs;
+ final TrackingSortedDocValues tsidDVs;
+ final TrackingSortedNumericDocValues timestampDVs;
+ final TrackingSortedDocValues[] routingHashDVs;
final List routingPaths;
final byte[] scratch = new byte[16];
LegacyTsIdFieldReader(
CircuitBreaker breaker,
- long ordinalsByteSize,
- LeafReader leafReader,
+ ByteSizeValue ordinalsByteSize,
+ LeafReaderContext ctx,
IndexRouting.ExtractFromSource.ForRoutingPath indexRouting,
List routingPaths
) throws IOException {
- super(breaker);
- this.ordinalsByteSize = ordinalsByteSize;
- breaker.addEstimateBytesAndMaybeBreak(estimatedSize(ordinalsByteSize, routingPaths.size()), "load blocks");
+ super(null);
+ boolean success = false;
+ TrackingSortedDocValues tsidDVs = null;
+ TrackingSortedNumericDocValues timestampDVs = null;
+ TrackingSortedDocValues[] routingHashDVs = new TrackingSortedDocValues[routingPaths.size()];
+ try {
+ tsidDVs = SortedDvSingletonOrSet.get(breaker, ordinalsByteSize, ctx, TimeSeriesIdFieldMapper.NAME).forceSingle();
+ timestampDVs = NumericDvSingletonOrSorted.get(breaker, ctx, DataStream.TIMESTAMP_FIELD_NAME).forceSorted();
+ for (int i = 0; i < routingPaths.size(); i++) {
+ routingHashDVs[i] = SortedDvSingletonOrSet.get(breaker, ordinalsByteSize, ctx, routingPaths.get(i)).forceSingle();
+ }
+ } finally {
+ if (success == false) {
+ Releasables.close(tsidDVs, timestampDVs, Releasables.wrap(routingHashDVs));
+ }
+ }
this.routingBuilder = indexRouting.builder();
this.routingPaths = routingPaths;
- this.routingHashDVs = new SortedDocValues[routingPaths.size()];
- for (int i = 0; i < routingPaths.size(); i++) {
- this.routingHashDVs[i] = DocValues.getSorted(leafReader, routingPaths.get(i));
- }
- this.tsidDVs = DocValues.getSorted(leafReader, TimeSeriesIdFieldMapper.NAME);
- this.timestampDVs = DocValues.getSortedNumeric(leafReader, DataStream.TIMESTAMP_FIELD_NAME);
+ this.tsidDVs = tsidDVs;
+ this.timestampDVs = timestampDVs;
+ this.routingHashDVs = routingHashDVs;
}
@Override
protected int docId() {
- return tsidDVs.docID();
+ return tsidDVs.docValues().docID();
}
@Override
@@ -314,39 +334,34 @@ public BlockLoader.Block read(BlockLoader.BlockFactory factory, BlockLoader.Docs
throws IOException {
try (var builder = factory.bytesRefs(docs.count() - offset)) {
for (int i = offset; i < docs.count(); i++) {
- read(docs.get(i), null, builder);
+ read(docs.get(i), builder);
}
return builder.build();
}
}
- @Override
- public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.Builder builder) throws IOException {
- if (tsidDVs.advanceExact(docId) == false || timestampDVs.advanceExact(docId) == false) {
+ private void read(int docId, BlockLoader.BytesRefBuilder builder) throws IOException {
+ if (tsidDVs.docValues().advanceExact(docId) == false || timestampDVs.docValues().advanceExact(docId) == false) {
assert false : "_tsid or @timestamp missing for docId " + docId;
throw new IllegalStateException("_tsid or @timestamp missing for docId " + docId);
}
routingBuilder.clear();
- BytesRef tsid = tsidDVs.lookupOrd(tsidDVs.ordValue());
- long timestamp = timestampDVs.nextValue();
+ BytesRef tsid = tsidDVs.docValues().lookupOrd(tsidDVs.docValues().ordValue());
+ long timestamp = timestampDVs.docValues().nextValue();
for (int i = 0; i < routingHashDVs.length; i++) {
- SortedDocValues dv = routingHashDVs[i];
+ SortedDocValues dv = routingHashDVs[i].docValues();
if (dv.advanceExact(docId)) {
BytesRef v = dv.lookupOrd(dv.ordValue());
routingBuilder.addMatching(routingPaths.get(i), v);
}
}
var id = TsidExtractingIdFieldMapper.createId(false, routingBuilder, tsid, timestamp, scratch);
- ((BlockLoader.BytesRefBuilder) builder).appendBytesRef(new BytesRef(id));
+ builder.appendBytesRef(new BytesRef(id));
}
@Override
public void close() {
- breaker.addWithoutBreaking(-estimatedSize(ordinalsByteSize, routingPaths.size()));
- }
-
- private static long estimatedSize(long ordinalsByteSize, int routingPathCount) {
- return routingPathCount * ordinalsByteSize + ordinalsByteSize + TrackingNumericDocValues.ESTIMATED_SIZE;
+ Releasables.close(tsidDVs, timestampDVs, Releasables.wrap(routingHashDVs));
}
}
}
@@ -362,7 +377,7 @@ public Leaf leaf(LeafStoredFieldLoader loader, LeafReader reader, int[] docIdsIn
}
@Override
- public BlockLoader blockLoader(long ordinalsByteSize) {
+ public BlockLoader blockLoader(ByteSizeValue ordinalsByteSize) {
return new BlockStoredFieldsReader.IdBlockLoader();
}
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/ConstantBytes.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/ConstantBytes.java
index e95af5edf5574..25ca9c4b2ed94 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/ConstantBytes.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/ConstantBytes.java
@@ -40,7 +40,7 @@ public IOFunction columnAtATimeReader(LeafR
@Override
public RowStrideReader rowStrideReader(CircuitBreaker breaker, LeafReaderContext context) {
- return reader;
+ return null;
}
@Override
@@ -63,17 +63,12 @@ public String toString() {
return "ConstantBytes[" + value + "]";
}
- private class Reader implements AllReader {
+ private class Reader implements ColumnAtATimeReader {
@Override
public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFiltered) {
return factory.constantBytes(value, docs.count() - offset);
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) {
- ((BlockLoader.BytesRefBuilder) builder).appendBytesRef(value);
- }
-
@Override
public boolean canReuse(int startingDocID) {
return true;
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/ConstantNull.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/ConstantNull.java
index 8ff6e30af8173..cb020d0bd8e5a 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/ConstantNull.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/ConstantNull.java
@@ -16,12 +16,15 @@
import org.elasticsearch.index.mapper.BlockLoader;
import org.elasticsearch.search.fetch.StoredFieldsSpec;
+import java.io.IOException;
+
/**
* Load blocks with only null.
*/
public class ConstantNull implements BlockLoader {
public static final BlockLoader INSTANCE = new ConstantNull();
- public static final BlockLoader.AllReader READER = new Reader();
+ public static final BlockLoader.ColumnAtATimeReader COLUMN_READER = new ColumnReader();
+ public static final BlockLoader.RowStrideReader ROW_READER = new RowReader();
private ConstantNull() {}
@@ -32,12 +35,13 @@ public Builder builder(BlockFactory factory, int expectedCount) {
@Override
public IOFunction columnAtATimeReader(LeafReaderContext context) {
- return breaker -> READER;
+ return breaker -> COLUMN_READER;
}
@Override
public RowStrideReader rowStrideReader(CircuitBreaker breaker, LeafReaderContext context) {
- return READER;
+ // There is a ROW_READER row-byte-row implementations can use. But we don't need it here.
+ return null;
}
@Override
@@ -61,22 +65,16 @@ public String toString() {
}
/**
- * Implementation of {@link ColumnAtATimeReader} and {@link RowStrideReader} that always
- * loads {@code null}.
+ * Implementation of {@link ColumnAtATimeReader} that always loads {@code null}.
*/
- private static class Reader implements AllReader {
- private Reader() {}
+ static class ColumnReader implements ColumnAtATimeReader {
+ private ColumnReader() {}
@Override
public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFiltered) {
return factory.constantNulls(docs.count() - offset);
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) {
- builder.appendNull();
- }
-
@Override
public boolean canReuse(int startingDocID) {
return true;
@@ -90,4 +88,24 @@ public String toString() {
@Override
public void close() {}
}
+
+ /**
+ * Implementation of {@link RowStrideReader} that always loads {@code null}.
+ */
+ static class RowReader implements RowStrideReader {
+ private RowReader() {}
+
+ @Override
+ public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
+ builder.appendNull();
+ }
+
+ @Override
+ public boolean canReuse(int startingDocID) {
+ return true;
+ }
+
+ @Override
+ public void close() {}
+ }
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractBooleansBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractBooleansBlockLoader.java
index c946360596829..64b2ebdc44ba2 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractBooleansBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractBooleansBlockLoader.java
@@ -34,10 +34,10 @@ public final BooleanBuilder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public final ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
NumericDvSingletonOrSorted dv = NumericDvSingletonOrSorted.get(breaker, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
if (dv.singleton() != null) {
return singletonReader(dv.singleton());
@@ -45,9 +45,9 @@ public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throw
return sortedReader(dv.sorted());
}
- protected abstract AllReader singletonReader(TrackingNumericDocValues docValues);
+ protected abstract ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues);
- protected abstract AllReader sortedReader(TrackingSortedNumericDocValues docValues);
+ protected abstract ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues);
public static class Singleton extends BlockDocValuesReader {
private final TrackingNumericDocValues numericDocValues;
@@ -77,16 +77,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- BooleanBuilder blockBuilder = (BooleanBuilder) builder;
- if (numericDocValues.docValues().advanceExact(docId)) {
- blockBuilder.appendBoolean(numericDocValues.docValues().longValue() != 0);
- } else {
- blockBuilder.appendNull();
- }
- }
-
@Override
public int docId() {
return numericDocValues.docValues().docID();
@@ -122,11 +112,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (BooleanBuilder) builder);
- }
-
private void read(int doc, BooleanBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractBytesRefsFromOrdsBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractBytesRefsFromOrdsBlockLoader.java
index 6121d4362a4ed..152989c498764 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractBytesRefsFromOrdsBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractBytesRefsFromOrdsBlockLoader.java
@@ -25,7 +25,7 @@
*/
public abstract class AbstractBytesRefsFromOrdsBlockLoader extends BlockDocValuesReader.DocValuesBlockLoader {
protected final String fieldName;
- private final ByteSizeValue size;
+ protected final ByteSizeValue size;
public AbstractBytesRefsFromOrdsBlockLoader(String fieldName, ByteSizeValue size) {
this.fieldName = fieldName;
@@ -38,10 +38,10 @@ public final BytesRefBuilder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public final AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public final ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
SortedDvSingletonOrSet dv = SortedDvSingletonOrSet.get(breaker, size, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
if (dv.singleton() != null) {
return singletonReader(dv.singleton());
@@ -49,9 +49,9 @@ public final AllReader reader(CircuitBreaker breaker, LeafReaderContext context)
return sortedSetReader(dv.set());
}
- protected abstract AllReader singletonReader(TrackingSortedDocValues docValues);
+ protected abstract ColumnAtATimeReader singletonReader(TrackingSortedDocValues docValues);
- protected abstract AllReader sortedSetReader(TrackingSortedSetDocValues docValues);
+ protected abstract ColumnAtATimeReader sortedSetReader(TrackingSortedSetDocValues docValues);
protected class Singleton extends BlockDocValuesReader {
private final TrackingSortedDocValues ordinals;
@@ -95,15 +95,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- if (ordinals.docValues().advanceExact(docId)) {
- ((BytesRefBuilder) builder).appendBytesRef(ordinals.docValues().lookupOrd(ordinals.docValues().ordValue()));
- } else {
- builder.appendNull();
- }
- }
-
@Override
public int docId() {
return ordinals.docValues().docID();
@@ -158,11 +149,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (BytesRefBuilder) builder);
- }
-
private Block readSingleDoc(BlockFactory factory, int docId) throws IOException {
if (ordinals.docValues().advanceExact(docId) == false) {
return factory.constantNulls(1);
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractDoublesFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractDoublesFromDocValuesBlockLoader.java
index b48ab11be0010..0b7751761d095 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractDoublesFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractDoublesFromDocValuesBlockLoader.java
@@ -37,10 +37,10 @@ public final Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public final AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public final ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
NumericDvSingletonOrSorted dv = NumericDvSingletonOrSorted.get(breaker, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
if (dv.singleton() != null) {
return singletonReader(dv.singleton(), toDouble);
@@ -48,9 +48,9 @@ public final AllReader reader(CircuitBreaker breaker, LeafReaderContext context)
return sortedReader(dv.sorted(), toDouble);
}
- protected abstract AllReader singletonReader(TrackingNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble);
+ protected abstract ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble);
- protected abstract AllReader sortedReader(TrackingSortedNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble);
+ protected abstract ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble);
public static class Singleton extends BlockDocValuesReader implements BlockDocValuesReader.NumericDocValuesAccessor {
private final TrackingNumericDocValues docValues;
@@ -83,16 +83,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- DoubleBuilder blockBuilder = (DoubleBuilder) builder;
- if (docValues.docValues().advanceExact(docId)) {
- blockBuilder.appendDouble(toDouble.convert(docValues.docValues().longValue()));
- } else {
- blockBuilder.appendNull();
- }
- }
-
@Override
public int docId() {
return docValues.docValues().docID();
@@ -135,11 +125,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (DoubleBuilder) builder);
- }
-
private void read(int doc, DoubleBuilder builder) throws IOException {
if (false == docValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractIntsFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractIntsFromDocValuesBlockLoader.java
index 4ddd6d2fa81cc..65c4e1886bd14 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractIntsFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractIntsFromDocValuesBlockLoader.java
@@ -35,10 +35,10 @@ public final Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public final AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public final ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
NumericDvSingletonOrSorted dv = NumericDvSingletonOrSorted.get(breaker, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
if (dv.singleton() != null) {
return singletonReader(dv.singleton());
@@ -46,9 +46,9 @@ public final AllReader reader(CircuitBreaker breaker, LeafReaderContext context)
return sortedReader(dv.sorted());
}
- protected abstract AllReader singletonReader(TrackingNumericDocValues docValues);
+ protected abstract ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues);
- protected abstract AllReader sortedReader(TrackingSortedNumericDocValues docValues);
+ protected abstract ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues);
public static class Singleton extends BlockDocValuesReader implements BlockDocValuesReader.NumericDocValuesAccessor {
private final TrackingNumericDocValues numericDocValues;
@@ -79,16 +79,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- IntBuilder blockBuilder = (IntBuilder) builder;
- if (numericDocValues.docValues().advanceExact(docId)) {
- blockBuilder.appendInt(Math.toIntExact(numericDocValues.docValues().longValue()));
- } else {
- blockBuilder.appendNull();
- }
- }
-
@Override
public int docId() {
return numericDocValues.docValues().docID();
@@ -129,11 +119,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (IntBuilder) builder);
- }
-
private void read(int doc, IntBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractLongsFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractLongsFromDocValuesBlockLoader.java
index 2e78b84beee68..46b73cc7eaa77 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractLongsFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/AbstractLongsFromDocValuesBlockLoader.java
@@ -35,10 +35,10 @@ public final Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public final AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public final ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
NumericDvSingletonOrSorted dv = NumericDvSingletonOrSorted.get(breaker, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
if (dv.singleton() != null) {
return singletonReader(dv.singleton());
@@ -46,9 +46,9 @@ public final AllReader reader(CircuitBreaker breaker, LeafReaderContext context)
return sortedReader(dv.sorted());
}
- protected abstract AllReader singletonReader(TrackingNumericDocValues docValues);
+ protected abstract ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues);
- protected abstract AllReader sortedReader(TrackingSortedNumericDocValues docValues);
+ protected abstract ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues);
public static class Singleton extends BlockDocValuesReader implements BlockDocValuesReader.NumericDocValuesAccessor {
private final TrackingNumericDocValues numericDocValues;
@@ -79,16 +79,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- LongBuilder blockBuilder = (LongBuilder) builder;
- if (numericDocValues.docValues().advanceExact(docId)) {
- blockBuilder.appendLong(numericDocValues.docValues().longValue());
- } else {
- blockBuilder.appendNull();
- }
- }
-
@Override
public int docId() {
return numericDocValues.docValues().docID();
@@ -129,11 +119,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (LongBuilder) builder);
- }
-
private void read(int doc, LongBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BlockDocValuesReader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BlockDocValuesReader.java
index d555517b9bc79..030e83bd96e2e 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BlockDocValuesReader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BlockDocValuesReader.java
@@ -22,7 +22,7 @@
/**
* A reader that supports reading doc-values from a Lucene segment in Block fashion.
*/
-public abstract class BlockDocValuesReader implements BlockLoader.AllReader {
+public abstract class BlockDocValuesReader implements BlockLoader.ColumnAtATimeReader {
protected final CircuitBreaker breaker;
private final Thread creationThread;
@@ -45,7 +45,7 @@ public final boolean canReuse(int startingDocID) {
public abstract String toString();
public abstract static class DocValuesBlockLoader implements BlockLoader {
- public abstract AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException;
+ public abstract ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException;
@Override
public final IOFunction columnAtATimeReader(LeafReaderContext context) {
@@ -53,8 +53,8 @@ public final IOFunction columnAtATimeReader
}
@Override
- public final RowStrideReader rowStrideReader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
- return reader(breaker, context);
+ public RowStrideReader rowStrideReader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ return null;
}
@Override
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BooleansBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BooleansBlockLoader.java
index 16d07116f64e2..1516c23081101 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BooleansBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BooleansBlockLoader.java
@@ -18,12 +18,12 @@ public BooleansBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new Sorted(docValues);
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromBinaryBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromBinaryBlockLoader.java
index b33441d1643cb..3b09c66779e61 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromBinaryBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromBinaryBlockLoader.java
@@ -47,10 +47,10 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
TrackingBinaryDocValues dv = TrackingBinaryDocValues.get(breaker, context, docValuesSupplier);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
return new BytesRefsFromBinary(dv);
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromBinaryMultiSeparateCountBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromBinaryMultiSeparateCountBlockLoader.java
index 586e0857ee902..70bbcd17eeebc 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromBinaryMultiSeparateCountBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromBinaryMultiSeparateCountBlockLoader.java
@@ -35,10 +35,10 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
BinaryAndCounts bc = BinaryAndCounts.get(breaker, context, fieldName, true);
if (bc == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
if (bc.counts() == null) {
return new BytesRefsFromBinaryBlockLoader.BytesRefsFromBinary(bc.binary());
@@ -55,11 +55,6 @@ static class BytesRefsFromBinarySeparateCount extends BytesRefsFromCustomBinaryB
this.counts = counts;
}
- @Override
- public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFiltered) throws IOException {
- return super.read(factory, docs, offset, nullsFiltered);
- }
-
@Override
public void read(int doc, BytesRefBuilder builder) throws IOException {
if (false == docValues.docValues().advanceExact(doc)) {
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromCustomBinaryBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromCustomBinaryBlockLoader.java
index 9d7da5bc633dd..2049f33387b18 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromCustomBinaryBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromCustomBinaryBlockLoader.java
@@ -37,15 +37,15 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
TrackingBinaryDocValues dv = TrackingBinaryDocValues.get(breaker, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
return new BytesRefsFromCustomBinary(dv);
}
- public abstract static class AbstractBytesRefsFromBinary extends BlockDocValuesReader {
+ public abstract static class AbstractBytesRefsFromBinary extends BlockDocValuesReader implements RowStrideReader {
protected final TrackingBinaryDocValues docValues;
public AbstractBytesRefsFromBinary(TrackingBinaryDocValues docValues) {
@@ -65,7 +65,7 @@ public BlockLoader.Block read(BlockFactory factory, Docs docs, int offset, boole
}
@Override
- public void read(int docId, BlockLoader.StoredFields storedFields, Builder builder) throws IOException {
+ public final void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
read(docId, (BytesRefBuilder) builder);
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromOrdsBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromOrdsBlockLoader.java
index 4304a8ecc9242..ddd783db7cd4e 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromOrdsBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/BytesRefsFromOrdsBlockLoader.java
@@ -12,7 +12,10 @@
import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.SortedSetDocValues;
+import org.elasticsearch.common.breaker.CircuitBreaker;
import org.elasticsearch.common.unit.ByteSizeValue;
+import org.elasticsearch.index.mapper.blockloader.ConstantNull;
+import org.elasticsearch.index.mapper.blockloader.docvalues.tracking.SortedDvSingletonOrSet;
import org.elasticsearch.index.mapper.blockloader.docvalues.tracking.TrackingSortedDocValues;
import org.elasticsearch.index.mapper.blockloader.docvalues.tracking.TrackingSortedSetDocValues;
@@ -29,12 +32,12 @@ public BytesRefsFromOrdsBlockLoader(String fieldName, ByteSizeValue size) {
}
@Override
- protected AllReader singletonReader(TrackingSortedDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingSortedDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedSetReader(TrackingSortedSetDocValues docValues) {
+ protected ColumnAtATimeReader sortedSetReader(TrackingSortedSetDocValues docValues) {
return new SortedSet(docValues);
}
@@ -52,4 +55,44 @@ public SortedSetDocValues ordinals(LeafReaderContext context) throws IOException
public String toString() {
return "BytesRefsFromOrds[" + fieldName + "]";
}
+
+ @Override
+ public RowStrideReader rowStrideReader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ SortedDvSingletonOrSet dv = SortedDvSingletonOrSet.get(breaker, size, context, fieldName);
+ if (dv == null) {
+ return ConstantNull.ROW_READER;
+ }
+ return new RowStride(dv.forceSet(), Thread.currentThread());
+ }
+
+ private record RowStride(TrackingSortedSetDocValues ordinals, Thread creationThread) implements RowStrideReader {
+ @Override
+ public void read(int docId, StoredFields storedFields, Builder b) throws IOException {
+ BytesRefBuilder builder = (BytesRefBuilder) b;
+ if (ordinals.docValues().advanceExact(docId) == false) {
+ builder.appendNull();
+ return;
+ }
+ int count = ordinals.docValues().docValueCount();
+ if (count == 1) {
+ builder.appendBytesRef(ordinals.docValues().lookupOrd(ordinals.docValues().nextOrd()));
+ return;
+ }
+ builder.beginPositionEntry();
+ for (int v = 0; v < count; v++) {
+ builder.appendBytesRef(ordinals.docValues().lookupOrd(ordinals.docValues().nextOrd()));
+ }
+ builder.endPositionEntry();
+ }
+
+ @Override
+ public boolean canReuse(int startingDocID) {
+ return creationThread == Thread.currentThread() && ordinals.docValues().docID() <= startingDocID;
+ }
+
+ @Override
+ public void close() {
+ ordinals.close();
+ }
+ }
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DateRangeDocValuesLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DateRangeDocValuesLoader.java
index 5e4e86e8f7288..b7124dd97520d 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DateRangeDocValuesLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DateRangeDocValuesLoader.java
@@ -32,10 +32,10 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
TrackingBinaryDocValues dv = TrackingBinaryDocValues.get(breaker, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
return new DateRangeDocValuesReader(dv);
}
@@ -87,20 +87,6 @@ public BlockLoader.Block read(BlockLoader.BlockFactory factory, BlockLoader.Docs
}
}
- @Override
- public void read(int doc, BlockLoader.StoredFields storedFields, BlockLoader.Builder builder) throws IOException {
- var blockBuilder = (BlockLoader.LongRangeBuilder) builder;
- this.docId = doc;
- if (false == docValues.docValues().advanceExact(doc)) {
- blockBuilder.appendNull();
- } else {
- var range = BinaryRangeUtil.decodeLongRanges(docValues.docValues().binaryValue());
- assert range.size() == 1 : "stored fields should only have a single range";
- blockBuilder.from().appendLong((long) range.getFirst().getFrom());
- blockBuilder.to().appendLong((long) range.getFirst().getTo());
- }
- }
-
@Override
public void close() {
docValues.close();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DenseVectorBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DenseVectorBlockLoader.java
index dfe09ad05958d..468a07a8b4487 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DenseVectorBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DenseVectorBlockLoader.java
@@ -61,7 +61,7 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
breaker.addEstimateBytesAndMaybeBreak(ESTIMATED_SIZE, "load blocks");
boolean release = true;
try {
@@ -101,7 +101,7 @@ public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throw
}
}
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
} finally {
if (release) {
breaker.addWithoutBreaking(-ESTIMATED_SIZE);
@@ -151,12 +151,6 @@ public BlockLoader.Block read(BlockLoader.BlockFactory factory, BlockLoader.Docs
}
}
- @Override
- @SuppressWarnings("unchecked")
- public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.Builder builder) throws IOException {
- read(docId, (B) builder);
- }
-
/**
* Reads a document and appends it to the builder.
* Handles null values when the document doesn't have a vector.
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DenseVectorFromBinaryBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DenseVectorFromBinaryBlockLoader.java
index 87f93272d8a23..a78bf63577dca 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DenseVectorFromBinaryBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DenseVectorFromBinaryBlockLoader.java
@@ -45,10 +45,10 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
TrackingBinaryDocValues dv = TrackingBinaryDocValues.get(breaker, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
return switch (elementType) {
case FLOAT -> new FloatDenseVectorFromBinary(dv, dims, indexVersion);
@@ -77,11 +77,6 @@ public int docId() {
return docValues.docValues().docID();
}
- @Override
- public void read(int docId, BlockLoader.StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (BlockLoader.FloatBuilder) builder);
- }
-
@Override
public BlockLoader.Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFiltered) throws IOException {
try (BlockLoader.FloatBuilder builder = factory.denseVectors(docs.count() - offset, dimensions)) {
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DoublesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DoublesBlockLoader.java
index ccf1f53550173..418aff194648e 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DoublesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/DoublesBlockLoader.java
@@ -18,12 +18,12 @@ public DoublesBlockLoader(String fieldName, BlockDocValuesReader.ToDouble toDoub
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
return new Singleton(docValues, toDouble);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
return new Sorted(docValues, toDouble);
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/GeoBytesRefFromLongsBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/GeoBytesRefFromLongsBlockLoader.java
index 3f83975159f55..94cb2e007798e 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/GeoBytesRefFromLongsBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/GeoBytesRefFromLongsBlockLoader.java
@@ -44,10 +44,10 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
NumericDvSingletonOrSorted dv = NumericDvSingletonOrSorted.get(breaker, context, fieldName);
if (dv == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
TrackingSortedNumericDocValues sorted = dv.forceSorted();
return new BytesRefsFromLong(sorted, geoPointLong -> {
@@ -91,11 +91,6 @@ public BlockLoader.Block read(BlockLoader.BlockFactory factory, BlockLoader.Docs
}
}
- @Override
- public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.Builder builder) throws IOException {
- read(docId, (BlockLoader.BytesRefBuilder) builder);
- }
-
private void read(int doc, BlockLoader.BytesRefBuilder builder) throws IOException {
if (numericDocValues.docValues().advanceExact(doc) == false) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/IntsBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/IntsBlockLoader.java
index 5fa2db9bd46b2..bfbf80d14df49 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/IntsBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/IntsBlockLoader.java
@@ -21,12 +21,12 @@ public IntsBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new Sorted(docValues);
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/LongsBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/LongsBlockLoader.java
index 2ebba02978f3d..01db28a21f369 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/LongsBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/LongsBlockLoader.java
@@ -18,12 +18,12 @@ public LongsBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new Sorted(docValues);
}
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/ByteLengthFromBytesRefDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/ByteLengthFromBytesRefDocValuesBlockLoader.java
index 3119632356459..0ad932e877409 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/ByteLengthFromBytesRefDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/ByteLengthFromBytesRefDocValuesBlockLoader.java
@@ -40,10 +40,10 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
BinaryAndCounts bc = BinaryAndCounts.get(breaker, context, fieldName, true);
if (bc == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
if (bc.counts() == null) {
return new SingleValued(bc.binary());
@@ -64,11 +64,6 @@ public int docId() {
return docValues.docValues().docID();
}
- @Override
- public void read(int docId, BlockLoader.StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (IntBuilder) builder);
- }
-
@Override
public BlockLoader.Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFiltered) throws IOException {
if (docValues.docValues() instanceof BlockLoader.OptionalLengthReader direct) {
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MultiValuedBinaryWithSeparateCountsLengthReader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MultiValuedBinaryWithSeparateCountsLengthReader.java
index d13df944cdf6f..3772b7cdc2b42 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MultiValuedBinaryWithSeparateCountsLengthReader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MultiValuedBinaryWithSeparateCountsLengthReader.java
@@ -54,11 +54,6 @@ public BlockLoader.Block read(BlockLoader.BlockFactory factory, BlockLoader.Docs
}
}
- @Override
- public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.Builder builder) throws IOException {
- appendLength(docId, (BlockLoader.IntBuilder) builder);
- }
-
@Override
public int docId() {
return counts.docValues().docID();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxBooleansBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxBooleansBlockLoader.java
index 53faf4518d496..1f51cb505ae14 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxBooleansBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxBooleansBlockLoader.java
@@ -27,12 +27,12 @@ public MvMaxBooleansBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new MvMaxSorted(docValues);
}
@@ -60,11 +60,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (BooleanBuilder) builder);
- }
-
private void read(int doc, BooleanBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxBytesRefsFromOrdsBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxBytesRefsFromOrdsBlockLoader.java
index 76f728d6de382..3cbde7f59a8e2 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxBytesRefsFromOrdsBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxBytesRefsFromOrdsBlockLoader.java
@@ -30,12 +30,12 @@ public MvMaxBytesRefsFromOrdsBlockLoader(String fieldName, ByteSizeValue byteSiz
}
@Override
- protected AllReader singletonReader(TrackingSortedDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingSortedDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedSetReader(TrackingSortedSetDocValues docValues) {
+ protected ColumnAtATimeReader sortedSetReader(TrackingSortedSetDocValues docValues) {
return new MvMaxSortedSet(docValues);
}
@@ -74,11 +74,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (BytesRefBuilder) builder);
- }
-
private Block readSingleDoc(BlockFactory factory, int docId) throws IOException {
if (ordinals.docValues().advanceExact(docId) == false) {
return factory.constantNulls(1);
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxDoublesFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxDoublesFromDocValuesBlockLoader.java
index 3a0e4f70e097d..89650fe66ed6d 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxDoublesFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxDoublesFromDocValuesBlockLoader.java
@@ -27,12 +27,12 @@ public MvMaxDoublesFromDocValuesBlockLoader(String fieldName, BlockDocValuesRead
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
return new Singleton(docValues, toDouble);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
return new MvMaxSorted(docValues, toDouble);
}
@@ -62,11 +62,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (DoubleBuilder) builder);
- }
-
private void read(int doc, DoubleBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxIntsFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxIntsFromDocValuesBlockLoader.java
index 5e3a58a8958f6..c4da3f73b5fc6 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxIntsFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxIntsFromDocValuesBlockLoader.java
@@ -27,12 +27,12 @@ public MvMaxIntsFromDocValuesBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new MvMaxSorted(docValues);
}
@@ -60,11 +60,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (IntBuilder) builder);
- }
-
private void read(int doc, IntBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxLongsFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxLongsFromDocValuesBlockLoader.java
index bcd01f75209e2..1cfa0a6a3e851 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxLongsFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMaxLongsFromDocValuesBlockLoader.java
@@ -26,12 +26,12 @@ public MvMaxLongsFromDocValuesBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new MvMaxSorted(docValues);
}
@@ -59,11 +59,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (LongBuilder) builder);
- }
-
private void read(int doc, LongBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBooleansBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBooleansBlockLoader.java
index d500d22a3652a..351a06a0d18a3 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBooleansBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBooleansBlockLoader.java
@@ -25,12 +25,12 @@ public MvMinBooleansBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new MvMinSorted(docValues);
}
@@ -58,11 +58,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (BooleanBuilder) builder);
- }
-
private void read(int doc, BooleanBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBytesRefsFromBinaryBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBytesRefsFromBinaryBlockLoader.java
index 4c810e11b33b8..95f08868515c3 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBytesRefsFromBinaryBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBytesRefsFromBinaryBlockLoader.java
@@ -39,10 +39,10 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
BinaryAndCounts bc = BinaryAndCounts.get(breaker, context, fieldName, true);
if (bc == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
if (bc.counts() == null) {
return new BytesRefsFromBinaryBlockLoader.BytesRefsFromBinary(bc.binary());
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBytesRefsFromOrdsBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBytesRefsFromOrdsBlockLoader.java
index e37cd0315efaa..19db87e609e95 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBytesRefsFromOrdsBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinBytesRefsFromOrdsBlockLoader.java
@@ -30,12 +30,12 @@ public MvMinBytesRefsFromOrdsBlockLoader(String fieldName, ByteSizeValue byteSiz
}
@Override
- protected AllReader singletonReader(TrackingSortedDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingSortedDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedSetReader(TrackingSortedSetDocValues docValues) {
+ protected ColumnAtATimeReader sortedSetReader(TrackingSortedSetDocValues docValues) {
return new MvMinSortedSet(docValues);
}
@@ -73,11 +73,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (BytesRefBuilder) builder);
- }
-
private Block readSingleDoc(BlockFactory factory, int docId) throws IOException {
if (ordinals.docValues().advanceExact(docId) == false) {
return factory.constantNulls(1);
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinDoublesFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinDoublesFromDocValuesBlockLoader.java
index 7bc28b117f04c..5d58497ff7d8f 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinDoublesFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinDoublesFromDocValuesBlockLoader.java
@@ -25,12 +25,12 @@ public MvMinDoublesFromDocValuesBlockLoader(String fieldName, BlockDocValuesRead
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
return new Singleton(docValues, toDouble);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues, BlockDocValuesReader.ToDouble toDouble) {
return new MvMinSorted(docValues, toDouble);
}
@@ -60,11 +60,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (DoubleBuilder) builder);
- }
-
private void read(int doc, DoubleBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinIntsFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinIntsFromDocValuesBlockLoader.java
index f705131299694..e804a29b43810 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinIntsFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinIntsFromDocValuesBlockLoader.java
@@ -25,12 +25,12 @@ public MvMinIntsFromDocValuesBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new MvMinSorted(docValues);
}
@@ -58,11 +58,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (IntBuilder) builder);
- }
-
private void read(int doc, IntBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinLongsFromDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinLongsFromDocValuesBlockLoader.java
index b7badd82f36a2..d9db693581aa4 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinLongsFromDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/MvMinLongsFromDocValuesBlockLoader.java
@@ -25,12 +25,12 @@ public MvMinLongsFromDocValuesBlockLoader(String fieldName) {
}
@Override
- protected AllReader singletonReader(TrackingNumericDocValues docValues) {
+ protected ColumnAtATimeReader singletonReader(TrackingNumericDocValues docValues) {
return new Singleton(docValues);
}
@Override
- protected AllReader sortedReader(TrackingSortedNumericDocValues docValues) {
+ protected ColumnAtATimeReader sortedReader(TrackingSortedNumericDocValues docValues) {
return new MvMinSorted(docValues);
}
@@ -58,11 +58,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (LongBuilder) builder);
- }
-
private void read(int doc, LongBuilder builder) throws IOException {
if (false == numericDocValues.docValues().advanceExact(doc)) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/Utf8CodePointsFromOrdsBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/Utf8CodePointsFromOrdsBlockLoader.java
index cba418067a499..93c671153a8cd 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/Utf8CodePointsFromOrdsBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/Utf8CodePointsFromOrdsBlockLoader.java
@@ -70,7 +70,7 @@ public IntBuilder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
SortedDvSingletonOrSet dv = SortedDvSingletonOrSet.get(breaker, size, context, fieldName);
if (dv != null) {
if (dv.singleton() != null) {
@@ -86,7 +86,7 @@ public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throw
}
BinaryAndCounts bc = BinaryAndCounts.get(breaker, context, fieldName, false);
if (bc == null) {
- return ConstantNull.READER;
+ return ConstantNull.COLUMN_READER;
}
return new MultiValuedBinaryWithSeparateCounts(warnings, bc.counts(), bc.binary());
}
@@ -155,15 +155,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- if (ordinals.docValues().advanceExact(docId)) {
- ((IntBuilder) builder).appendInt(codePointsAtOrd(ordinals.docValues().ordValue()));
- } else {
- builder.appendNull();
- }
- }
-
@Override
public int docId() {
return ordinals.docValues().docID();
@@ -317,20 +308,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- if (ordinals.docValues().advanceExact(docId) == false) {
- builder.appendNull();
- return;
- }
- if (ordinals.docValues().docValueCount() != 1) {
- registerSingleValueWarning(warnings);
- builder.appendNull();
- return;
- }
- ((IntBuilder) builder).appendInt(codePointsAtOrd(Math.toIntExact(ordinals.docValues().nextOrd())));
- }
-
@Override
public int docId() {
return ordinals.docValues().docID();
@@ -479,11 +456,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- read(docId, (IntBuilder) builder);
- }
-
private void read(int docId, IntBuilder builder) throws IOException {
if (ordinals.docValues().advanceExact(docId) == false) {
builder.appendNull();
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/tracking/SortedDvSingletonOrSet.java b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/tracking/SortedDvSingletonOrSet.java
index fb1cc4a42bd8b..a58898b1b94b3 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/tracking/SortedDvSingletonOrSet.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/blockloader/docvalues/tracking/SortedDvSingletonOrSet.java
@@ -55,6 +55,14 @@ public static SortedDvSingletonOrSet get(CircuitBreaker breaker, ByteSizeValue s
}
}
+ public TrackingSortedDocValues forceSingle() {
+ if (singleton == null) {
+ set.close();
+ throw new IllegalStateException("expected singleton");
+ }
+ return singleton;
+ }
+
public TrackingSortedSetDocValues forceSet() {
if (set != null) {
return set;
diff --git a/server/src/main/java/org/elasticsearch/index/mapper/flattened/RootFlattenedDocValuesBlockLoader.java b/server/src/main/java/org/elasticsearch/index/mapper/flattened/RootFlattenedDocValuesBlockLoader.java
index 7afff7192bc67..ad9f2d5d039b0 100644
--- a/server/src/main/java/org/elasticsearch/index/mapper/flattened/RootFlattenedDocValuesBlockLoader.java
+++ b/server/src/main/java/org/elasticsearch/index/mapper/flattened/RootFlattenedDocValuesBlockLoader.java
@@ -70,11 +70,11 @@ public SortedSetDocValues ordinals(LeafReaderContext context) throws IOException
return null;
}
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ FlattenedReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
var reader = fieldLoader.docValuesLoader(context.reader(), null);
var trackingReader = reader != null ? new TrackingLoader(reader) : null;
- return new AllReader() {
+ return new FlattenedReader() {
private final Thread creationThread = Thread.currentThread();
@Override
@@ -144,6 +144,8 @@ public RowStrideReader rowStrideReader(CircuitBreaker breaker, LeafReaderContext
return reader(breaker, context);
}
+ private interface FlattenedReader extends ColumnAtATimeReader, RowStrideReader {}
+
/**
* A DocValuesLoader that tracks the last advanced docId.
*/
diff --git a/server/src/test/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapperTests.java
index 3cad059af9672..7405909170dbc 100644
--- a/server/src/test/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapperTests.java
+++ b/server/src/test/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapperTests.java
@@ -78,7 +78,7 @@ public void testCartesianBoundsNoData() throws IOException {
try (DirectoryReader reader = DirectoryReader.open(directory)) {
LeafReader leaf = getOnlyLeafReader(reader);
try (
- BlockLoader.AllReader allReader = loader.reader(breaker, leaf.getContext());
+ BlockLoader.ColumnAtATimeReader allReader = loader.reader(breaker, leaf.getContext());
var block = (TestBlock) allReader.read(TestBlock.factory(), TestBlock.docs(0), 0, false)
) {
assertThat(block.size(), equalTo(1));
@@ -152,7 +152,7 @@ private static void testBoundsBlockLoaderAux(
expected.add(visitor.apply(geometries.get(j + currentIndex)).get());
}
try (
- BlockLoader.AllReader allReader = loader.reader(breaker, leaf);
+ BlockLoader.ColumnAtATimeReader allReader = loader.reader(breaker, leaf);
var block = (TestBlock) allReader.read(TestBlock.factory(), TestBlock.docs(array), 0, false)
) {
for (int i = 0; i < block.size(); i++) {
diff --git a/server/src/test/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/AbstractBooleansFromDocValuesBlockLoaderTests.java b/server/src/test/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/AbstractBooleansFromDocValuesBlockLoaderTests.java
index 70423d062ecc6..569a59059c789 100644
--- a/server/src/test/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/AbstractBooleansFromDocValuesBlockLoaderTests.java
+++ b/server/src/test/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/AbstractBooleansFromDocValuesBlockLoaderTests.java
@@ -18,8 +18,6 @@
import org.elasticsearch.common.breaker.CircuitBreaker;
import org.elasticsearch.core.CheckedFunction;
import org.elasticsearch.index.mapper.AbstractBlockLoaderTestCase;
-import org.elasticsearch.index.mapper.BlockLoader;
-import org.elasticsearch.index.mapper.TestBlock;
import java.io.IOException;
import java.util.ArrayList;
@@ -58,10 +56,6 @@ protected final void test(CircuitBreaker breaker, CheckedFunction readerMatcher() {
return hasToString("BlockDocValuesReader.Bytes");
}
- private TestBlock read(BlockLoader.AllReader reader, BlockLoader.Docs docs) throws IOException {
- return (TestBlock) reader.read(TestBlock.factory(), docs, 0, false);
- }
-
private void checkBlocks(TestBlock strings, TestBlock mvMin) {
for (int i = 0; i < strings.size(); i++) {
Object str = strings.get(i);
diff --git a/server/src/test/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/BinaryUtf8CodePointLengthBlockLoaderTests.java b/server/src/test/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/BinaryUtf8CodePointLengthBlockLoaderTests.java
index 4dacb9668ff71..51da064d6945a 100644
--- a/server/src/test/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/BinaryUtf8CodePointLengthBlockLoaderTests.java
+++ b/server/src/test/java/org/elasticsearch/index/mapper/blockloader/docvalues/fn/BinaryUtf8CodePointLengthBlockLoaderTests.java
@@ -122,10 +122,6 @@ protected void test(CircuitBreaker breaker, CheckedFunction wrap)
throws IOException;
+
+ protected final TestBlock read(BlockLoader.ColumnAtATimeReader reader, BlockLoader.Docs docs) throws IOException {
+ return (TestBlock) reader.read(TestBlock.factory(), docs, 0, false);
+ }
}
diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/mapper/ExponentialHistogramFieldMapper.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/mapper/ExponentialHistogramFieldMapper.java
index d5240b2e3e9d0..3ce61225b726c 100644
--- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/mapper/ExponentialHistogramFieldMapper.java
+++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/mapper/ExponentialHistogramFieldMapper.java
@@ -381,13 +381,13 @@ public Builder builder(BlockFactory factory, int expectedCount) {
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
- AllReader bytesReader = null;
- AllReader minimaReader = null;
- AllReader maximaReader = null;
- AllReader sumsReader = null;
- AllReader valueCountsReader = null;
- AllReader zeroThresholdsReader = null;
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ ColumnAtATimeReader bytesReader = null;
+ ColumnAtATimeReader minimaReader = null;
+ ColumnAtATimeReader maximaReader = null;
+ ColumnAtATimeReader sumsReader = null;
+ ColumnAtATimeReader valueCountsReader = null;
+ ColumnAtATimeReader zeroThresholdsReader = null;
try {
bytesReader = bytesLoader.reader(breaker, context);
@@ -415,21 +415,21 @@ public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throw
}
}
- static class Reader implements BlockLoader.AllReader {
- private final BlockLoader.AllReader bytesReader;
- private final BlockLoader.AllReader minimaReader;
- private final BlockLoader.AllReader maximaReader;
- private final BlockLoader.AllReader sumsReader;
- private final BlockLoader.AllReader valueCountsReader;
- private final BlockLoader.AllReader zeroThresholdsReader;
+ static class Reader implements BlockLoader.ColumnAtATimeReader {
+ private final BlockLoader.ColumnAtATimeReader bytesReader;
+ private final BlockLoader.ColumnAtATimeReader minimaReader;
+ private final BlockLoader.ColumnAtATimeReader maximaReader;
+ private final BlockLoader.ColumnAtATimeReader sumsReader;
+ private final BlockLoader.ColumnAtATimeReader valueCountsReader;
+ private final BlockLoader.ColumnAtATimeReader zeroThresholdsReader;
Reader(
- BlockLoader.AllReader bytesReader,
- BlockLoader.AllReader minimaReader,
- BlockLoader.AllReader maximaReader,
- BlockLoader.AllReader sumsReader,
- BlockLoader.AllReader valueCountsReader,
- BlockLoader.AllReader zeroThresholdsReader
+ BlockLoader.ColumnAtATimeReader bytesReader,
+ BlockLoader.ColumnAtATimeReader minimaReader,
+ BlockLoader.ColumnAtATimeReader maximaReader,
+ BlockLoader.ColumnAtATimeReader sumsReader,
+ BlockLoader.ColumnAtATimeReader valueCountsReader,
+ BlockLoader.ColumnAtATimeReader zeroThresholdsReader
) {
this.bytesReader = bytesReader;
this.minimaReader = minimaReader;
@@ -482,17 +482,6 @@ public BlockLoader.Block read(BlockLoader.BlockFactory factory, BlockLoader.Docs
return result;
}
- @Override
- public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.Builder builder) throws IOException {
- BlockLoader.ExponentialHistogramBuilder histogramBuilder = (BlockLoader.ExponentialHistogramBuilder) builder;
- minimaReader.read(docId, storedFields, histogramBuilder.minima());
- maximaReader.read(docId, storedFields, histogramBuilder.maxima());
- sumsReader.read(docId, storedFields, histogramBuilder.sums());
- valueCountsReader.read(docId, storedFields, histogramBuilder.valueCounts());
- zeroThresholdsReader.read(docId, storedFields, histogramBuilder.zeroThresholds());
- bytesReader.read(docId, storedFields, histogramBuilder.encodedHistograms());
- }
-
@Override
public void close() {
Releasables.close(minimaReader, maximaReader, sumsReader, valueCountsReader, zeroThresholdsReader, bytesReader);
diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/analytics/mapper/TDigestBlockLoader.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/analytics/mapper/TDigestBlockLoader.java
index a6250f604a3fc..3af7a342c52bb 100644
--- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/analytics/mapper/TDigestBlockLoader.java
+++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/analytics/mapper/TDigestBlockLoader.java
@@ -39,12 +39,12 @@ public TDigestBlockLoader(
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
- AllReader encodedDigestReader = null;
- AllReader minimaReader = null;
- AllReader maximaReader = null;
- AllReader sumsReader = null;
- AllReader valueCountsReader = null;
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ ColumnAtATimeReader encodedDigestReader = null;
+ ColumnAtATimeReader minimaReader = null;
+ ColumnAtATimeReader maximaReader = null;
+ ColumnAtATimeReader sumsReader = null;
+ ColumnAtATimeReader valueCountsReader = null;
try {
encodedDigestReader = encodedDigestLoader.reader(breaker, context);
minimaReader = minimaLoader.reader(breaker, context);
@@ -65,20 +65,20 @@ public Builder builder(BlockFactory factory, int expectedCount) {
return factory.tdigestBlockBuilder(expectedCount);
}
- static class TDigestReader implements AllReader {
+ static class TDigestReader implements ColumnAtATimeReader {
- private final AllReader encodedDigestReader;
- private final AllReader minimaReader;
- private final AllReader maximaReader;
- private final AllReader sumsReader;
- private final AllReader valueCountsReader;
+ private final ColumnAtATimeReader encodedDigestReader;
+ private final ColumnAtATimeReader minimaReader;
+ private final ColumnAtATimeReader maximaReader;
+ private final ColumnAtATimeReader sumsReader;
+ private final ColumnAtATimeReader valueCountsReader;
TDigestReader(
- AllReader encodedDigestReader,
- AllReader minimaReader,
- AllReader maximaReader,
- AllReader sumsReader,
- AllReader valueCountsReader
+ ColumnAtATimeReader encodedDigestReader,
+ ColumnAtATimeReader minimaReader,
+ ColumnAtATimeReader maximaReader,
+ ColumnAtATimeReader sumsReader,
+ ColumnAtATimeReader valueCountsReader
) {
this.encodedDigestReader = encodedDigestReader;
this.minimaReader = minimaReader;
@@ -122,16 +122,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
return result;
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- TDigestBuilder histogramBuilder = (TDigestBuilder) builder;
- minimaReader.read(docId, storedFields, histogramBuilder.minima());
- maximaReader.read(docId, storedFields, histogramBuilder.maxima());
- sumsReader.read(docId, storedFields, histogramBuilder.sums());
- valueCountsReader.read(docId, storedFields, histogramBuilder.valueCounts());
- encodedDigestReader.read(docId, storedFields, histogramBuilder.encodedDigests());
- }
-
@Override
public String toString() {
return "BlockDocValuesReader.TDigest";
diff --git a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleBlockLoader.java b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleBlockLoader.java
index 5279fa4b616f0..66f0638f5e7db 100644
--- a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleBlockLoader.java
+++ b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleBlockLoader.java
@@ -55,11 +55,11 @@ private static IntsBlockLoader getIntsBlockLoader(
}
@Override
- public AllReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
- AllReader minReader = null;
- AllReader maxReader = null;
- AllReader sumReader = null;
- AllReader countReader = null;
+ public ColumnAtATimeReader reader(CircuitBreaker breaker, LeafReaderContext context) throws IOException {
+ ColumnAtATimeReader minReader = null;
+ ColumnAtATimeReader maxReader = null;
+ ColumnAtATimeReader sumReader = null;
+ ColumnAtATimeReader countReader = null;
boolean success = false;
try {
minReader = minLoader != null ? minLoader.reader(breaker, context) : null;
@@ -81,13 +81,18 @@ public Builder builder(BlockFactory factory, int expectedCount) {
return factory.aggregateMetricDoubleBuilder(expectedCount);
}
- private static class Reader implements AllReader {
- private final AllReader minReader;
- private final AllReader maxReader;
- private final AllReader sumReader;
- private final AllReader countReader;
-
- private Reader(AllReader minReader, AllReader maxReader, AllReader sumReader, AllReader countReader) {
+ private static class Reader implements ColumnAtATimeReader {
+ private final ColumnAtATimeReader minReader;
+ private final ColumnAtATimeReader maxReader;
+ private final ColumnAtATimeReader sumReader;
+ private final ColumnAtATimeReader countReader;
+
+ private Reader(
+ ColumnAtATimeReader minReader,
+ ColumnAtATimeReader maxReader,
+ ColumnAtATimeReader sumReader,
+ ColumnAtATimeReader countReader
+ ) {
this.minReader = minReader;
this.maxReader = maxReader;
this.sumReader = sumReader;
@@ -122,23 +127,6 @@ public Block read(BlockFactory factory, Docs docs, int offset, boolean nullsFilt
}
}
- @Override
- public void read(int docId, StoredFields storedFields, Builder builder) throws IOException {
- var blockBuilder = (AggregateMetricDoubleBuilder) builder;
- readSingleRowFromSubblock(docId, storedFields, blockBuilder.min(), minReader);
- readSingleRowFromSubblock(docId, storedFields, blockBuilder.max(), maxReader);
- readSingleRowFromSubblock(docId, storedFields, blockBuilder.sum(), sumReader);
- readSingleRowFromSubblock(docId, storedFields, blockBuilder.count(), countReader);
- }
-
- private void readSingleRowFromSubblock(int docID, StoredFields storedFields, Builder builder, AllReader reader) throws IOException {
- if (reader == null) {
- builder.appendNull();
- } else {
- reader.read(docID, storedFields, builder);
- }
- }
-
@Override
public boolean canReuse(int startingDocID) {
return (minReader == null || minReader.canReuse(startingDocID))
diff --git a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoublePartialBlockLoaderTests.java b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoublePartialBlockLoaderTests.java
index c5116e71c81e7..0c360233e8d21 100644
--- a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoublePartialBlockLoaderTests.java
+++ b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoublePartialBlockLoaderTests.java
@@ -207,7 +207,7 @@ private void checkMetric(boolean loadField, String field, HashMap