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 8d73e7c62d7 Propagate query options to ForwardIndexReaderContext via 
DataFetcher (#17817)
8d73e7c62d7 is described below

commit 8d73e7c62d782bb938e9c786c75b016581c0dd27
Author: Songqiao Su <[email protected]>
AuthorDate: Thu Mar 5 11:22:59 2026 -0800

    Propagate query options to ForwardIndexReaderContext via DataFetcher 
(#17817)
---
 .../main/java/org/apache/pinot/core/common/DataFetcher.java   | 11 ++++++++---
 .../org/apache/pinot/core/operator/ProjectionOperator.java    |  2 +-
 .../java/org/apache/pinot/core/common/DataFetcherTest.java    |  3 ++-
 .../segment/spi/index/reader/ForwardIndexReaderContext.java   | 10 ++++++++++
 4 files changed, 21 insertions(+), 5 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 384014c8081..6d319916545 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
@@ -52,13 +52,16 @@ public class DataFetcher implements AutoCloseable {
   private final Map<String, ColumnValueReader> _columnValueReaderMap;
   private final int[] _reusableMVDictIds;
   private final int _maxNumValuesPerMVEntry;
+  private final Map<String, String> _queryOptions;
 
   /**
    * Constructor for DataFetcher.
    *
-   * @param dataSourceMap Map from column to data source
+   * @param dataSourceMap  Map from column to data source
+   * @param queryOptions   Query-level options propagated to reader contexts
    */
-  public DataFetcher(Map<String, DataSource> dataSourceMap) {
+  public DataFetcher(Map<String, DataSource> dataSourceMap, Map<String, 
String> queryOptions) {
+    _queryOptions = queryOptions;
     _columnValueReaderMap = new HashMap<>();
     int maxNumValuesPerMVEntry = 0;
     for (Map.Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
@@ -321,9 +324,11 @@ public class DataFetcher implements AutoCloseable {
     }
 
     private ForwardIndexReaderContext getReaderContext() {
-      // Create reader context lazily to reduce the duration of existence
       if (!_readerContextCreated) {
         _readerContext = _reader.createContext();
+        if (_readerContext != null) {
+          _readerContext.applyQueryOptions(_queryOptions);
+        }
         _readerContextCreated = true;
       }
       return _readerContext;
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
index 85b07166d27..e621bb435e2 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
@@ -50,7 +50,7 @@ public class ProjectionOperator extends 
BaseProjectOperator<ProjectionBlock> imp
       @Nullable BaseDocIdSetOperator docIdSetOperator, QueryContext 
queryContext) {
     _dataSourceMap = dataSourceMap;
     _docIdSetOperator = docIdSetOperator;
-    _dataFetcher = new DataFetcher(dataSourceMap);
+    _dataFetcher = new DataFetcher(dataSourceMap, 
queryContext.getQueryOptions());
     _dataBlockCache = new DataBlockCache(_dataFetcher);
     _columnContextMap = new 
HashMap<>(HashUtil.getHashMapCapacity(dataSourceMap.size()));
     dataSourceMap.forEach(
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/common/DataFetcherTest.java 
b/pinot-core/src/test/java/org/apache/pinot/core/common/DataFetcherTest.java
index 176f1199e86..f06e7f23276 100644
--- a/pinot-core/src/test/java/org/apache/pinot/core/common/DataFetcherTest.java
+++ b/pinot-core/src/test/java/org/apache/pinot/core/common/DataFetcherTest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -147,7 +148,7 @@ public class DataFetcherTest {
     for (String column : _indexSegment.getPhysicalColumnNames()) {
       dataSourceMap.put(column, _indexSegment.getDataSource(column));
     }
-    _dataFetcher = new DataFetcher(dataSourceMap);
+    _dataFetcher = new DataFetcher(dataSourceMap, Collections.emptyMap());
   }
 
   @Test
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 50fc0d8a561..d2e4aaf06e3 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,6 +18,9 @@
  */
 package org.apache.pinot.segment.spi.index.reader;
 
+import java.util.Map;
+
+
 /**
  * Interface for the context of the forward index reader.
  * <p>The forward index reader itself is always stateless because it needs to 
be accessed by multiple threads. The
@@ -26,6 +29,13 @@ package org.apache.pinot.segment.spi.index.reader;
  */
 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