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]