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