This is an automated email from the ASF dual-hosted git repository.
yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 3084ecd9ad8 Add createContext(queryOptions) to ForwardIndexReader
(#17844)
3084ecd9ad8 is described below
commit 3084ecd9ad837ff7d44b647dd886bf56da61833d
Author: Songqiao Su <[email protected]>
AuthorDate: Thu Mar 12 06:15:24 2026 -0700
Add createContext(queryOptions) to ForwardIndexReader (#17844)
---
.../src/main/java/org/apache/pinot/core/common/DataFetcher.java | 5 +----
.../pinot/core/operator/dociditerators/MVScanDocIdIterator.java | 6 ++++--
.../pinot/core/operator/dociditerators/SVScanDocIdIterator.java | 6 ++++--
.../org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java | 6 ++++--
.../org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java | 6 ++++--
.../pinot/core/operator/filter/ScanBasedFilterOperator.java | 5 +++--
.../pinot/segment/spi/index/reader/ForwardIndexReader.java | 9 +++++++++
.../segment/spi/index/reader/ForwardIndexReaderContext.java | 9 ---------
8 files changed, 29 insertions(+), 23 deletions(-)
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/common/DataFetcher.java
b/pinot-core/src/main/java/org/apache/pinot/core/common/DataFetcher.java
index 6d319916545..617111938fc 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/common/DataFetcher.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/common/DataFetcher.java
@@ -325,10 +325,7 @@ public class DataFetcher implements AutoCloseable {
private ForwardIndexReaderContext getReaderContext() {
if (!_readerContextCreated) {
- _readerContext = _reader.createContext();
- if (_readerContext != null) {
- _readerContext.applyQueryOptions(_queryOptions);
- }
+ _readerContext = _reader.createContext(_queryOptions);
_readerContextCreated = true;
}
return _readerContext;
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/MVScanDocIdIterator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/MVScanDocIdIterator.java
index 181e950e2ae..04a3e8cfe7c 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/MVScanDocIdIterator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/MVScanDocIdIterator.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.operator.dociditerators;
+import java.util.Map;
import java.util.OptionalInt;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
import org.apache.pinot.segment.spi.Constants;
@@ -47,10 +48,11 @@ public final class MVScanDocIdIterator implements
ScanBasedDocIdIterator {
private int _nextDocId = 0;
private long _numEntriesScanned = 0L;
- public MVScanDocIdIterator(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs) {
+ public MVScanDocIdIterator(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs,
+ Map<String, String> queryOptions) {
_predicateEvaluator = predicateEvaluator;
_reader = dataSource.getForwardIndex();
- _readerContext = _reader.createContext();
+ _readerContext = _reader.createContext(queryOptions);
_numDocs = numDocs;
_maxNumValuesPerMVEntry =
dataSource.getDataSourceMetadata().getMaxNumValuesPerMVEntry();
_valueMatcher = getValueMatcher();
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/SVScanDocIdIterator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/SVScanDocIdIterator.java
index d2170a99846..da718f279c9 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/SVScanDocIdIterator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/SVScanDocIdIterator.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.operator.dociditerators;
+import java.util.Map;
import java.util.OptionalInt;
import org.apache.pinot.core.common.BlockDocIdIterator;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
@@ -49,11 +50,12 @@ public final class SVScanDocIdIterator implements
ScanBasedDocIdIterator {
private int _nextDocId = 0;
private long _numEntriesScanned = 0L;
- public SVScanDocIdIterator(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs, int batchSize) {
+ public SVScanDocIdIterator(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs, int batchSize,
+ Map<String, String> queryOptions) {
_batch = new int[batchSize];
_predicateEvaluator = predicateEvaluator;
_reader = dataSource.getForwardIndex();
- _readerContext = _reader.createContext();
+ _readerContext = _reader.createContext(queryOptions);
_numDocs = numDocs;
_valueMatcher = getValueMatcher();
_cardinality = dataSource.getDataSourceMetadata().getCardinality();
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java
index dc9361e0d81..f6807b79074 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.operator.docidsets;
+import java.util.Map;
import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.MVScanDocIdIterator;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
@@ -27,8 +28,9 @@ import org.apache.pinot.segment.spi.datasource.DataSource;
public final class MVScanDocIdSet implements BlockDocIdSet {
private final MVScanDocIdIterator _docIdIterator;
- public MVScanDocIdSet(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs) {
- _docIdIterator = new MVScanDocIdIterator(predicateEvaluator, dataSource,
numDocs);
+ public MVScanDocIdSet(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs,
+ Map<String, String> queryOptions) {
+ _docIdIterator = new MVScanDocIdIterator(predicateEvaluator, dataSource,
numDocs, queryOptions);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java
index 2e0e5b88106..2633f305d5e 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.operator.docidsets;
+import java.util.Map;
import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.SVScanDocIdIterator;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
@@ -27,8 +28,9 @@ import org.apache.pinot.segment.spi.datasource.DataSource;
public final class SVScanDocIdSet implements BlockDocIdSet {
private final SVScanDocIdIterator _docIdIterator;
- public SVScanDocIdSet(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs, int batchSize) {
- _docIdIterator = new SVScanDocIdIterator(predicateEvaluator, dataSource,
numDocs, batchSize);
+ public SVScanDocIdSet(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs, int batchSize,
+ Map<String, String> queryOptions) {
+ _docIdIterator = new SVScanDocIdIterator(predicateEvaluator, dataSource,
numDocs, batchSize, queryOptions);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/ScanBasedFilterOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/ScanBasedFilterOperator.java
index 07dcbb0c8ed..29c28a4248d 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/ScanBasedFilterOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/ScanBasedFilterOperator.java
@@ -59,9 +59,10 @@ public class ScanBasedFilterOperator extends
BaseColumnFilterOperator {
protected BlockDocIdSet getNextBlockWithoutNullHandling() {
DataSourceMetadata dataSourceMetadata =
_dataSource.getDataSourceMetadata();
if (dataSourceMetadata.isSingleValue()) {
- return new SVScanDocIdSet(_predicateEvaluator, _dataSource, _numDocs,
_batchSize);
+ return new SVScanDocIdSet(_predicateEvaluator, _dataSource, _numDocs,
_batchSize,
+ _queryContext.getQueryOptions());
} else {
- return new MVScanDocIdSet(_predicateEvaluator, _dataSource, _numDocs);
+ return new MVScanDocIdSet(_predicateEvaluator, _dataSource, _numDocs,
_queryContext.getQueryOptions());
}
}
diff --git
a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/reader/ForwardIndexReader.java
b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/reader/ForwardIndexReader.java
index dc0d37b9860..0b44dc8fddc 100644
---
a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/reader/ForwardIndexReader.java
+++
b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/reader/ForwardIndexReader.java
@@ -92,6 +92,15 @@ public interface ForwardIndexReader<T extends
ForwardIndexReaderContext> extends
return null;
}
+ /**
+ * Creates a new {@link ForwardIndexReaderContext} with query-level options
so that reader implementations can
+ * adjust per-query behavior (e.g., bypassing caches). Falls back to {@link
#createContext()} by default.
+ */
+ @Nullable
+ default T createContext(Map<String, String> queryOptions) {
+ return createContext();
+ }
+
/**
* DICTIONARY-ENCODED INDEX APIs
*/
diff --git
a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/reader/ForwardIndexReaderContext.java
b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/reader/ForwardIndexReaderContext.java
index d2e4aaf06e3..5517cf2c1d2 100644
---
a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/reader/ForwardIndexReaderContext.java
+++
b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/reader/ForwardIndexReaderContext.java
@@ -18,8 +18,6 @@
*/
package org.apache.pinot.segment.spi.index.reader;
-import java.util.Map;
-
/**
* Interface for the context of the forward index reader.
@@ -29,13 +27,6 @@ import java.util.Map;
*/
public interface ForwardIndexReaderContext extends AutoCloseable {
- /**
- * Applies query-level options to this context so that reader
implementations can adjust behavior per-query
- * (e.g., bypassing caches). The default implementation is a no-op for
backward compatibility.
- */
- default void applyQueryOptions(Map<String, String> queryOptions) {
- }
-
@Override
void close();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]