You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by si...@apache.org on 2022/07/29 18:32:05 UTC

[pinot] branch master updated: Emit a server side metric to identify if MV columns are present as part of the selection order by queries (#9117)

This is an automated email from the ASF dual-hosted git repository.

siddteotia 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 c6ac7d6df2 Emit a server side metric to identify if MV columns are present as part of the selection order by queries (#9117)
c6ac7d6df2 is described below

commit c6ac7d6df285e51193651413232dd7de560c1aa4
Author: Sonam Mandal <so...@linkedin.com>
AuthorDate: Fri Jul 29 11:31:58 2022 -0700

    Emit a server side metric to identify if MV columns are present as part of the selection order by queries (#9117)
    
    * Emit a server side metric to identify if MV columns are present as part of the selection order by queries
    
    * Add the queryHasMVSelectionOrderBy value to logs if true for easier detection
    
    * Remove if check for log
    
    * Remove MetadataKey and pass down server metrics and add a log
    
    * Add null check for orderByExpressions
    
    * Address review comments
    
    * empty commit to trigger checks
---
 .../apache/pinot/common/metrics/ServerMeter.java   |  1 +
 .../core/operator/InstanceResponseOperator.java    | 42 ++++++++++++++++++----
 .../StreamingInstanceResponseOperator.java         |  7 ++--
 .../operator/blocks/IntermediateResultsBlock.java  |  9 +++++
 .../operator/query/SelectionOrderByOperator.java   | 13 +++++--
 .../pinot/core/plan/InstanceResponsePlanNode.java  | 11 ++++--
 .../plan/StreamingInstanceResponsePlanNode.java    |  9 +++--
 .../core/plan/maker/InstancePlanMakerImplV2.java   | 14 +++++---
 .../apache/pinot/core/plan/maker/PlanMaker.java    |  7 ++--
 .../query/executor/ServerQueryExecutorV1Impl.java  |  3 +-
 .../org/apache/pinot/queries/BaseQueriesTest.java  |  2 +-
 11 files changed, 93 insertions(+), 25 deletions(-)

diff --git a/pinot-common/src/main/java/org/apache/pinot/common/metrics/ServerMeter.java b/pinot-common/src/main/java/org/apache/pinot/common/metrics/ServerMeter.java
index 21133fddc8..22bb82abd4 100644
--- a/pinot-common/src/main/java/org/apache/pinot/common/metrics/ServerMeter.java
+++ b/pinot-common/src/main/java/org/apache/pinot/common/metrics/ServerMeter.java
@@ -72,6 +72,7 @@ public enum ServerMeter implements AbstractMetrics.Meter {
   NUM_RESIZES("numResizes", false),
   NO_TABLE_ACCESS("tables", true),
   INDEXING_FAILURES("attributeValues", true),
+  QUERY_HAS_MV_SELECTION_ORDER_BY("queryHasMVSelectionOrderBy", false),
 
   // Netty connection metrics
   NETTY_CONNECTION_BYTES_RECEIVED("nettyConnection", true),
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/InstanceResponseOperator.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/InstanceResponseOperator.java
index 096726dedf..1ca21e4e4e 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/InstanceResponseOperator.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/InstanceResponseOperator.java
@@ -21,31 +21,41 @@ package org.apache.pinot.core.operator;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import org.apache.pinot.common.metrics.ServerMeter;
+import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.common.utils.DataTable.MetadataKey;
 import org.apache.pinot.core.common.Operator;
 import org.apache.pinot.core.operator.blocks.InstanceResponseBlock;
 import org.apache.pinot.core.operator.blocks.IntermediateResultsBlock;
 import org.apache.pinot.core.operator.combine.BaseCombineOperator;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.core.query.request.context.ThreadTimer;
 import org.apache.pinot.segment.spi.FetchContext;
 import org.apache.pinot.segment.spi.IndexSegment;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 public class InstanceResponseOperator extends BaseOperator<InstanceResponseBlock> {
 
+  private static final Logger LOGGER = LoggerFactory.getLogger(InstanceResponseOperator.class);
   private static final String EXPLAIN_NAME = "INSTANCE_RESPONSE";
 
   private final BaseCombineOperator _combineOperator;
   private final List<IndexSegment> _indexSegments;
   private final List<FetchContext> _fetchContexts;
   private final int _fetchContextSize;
+  private final QueryContext _queryContext;
+  private final ServerMetrics _serverMetrics;
 
   public InstanceResponseOperator(BaseCombineOperator combinedOperator, List<IndexSegment> indexSegments,
-      List<FetchContext> fetchContexts) {
+      List<FetchContext> fetchContexts, QueryContext queryContext, ServerMetrics serverMetrics) {
     _combineOperator = combinedOperator;
     _indexSegments = indexSegments;
     _fetchContexts = fetchContexts;
     _fetchContextSize = fetchContexts.size();
+    _queryContext = queryContext;
+    _serverMetrics = serverMetrics;
   }
 
   /*
@@ -75,12 +85,15 @@ public class InstanceResponseOperator extends BaseOperator<InstanceResponseBlock
 
   @Override
   protected InstanceResponseBlock getNextBlock() {
+    IntermediateResultsBlock intermediateResultsBlock;
+    InstanceResponseBlock instanceResponseBlock;
+
     if (ThreadTimer.isThreadCpuTimeMeasurementEnabled()) {
       long startWallClockTimeNs = System.nanoTime();
 
       ThreadTimer mainThreadTimer = new ThreadTimer();
-      IntermediateResultsBlock intermediateResultsBlock = getCombinedResults();
-      InstanceResponseBlock instanceResponseBlock = new InstanceResponseBlock(intermediateResultsBlock);
+      intermediateResultsBlock = getCombinedResults();
+      instanceResponseBlock = new InstanceResponseBlock(intermediateResultsBlock);
       long mainThreadCpuTimeNs = mainThreadTimer.getThreadTimeNs();
 
       long totalWallClockTimeNs = System.nanoTime() - startWallClockTimeNs;
@@ -100,11 +113,28 @@ public class InstanceResponseOperator extends BaseOperator<InstanceResponseBlock
       responseMetaData.put(MetadataKey.THREAD_CPU_TIME_NS.getName(), String.valueOf(threadCpuTimeNs));
       responseMetaData
           .put(MetadataKey.SYSTEM_ACTIVITIES_CPU_TIME_NS.getName(), String.valueOf(systemActivitiesCpuTimeNs));
-
-      return instanceResponseBlock;
     } else {
-      return new InstanceResponseBlock(getCombinedResults());
+      intermediateResultsBlock = getCombinedResults();
+      instanceResponseBlock = new InstanceResponseBlock(intermediateResultsBlock);
+    }
+
+    // TODO: Remove this once the SelectionOrderByOperator is modified to throw an exception to catch cases where
+    //       an MV column (identifier or via transform) is present on the order-by list
+    logAndEmitMetricForQueryHasMVSelectionOrderBy(intermediateResultsBlock);
+    return instanceResponseBlock;
+  }
+
+  private void logAndEmitMetricForQueryHasMVSelectionOrderBy(IntermediateResultsBlock intermediateResultsBlock) {
+    if (!intermediateResultsBlock.isQueryHasMVSelectionOrderBy()) {
+      return;
+    }
+
+    String tableName = _queryContext.getTableName();
+    if (_serverMetrics != null) {
+      _serverMetrics.addMeteredTableValue(tableName, ServerMeter.QUERY_HAS_MV_SELECTION_ORDER_BY, 1);
     }
+    LOGGER.warn("Table {} has MV column in ORDER BY. Expressions: {}", tableName,
+        _queryContext.getOrderByExpressions());
   }
 
   private IntermediateResultsBlock getCombinedResults() {
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/StreamingInstanceResponseOperator.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/StreamingInstanceResponseOperator.java
index 0b00b90902..4a13361b56 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/StreamingInstanceResponseOperator.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/StreamingInstanceResponseOperator.java
@@ -22,12 +22,14 @@ import io.grpc.stub.StreamObserver;
 import java.io.IOException;
 import java.util.List;
 import org.apache.pinot.common.exception.QueryException;
+import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.common.proto.Server;
 import org.apache.pinot.common.utils.DataTable;
 import org.apache.pinot.core.common.datatable.DataTableFactory;
 import org.apache.pinot.core.operator.blocks.InstanceResponseBlock;
 import org.apache.pinot.core.operator.combine.BaseCombineOperator;
 import org.apache.pinot.core.operator.streaming.StreamingResponseUtils;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.segment.spi.FetchContext;
 import org.apache.pinot.segment.spi.IndexSegment;
 
@@ -37,8 +39,9 @@ public class StreamingInstanceResponseOperator extends InstanceResponseOperator
   private final StreamObserver<Server.ServerResponse> _streamObserver;
 
   public StreamingInstanceResponseOperator(BaseCombineOperator combinedOperator, List<IndexSegment> indexSegments,
-      List<FetchContext> fetchContexts, StreamObserver<Server.ServerResponse> streamObserver) {
-    super(combinedOperator, indexSegments, fetchContexts);
+      List<FetchContext> fetchContexts, StreamObserver<Server.ServerResponse> streamObserver,
+      QueryContext queryContext, ServerMetrics serverMetrics) {
+    super(combinedOperator, indexSegments, fetchContexts, queryContext, serverMetrics);
     _streamObserver = streamObserver;
   }
 
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/IntermediateResultsBlock.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/IntermediateResultsBlock.java
index 6bc5e6e016..2367f5ac84 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/IntermediateResultsBlock.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/IntermediateResultsBlock.java
@@ -74,6 +74,7 @@ public class IntermediateResultsBlock implements Block {
   private long _resizeTimeMs;
   private long _executionThreadCpuTimeNs;
   private int _numServerThreads;
+  private boolean _queryHasMVSelectionOrderBy;
 
   private Table _table;
 
@@ -287,6 +288,14 @@ public class IntermediateResultsBlock implements Block {
     _numGroupsLimitReached = numGroupsLimitReached;
   }
 
+  public boolean isQueryHasMVSelectionOrderBy() {
+    return _queryHasMVSelectionOrderBy;
+  }
+
+  public void setQueryHasMVSelectionOrderBy(boolean queryHasMVSelectionOrderBy) {
+    _queryHasMVSelectionOrderBy = queryHasMVSelectionOrderBy;
+  }
+
   /**
    * Get the collection of intermediate records
    */
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/query/SelectionOrderByOperator.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/query/SelectionOrderByOperator.java
index 2cc14706dd..e8dd9bf76b 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/query/SelectionOrderByOperator.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/query/SelectionOrderByOperator.java
@@ -87,6 +87,8 @@ public class SelectionOrderByOperator extends BaseOperator<IntermediateResultsBl
   private int _numDocsScanned = 0;
   private long _numEntriesScannedPostFilter = 0;
 
+  private boolean _queryHasMVSelectionOrderBy = false;
+
   public SelectionOrderByOperator(IndexSegment indexSegment, QueryContext queryContext,
       List<ExpressionContext> expressions, TransformOperator transformOperator, boolean allOrderByColsPreSorted) {
     _indexSegment = indexSegment;
@@ -128,6 +130,8 @@ public class SelectionOrderByOperator extends BaseOperator<IntermediateResultsBl
     for (int i = 0; i < numOrderByExpressions; i++) {
       if (_orderByExpressionMetadata[i].isSingleValue()) {
         valueIndexList.add(i);
+      } else {
+        _queryHasMVSelectionOrderBy = true;
       }
     }
 
@@ -236,13 +240,16 @@ public class SelectionOrderByOperator extends BaseOperator<IntermediateResultsBl
 
   @Override
   protected IntermediateResultsBlock getNextBlock() {
+    IntermediateResultsBlock resultsBlock;
     if (_allOrderByColsPreSorted) {
-      return computeAllPreSorted();
+      resultsBlock = computeAllPreSorted();
     } else if (_expressions.size() == _orderByExpressions.size()) {
-      return computeAllOrdered();
+      resultsBlock = computeAllOrdered();
     } else {
-      return computePartiallyOrdered();
+      resultsBlock = computePartiallyOrdered();
     }
+    resultsBlock.setQueryHasMVSelectionOrderBy(_queryHasMVSelectionOrderBy);
+    return resultsBlock;
   }
 
   private IntermediateResultsBlock computeAllPreSorted() {
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/plan/InstanceResponsePlanNode.java b/pinot-core/src/main/java/org/apache/pinot/core/plan/InstanceResponsePlanNode.java
index 915c5dd64b..2b3f9aff18 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/InstanceResponsePlanNode.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/InstanceResponsePlanNode.java
@@ -19,7 +19,9 @@
 package org.apache.pinot.core.plan;
 
 import java.util.List;
+import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.core.operator.InstanceResponseOperator;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.segment.spi.FetchContext;
 import org.apache.pinot.segment.spi.IndexSegment;
 
@@ -28,16 +30,21 @@ public class InstanceResponsePlanNode implements PlanNode {
   protected final CombinePlanNode _combinePlanNode;
   protected final List<IndexSegment> _indexSegments;
   protected final List<FetchContext> _fetchContexts;
+  protected final QueryContext _queryContext;
+  protected final ServerMetrics _serverMetrics;
 
   public InstanceResponsePlanNode(CombinePlanNode combinePlanNode, List<IndexSegment> indexSegments,
-      List<FetchContext> fetchContexts) {
+      List<FetchContext> fetchContexts, QueryContext queryContext, ServerMetrics serverMetrics) {
     _combinePlanNode = combinePlanNode;
     _indexSegments = indexSegments;
     _fetchContexts = fetchContexts;
+    _queryContext = queryContext;
+    _serverMetrics = serverMetrics;
   }
 
   @Override
   public InstanceResponseOperator run() {
-    return new InstanceResponseOperator(_combinePlanNode.run(), _indexSegments, _fetchContexts);
+    return new InstanceResponseOperator(_combinePlanNode.run(), _indexSegments, _fetchContexts, _queryContext,
+        _serverMetrics);
   }
 }
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/plan/StreamingInstanceResponsePlanNode.java b/pinot-core/src/main/java/org/apache/pinot/core/plan/StreamingInstanceResponsePlanNode.java
index d77761ab79..de58ba5c8f 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/StreamingInstanceResponsePlanNode.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/StreamingInstanceResponsePlanNode.java
@@ -20,9 +20,11 @@ package org.apache.pinot.core.plan;
 
 import io.grpc.stub.StreamObserver;
 import java.util.List;
+import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.common.proto.Server;
 import org.apache.pinot.core.operator.InstanceResponseOperator;
 import org.apache.pinot.core.operator.StreamingInstanceResponseOperator;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.segment.spi.FetchContext;
 import org.apache.pinot.segment.spi.IndexSegment;
 
@@ -31,14 +33,15 @@ public class StreamingInstanceResponsePlanNode extends InstanceResponsePlanNode
   private final StreamObserver<Server.ServerResponse> _streamObserver;
 
   public StreamingInstanceResponsePlanNode(CombinePlanNode combinePlanNode, List<IndexSegment> indexSegments,
-      List<FetchContext> fetchContexts, StreamObserver<Server.ServerResponse> streamObserver) {
-    super(combinePlanNode, indexSegments, fetchContexts);
+      List<FetchContext> fetchContexts, StreamObserver<Server.ServerResponse> streamObserver,
+      QueryContext queryContext, ServerMetrics serverMetrics) {
+    super(combinePlanNode, indexSegments, fetchContexts, queryContext, serverMetrics);
     _streamObserver = streamObserver;
   }
 
   @Override
   public InstanceResponseOperator run() {
     return new StreamingInstanceResponseOperator(_combinePlanNode.run(), _indexSegments, _fetchContexts,
-        _streamObserver);
+        _streamObserver, _queryContext, _serverMetrics);
   }
 }
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java b/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
index 25ddb1795c..05db768ad0 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
@@ -30,6 +30,7 @@ import java.util.UUID;
 import java.util.concurrent.ExecutorService;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
+import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.common.proto.Server;
 import org.apache.pinot.common.request.context.ExpressionContext;
 import org.apache.pinot.common.request.context.FilterContext;
@@ -150,7 +151,7 @@ public class InstancePlanMakerImplV2 implements PlanMaker {
 
   @Override
   public Plan makeInstancePlan(List<IndexSegment> indexSegments, QueryContext queryContext,
-      ExecutorService executorService) {
+      ExecutorService executorService, ServerMetrics serverMetrics) {
     applyQueryOptions(queryContext);
 
     int numSegments = indexSegments.size();
@@ -181,7 +182,8 @@ public class InstancePlanMakerImplV2 implements PlanMaker {
     }
 
     CombinePlanNode combinePlanNode = new CombinePlanNode(planNodes, queryContext, executorService, null);
-    return new GlobalPlanImplV0(new InstanceResponsePlanNode(combinePlanNode, indexSegments, fetchContexts));
+    return new GlobalPlanImplV0(new InstanceResponsePlanNode(combinePlanNode, indexSegments, fetchContexts,
+        queryContext, serverMetrics));
   }
 
   private void applyQueryOptions(QueryContext queryContext) {
@@ -259,7 +261,8 @@ public class InstancePlanMakerImplV2 implements PlanMaker {
 
   @Override
   public Plan makeStreamingInstancePlan(List<IndexSegment> indexSegments, QueryContext queryContext,
-      ExecutorService executorService, StreamObserver<Server.ServerResponse> streamObserver) {
+      ExecutorService executorService, StreamObserver<Server.ServerResponse> streamObserver,
+      ServerMetrics serverMetrics) {
     applyQueryOptions(queryContext);
 
     List<PlanNode> planNodes = new ArrayList<>(indexSegments.size());
@@ -270,13 +273,14 @@ public class InstancePlanMakerImplV2 implements PlanMaker {
     if (QueryContextUtils.isSelectionOnlyQuery(queryContext)) {
       // selection-only is streamed in StreamingSelectionPlanNode --> here only metadata block is returned.
       return new GlobalPlanImplV0(
-          new InstanceResponsePlanNode(combinePlanNode, indexSegments, Collections.emptyList()));
+          new InstanceResponsePlanNode(combinePlanNode, indexSegments, Collections.emptyList(), queryContext,
+              serverMetrics));
     } else {
       // non-selection-only requires a StreamingInstanceResponsePlanNode to stream data block back and metadata block
       // as final return.
       return new GlobalPlanImplV0(
           new StreamingInstanceResponsePlanNode(combinePlanNode, indexSegments, Collections.emptyList(),
-              streamObserver));
+              streamObserver, queryContext, serverMetrics));
     }
   }
 
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/PlanMaker.java b/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/PlanMaker.java
index f654d9bf35..70b6b14069 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/PlanMaker.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/PlanMaker.java
@@ -21,6 +21,7 @@ package org.apache.pinot.core.plan.maker;
 import io.grpc.stub.StreamObserver;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
+import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.common.proto.Server;
 import org.apache.pinot.core.plan.Plan;
 import org.apache.pinot.core.plan.PlanNode;
@@ -38,7 +39,8 @@ public interface PlanMaker {
   /**
    * Returns an instance level {@link Plan} which contains the logical execution plan for multiple segments.
    */
-  Plan makeInstancePlan(List<IndexSegment> indexSegments, QueryContext queryContext, ExecutorService executorService);
+  Plan makeInstancePlan(List<IndexSegment> indexSegments, QueryContext queryContext, ExecutorService executorService,
+      ServerMetrics serverMetrics);
 
   /**
    * Returns a segment level {@link PlanNode} which contains the logical execution plan for one segment.
@@ -50,7 +52,8 @@ public interface PlanMaker {
    * segments.
    */
   Plan makeStreamingInstancePlan(List<IndexSegment> indexSegments, QueryContext queryContext,
-      ExecutorService executorService, StreamObserver<Server.ServerResponse> streamObserver);
+      ExecutorService executorService, StreamObserver<Server.ServerResponse> streamObserver,
+      ServerMetrics serverMetrics);
 
   /**
    * Returns a segment level {@link PlanNode} for a streaming query which contains the logical execution plan for one
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/executor/ServerQueryExecutorV1Impl.java b/pinot-core/src/main/java/org/apache/pinot/core/query/executor/ServerQueryExecutorV1Impl.java
index 5c5166298d..1944997f7a 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/executor/ServerQueryExecutorV1Impl.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/executor/ServerQueryExecutorV1Impl.java
@@ -319,7 +319,8 @@ public class ServerQueryExecutorV1Impl implements QueryExecutor {
       TimerContext.Timer planBuildTimer = timerContext.startNewPhaseTimer(ServerQueryPhase.BUILD_QUERY_PLAN);
       Plan queryPlan =
           enableStreaming ? _planMaker.makeStreamingInstancePlan(selectedSegments, queryContext, executorService,
-              responseObserver) : _planMaker.makeInstancePlan(selectedSegments, queryContext, executorService);
+              responseObserver, _serverMetrics) : _planMaker.makeInstancePlan(selectedSegments, queryContext,
+              executorService, _serverMetrics);
       planBuildTimer.stopAndRecord();
 
       TimerContext.Timer planExecTimer = timerContext.startNewPhaseTimer(ServerQueryPhase.QUERY_PLAN_EXECUTION);
diff --git a/pinot-core/src/test/java/org/apache/pinot/queries/BaseQueriesTest.java b/pinot-core/src/test/java/org/apache/pinot/queries/BaseQueriesTest.java
index 95461ae7e6..aa325a3ece 100644
--- a/pinot-core/src/test/java/org/apache/pinot/queries/BaseQueriesTest.java
+++ b/pinot-core/src/test/java/org/apache/pinot/queries/BaseQueriesTest.java
@@ -156,7 +156,7 @@ public abstract class BaseQueriesTest {
 
     // Server side
     serverQueryContext.setEndTimeMs(System.currentTimeMillis() + Server.DEFAULT_QUERY_EXECUTOR_TIMEOUT_MS);
-    Plan plan = planMaker.makeInstancePlan(getIndexSegments(), serverQueryContext, EXECUTOR_SERVICE);
+    Plan plan = planMaker.makeInstancePlan(getIndexSegments(), serverQueryContext, EXECUTOR_SERVICE, null);
     DataTable instanceResponse =
         queryContext.isExplain() ? ServerQueryExecutorV1Impl.processExplainPlanQueries(plan) : plan.execute();
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org