You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by jl...@apache.org on 2023/02/13 20:52:27 UTC

[pinot] branch master updated: Make PlanMaker plugable (#10269)

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

jlli 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 41be2e4395 Make PlanMaker plugable (#10269)
41be2e4395 is described below

commit 41be2e439599c4cb2b18d0b29ce4247bface907b
Author: Xiaotian (Jackie) Jiang <17...@users.noreply.github.com>
AuthorDate: Mon Feb 13 12:52:19 2023 -0800

    Make PlanMaker plugable (#10269)
---
 .../core/data/manager/InstanceDataManager.java     |  1 +
 .../core/plan/maker/InstancePlanMakerImplV2.java   | 60 +++++++-----------
 .../apache/pinot/core/plan/maker/PlanMaker.java    |  6 ++
 .../core/query/config/QueryExecutorConfig.java     | 41 +++---------
 .../core/query/config/QueryPlannerConfig.java      | 53 ----------------
 .../core/query/config/SegmentPrunerConfig.java     |  5 +-
 .../pinot/core/query/executor/QueryExecutor.java   |  1 +
 .../query/executor/ServerQueryExecutorV1Impl.java  | 17 ++---
 .../pinot/integration/tests/ClusterTest.java       | 15 ++---
 .../org/apache/pinot/server/conf/ServerConf.java   | 39 +++---------
 .../pinot/server/starter/ServerInstance.java       |  5 +-
 .../server/starter/helix/BaseServerStarter.java    |  2 +-
 .../helix/DefaultHelixStarterServerConfig.java     | 73 ----------------------
 .../helix/HelixInstanceDataManagerConfig.java      | 15 +++--
 .../pinot/server/worker/WorkerQueryServer.java     |  2 +-
 .../apache/pinot/server/api/AccessControlTest.java |  3 +-
 .../apache/pinot/server/api/BaseResourceTest.java  |  3 +-
 .../server/api/PinotServerAppConfigsTest.java      |  3 +-
 .../apache/pinot/spi/utils/CommonConstants.java    | 19 ++++--
 19 files changed, 97 insertions(+), 266 deletions(-)

diff --git a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/InstanceDataManager.java b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/InstanceDataManager.java
index 0e041021d2..bbc392d4d0 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/InstanceDataManager.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/InstanceDataManager.java
@@ -46,6 +46,7 @@ public interface InstanceDataManager {
   /**
    * Initializes the data manager.
    * <p>Should be called only once and before calling any other method.
+   * <p>NOTE: The config is the subset of server config with prefix 'pinot.server.instance'
    */
   void init(PinotConfiguration config, HelixManager helixManager, ServerMetrics serverMetrics)
       throws ConfigurationException;
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 4ec1a05d06..d4c092c083 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
@@ -47,7 +47,6 @@ import org.apache.pinot.core.plan.PlanNode;
 import org.apache.pinot.core.plan.SelectionPlanNode;
 import org.apache.pinot.core.plan.StreamingInstanceResponsePlanNode;
 import org.apache.pinot.core.plan.StreamingSelectionPlanNode;
-import org.apache.pinot.core.query.config.QueryExecutorConfig;
 import org.apache.pinot.core.query.prefetch.FetchPlanner;
 import org.apache.pinot.core.query.prefetch.FetchPlannerRegistry;
 import org.apache.pinot.core.query.request.context.QueryContext;
@@ -90,30 +89,22 @@ public class InstancePlanMakerImplV2 implements PlanMaker {
 
   private static final Logger LOGGER = LoggerFactory.getLogger(InstancePlanMakerImplV2.class);
 
-  private final int _maxExecutionThreads;
-  private final int _maxInitialResultHolderCapacity;
+  private final FetchPlanner _fetchPlanner = FetchPlannerRegistry.getPlanner();
+  private int _maxExecutionThreads = DEFAULT_MAX_EXECUTION_THREADS;
+  private int _maxInitialResultHolderCapacity = DEFAULT_MAX_INITIAL_RESULT_HOLDER_CAPACITY;
   // Limit on number of groups stored for each segment, beyond which no new group will be created
-  private final int _numGroupsLimit;
+  private int _numGroupsLimit = DEFAULT_NUM_GROUPS_LIMIT;
   // Used for SQL GROUP BY (server combine)
-  private final int _minSegmentGroupTrimSize;
-  private final int _minServerGroupTrimSize;
-  private final int _groupByTrimThreshold;
-  private final FetchPlanner _fetchPlanner = FetchPlannerRegistry.getPlanner();
+  private int _minSegmentGroupTrimSize = DEFAULT_MIN_SEGMENT_GROUP_TRIM_SIZE;
+  private int _minServerGroupTrimSize = DEFAULT_MIN_SERVER_GROUP_TRIM_SIZE;
+  private int _groupByTrimThreshold = DEFAULT_GROUPBY_TRIM_THRESHOLD;
 
-  @VisibleForTesting
   public InstancePlanMakerImplV2() {
-    _maxExecutionThreads = DEFAULT_MAX_EXECUTION_THREADS;
-    _maxInitialResultHolderCapacity = DEFAULT_MAX_INITIAL_RESULT_HOLDER_CAPACITY;
-    _numGroupsLimit = DEFAULT_NUM_GROUPS_LIMIT;
-    _minSegmentGroupTrimSize = DEFAULT_MIN_SEGMENT_GROUP_TRIM_SIZE;
-    _minServerGroupTrimSize = DEFAULT_MIN_SERVER_GROUP_TRIM_SIZE;
-    _groupByTrimThreshold = DEFAULT_GROUPBY_TRIM_THRESHOLD;
   }
 
   @VisibleForTesting
   public InstancePlanMakerImplV2(int maxInitialResultHolderCapacity, int numGroupsLimit, int minSegmentGroupTrimSize,
       int minServerGroupTrimSize, int groupByTrimThreshold) {
-    _maxExecutionThreads = DEFAULT_MAX_EXECUTION_THREADS;
     _maxInitialResultHolderCapacity = maxInitialResultHolderCapacity;
     _numGroupsLimit = numGroupsLimit;
     _minSegmentGroupTrimSize = minSegmentGroupTrimSize;
@@ -121,33 +112,26 @@ public class InstancePlanMakerImplV2 implements PlanMaker {
     _groupByTrimThreshold = groupByTrimThreshold;
   }
 
-  /**
-   * Constructor for usage when client requires to pass {@link QueryExecutorConfig} to this class.
-   * <ul>
-   *   <li>Set limit on the initial result holder capacity</li>
-   *   <li>Set limit on number of groups returned from each segment and combined result</li>
-   * </ul>
-   *
-   * @param queryExecutorConfig Query executor configuration
-   */
-  public InstancePlanMakerImplV2(QueryExecutorConfig queryExecutorConfig) {
-    PinotConfiguration config = queryExecutorConfig.getConfig();
-    _maxExecutionThreads = config.getProperty(MAX_EXECUTION_THREADS_KEY, DEFAULT_MAX_EXECUTION_THREADS);
-    _maxInitialResultHolderCapacity =
-        config.getProperty(MAX_INITIAL_RESULT_HOLDER_CAPACITY_KEY, DEFAULT_MAX_INITIAL_RESULT_HOLDER_CAPACITY);
-    _numGroupsLimit = config.getProperty(NUM_GROUPS_LIMIT_KEY, DEFAULT_NUM_GROUPS_LIMIT);
+  @Override
+  public void init(PinotConfiguration queryExecutorConfig) {
+    _maxExecutionThreads = queryExecutorConfig.getProperty(MAX_EXECUTION_THREADS_KEY, DEFAULT_MAX_EXECUTION_THREADS);
+    _maxInitialResultHolderCapacity = queryExecutorConfig.getProperty(MAX_INITIAL_RESULT_HOLDER_CAPACITY_KEY,
+        DEFAULT_MAX_INITIAL_RESULT_HOLDER_CAPACITY);
+    _numGroupsLimit = queryExecutorConfig.getProperty(NUM_GROUPS_LIMIT_KEY, DEFAULT_NUM_GROUPS_LIMIT);
     Preconditions.checkState(_maxInitialResultHolderCapacity <= _numGroupsLimit,
         "Invalid configuration: maxInitialResultHolderCapacity: %d must be smaller or equal to numGroupsLimit: %d",
         _maxInitialResultHolderCapacity, _numGroupsLimit);
-    _minSegmentGroupTrimSize = config.getProperty(MIN_SEGMENT_GROUP_TRIM_SIZE_KEY, DEFAULT_MIN_SEGMENT_GROUP_TRIM_SIZE);
-    _minServerGroupTrimSize = config.getProperty(MIN_SERVER_GROUP_TRIM_SIZE_KEY, DEFAULT_MIN_SERVER_GROUP_TRIM_SIZE);
-    _groupByTrimThreshold = config.getProperty(GROUPBY_TRIM_THRESHOLD_KEY, DEFAULT_GROUPBY_TRIM_THRESHOLD);
+    _minSegmentGroupTrimSize =
+        queryExecutorConfig.getProperty(MIN_SEGMENT_GROUP_TRIM_SIZE_KEY, DEFAULT_MIN_SEGMENT_GROUP_TRIM_SIZE);
+    _minServerGroupTrimSize =
+        queryExecutorConfig.getProperty(MIN_SERVER_GROUP_TRIM_SIZE_KEY, DEFAULT_MIN_SERVER_GROUP_TRIM_SIZE);
+    _groupByTrimThreshold = queryExecutorConfig.getProperty(GROUPBY_TRIM_THRESHOLD_KEY, DEFAULT_GROUPBY_TRIM_THRESHOLD);
     Preconditions.checkState(_groupByTrimThreshold > 0,
         "Invalid configurable: groupByTrimThreshold: %d must be positive", _groupByTrimThreshold);
-    LOGGER.info("Initializing plan maker with maxInitialResultHolderCapacity: {}, numGroupsLimit: {}, "
-            + "minSegmentGroupTrimSize: {}, minServerGroupTrimSize: {}", _maxInitialResultHolderCapacity,
-        _numGroupsLimit,
-        _minSegmentGroupTrimSize, _minServerGroupTrimSize);
+    LOGGER.info("Initialized plan maker with maxExecutionThreads: {}, maxInitialResultHolderCapacity: {}, "
+            + "numGroupsLimit: {}, minSegmentGroupTrimSize: {}, minServerGroupTrimSize: {}, groupByTrimThreshold: {}",
+        _maxExecutionThreads, _maxInitialResultHolderCapacity, _numGroupsLimit, _minSegmentGroupTrimSize,
+        _minServerGroupTrimSize, _groupByTrimThreshold);
   }
 
   @Override
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 70b6b14069..113749960d 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
@@ -28,6 +28,7 @@ import org.apache.pinot.core.plan.PlanNode;
 import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.segment.spi.IndexSegment;
 import org.apache.pinot.spi.annotations.InterfaceAudience;
+import org.apache.pinot.spi.env.PinotConfiguration;
 
 
 /**
@@ -36,6 +37,11 @@ import org.apache.pinot.spi.annotations.InterfaceAudience;
 @InterfaceAudience.Private
 public interface PlanMaker {
 
+  /**
+   * Initializes the plan maker.
+   */
+  void init(PinotConfiguration queryExecutorConfig);
+
   /**
    * Returns an instance level {@link Plan} which contains the logical execution plan for multiple segments.
    */
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/config/QueryExecutorConfig.java b/pinot-core/src/main/java/org/apache/pinot/core/query/config/QueryExecutorConfig.java
index 1d5306f01d..ffe6341574 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/config/QueryExecutorConfig.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/config/QueryExecutorConfig.java
@@ -20,60 +20,37 @@ package org.apache.pinot.core.query.config;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.CommonConstants.Server;
 
 
 /**
  * Config for QueryExecutor.
- *
- *
  */
 public class QueryExecutorConfig {
-
-  // Prefix key of Query Pruner
   public static final String QUERY_PRUNER = "pruner";
-  // Prefix key of Query Planner
-  public static final String QUERY_PLANNER = "queryPlanner";
-  // Prefix key of TimeOut
+  public static final String PLAN_MAKER_CLASS = "plan.maker.class";
   public static final String TIME_OUT = "timeout";
 
-  private static final String[] REQUIRED_KEYS = {};
-
-  private PinotConfiguration _queryExecutorConfig = null;
-  private SegmentPrunerConfig _segmentPrunerConfig;
-  private QueryPlannerConfig _queryPlannerConfig;
-  private final long _timeOutMs;
+  private final PinotConfiguration _config;
 
   public QueryExecutorConfig(PinotConfiguration config)
       throws ConfigurationException {
-    _queryExecutorConfig = config;
-    checkRequiredKeys();
-    _segmentPrunerConfig = new SegmentPrunerConfig(_queryExecutorConfig.subset(QUERY_PRUNER));
-    _queryPlannerConfig = new QueryPlannerConfig(_queryExecutorConfig.subset(QUERY_PLANNER));
-    _timeOutMs = _queryExecutorConfig.getProperty(TIME_OUT, -1);
-  }
-
-  private void checkRequiredKeys()
-      throws ConfigurationException {
-    for (String keyString : REQUIRED_KEYS) {
-      if (!_queryExecutorConfig.containsKey(keyString)) {
-        throw new ConfigurationException("Cannot find required key : " + keyString);
-      }
-    }
+    _config = config;
   }
 
   public PinotConfiguration getConfig() {
-    return _queryExecutorConfig;
+    return _config;
   }
 
   public SegmentPrunerConfig getPrunerConfig() {
-    return _segmentPrunerConfig;
+    return new SegmentPrunerConfig(_config.subset(QUERY_PRUNER));
   }
 
-  public QueryPlannerConfig getQueryPlannerConfig() {
-    return _queryPlannerConfig;
+  public String getPlanMakerClass() {
+    return _config.getProperty(PLAN_MAKER_CLASS, Server.DEFAULT_QUERY_EXECUTOR_PLAN_MAKER_CLASS);
   }
 
   public long getTimeOut() {
-    return _timeOutMs;
+    return _config.getProperty(TIME_OUT, Server.DEFAULT_QUERY_EXECUTOR_TIMEOUT_MS);
   }
 }
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/config/QueryPlannerConfig.java b/pinot-core/src/main/java/org/apache/pinot/core/query/config/QueryPlannerConfig.java
deleted file mode 100644
index 7c90917208..0000000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/config/QueryPlannerConfig.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.config;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.pinot.spi.env.PinotConfiguration;
-
-
-/**
- * Config for QueryPlanner.
- *
- *
- */
-public class QueryPlannerConfig {
-
-  private PinotConfiguration _queryPlannerConfig;
-  private static final String[] REQUIRED_KEYS = {};
-
-  public QueryPlannerConfig(PinotConfiguration queryPlannerConfig)
-      throws ConfigurationException {
-    _queryPlannerConfig = queryPlannerConfig;
-    checkRequiredKeys();
-  }
-
-  private void checkRequiredKeys()
-      throws ConfigurationException {
-    for (String keyString : REQUIRED_KEYS) {
-      if (!_queryPlannerConfig.containsKey(keyString)) {
-        throw new ConfigurationException("Cannot find required key : " + keyString);
-      }
-    }
-  }
-
-  public String getQueryPlannerType() {
-    return _queryPlannerConfig.getProperty("type");
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/config/SegmentPrunerConfig.java b/pinot-core/src/main/java/org/apache/pinot/core/query/config/SegmentPrunerConfig.java
index 604bf10801..20ed9730c6 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/config/SegmentPrunerConfig.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/config/SegmentPrunerConfig.java
@@ -19,9 +19,9 @@
 package org.apache.pinot.core.query.config;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.CommonConstants.Server;
 
 
 /**
@@ -35,7 +35,8 @@ public class SegmentPrunerConfig {
   private final List<PinotConfiguration> _segmentPrunerConfigs;
 
   public SegmentPrunerConfig(PinotConfiguration segmentPrunerConfig) {
-    List<String> segmentPrunerNames = segmentPrunerConfig.getProperty(SEGMENT_PRUNER_NAMES_KEY, Arrays.asList());
+    List<String> segmentPrunerNames =
+        segmentPrunerConfig.getProperty(SEGMENT_PRUNER_NAMES_KEY, Server.DEFAULT_QUERY_EXECUTOR_PRUNER_CLASS);
     _numSegmentPruners = segmentPrunerNames.size();
     _segmentPrunerNames = new ArrayList<>(_numSegmentPruners);
     _segmentPrunerConfigs = new ArrayList<>(_numSegmentPruners);
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/executor/QueryExecutor.java b/pinot-core/src/main/java/org/apache/pinot/core/query/executor/QueryExecutor.java
index b7ac472743..c305ecee49 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/executor/QueryExecutor.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/executor/QueryExecutor.java
@@ -39,6 +39,7 @@ public interface QueryExecutor {
   /**
    * Initializes the query executor.
    * <p>Should be called only once and before calling any other method.
+   * <p>NOTE: The config is the subset of server config with prefix 'pinot.server.query.executor'
    */
   void init(PinotConfiguration config, InstanceDataManager instanceDataManager, ServerMetrics serverMetrics)
       throws ConfigurationException;
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 40dff35893..70cd3fa6ea 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
@@ -55,7 +55,6 @@ import org.apache.pinot.core.operator.blocks.results.ResultsBlockUtils;
 import org.apache.pinot.core.operator.filter.EmptyFilterOperator;
 import org.apache.pinot.core.operator.filter.MatchAllFilterOperator;
 import org.apache.pinot.core.plan.Plan;
-import org.apache.pinot.core.plan.maker.InstancePlanMakerImplV2;
 import org.apache.pinot.core.plan.maker.PlanMaker;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import org.apache.pinot.core.query.config.QueryExecutorConfig;
@@ -78,8 +77,8 @@ import org.apache.pinot.spi.data.FieldSpec;
 import org.apache.pinot.spi.env.PinotConfiguration;
 import org.apache.pinot.spi.exception.BadQueryRequestException;
 import org.apache.pinot.spi.exception.QueryCancelledException;
+import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.spi.trace.Tracing;
-import org.apache.pinot.spi.utils.CommonConstants;
 import org.apache.pinot.spi.utils.builder.TableNameBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -96,7 +95,7 @@ public class ServerQueryExecutorV1Impl implements QueryExecutor {
   private ServerMetrics _serverMetrics;
   private SegmentPrunerService _segmentPrunerService;
   private PlanMaker _planMaker;
-  private long _defaultTimeoutMs = CommonConstants.Server.DEFAULT_QUERY_EXECUTOR_TIMEOUT_MS;
+  private long _defaultTimeoutMs;
   private boolean _enablePrefetch;
 
   @Override
@@ -108,11 +107,15 @@ public class ServerQueryExecutorV1Impl implements QueryExecutor {
     QueryExecutorConfig queryExecutorConfig = new QueryExecutorConfig(config);
     LOGGER.info("Trying to build SegmentPrunerService");
     _segmentPrunerService = new SegmentPrunerService(queryExecutorConfig.getPrunerConfig());
-    LOGGER.info("Trying to build QueryPlanMaker");
-    _planMaker = new InstancePlanMakerImplV2(queryExecutorConfig);
-    if (queryExecutorConfig.getTimeOut() > 0) {
-      _defaultTimeoutMs = queryExecutorConfig.getTimeOut();
+    String planMakerClass = queryExecutorConfig.getPlanMakerClass();
+    LOGGER.info("Trying to build PlanMaker with class: {}", planMakerClass);
+    try {
+      _planMaker = PluginManager.get().createInstance(planMakerClass);
+    } catch (Exception e) {
+      throw new RuntimeException("Caught exception while creating PlanMaker with class: " + planMakerClass);
     }
+    _planMaker.init(config);
+    _defaultTimeoutMs = queryExecutorConfig.getTimeOut();
     _enablePrefetch = Boolean.parseBoolean(config.getProperty(ENABLE_PREFETCH));
     LOGGER.info("Initialized query executor with defaultTimeoutMs: {}, enablePrefetch: {}", _defaultTimeoutMs,
         _enablePrefetch);
diff --git a/pinot-integration-test-base/src/test/java/org/apache/pinot/integration/tests/ClusterTest.java b/pinot-integration-test-base/src/test/java/org/apache/pinot/integration/tests/ClusterTest.java
index 7dfc3134e3..2e80dbf1ec 100644
--- a/pinot-integration-test-base/src/test/java/org/apache/pinot/integration/tests/ClusterTest.java
+++ b/pinot-integration-test-base/src/test/java/org/apache/pinot/integration/tests/ClusterTest.java
@@ -61,7 +61,6 @@ import org.apache.pinot.plugin.inputformat.avro.AvroRecordExtractor;
 import org.apache.pinot.plugin.inputformat.avro.AvroRecordExtractorConfig;
 import org.apache.pinot.plugin.inputformat.avro.AvroUtils;
 import org.apache.pinot.server.starter.helix.BaseServerStarter;
-import org.apache.pinot.server.starter.helix.DefaultHelixStarterServerConfig;
 import org.apache.pinot.server.starter.helix.HelixServerStarter;
 import org.apache.pinot.spi.config.table.TableType;
 import org.apache.pinot.spi.data.readers.GenericRow;
@@ -177,13 +176,11 @@ public abstract class ClusterTest extends ControllerTest {
   }
 
   protected PinotConfiguration getDefaultServerConfiguration() {
-    PinotConfiguration configuration = DefaultHelixStarterServerConfig.loadDefaultServerConf();
-
-    configuration.setProperty(Helix.KEY_OF_SERVER_NETTY_HOST, LOCAL_HOST);
-    configuration.setProperty(Server.CONFIG_OF_SEGMENT_FORMAT_VERSION, "v3");
-    configuration.setProperty(Server.CONFIG_OF_SHUTDOWN_ENABLE_QUERY_CHECK, false);
-
-    return configuration;
+    PinotConfiguration serverConf = new PinotConfiguration();
+    serverConf.setProperty(Helix.KEY_OF_SERVER_NETTY_HOST, LOCAL_HOST);
+    serverConf.setProperty(Server.CONFIG_OF_SEGMENT_FORMAT_VERSION, "v3");
+    serverConf.setProperty(Server.CONFIG_OF_SHUTDOWN_ENABLE_QUERY_CHECK, false);
+    return serverConf;
   }
 
   protected void overrideServerConf(PinotConfiguration serverConf) {
@@ -198,7 +195,7 @@ public abstract class ClusterTest extends ControllerTest {
     serverConf.setProperty(Server.CONFIG_OF_INSTANCE_SEGMENT_TAR_DIR,
         Server.DEFAULT_INSTANCE_SEGMENT_TAR_DIR + "-" + serverId);
     serverConf.setProperty(Server.CONFIG_OF_ADMIN_API_PORT, Server.DEFAULT_ADMIN_API_PORT - serverId);
-    serverConf.setProperty(Server.CONFIG_OF_NETTY_PORT, Helix.DEFAULT_SERVER_NETTY_PORT + serverId);
+    serverConf.setProperty(Helix.KEY_OF_SERVER_NETTY_PORT, Helix.DEFAULT_SERVER_NETTY_PORT + serverId);
     serverConf.setProperty(Server.CONFIG_OF_GRPC_PORT, Server.DEFAULT_GRPC_PORT + serverId);
     // Thread time measurement is disabled by default, enable it in integration tests.
     // TODO: this can be removed when we eventually enable thread time measurement by default.
diff --git a/pinot-server/src/main/java/org/apache/pinot/server/conf/ServerConf.java b/pinot-server/src/main/java/org/apache/pinot/server/conf/ServerConf.java
index 1bf4bef386..a121d23c05 100644
--- a/pinot-server/src/main/java/org/apache/pinot/server/conf/ServerConf.java
+++ b/pinot-server/src/main/java/org/apache/pinot/server/conf/ServerConf.java
@@ -18,7 +18,6 @@
  */
 package org.apache.pinot.server.conf;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -35,41 +34,23 @@ import static org.apache.pinot.spi.utils.CommonConstants.Server.*;
  * The config used for Server.
  */
 public class ServerConf {
-  // TODO: Replace with constants in CommonConstants
-  private static final String PINOT_CONFIG_PREFIX = "pinot.";
-  private static final String PINOT_SERVER_INSTANCE = "pinot.server.instance";
-  private static final String PINOT_SERVER_METRICS = "pinot.server.metrics";
-  private static final String PINOT_SERVER_METRICS_PREFIX = "pinot.server.metrics.prefix";
-  private static final String PINOT_SERVER_QUERY = "pinot.server.query.executor";
-  private static final String PINOT_SERVER_REQUEST = "pinot.server.request";
-  private static final String PINOT_SERVER_INSTANCE_DATA_MANAGER_CLASS = "pinot.server.instance.data.manager.class";
-  private static final String PINOT_SERVER_QUERY_EXECUTOR_CLASS = "pinot.server.query.executor.class";
-  private static final String PINOT_SERVER_TRANSFORM_FUNCTIONS = "pinot.server.transforms";
-
-  private PinotConfiguration _serverConf;
 
-  public ServerConf(PinotConfiguration serverConfig) {
-    _serverConf = serverConfig;
-  }
+  private final PinotConfiguration _serverConf;
 
-  public void init(PinotConfiguration serverConfig) {
+  public ServerConf(PinotConfiguration serverConfig) {
     _serverConf = serverConfig;
   }
 
   public PinotConfiguration getInstanceDataManagerConfig() {
-    return _serverConf.subset(PINOT_SERVER_INSTANCE);
+    return _serverConf.subset(INSTANCE_DATA_MANAGER_CONFIG_PREFIX);
   }
 
   public PinotConfiguration getQueryExecutorConfig() {
-    return _serverConf.subset(PINOT_SERVER_QUERY);
-  }
-
-  public PinotConfiguration getRequestConfig() {
-    return _serverConf.subset(PINOT_SERVER_REQUEST);
+    return _serverConf.subset(QUERY_EXECUTOR_CONFIG_PREFIX);
   }
 
   public PinotConfiguration getMetricsConfig() {
-    return _serverConf.subset(PINOT_SERVER_METRICS);
+    return _serverConf.subset(METRICS_CONFIG_PREFIX);
   }
 
   public boolean isNettyServerEnabled() {
@@ -117,16 +98,12 @@ public class ServerConf {
     return _serverConf.getProperty(QueryConfig.KEY_OF_QUERY_RUNNER_PORT, QueryConfig.DEFAULT_QUERY_RUNNER_PORT);
   }
 
-  public PinotConfiguration getConfig(String component) {
-    return _serverConf.subset(PINOT_CONFIG_PREFIX + component);
-  }
-
   public String getInstanceDataManagerClassName() {
-    return _serverConf.getProperty(PINOT_SERVER_INSTANCE_DATA_MANAGER_CLASS);
+    return _serverConf.getProperty(CONFIG_OF_INSTANCE_DATA_MANAGER_CLASS, DEFAULT_DATA_MANAGER_CLASS);
   }
 
   public String getQueryExecutorClassName() {
-    return _serverConf.getProperty(PINOT_SERVER_QUERY_EXECUTOR_CLASS);
+    return _serverConf.getProperty(CONFIG_OF_QUERY_EXECUTOR_CLASS, DEFAULT_QUERY_EXECUTOR_CLASS);
   }
 
   public PinotConfiguration getSchedulerConfig() {
@@ -138,7 +115,7 @@ public class ServerConf {
    * @return List of transform functions
    */
   public List<String> getTransformFunctions() {
-    return _serverConf.getProperty(PINOT_SERVER_TRANSFORM_FUNCTIONS, Arrays.asList());
+    return _serverConf.getProperty(CONFIG_OF_TRANSFORM_FUNCTIONS, Collections.emptyList());
   }
 
   public boolean emitTableLevelMetrics() {
diff --git a/pinot-server/src/main/java/org/apache/pinot/server/starter/ServerInstance.java b/pinot-server/src/main/java/org/apache/pinot/server/starter/ServerInstance.java
index ff694200d5..ece3d87428 100644
--- a/pinot-server/src/main/java/org/apache/pinot/server/starter/ServerInstance.java
+++ b/pinot-server/src/main/java/org/apache/pinot/server/starter/ServerInstance.java
@@ -50,6 +50,7 @@ import org.apache.pinot.server.worker.WorkerQueryServer;
 import org.apache.pinot.spi.env.PinotConfiguration;
 import org.apache.pinot.spi.metrics.PinotMetricUtils;
 import org.apache.pinot.spi.metrics.PinotMetricsRegistry;
+import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.spi.utils.CommonConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -95,14 +96,14 @@ public class ServerInstance {
 
     String instanceDataManagerClassName = serverConf.getInstanceDataManagerClassName();
     LOGGER.info("Initializing instance data manager of class: {}", instanceDataManagerClassName);
-    _instanceDataManager = (InstanceDataManager) Class.forName(instanceDataManagerClassName).newInstance();
+    _instanceDataManager = PluginManager.get().createInstance(instanceDataManagerClassName);
     _instanceDataManager.init(serverConf.getInstanceDataManagerConfig(), helixManager, _serverMetrics);
 
     // Initialize FunctionRegistry before starting the query executor
     FunctionRegistry.init();
     String queryExecutorClassName = serverConf.getQueryExecutorClassName();
     LOGGER.info("Initializing query executor of class: {}", queryExecutorClassName);
-    _queryExecutor = (QueryExecutor) Class.forName(queryExecutorClassName).newInstance();
+    _queryExecutor = PluginManager.get().createInstance(queryExecutorClassName);
     PinotConfiguration queryExecutorConfig = serverConf.getQueryExecutorConfig();
     _queryExecutor.init(queryExecutorConfig, _instanceDataManager, _serverMetrics);
 
diff --git a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/BaseServerStarter.java b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/BaseServerStarter.java
index fda6caf5c1..4a09290822 100644
--- a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/BaseServerStarter.java
+++ b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/BaseServerStarter.java
@@ -530,7 +530,7 @@ public abstract class BaseServerStarter implements ServiceStartable {
     ControllerLeaderLocator.create(_helixManager);
     ServerSegmentCompletionProtocolHandler.init(
         _serverConf.subset(SegmentCompletionProtocol.PREFIX_OF_CONFIG_OF_SEGMENT_UPLOADER));
-    ServerConf serverConf = DefaultHelixStarterServerConfig.getDefaultHelixServerConfig(_serverConf);
+    ServerConf serverConf = new ServerConf(_serverConf);
     _serverInstance = new ServerInstance(serverConf, _helixManager, accessControlFactory);
     ServerMetrics serverMetrics = _serverInstance.getServerMetrics();
     InstanceDataManager instanceDataManager = _serverInstance.getInstanceDataManager();
diff --git a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/DefaultHelixStarterServerConfig.java b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/DefaultHelixStarterServerConfig.java
deleted file mode 100644
index 1719195770..0000000000
--- a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/DefaultHelixStarterServerConfig.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.server.starter.helix;
-
-import org.apache.pinot.server.conf.ServerConf;
-import org.apache.pinot.spi.env.PinotConfiguration;
-import org.apache.pinot.spi.utils.CommonConstants;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public class DefaultHelixStarterServerConfig {
-  private DefaultHelixStarterServerConfig() {
-  }
-
-  private static final Logger LOGGER = LoggerFactory.getLogger(DefaultHelixStarterServerConfig.class);
-
-  public static ServerConf getDefaultHelixServerConfig(PinotConfiguration externalConfigs) {
-    PinotConfiguration defaultConfigs = loadDefaultServerConf();
-
-    for (String key : externalConfigs.getKeys()) {
-      defaultConfigs.setProperty(key, externalConfigs.getRawProperty(key));
-
-      LOGGER.info("External config key: {}, value: {}", key, externalConfigs.getProperty(key));
-    }
-    return new ServerConf(defaultConfigs);
-  }
-
-  public static PinotConfiguration loadDefaultServerConf() {
-    PinotConfiguration serverConf = new PinotConfiguration();
-
-    serverConf.addProperty(CommonConstants.Server.CONFIG_OF_INSTANCE_DATA_DIR,
-        CommonConstants.Server.DEFAULT_INSTANCE_DATA_DIR);
-    serverConf.addProperty(CommonConstants.Server.CONFIG_OF_INSTANCE_SEGMENT_TAR_DIR,
-        CommonConstants.Server.DEFAULT_INSTANCE_SEGMENT_TAR_DIR);
-
-    serverConf
-        .addProperty(CommonConstants.Server.CONFIG_OF_INSTANCE_READ_MODE, CommonConstants.Server.DEFAULT_READ_MODE);
-    serverConf.addProperty(CommonConstants.Server.CONFIG_OF_INSTANCE_DATA_MANAGER_CLASS,
-        CommonConstants.Server.DEFAULT_DATA_MANAGER_CLASS);
-
-    // query executor parameters
-    serverConf.addProperty(CommonConstants.Server.CONFIG_OF_QUERY_EXECUTOR_CLASS,
-        CommonConstants.Server.DEFAULT_QUERY_EXECUTOR_CLASS);
-    serverConf.addProperty(CommonConstants.Server.CONFIG_OF_QUERY_EXECUTOR_PRUNER_CLASS,
-        "ColumnValueSegmentPruner,SelectionQuerySegmentPruner");
-
-    // request handler factory parameters
-    serverConf.addProperty(CommonConstants.Server.CONFIG_OF_REQUEST_HANDLER_FACTORY_CLASS,
-        CommonConstants.Server.DEFAULT_REQUEST_HANDLER_FACTORY_CLASS);
-
-    // netty port
-    serverConf
-        .addProperty(CommonConstants.Server.CONFIG_OF_NETTY_PORT, CommonConstants.Helix.DEFAULT_SERVER_NETTY_PORT);
-    return serverConf;
-  }
-}
diff --git a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerConfig.java b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerConfig.java
index f5bfc87805..1cc1e07609 100644
--- a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerConfig.java
+++ b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerConfig.java
@@ -30,6 +30,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.pinot.spi.utils.CommonConstants.Server.CONFIG_OF_SEGMENT_STORE_URI;
+import static org.apache.pinot.spi.utils.CommonConstants.Server.DEFAULT_INSTANCE_DATA_DIR;
+import static org.apache.pinot.spi.utils.CommonConstants.Server.DEFAULT_INSTANCE_SEGMENT_TAR_DIR;
+import static org.apache.pinot.spi.utils.CommonConstants.Server.DEFAULT_READ_MODE;
 
 
 /**
@@ -125,11 +128,12 @@ public class HelixInstanceDataManagerConfig implements InstanceDataManagerConfig
   private static final String DELETED_SEGMENTS_CACHE_TTL_MINUTES = "table.deleted.segments.cache.ttl.minutes";
   private static final String PEER_DOWNLOAD_SCHEME = "peer.download.scheme";
 
-  private final static String[] REQUIRED_KEYS = {INSTANCE_ID, INSTANCE_DATA_DIR, READ_MODE};
+  private final static String[] REQUIRED_KEYS = {INSTANCE_ID};
   private static final long DEFAULT_ERROR_CACHE_SIZE = 100L;
   private static final int DEFAULT_DELETED_SEGMENTS_CACHE_SIZE = 10_000;
   private static final int DEFAULT_DELETED_SEGMENTS_CACHE_TTL_MINUTES = 2;
-  private PinotConfiguration _instanceDataManagerConfiguration = null;
+
+  private final PinotConfiguration _instanceDataManagerConfiguration;
 
   public HelixInstanceDataManagerConfig(PinotConfiguration serverConfig)
       throws ConfigurationException {
@@ -146,7 +150,6 @@ public class HelixInstanceDataManagerConfig implements InstanceDataManagerConfig
       throws ConfigurationException {
     for (String keyString : REQUIRED_KEYS) {
       Optional.ofNullable(_instanceDataManagerConfiguration.getProperty(keyString))
-
           .orElseThrow(() -> new ConfigurationException("Cannot find required key : " + keyString));
     }
   }
@@ -163,7 +166,7 @@ public class HelixInstanceDataManagerConfig implements InstanceDataManagerConfig
 
   @Override
   public String getInstanceDataDir() {
-    return _instanceDataManagerConfiguration.getProperty(INSTANCE_DATA_DIR);
+    return _instanceDataManagerConfiguration.getProperty(INSTANCE_DATA_DIR, DEFAULT_INSTANCE_DATA_DIR);
   }
 
   @Override
@@ -173,7 +176,7 @@ public class HelixInstanceDataManagerConfig implements InstanceDataManagerConfig
 
   @Override
   public String getInstanceSegmentTarDir() {
-    return _instanceDataManagerConfiguration.getProperty(INSTANCE_SEGMENT_TAR_DIR);
+    return _instanceDataManagerConfiguration.getProperty(INSTANCE_SEGMENT_TAR_DIR, DEFAULT_INSTANCE_SEGMENT_TAR_DIR);
   }
 
   @Override
@@ -188,7 +191,7 @@ public class HelixInstanceDataManagerConfig implements InstanceDataManagerConfig
 
   @Override
   public ReadMode getReadMode() {
-    return ReadMode.valueOf(_instanceDataManagerConfiguration.getProperty(READ_MODE));
+    return ReadMode.valueOf(_instanceDataManagerConfiguration.getProperty(READ_MODE, DEFAULT_READ_MODE));
   }
 
   @Override
diff --git a/pinot-server/src/main/java/org/apache/pinot/server/worker/WorkerQueryServer.java b/pinot-server/src/main/java/org/apache/pinot/server/worker/WorkerQueryServer.java
index b38b89093c..ba3336553e 100644
--- a/pinot-server/src/main/java/org/apache/pinot/server/worker/WorkerQueryServer.java
+++ b/pinot-server/src/main/java/org/apache/pinot/server/worker/WorkerQueryServer.java
@@ -79,7 +79,7 @@ public class WorkerQueryServer {
     int servicePort =
         newConfig.getProperty(QueryConfig.KEY_OF_QUERY_SERVER_PORT, QueryConfig.DEFAULT_QUERY_SERVER_PORT);
     if (servicePort == -1) {
-      servicePort = newConfig.getProperty(CommonConstants.Server.CONFIG_OF_NETTY_PORT,
+      servicePort = newConfig.getProperty(CommonConstants.Helix.KEY_OF_SERVER_NETTY_PORT,
           CommonConstants.Helix.DEFAULT_SERVER_NETTY_PORT);
       newConfig.addProperty(QueryConfig.KEY_OF_QUERY_SERVER_PORT, servicePort);
     }
diff --git a/pinot-server/src/test/java/org/apache/pinot/server/api/AccessControlTest.java b/pinot-server/src/test/java/org/apache/pinot/server/api/AccessControlTest.java
index 153fdf739a..e100484c5c 100644
--- a/pinot-server/src/test/java/org/apache/pinot/server/api/AccessControlTest.java
+++ b/pinot-server/src/test/java/org/apache/pinot/server/api/AccessControlTest.java
@@ -42,7 +42,6 @@ import org.apache.pinot.server.access.GrpcRequesterIdentity;
 import org.apache.pinot.server.access.HttpRequesterIdentity;
 import org.apache.pinot.server.access.RequesterIdentity;
 import org.apache.pinot.server.starter.ServerInstance;
-import org.apache.pinot.server.starter.helix.DefaultHelixStarterServerConfig;
 import org.apache.pinot.spi.env.PinotConfiguration;
 import org.apache.pinot.spi.utils.CommonConstants;
 import org.apache.pinot.spi.utils.NetUtils;
@@ -75,7 +74,7 @@ public class AccessControlTest {
     ServerInstance serverInstance = mock(ServerInstance.class);
     when(serverInstance.getServerMetrics()).thenReturn(mock(ServerMetrics.class));
 
-    PinotConfiguration serverConf = DefaultHelixStarterServerConfig.loadDefaultServerConf();
+    PinotConfiguration serverConf = new PinotConfiguration();
     String hostname = serverConf.getProperty(CommonConstants.Helix.KEY_OF_SERVER_NETTY_HOST,
         serverConf.getProperty(CommonConstants.Helix.SET_INSTANCE_ID_TO_HOSTNAME_KEY, false)
             ? NetUtils.getHostnameOrAddress() : NetUtils.getHostAddress());
diff --git a/pinot-server/src/test/java/org/apache/pinot/server/api/BaseResourceTest.java b/pinot-server/src/test/java/org/apache/pinot/server/api/BaseResourceTest.java
index 0b80cd0b64..9fd8c2ca4d 100644
--- a/pinot-server/src/test/java/org/apache/pinot/server/api/BaseResourceTest.java
+++ b/pinot-server/src/test/java/org/apache/pinot/server/api/BaseResourceTest.java
@@ -50,7 +50,6 @@ import org.apache.pinot.segment.spi.creator.SegmentGeneratorConfig;
 import org.apache.pinot.segment.spi.creator.SegmentIndexCreationDriver;
 import org.apache.pinot.server.access.AllowAllAccessFactory;
 import org.apache.pinot.server.starter.ServerInstance;
-import org.apache.pinot.server.starter.helix.DefaultHelixStarterServerConfig;
 import org.apache.pinot.spi.env.PinotConfiguration;
 import org.apache.pinot.spi.utils.CommonConstants;
 import org.apache.pinot.spi.utils.NetUtils;
@@ -129,7 +128,7 @@ public abstract class BaseResourceTest {
     setUpSegment(realtimeTableName, null, "default", _realtimeIndexSegments);
     setUpSegment(offlineTableName, null, "default", _offlineIndexSegments);
 
-    PinotConfiguration serverConf = DefaultHelixStarterServerConfig.loadDefaultServerConf();
+    PinotConfiguration serverConf = new PinotConfiguration();
     String hostname = serverConf.getProperty(CommonConstants.Helix.KEY_OF_SERVER_NETTY_HOST,
         serverConf.getProperty(CommonConstants.Helix.SET_INSTANCE_ID_TO_HOSTNAME_KEY, false)
             ? NetUtils.getHostnameOrAddress() : NetUtils.getHostAddress());
diff --git a/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java b/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
index ad7bdcf2c6..fa498ab5fb 100644
--- a/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
+++ b/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
@@ -23,7 +23,6 @@ import java.net.SocketException;
 import java.net.UnknownHostException;
 import javax.ws.rs.core.Response;
 import org.apache.pinot.common.utils.PinotAppConfigs;
-import org.apache.pinot.server.starter.helix.DefaultHelixStarterServerConfig;
 import org.apache.pinot.spi.env.PinotConfiguration;
 import org.apache.pinot.spi.utils.CommonConstants;
 import org.apache.pinot.spi.utils.JsonUtils;
@@ -46,7 +45,7 @@ public class PinotServerAppConfigsTest extends BaseResourceTest {
   @Test
   public void testAppConfigs()
       throws JsonProcessingException, SocketException, UnknownHostException {
-    PinotConfiguration expectedServerConf = DefaultHelixStarterServerConfig.loadDefaultServerConf();
+    PinotConfiguration expectedServerConf = new PinotConfiguration();
     String hostname = expectedServerConf.getProperty(CommonConstants.Helix.KEY_OF_SERVER_NETTY_HOST,
         expectedServerConf.getProperty(CommonConstants.Helix.SET_INSTANCE_ID_TO_HOSTNAME_KEY, false)
             ? NetUtils.getHostnameOrAddress() : NetUtils.getHostAddress());
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
index 42f00c2382..fe63a4960a 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
@@ -18,7 +18,9 @@
  */
 package org.apache.pinot.spi.utils;
 
+import com.google.common.collect.ImmutableList;
 import java.io.File;
+import java.util.List;
 import org.apache.pinot.spi.config.instance.InstanceType;
 
 
@@ -436,6 +438,10 @@ public class CommonConstants {
   }
 
   public static class Server {
+    public static final String INSTANCE_DATA_MANAGER_CONFIG_PREFIX = "pinot.server.instance";
+    public static final String QUERY_EXECUTOR_CONFIG_PREFIX = "pinot.server.query.executor";
+    public static final String METRICS_CONFIG_PREFIX = "pinot.server.metrics";
+
     public static final String CONFIG_OF_INSTANCE_ID = "pinot.server.instance.id";
     public static final String CONFIG_OF_INSTANCE_DATA_DIR = "pinot.server.instance.dataDir";
     public static final String CONFIG_OF_CONSUMER_DIR = "pinot.server.instance.consumerDir";
@@ -444,15 +450,16 @@ public class CommonConstants {
     public static final String CONFIG_OF_INSTANCE_RELOAD_CONSUMING_SEGMENT =
         "pinot.server.instance.reload.consumingSegment";
     public static final String CONFIG_OF_INSTANCE_DATA_MANAGER_CLASS = "pinot.server.instance.data.manager.class";
+    public static final String CONFIG_OF_QUERY_EXECUTOR_CLASS = "pinot.server.query.executor.class";
     public static final String CONFIG_OF_QUERY_EXECUTOR_PRUNER_CLASS = "pinot.server.query.executor.pruner.class";
+    public static final String CONFIG_OF_QUERY_EXECUTOR_PLAN_MAKER_CLASS =
+        "pinot.server.query.executor.plan.maker.class";
     public static final String CONFIG_OF_QUERY_EXECUTOR_TIMEOUT = "pinot.server.query.executor.timeout";
-    public static final String CONFIG_OF_QUERY_EXECUTOR_CLASS = "pinot.server.query.executor.class";
+    public static final String CONFIG_OF_TRANSFORM_FUNCTIONS = "pinot.server.transforms";
     public static final String CONFIG_OF_SERVER_QUERY_REWRITER_CLASS_NAMES = "pinot.server.query.rewriter.class.names";
     public static final String CONFIG_OF_ENABLE_QUERY_CANCELLATION = "pinot.server.enable.query.cancellation";
-    public static final String CONFIG_OF_REQUEST_HANDLER_FACTORY_CLASS = "pinot.server.requestHandlerFactory.class";
     public static final String CONFIG_OF_NETTY_SERVER_ENABLED = "pinot.server.netty.enabled";
     public static final boolean DEFAULT_NETTY_SERVER_ENABLED = true;
-    public static final String CONFIG_OF_NETTY_PORT = "pinot.server.netty.port";
     public static final String CONFIG_OF_ENABLE_GRPC_SERVER = "pinot.server.grpc.enable";
     public static final boolean DEFAULT_ENABLE_GRPC_SERVER = true;
     public static final String CONFIG_OF_GRPC_PORT = "pinot.server.grpc.port";
@@ -520,9 +527,11 @@ public class CommonConstants {
         "org.apache.pinot.server.starter.helix.HelixInstanceDataManager";
     public static final String DEFAULT_QUERY_EXECUTOR_CLASS =
         "org.apache.pinot.core.query.executor.ServerQueryExecutorV1Impl";
+    public static final List<String> DEFAULT_QUERY_EXECUTOR_PRUNER_CLASS =
+        ImmutableList.of("ColumnValueSegmentPruner", "SelectionQuerySegmentPruner");
+    public static final String DEFAULT_QUERY_EXECUTOR_PLAN_MAKER_CLASS =
+        "org.apache.pinot.core.plan.maker.InstancePlanMakerImplV2";
     public static final long DEFAULT_QUERY_EXECUTOR_TIMEOUT_MS = 15_000L;
-    public static final String DEFAULT_REQUEST_HANDLER_FACTORY_CLASS =
-        "org.apache.pinot.server.request.SimpleRequestHandlerFactory";
     public static final String PREFIX_OF_CONFIG_OF_SEGMENT_FETCHER_FACTORY = "pinot.server.segment.fetcher";
 
     // Configs for server starter startup/shutdown checks


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