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]

Reply via email to