Config.java
// 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.doris.common;
import java.io.File;
public class Config extends ConfigBase {
@ConfField(description = {"��������������������������������������������������� fe_custom.conf��������������������������������� fe.conf ������������",
"The path of the user-defined configuration file, used to store fe_custom.conf. "
+ "The configuration in this file will override the configuration in fe.conf"})
public static String custom_config_dir = EnvUtils.getDorisHome() + "/conf";
@ConfField(description = {"fe.log ��� fe.audit.log ������������������������������������������������������������������������",
"The maximum file size of fe.log and fe.audit.log. After exceeding this size, the log file will be split"})
public static int log_roll_size_mb = 1024; // 1 GB
/**
* sys_log_dir:
* This specifies FE log dir. FE will produces 2 log files:
* fe.log: all logs of FE process.
* fe.warn.log all WARN and ERROR log of FE process.
*
* sys_log_level:
* INFO, WARN, ERROR, FATAL
*
* sys_log_roll_num:
* Maximal FE log files to be kept within an sys_log_roll_interval.
* default is 10, which means there will be at most 10 log files in a day
*
* sys_log_verbose_modules:
* Verbose modules. VERBOSE level is implemented by log4j DEBUG level.
* eg:
* sys_log_verbose_modules = org.apache.doris.catalog
* This will only print debug log of files in package org.apache.doris.catalog and all its sub packages.
*
* sys_log_roll_interval:
* DAY: log suffix is yyyyMMdd
* HOUR: log suffix is yyyyMMddHH
*
* sys_log_delete_age:
* default is 7 days, if log's last modify time is 7 days ago, it will be deleted.
* support format:
* 7d 7 days
* 10h 10 hours
* 60m 60 mins
* 120s 120 seconds
*
* sys_log_enable_compress:
* default is false. if true, will compress fe.log & fe.warn.log by gzip
*/
@Deprecated // use env var LOG_DIR instead
@ConfField(description = {"FE ������������������������������������������ fe.log���",
"The path of the FE log file, used to store fe.log"})
public static String sys_log_dir = "";
@ConfField(description = {"FE ���������������", "The level of FE log"}, options = {"INFO", "WARN", "ERROR", "FATAL"})
public static String sys_log_level = "INFO";
@ConfField(description = {"FE ������������������������������ NORMAL ���������������������������������������������������ASYNC ������������������������������������������"
+ "������������������������BRIEF ���������������������������������������������������������������������������������������������",
"The output mode of FE log. NORMAL mode is synchronous output with location information; "
+ "ASYNC mode is the default mode, asynchronous output with location information; "
+ "BRIEF is asynchronous output without location information. "
+ "The performance of the three log output modes increases in turn"},
options = {"NORMAL", "ASYNC", "BRIEF"})
public static String sys_log_mode = "ASYNC";
@ConfField(description = {"FE ��� sys_log_roll_interval������������������������������������������������������������������"
+ "������������ 10������������������������������������������������������������������ 10 ������������������",
"This parameter defines the maximum number of FE log files that can be retained within the "
+ "sys_log_roll_interval (log roll interval). The default value is 10, which means the system"
+ " will keep up to 10 log files during each log roll interval."})
public static int sys_log_roll_num = 10;
@ConfField(description = {
"Verbose ���������VERBOSE ������������������������ log4j ��� DEBUG ������������������"
+ "������������ `org.apache.doris.catalog`��������������������� package ������������ DEBUG ���������",
"Verbose module. The VERBOSE level log is implemented by the DEBUG level of log4j. "
+ "If set to `org.apache.doris.catalog`, "
+ "the DEBUG log of the class under this package will be printed."})
public static String[] sys_log_verbose_modules = {};
@ConfField(description = {"FE ���������������������������", "The split cycle of the FE log file"}, options = {"DAY", "HOUR"})
public static String sys_log_roll_interval = "DAY";
@ConfField(description = {
"FE ���������������������������������������������������������������������������������������������������������������7d, 10h, 60m, 120s",
"The maximum survival time of the FE log file. After exceeding this time, the log file will be deleted. "
+ "Supported formats include: 7d, 10h, 60m, 120s"})
public static String sys_log_delete_age = "7d";
@ConfField(description = {"������������ FE ���������������", "enable compression for FE log file"})
public static boolean sys_log_enable_compress = false;
@ConfField(description = {"FE ������������������������������������������������ fe.audit.log���",
"The path of the FE audit log file, used to store fe.audit.log"})
public static String audit_log_dir = System.getenv("LOG_DIR");
@ConfField(description = {"FE ���������������������������������������������������������������������������������������������",
"The maximum number of FE audit log files. "
+ "After exceeding this number, the oldest log file will be deleted"})
public static int audit_log_roll_num = 90;
@ConfField(description = {"FE ���������������������������", "The type of FE audit log file"},
options = {"slow_query", "query", "load", "stream_load"})
public static String[] audit_log_modules = {"slow_query", "query", "load", "stream_load"};
@ConfField(mutable = true, description = {"���������������������������������������������������������������������������������������������"
+ "������������������ audit log ������",
"The threshold of slow query, in milliseconds. "
+ "If the response time of a query exceeds this threshold, it will be recorded in audit log."})
public static long qe_slow_log_ms = 5000;
@ConfField(mutable = true, description = {"sql_digest ������������������������������������������������������������������������������������������������"
+ "������������������ sql_digest���",
"The threshold of sql_digest generation, in milliseconds. "
+ "If the response time of a query exceeds this threshold, "
+ "sql_digest will be generated for it."})
public static long sql_digest_generation_threshold_ms = 5000;
@ConfField(description = {"FE ���������������������������������", "The split cycle of the FE audit log file"},
options = {"DAY", "HOUR"})
public static String audit_log_roll_interval = "DAY";
@ConfField(description = {
"FE ���������������������������������������������������������������������������������������������������������������������7d, 10h, 60m, 120s",
"The maximum survival time of the FE audit log file. "
+ "After exceeding this time, the log file will be deleted. "
+ "Supported formats include: 7d, 10h, 60m, 120s"})
public static String audit_log_delete_age = "30d";
@ConfField(description = {"������������ FE ��� Audit ������", "enable compression for FE audit log file"})
public static boolean audit_log_enable_compress = false;
@ConfField(description = {"������������������������������������������������ LineagePlugin.name() ������������������",
"Active lineage plugins, need to fill in the name returned by LineagePlugin.name()"})
public static String[] activate_lineage_plugin = {};
@ConfField(description = {"������������������������������������������ --console ������ FE ���������������������������������������������������������"
+ "������������������������������������������������������������",
"Whether to use file to record log. When starting FE with --console, "
+ "all logs will be written to both standard output and file. "
+ "Close this option will no longer use file to record log."})
public static boolean enable_file_logger = true;
@ConfField(mutable = false, masterOnly = false,
description = {"������������ table ���������", "Whether to check table lock leaky"})
public static boolean check_table_lock_leaky = false;
@ConfField(mutable = true, masterOnly = false,
description = {"PreparedStatement stmtId ������������������������������",
"PreparedStatement stmtId starting position, used for testing onl"})
public static long prepared_stmt_start_id = -1;
@ConfField(description = {"���������������������", "The installation directory of the plugin"})
public static String plugin_dir = EnvUtils.getDorisHome() + "/plugins";
@ConfField(mutable = true, masterOnly = true, description = {"������������������", "Whether to enable the plugin"})
public static boolean plugin_enable = true;
@ConfField(description = {
"JDBC ��������������������������������� JDBC Catalog ������������������������������������������������������������������������������������������",
"The path to save jdbc drivers. When creating JDBC Catalog,"
+ "if the specified driver file path is not an absolute path, Doris will find jars from this path"})
public static String jdbc_drivers_dir = EnvUtils.getDorisHome() + "/plugins/jdbc_drivers";
@ConfField(description = {"JDBC ��������������������������������� JDBC Catalog ������������������������������������������������������������������������������������"
+ "��������� * ������������������������������������������������������������",
"The safe path of the JDBC driver. When creating a JDBC Catalog,"
+ "you can configure multiple files or network paths that are allowed to be used,"
+ "separated by semicolons"
+ "The default is * to allow all, if set to empty, also means to allow all"})
public static String jdbc_driver_secure_path = "*";
@ConfField(description = {"MySQL Jdbc Catalog mysql ������������������������",
"MySQL Jdbc Catalog mysql does not support pushdown functions"})
public static String[] jdbc_mysql_unsupported_pushdown_functions = {"date_trunc", "money_format", "negative"};
@ConfField(mutable = true, description = {
"MySQL ������������������������������������������ SET ������������������������������������������������������"
+ "������������������ MySQL ��������������������� phpMyAdmin, mysqldump������"
+ "Doris ���������������������������������������������������������������������������������",
"MySQL compatibility variable whitelist. These variables will be silently ignored in SET statements "
+ "instead of throwing an error. This is mainly used for compatibility with MySQL client tools "
+ "(such as phpMyAdmin, mysqldump). Doris does not need to understand the specific meaning of "
+ "these variables, it just needs to accept them without error."})
public static String[] mysql_compat_var_whitelist = {};
@ConfField(mutable = true, masterOnly = true, description = {"������ SQLServer Jdbc Catalog ��������� false",
"Force SQLServer Jdbc Catalog encrypt to false"})
public static boolean force_sqlserver_jdbc_encrypt_false = false;
@ConfField(mutable = true, masterOnly = true, description = {"broker load ��������������������� load ������������������������������",
"The default parallelism of the load execution plan on a single node when the broker load is submitted"})
public static int default_load_parallelism = 8;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������������ label ��������������������������������������������� label ������������������",
"Labels of finished or cancelled load jobs will be removed after this time"
+ "The removed labels can be reused."})
public static int label_keep_max_second = 3 * 24 * 3600; // 3 days
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������������ INSERT, STREAMING LOAD, ROUTINE_LOAD_TASK, DELETE"
+ "���������������������������������������������������������������������������������������������������������������������������������������",
"For some high frequency load jobs such as INSERT, STREAMING LOAD, ROUTINE_LOAD_TASK, DELETE"
+ "Remove the finished job or task if expired. The removed job or task can be reused."})
public static int streaming_label_keep_max_second = 43200; // 12 hour
@ConfField(mutable = true, masterOnly = true, description = {
"������ ALTER, EXPORT ������������������������������������������������������������������������������",
"For ALTER, EXPORT jobs, remove the finished job if expired."})
public static int history_job_keep_max_second = 7 * 24 * 3600; // 7 days
@ConfField(mutable = true, masterOnly = true, description = {
"������ EXPORT ������������������������ EXPORT ������������������������������������������������������������",
"For EXPORT jobs, If the number of EXPORT jobs in the system exceeds this value, "
+ "the oldest records will be deleted."})
public static int max_export_history_job_num = 1000;
@ConfField(description = {"���������������������������������������������������������������������������������������������������������������������",
"The clean interval of transaction, in seconds. "
+ "In each cycle, the expired history transaction will be cleaned"})
public static int transaction_clean_interval_second = 30;
@ConfField(description = {"���������������������������������������������������������������������������������������������������������������������",
"The clean interval of load job, in seconds. "
+ "In each cycle, the expired history load job will be cleaned"})
public static int label_clean_interval_second = 1 * 3600; // 1 hours
@ConfField(mutable = true, masterOnly = true, description = {
"Insert Overwrite ������������������������������������������������������������������������",
"Time interval for cleaning up discarded temporary "
+ "partitions after Insert Overwrite task fails, in milliseconds"})
public static int overwrite_clean_interval_ms = 10000;
@ConfField(description = {"������������������������", "The directory to save Doris meta data"})
public static String meta_dir = EnvUtils.getDorisHome() + "/doris-meta";
@ConfField(description = {"���������������������������", "The directory to save Doris temp data"})
public static String tmp_dir = EnvUtils.getDorisHome() + "/temp_dir";
@ConfField(description = {"���������������������������������BDB: ��������������� BDBJE ������LOCAL������������������������������������������������������",
"The storage type of the metadata log. BDB: Logs are stored in BDBJE. "
+ "LOCAL: logs are stored in a local file (for testing only)"}, options = {"BDB", "LOCAL"})
public static String edit_log_type = "bdb";
@ConfField(description = {"BDBJE ������������", "The port of BDBJE"})
public static int edit_log_port = 9010;
@ConfField(mutable = true, masterOnly = true, description = {
"BDBJE ������������������������������������������������������������������������������������",
"The log roll size of BDBJE. When the number of log entries exceeds this value, the log will be rolled"})
public static int edit_log_roll_num = 50000;
@ConfField(mutable = true, masterOnly = true, description = {
"������ BDBJE ������������������������������", "The max number of log entries for batching BDBJE"})
public static int batch_edit_log_max_item_num = 100;
@ConfField(mutable = true, masterOnly = true, description = {
"������ BDBJE ���������������������������", "The max size for batching BDBJE"})
public static long batch_edit_log_max_byte_size = 640 * 1024L;
@ConfField(mutable = true, masterOnly = true, description = {
"��������������� BDBJE ������������������������", "The sleep time after writting multiple batching BDBJE continuously"})
public static long batch_edit_log_rest_time_ms = 10;
@ConfField(mutable = true, masterOnly = true, description = {
"��������������� BDBJE ������������������������������������������������������������",
"After writting multiple batching BDBJE continuously, need a short rest. "
+ "Indicates the writting count before a rest"})
public static long batch_edit_log_continuous_count_for_rest = 1000;
@ConfField(description = {
"��������� EditLog���", "Batch EditLog writing"})
public static boolean enable_batch_editlog = true;
@ConfField(description = {"������������������������������������������������������������������������������������������������������ FE ���������������������",
"The toleration delay time of meta data synchronization, in seconds. "
+ "If the delay of meta data exceeds this value, non-master FE will stop offering service"})
public static int meta_delay_toleration_second = 300; // 5 min
@ConfField(description = {"��������������������������������������������������������� Follower FE���"
+ "������������������ `SYNC`������������������ Follower FE��������������������� `WRITE_NO_SYNC`���"
+ "������������http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.SyncPolicy.html",
"The sync policy of meta data log. If you only deploy one Follower FE, "
+ "set this to `SYNC`. If you deploy more than 3 Follower FE, "
+ "you can set this and the following `replica_sync_policy` to `WRITE_NO_SYNC`. "
+ "See: http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.SyncPolicy.html"},
options = {"SYNC", "NO_SYNC", "WRITE_NO_SYNC"})
public static String master_sync_policy = "SYNC"; // SYNC, NO_SYNC, WRITE_NO_SYNC
@ConfField(description = {"��� `master_sync_policy`", "Same as `master_sync_policy`"},
options = {"SYNC", "NO_SYNC", "WRITE_NO_SYNC"})
public static String replica_sync_policy = "SYNC"; // SYNC, NO_SYNC, WRITE_NO_SYNC
@ConfField(description = {"BDBJE ������������������������"
+ "������������http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.ReplicaAckPolicy.html",
"The replica ack policy of bdbje. "
+ "See: http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.ReplicaAckPolicy.html"},
options = {"ALL", "NONE", "SIMPLE_MAJORITY"})
public static String replica_ack_policy = "SIMPLE_MAJORITY"; // ALL, NONE, SIMPLE_MAJORITY
@ConfField(description = {"BDBJE ��������������������������������������������������������������� 30 ��������� BDBJE ���������������������"
+ "������������������������������ Java GC ������������������������������������������������������������������������������������������",
"The heartbeat timeout of bdbje between master and follower, in seconds. "
+ "The default is 30 seconds, which is same as default value in bdbje. "
+ "If the network is experiencing transient problems, "
+ "of some unexpected long java GC annoying you, "
+ "you can try to increase this value to decrease the chances of false timeouts"})
public static int bdbje_heartbeat_timeout_second = 30;
@ConfField(description = {"BDBJE ������������������������������������������������ FE ��� WARN ������������������������ LockTimeoutException���"
+ "���������������������������",
"The lock timeout of bdbje operation, in seconds. "
+ "If there are many LockTimeoutException in FE WARN log, you can try to increase this value"})
public static int bdbje_lock_timeout_second = 5;
@ConfField(description = {"BDBJE ��������������������������������������������������������������������������� ReplicaWriteException���"
+ "���������������������������",
"The replica ack timeout of bdbje between master and follower, in seconds. "
+ "If there are many ReplicaWriteException in FE WARN log, you can try to increase this value"})
public static int bdbje_replica_ack_timeout_second = 10;
@ConfField(description = {"��� HA ������������BDBJE ������������������������������������������������������ HA ���������������",
"The desired upper limit on the number of bytes of reserved space to retain "
+ "in a replicated JE Environment. "
+ "This parameter is ignored in a non-replicated JE Environment."})
public static long bdbje_reserved_disk_bytes = 1 * 1024 * 1024 * 1024; // 1G
@ConfField(description = {"BDBJE ��������������������������������������������������������������������������������� BDBJE ������������������",
"Amount of free disk space required by BDBJE. "
+ "If the free disk space is less than this value, BDBJE will not be able to write."})
public static long bdbje_free_disk_bytes = 1 * 1024 * 1024 * 1024; // 1G
@ConfField(description = {"BDBJE Cache ��������������������������� 96KB���", "Amount of memory used by by BDBJE as cache. "})
public static long bdbje_cache_size_bytes = 10 * 1024 * 1024; // 10 MB
@ConfField(description = {"BDBJE Message ���������������", "Max message size of BDBJE. "})
public static long bdbje_max_message_size_bytes = Integer.MAX_VALUE; // 2 GB
@ConfField(masterOnly = true, description = {"���������������������������",
"Num of thread to handle heartbeat events"})
public static int heartbeat_mgr_threads_num = 8;
@ConfField(masterOnly = true, description = {"������������������������������",
"Queue size to store heartbeat task in heartbeat_mgr"})
public static int heartbeat_mgr_blocking_queue_size = 1024;
@ConfField(masterOnly = true, description = {"TabletStatMgr ���������",
"Num of thread to update tablet stat"})
public static int tablet_stat_mgr_threads_num = -1;
@ConfField(masterOnly = true, description = {"Agent ���������������������������",
"Num of thread to handle agent task in agent task thread-pool"})
public static int max_agent_task_threads_num = 4096;
@ConfField(description = {"BDBJE ������������������������������������������������������������������������������������������"
+ "��� BDBJE ��������������������������������������������� BDBJE ������������",
"The max txn number which bdbje can rollback when trying to rejoin the group. "
+ "If the number of rollback txn is larger than this value, "
+ "bdbje will not be able to rejoin the group, and you need to clean up bdbje data manually."})
public static int txn_rollback_limit = 100;
@ConfField(description = {"������������������������������������ FE ������������������������"
+ "���������������������������������������������������������������"
+ "��������������������������������������������������������� CIDR ���������������������",
"The preferred network address. If FE has multiple network addresses, "
+ "this configuration can be used to specify the preferred network address. "
+ "This is a semicolon-separated list, "
+ "each element is a CIDR representation of the network address"})
public static String priority_networks = "";
@ConfField(mutable = true, description = {"������������������������������������ FE ���������������������������������������"
+ "������ Master FE ��������������������������������������������������� Master FE ������������������������������������������"
+ "��������������������� Master FE ������������������������",
"If true, non-master FE will ignore the meta data delay gap between Master FE and its self, "
+ "even if the metadata delay gap exceeds this threshold. "
+ "Non-master FE will still offer read service. "
+ "This is helpful when you try to stop the Master FE for a relatively long time for some reason, "
+ "but still wish the non-master FE can offer read service."})
public static boolean ignore_meta_check = false;
@ConfField(description = {"��� Master FE ��� Master FE ������������������������������������������"
+ "������������������������ Master FE ��� Master FE ������������ BDBJE ������������������������������"
+ "������������������������������������������ BDBJE ���������������������",
"The maximum clock skew between non-master FE to Master FE host, in milliseconds. "
+ "This value is checked whenever a non-master FE establishes a connection to master FE via BDBJE. "
+ "The connection is abandoned if the clock skew is larger than this value."})
public static long max_bdbje_clock_delta_ms = 5000; // 5s
@ConfField(mutable = true, description = {"������������������ http ���������������",
"Whether to enable all http interface authentication"}, varType = VariableAnnotation.EXPERIMENTAL)
public static boolean enable_all_http_auth = false;
@ConfField(description = {"FE http ��������������������� FE ��� http ������������������",
"Fe http port, currently all FE's http port must be same"})
public static int http_port = 8030;
@ConfField(description = {"FE https ��������������������� FE ��� https ������������������",
"Fe https port, currently all FE's https port must be same"})
public static int https_port = 8050;
@ConfField(description = {"FE https ��������� key store ������",
"The key store path of FE https service"})
public static String key_store_path = EnvUtils.getDorisHome()
+ "/conf/ssl/doris_ssl_certificate.keystore";
@ConfField(description = {"FE https ��������� key store ������",
"The key store password of FE https service"})
public static String key_store_password = "";
@ConfField(description = {"FE https ��������� key store ������",
"The key store type of FE https service"})
public static String key_store_type = "JKS";
@ConfField(description = {"FE https ��������� key store ������",
"The key store alias of FE https service"})
public static String key_store_alias = "doris_ssl_certificate";
@ConfField(description = {"������������ https������������������http ������������������",
"Whether to enable https, if enabled, http port will not be available"},
varType = VariableAnnotation.EXPERIMENTAL)
public static boolean enable_https = false;
@ConfField(description = {"Jetty ��� acceptor ������������Jetty ���������������������������������������������������������acceptor���selector ��� worker���"
+ "acceptor ��������������������������������������� selector ������ HTTP ��������������������������������� worker ���������������"
+ "������������������������������������������������������������������������������ socket ������������������������������������������"
+ "��������������������������������� 1-2 ��� acceptor ���������2 ��� 4 ������������������Worker ��������������������������� QPS ��� IO ������������������"
+ "������ QPS��������� IO ���������������������������������������������������������������������",
"The number of acceptor threads for Jetty. Jetty's thread architecture model is very simple, "
+ "divided into three thread pools: acceptor, selector and worker. "
+ "The acceptor is responsible for accepting new connections, "
+ "and then handing it over to the selector to process the unpacking of the HTTP message protocol, "
+ "and finally the worker processes the request. "
+ "The first two thread pools adopt a non-blocking model, "
+ "and one thread can handle many socket reads and writes, "
+ "so the number of thread pools is small. For most projects, "
+ "only 1-2 acceptor threads are needed, 2 to 4 should be enough. "
+ "The number of workers depends on the ratio of QPS and IO events of the application. "
+ "The higher the QPS, or the higher the IO ratio, the more threads are waiting, "
+ "and the more threads are required."})
public static int jetty_server_acceptors = 2;
@ConfField(description = {"Jetty ��� selector ������������", "The number of selector threads for Jetty."})
public static int jetty_server_selectors = 4;
@ConfField(description = {"Jetty ��� worker ������������0 ������������������������������",
"The number of worker threads for Jetty. 0 means using the default thread pool."})
public static int jetty_server_workers = 0;
@ConfField(description = {"Jetty ���������������������������������������",
"The default minimum number of threads for jetty."})
public static int jetty_threadPool_minThreads = 20;
@ConfField(description = {"Jetty ���������������������������������������",
"The default maximum number of threads for jetty."})
public static int jetty_threadPool_maxThreads = 400;
@ConfField(description = {"Jetty ��������� HTTP POST ��������������������������������������� 100MB���",
"The maximum HTTP POST size of Jetty, in bytes, the default value is 100MB."})
public static int jetty_server_max_http_post_size = 100 * 1024 * 1024;
@ConfField(description = {"Jetty ��������� HTTP header ��������������������������������������� 1MB���",
"The maximum HTTP header size of Jetty, in bytes, the default value is 1MB."})
public static int jetty_server_max_http_header_size = 1048576;
@ConfField(description = {"������������ mini load���������������",
"Whether to disable mini load, disabled by default"})
public static boolean disable_mini_load = true;
@ConfField(description = {"mysql nio server ��� backlog ���������"
+ "������������������������������������������ /proc/sys/net/core/somaxconn ������",
"The backlog number of mysql nio server. "
+ "If you enlarge this value, you should enlarge the value in "
+ "`/proc/sys/net/core/somaxconn` at the same time"})
public static int mysql_nio_backlog_num = 1024;
@ConfField(description = {"������������ mysql ������������ TCP keep alive���������������",
"Whether to enable TCP Keep-Alive for MySQL connections, disabled by default"})
public static boolean mysql_nio_enable_keep_alive = false;
@ConfField(description = {"thrift client ������������������������������������������0 ������������������������������",
"The connection timeout of thrift client, in milliseconds. 0 means no timeout."})
public static int thrift_client_timeout_ms = 0;
@ConfField(mutable = true, masterOnly = false,
description = {"Thrift RPC ������������������������������������������������ TCP connect ������������ TLS ���������"
+ "������������ reopen() ������������������������������������0 ������������������",
"Timeout in milliseconds for the connect phase of Thrift RPC connections, "
+ "including TCP connect and potential TLS handshake. "
+ "Prevents long blocking during reopen() when network is unreachable. "
+ "0 means no timeout."})
public static int thrift_rpc_connect_timeout_ms = 10000;
// The default value is inherited from org.apache.thrift.TConfiguration
@ConfField(description = {"thrift server ���������������������������",
"The maximum size of a (received) message of the thrift server, in bytes"})
public static int thrift_max_message_size = 100 * 1024 * 1024;
// The default value is inherited from org.apache.thrift.TConfiguration
@ConfField(description = {"thrift server transport ������������������������������������",
"The limits of the size of one frame of thrift server transport"})
public static int thrift_max_frame_size = 16384000;
@ConfField(description = {"thrift server ��� backlog ���������"
+ "������������������������������������������ /proc/sys/net/core/somaxconn ������",
"The backlog number of thrift server. "
+ "If you enlarge this value, you should enlarge the value in "
+ "`/proc/sys/net/core/somaxconn` at the same time"})
public static int thrift_backlog_num = 1024;
@ConfField(description = {"FE thrift server ������������", "The port of FE thrift server"})
public static int rpc_port = 9020;
@ConfField(description = {"FE MySQL server ������������", "The port of FE MySQL server"})
public static int query_port = 9030;
@ConfField(description = {"FE Arrow-Flight-SQL server ������������", "The port of FE Arrow-Flight-SQL server"})
public static int arrow_flight_sql_port = 8070;
@ConfField(description = {"MySQL ��������� IO ���������", "The number of IO threads in MySQL service"})
public static int mysql_service_io_threads_num = 4;
@ConfField(description = {"MySQL ������������������������������", "The max number of task threads in MySQL service"})
public static int max_mysql_service_task_threads_num = 4096;
@ConfField(description = {"BackendServiceProxy ��������������������� GRPC channel",
"BackendServiceProxy pool size for pooling GRPC channels."})
public static int backend_proxy_num = 48;
@ConfField(description = {
"������ ID��������������������������������������������������������������������������������� cluster id. ������������������������������",
"Cluster id used for internal authentication. Usually a random integer generated when master FE "
+ "start at first time. You can also specify one."})
public static int cluster_id = -1;
@ConfField(description = {"������ token������������������������",
"Cluster token used for internal authentication."})
public static String auth_token = "";
@ConfField(mutable = true, masterOnly = true,
description = {"������������ Replica ��������������������������������������������������������� m ��� tablet��������� tablet ��� n ��� replica���"
+ "������������������������ `m * n * tablet_create_timeout_second`",
"Maximal waiting time for creating a single replica, in seconds. "
+ "eg. if you create a table with #m tablets and #n replicas for each tablet, "
+ "the create table request will run at most "
+ "(m * n * tablet_create_timeout_second) before timeout"})
public static int tablet_create_timeout_second = 2;
@ConfField(mutable = true, masterOnly = true, description = {"������������������������������������������������",
"Minimal waiting time for creating a table, in seconds."})
public static int min_create_table_timeout_second = 30;
@ConfField(mutable = true, masterOnly = true, description = {"������������������������������������������������",
"Maximal waiting time for creating a table, in seconds."})
public static int max_create_table_timeout_second = 3600;
@ConfField(mutable = true, masterOnly = true, description = {"������ Publish ���������������������������������������������",
"Maximal waiting time for all publish version tasks of one transaction to be finished, in seconds."})
public static int publish_version_timeout_second = 30; // 30 seconds
@ConfField(mutable = true, masterOnly = true, description = {"������ Publish ���������������������������������������������������������"
+ "��������������� tablet ��������������������������������������������������� -1 ���������������������������",
"Waiting time for one transaction changing to \"at least one replica success\", in seconds."
+ "If time exceeds this, and for each tablet it has at least one replica publish successful, "
+ "then the load task will be successful." })
public static int publish_wait_time_second = 300;
@ConfField(mutable = true, masterOnly = true, description = {"������ Publish ��������������������������� Schema ������������������"
+ "��������������������������������������������������������������������������������� Schema ���������������������������������������������������",
"Check the replicas which are doing schema change when publish transaction. Do not turn off this check "
+ " under normal circumstances. It's only temporarily skip check if publish version and schema change have"
+ " dead lock" })
public static boolean publish_version_check_alter_replica = true;
@ConfField(mutable = true, masterOnly = true, description = {"������������ publish ���������������������",
"print log interval for publish transaction failed interval"})
public static long publish_fail_log_interval_second = 5 * 60;
@ConfField(mutable = true, masterOnly = true, description = {"������ PUBLISH_VERSION ���������������������������������������",
"the upper limit of failure logs of PUBLISH_VERSION task"})
public static long publish_version_task_failed_log_threshold = 80;
@ConfField(masterOnly = true, description = {"Publish ������������������",
"Num of thread to handle publish task"})
public static int publish_thread_pool_num = 128;
@ConfField(masterOnly = true, description = {"Publish ������������������������",
"Queue size to store publish task in publish thread pool"})
public static int publish_queue_size = 128;
@ConfField(mutable = true, description = {"������������������������������",
"Whether to enable parallel publish version"})
public static boolean enable_parallel_publish_version = true;
@ConfField(masterOnly = true, description = {"Tablet report ������������������",
"Num of thread to handle tablet report task"})
public static int tablet_report_thread_pool_num = 10;
@ConfField(masterOnly = true, description = {"Tablet report ������������������������",
"Queue size to store tablet report task in publish thread pool"})
public static int tablet_report_queue_size = 1024;
@ConfField(mutable = true, masterOnly = true, description = {"���������������������������������������������������"
+ "��������������������������� insert ������������",
"Maximal waiting time for all data inserted before one transaction to be committed, in seconds. "
+ "This parameter is only used for transactional insert operation"})
public static int commit_timeout_second = 30; // 30 seconds
@ConfField(masterOnly = true, description = {"Publish ������������������������������������������������������",
"The interval of publish task trigger thread, in milliseconds"})
public static int publish_version_interval_ms = 10;
@ConfField(mutable = true, masterOnly = true, description = {
"If the number of publishing transactions of a table exceeds this value, new transactions will "
+ "be rejected. Set to -1 to disable this limit.",
"��������������������������������������������������������������������������������������� -1 ������������������"})
public static long max_publishing_txn_num_per_table = 500;
@ConfField(description = {"thrift server ��������� worker ���������", "The max worker threads of thrift server"})
public static int thrift_server_max_worker_threads = 4096;
@ConfField(mutable = true, masterOnly = true, description = {"Delete ���������������������������������������������",
"Maximal timeout for delete job, in seconds."})
public static int delete_job_max_timeout_second = 300;
@ConfField(mutable = true, masterOnly = true, description = {"Load ���������������������������������������",
"Minimal number of write successful replicas for load job."})
public static short min_load_replica_num = -1;
@ConfField(description = {"load job ������������������������������������������",
"The interval of load job scheduler, in seconds."})
public static int load_checker_interval_second = 5;
@ConfField(description = {"ingestion load job ������������������������������������������",
"The interval of ingestion load job scheduler, in seconds."})
public static int ingestion_load_checker_interval_second = 60;
@ConfField(mutable = true, masterOnly = true, description = {"Broker load ���������������������������������������",
"Default timeout for broker load job, in seconds."})
public static int broker_load_default_timeout_second = 14400; // 4 hour
@ConfField(description = {"��� Broker ��������������� RPC ������������������������������������",
"The timeout of RPC between FE and Broker, in milliseconds"})
public static int broker_timeout_ms = 10000; // 10s
@ConfField(description = {"���������������������������������������������",
"The timeout of RPC for high concurrenty short circuit query"})
public static int point_query_timeout_ms = 10000; // 10s
@ConfField(mutable = true, masterOnly = true, description = {"Insert load ���������������������������������������",
"Default timeout for insert load job, in seconds."})
public static int insert_load_default_timeout_second = 14400; // 4 hour
@ConfField(mutable = true, masterOnly = true, description = {"��� mow ��������������� order by keys���������������",
"random set order by keys for mow table for test"})
public static boolean random_add_order_by_keys_for_mow = false;
@ConfField(mutable = true, masterOnly = true, description = {
"��� fuzzy ������������������������������������ V3 storage_format���ext_meta������������������������",
"Randomly use V3 storage_format (ext_meta) for some tables in fuzzy tests to increase coverage"})
public static boolean random_use_v3_storage_format = true;
@ConfField(mutable = true, masterOnly = true, description = {
"���������������������������������������������insert into ��� stream load ������������������",
"Wait for the internal batch to be written before returning; "
+ "insert into and stream load use group commit by default."})
public static boolean wait_internal_group_commit_finish = false;
@ConfField(mutable = true, masterOnly = true, description = {
"The stale threshold of checkpoint image file in cloud mode (in seconds). "
+ "If the image file is older than this threshold, a new checkpoint will be triggered "
+ "even if there are no new journals. This helps keep table version, partition version, "
+ "and tablet stats in the image up-to-date. If the value is less than or equal to 0, "
+ "this feature is disabled."})
public static long cloud_checkpoint_image_stale_threshold_seconds = 3600;
@ConfField(mutable = false, masterOnly = true, description = {"���������������������������������������������",
"Default commit interval in ms for group commit"})
public static int group_commit_interval_ms_default_value = 10000;
@ConfField(mutable = false, masterOnly = true, description = {"��������������������������������������������������������� 128M",
"Default commit data bytes for group commit"})
public static int group_commit_data_bytes_default_value = 134217728;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������ table ��� group_commit_interval_ms ���������",
"The internal group commit timeout is the multiple of table's group_commit_interval_ms"})
public static int group_commit_timeout_multipler = 10;
@ConfField(mutable = true, masterOnly = true, description = {"Stream load ���������������������������������������",
"Default timeout for stream load job, in seconds."})
public static int stream_load_default_timeout_second = 86400 * 3; // 3days
@ConfField(mutable = true, masterOnly = true, description = {"Stream load ������������������������������������������������",
"Default pre-commit timeout for stream load job, in seconds."})
public static int stream_load_default_precommit_timeout_second = 3600; // 3600s
@ConfField(mutable = true, masterOnly = true, description = {"Stream Load ������������������ memtable ������",
"Whether to enable memtable on sink node by default in stream load"})
public static boolean stream_load_default_memtable_on_sink_node = false;
@ConfField(mutable = true, masterOnly = true, description = {"Load ���������������������������������������",
"Maximal timeout for load job, in seconds."})
public static int max_load_timeout_second = 259200; // 3days
@ConfField(mutable = true, masterOnly = true, description = {"Stream load ���������������������������������������",
"Maximal timeout for stream load job, in seconds."})
public static int max_stream_load_timeout_second = 259200; // 3days
@ConfField(mutable = true, masterOnly = true, description = {"Load ���������������������������������������",
"Minimal timeout for load job, in seconds."})
public static int min_load_timeout_second = 1; // 1s
@ConfField(mutable = true, masterOnly = true, description = {"Ingestion load ���������������������������������������",
"Default timeout for ingestion load job, in seconds."})
public static int ingestion_load_default_timeout_second = 86400; // 1 day
@ConfField(mutable = true, masterOnly = true, description = {"Broker Load ��������������� job ���������"
+ "��������������������������������������������������������������� master������������������ job ���������������������������������",
"Maximal number of waiting jobs for Broker Load. This is a desired number. "
+ "In some situation, such as switch the master, "
+ "the current number is maybe more than this value."})
public static int desired_max_waiting_jobs = 100;
@ConfField(mutable = true, masterOnly = true, description = {"FE ��� BE ������ Stream Load ������������������������",
"The interval of FE fetch stream load record from BE."})
public static int fetch_stream_load_record_interval_second = 120;
@ConfField(mutable = true, masterOnly = true, description = {"Stream load ���������������������������",
"Default max number of recent stream load record that can be stored in memory."})
public static int max_stream_load_record_size = 5000;
@ConfField(mutable = true, masterOnly = true, description = {
"������������ show stream load ��� clear stream load ��������������������������������������� stream load ���������",
"Whether to disable show stream load and clear stream load records in memory."})
public static boolean disable_show_stream_load = false;
@ConfField(mutable = true, description = {
"������������ stream load profile",
"Whether to enable stream load profile"
})
public static boolean enable_stream_load_profile = false;
@ConfField(mutable = true, masterOnly = true, description = {
"������������ stream load ��� broker load ���������������������",
"Whether to enable to write single replica for stream load and broker load."},
varType = VariableAnnotation.EXPERIMENTAL)
public static boolean enable_single_replica_load = false;
@ConfField(mutable = true, masterOnly = true, description = {
"������ tablet ������������������������ DUPLICATE KEY ��������������������� shuffle",
"Shuffle won't be enabled for DUPLICATE KEY tables if its tablet num is lower than this number"},
varType = VariableAnnotation.EXPERIMENTAL)
public static int min_tablets_for_dup_table_shuffle = 64;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������������������������ prepare ��� commit ���������",
"Maximum concurrent running txn num including prepare, commit txns under a single db.",
"Txn manager will reject coming txns."})
public static int max_running_txn_num_per_db = 10000;
@ConfField(masterOnly = true, description = {"pending load task ���������������������������������������������������������������������������"
+ "��������������� `max_running_txn_num_per_db`���",
"The pending load task executor pool size. "
+ "This pool size limits the max running pending load tasks.",
"Currently, it only limits the pending load task of broker load and ingestion load.",
"It should be less than `max_running_txn_num_per_db`"})
public static int async_pending_load_task_pool_size = 10;
@ConfField(masterOnly = true, description = {"loading load task ���������������������������������������������������������������������������",
"The loading load task executor pool size. "
+ "This pool size limits the max running loading load tasks.",
"Currently, it only limits the loading load task of broker load."})
public static int async_loading_load_task_pool_size = 10;
@ConfField(mutable = true, masterOnly = true, description = {
"��� `tablet_create_timeout_second` ������������������������������ Delete ������������",
"The same meaning as `tablet_create_timeout_second`, but used when delete a tablet."})
public static int tablet_delete_timeout_second = 2;
@ConfField(mutable = true, masterOnly = true, description = {
"��������������������������������������������� BE ������������������",
"The high water of disk capacity used percent. This is used for calculating load score of a backend."})
public static double capacity_used_percent_high_water = 0.75;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������������������",
"The max diff of disk capacity used percent between BE. "
+ "It is used for calculating load score of a backend."})
public static double used_capacity_percent_max_diff = 0.30;
@ConfField(mutable = true, masterOnly = true, description = {
"��������������� BE ���������������������������������������BE ��������������������������������������������������������������������������� [0, 1]���"
+ "���������������������������������������������������������������������",
"Sets a fixed disk usage factor in the BE load fraction. The BE load score is a combination of disk usage "
+ "and replica count. The valid value range is [0, 1]. When it is out of this range, other "
+ "methods are used to automatically calculate this coefficient."})
public static double backend_load_capacity_coeficient = -1.0;
@ConfField(mutable = true, masterOnly = true, description = {
"ALTER TABLE ���������������������������������������������������������������������������",
"Maximal timeout of ALTER TABLE request. Set long enough to fit your table data size."})
public static int alter_table_timeout_second = 86400 * 30; // 1month
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������������������ReportHandler ��������������� tablet ������������������"
+ "��������������������������������������������������� false���",
"When disable_storage_medium_check is true, ReportHandler would not check tablet's storage medium "
+ "and disable storage cool down function."})
public static boolean disable_storage_medium_check = false;
@ConfField(description = {"������������������������������������������������ (HDD ��� SSD)���������������������"
+ "������������������������������������������",
"When create a table(or partition), you can specify its storage medium(HDD or SSD)."})
public static String default_storage_medium = "HDD";
@ConfField(mutable = true, masterOnly = true, description = {
"��������������� (���/������) ������������������ RECOVER ���������������������������������������������������������������"
+ "���������������������������������������������",
"After dropping database(table/partition), you can recover it by using RECOVER stmt.",
"And this specifies the maximal data retention time. After time, the data will be deleted permanently."})
public static long catalog_trash_expire_second = 86400L; // 1day
@ConfField
public static boolean catalog_trash_ignore_min_erase_latency = false;
@ConfField(mutable = true, masterOnly = true, description = {
"������ broker scanner ���������������������������Broker Load ������������������"
+ "���������������������������������������������������������������",
"Minimal bytes that a single broker scanner will read. When splitting file in broker load, "
+ "if the size of split file is less than this value, it will not be split."})
public static long min_bytes_per_broker_scanner = 67108864L; // 64MB
@ConfField(mutable = true, masterOnly = true, description = {
"������ broker scanner ���������������������", "Maximal concurrency of broker scanners."})
public static int max_broker_concurrency = 100;
// TODO(cmy): Disable by default because current checksum logic has some bugs.
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������ `consistency_check_end_time` ������������������������������������������������������"
+ "������������������������������������������������������������������������������������",
"Start time of consistency check. Used with `consistency_check_end_time` "
+ "to decide the start and end time of consistency check. "
+ "If set to the same value, consistency check will not be scheduled."})
public static String consistency_check_start_time = "23";
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������ `consistency_check_start_time` ������������������������������������������������������"
+ "������������������������������������������������������������������������������������",
"End time of consistency check. Used with `consistency_check_start_time` "
+ "to decide the start and end time of consistency check. "
+ "If set to the same value, consistency check will not be scheduled."})
public static String consistency_check_end_time = "23";
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������������������������������������������������������������������",
"Default timeout of a single consistency check task. Set long enough to fit your tablet size."})
public static long check_consistency_default_timeout_second = 600; // 10 min
@ConfField(description = {"������ FE ��� MySQL Server ���������������������",
"Maximal number of connections of MySQL server per FE."})
public static int qe_max_connection = 1024;
@ConfField(mutable = true, description = {"Colocate join ������ instance ��������� penalty ���������"
+ "���������������`exec_mem_limit / min (query_colocate_join_memory_limit_penalty_factor, instance_num)`",
"Colocate join PlanFragment instance memory limit penalty factor.",
"The memory_limit for colocote join PlanFragment instance = "
+ "`exec_mem_limit / min (query_colocate_join_memory_limit_penalty_factor, instance_num)`"})
public static int query_colocate_join_memory_limit_penalty_factor = 1;
/**
* This configs can set to true to disable the automatic colocate tables's relocate and balance.
* If 'disable_colocate_balance' is set to true,
* ColocateTableBalancer will not relocate and balance colocate tables.
* Attention:
* Under normal circumstances, there is no need to turn off balance at all.
* Because once the balance is turned off, the unstable colocate table may not be restored
* Eventually the colocate plan cannot be used when querying.
*/
@ConfField(mutable = true, masterOnly = true) public static boolean disable_colocate_balance = false;
@ConfField(mutable = true, masterOnly = true, description = {"������������ group ������������",
"is allow colocate balance between all groups"})
public static boolean disable_colocate_balance_between_groups = false;
/**
* The default user resource publishing timeout.
*/
@Deprecated
@ConfField public static int meta_publish_timeout_ms = 1000;
@ConfField public static boolean proxy_auth_enable = false;
@ConfField public static String proxy_auth_magic_prefix = "x@8";
/**
* Limit on the number of expr children of an expr tree.
* Exceed this limit may cause long analysis time while holding database read lock.
* Do not set this if you know what you are doing.
*/
@ConfField(mutable = true)
public static int expr_children_limit = 10000;
/**
* Limit on the depth of an expr tree.
* Exceed this limit may cause long analysis time while holding db read lock.
* Do not set this if you know what you are doing.
*/
@ConfField(mutable = true)
public static int expr_depth_limit = 3000;
// Configurations for backup and restore
/**
* Plugins' path for BACKUP and RESTORE operations. Currently deprecated.
*/
@Deprecated
@ConfField public static String backup_plugin_path = "/tools/trans_file_tool/trans_files.sh";
// For forward compatibility, will be removed later.
// check token when download image file.
@ConfField public static boolean enable_token_check = true;
/**
* Set to true if you deploy Palo using thirdparty deploy manager
* Valid options are:
* disable: no deploy manager
* k8s: Kubernetes NB:Support removed starting from version 3.1.X
* ambari: Ambari NB: Support removed starting from version 3.1.X
* local: Local File (for test or Boxer2 BCC version)
*/
@ConfField public static String enable_deploy_manager = "disable";
// Set runtime locale when exec some cmds
@ConfField public static String locale = "zh_CN.UTF-8";
// default timeout of backup job
@ConfField(mutable = true, masterOnly = true)
public static int backup_job_default_timeout_ms = 86400 * 1000; // 1 day
/**
* 'storage_high_watermark_usage_percent' limit the max capacity usage percent of a Backend storage path.
* 'storage_min_left_capacity_bytes' limit the minimum left capacity of a Backend storage path.
* If both limitations are reached, this storage path can not be chose as tablet balance destination.
* But for tablet recovery, we may exceed these limit for keeping data integrity as much as possible.
*/
@ConfField(mutable = true, masterOnly = true)
public static int storage_high_watermark_usage_percent = 85;
@ConfField(mutable = true, masterOnly = true)
public static long storage_min_left_capacity_bytes = 2 * 1024 * 1024 * 1024L; // 2G
/**
* If capacity of disk reach the 'storage_flood_stage_usage_percent' and 'storage_flood_stage_left_capacity_bytes',
* the following operation will be rejected:
* 1. load job
* 2. restore job
*/
@ConfField(mutable = true, masterOnly = true)
public static int storage_flood_stage_usage_percent = 95;
@ConfField(mutable = true, masterOnly = true)
public static long storage_flood_stage_left_capacity_bytes = 1 * 1024 * 1024 * 1024; // 1GB
// update interval of tablet stat
// All frontends will get tablet stat from all backends at each interval
@ConfField(mutable = true)
public static int tablet_stat_update_interval_second = 60; // 1 min
// update interval of alive session
// Only master FE collect this info from all frontends at each interval
@ConfField public static int alive_session_update_interval_second = 5;
@ConfField public static int fe_session_mgr_threads_num = 1;
@ConfField public static int fe_session_mgr_blocking_queue_size = 1024;
@ConfField(mutable = true, masterOnly = true)
public static int loss_conn_fe_temp_table_keep_second = 60;
/**
* Max bytes a broker scanner can process in one broker load job.
* Commonly, each Backends has one broker scanner.
*/
@ConfField(mutable = true, masterOnly = true)
public static long max_bytes_per_broker_scanner = 500 * 1024 * 1024 * 1024L; // 500G
/**
* Max number of load jobs, include PENDING���ETL���LOADING���QUORUM_FINISHED.
* If exceed this number, load job is not allowed to be submitted.
*/
@Deprecated
@ConfField(mutable = true, masterOnly = true)
public static long max_unfinished_load_job = 1000;
/**
* If set to true, Planner will try to select replica of tablet on same host as this Frontend.
* This may reduce network transmission in following case:
* 1. N hosts with N Backends and N Frontends deployed.
* 2. The data has N replicas.
* 3. High concurrency queries are sent to all Frontends evenly
* In this case, all Frontends can only use local replicas to do the query.
* If you want to allow fallback to nonlocal replicas when no local replicas available,
* set enable_local_replica_selection_fallback to true.
*/
@ConfField(mutable = true)
public static boolean enable_local_replica_selection = false;
/**
* Used with enable_local_replica_selection.
* If the local replicas is not available, fallback to the nonlocal replicas.
* */
@ConfField(mutable = true)
public static boolean enable_local_replica_selection_fallback = false;
/**
* The number of query retries.
* A query may retry if we encounter RPC exception and no result has been sent to user.
* You may reduce this number to avoid Avalanche disaster.
*/
@ConfField(mutable = true)
public static int max_query_retry_time = 3;
/**
* The number of point query retries in executor.
* A query may retry if we encounter RPC exception and no result has been sent to user.
* You may reduce this number to avoid Avalanche disaster.
*/
@ConfField(mutable = true)
public static int max_point_query_retry_time = 2;
/**
* If set to true, FE may omit heavy reusable parameters (desc_tbl/output_expr/query_options)
* in point lookup requests (PTabletKeyLookupRequest) when executing prepared statements.
* BE will first try to find reusable context from LookupConnectionCache by uuid; if missing,
* BE asks FE to resend a full request with these parameters via
* response.need_resend_query_context.
*
* This can greatly reduce FE outbound network throughput when cache hit rate is high.
*/
@ConfField(mutable = true, description = {
"������������ point query ���������������������������FE ��� PreparedStatement ���������������������������"
+ " desc_tbl/output_expr/query_options���BE ��������������������������������������� FE ���������������������"
+ "��� BE ������������������������������������������������ FE ������������������",
"Whether to enable lightweight point-query requests. When enabled, FE will omit"
+ " desc_tbl/output_expr/query_options on the first PreparedStatement execute"
+ " request, and BE will ask FE to resend the full request if reusable cache"
+ " is missing. This can significantly reduce FE outbound bandwidth when the"
+ " BE-side reusable cache hit rate is high."
})
public static boolean enable_lightweight_lookup_request = false;
/**
* The tryLock timeout configuration of catalog lock.
* Normally it does not need to change, unless you need to test something.
*/
@ConfField(mutable = true)
public static long catalog_try_lock_timeout_ms = 5000; // 5 sec
/**
* if this is set to true
* all pending load job will failed when call begin txn api
* all prepare load job will failed when call commit txn api
* all committed load job will waiting to be published
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean disable_load_job = false;
/*
* One master daemon thread will update database used data quota for db txn manager
* every db_used_data_quota_update_interval_secs
*/
@ConfField(mutable = false, masterOnly = true)
public static int db_used_data_quota_update_interval_secs = 300;
/**
* fe will call es api to get es index shard info every es_state_sync_interval_secs
*/
@ConfField
public static long es_state_sync_interval_second = 10;
/**
* the factor of delay time before deciding to repair tablet.
* if priority is VERY_HIGH, repair it immediately.
* HIGH, delay tablet_repair_delay_factor_second * 1;
* NORMAL: delay tablet_repair_delay_factor_second * 2;
* LOW: delay tablet_repair_delay_factor_second * 3;
*/
@ConfField(mutable = true, masterOnly = true)
public static long tablet_repair_delay_factor_second = 60;
/**
* clone a tablet, further repair timeout.
*/
@ConfField(mutable = true, masterOnly = true)
public static long tablet_further_repair_timeout_second = 20 * 60;
/**
* clone a tablet, further repair max times.
*/
@ConfField(mutable = true, masterOnly = true)
public static int tablet_further_repair_max_times = 5;
/**
* if tablet loaded txn failed recently, it will get higher priority to repair.
*/
@ConfField(mutable = true, masterOnly = true)
public static long tablet_recent_load_failed_second = 30 * 60;
/**
* base time for higher tablet scheduler task,
* set this config value bigger if want the high priority effect last longer.
*/
@ConfField(mutable = true, masterOnly = true)
public static long tablet_schedule_high_priority_second = 30 * 60;
/**
* publish version queue's size in be, report it to fe,
* if publish task in be exceed direct_publish_limit_number,
* fe will direct publish task
*/
@ConfField(mutable = true, masterOnly = true)
public static int publish_version_queued_limit_number = 1000;
/**
* the default slot number per path for hdd in tablet scheduler
* TODO(cmy): remove this config and dynamically adjust it by clone task statistic
*/
@ConfField(mutable = true, masterOnly = true)
public static int schedule_slot_num_per_hdd_path = 4;
/**
* the default slot number per path for ssd in tablet scheduler
* TODO(cmy): remove this config and dynamically adjust it by clone task statistic
*/
@ConfField(mutable = true, masterOnly = true)
public static int schedule_slot_num_per_ssd_path = 8;
/**
* the default batch size in tablet scheduler for a single schedule.
*/
@ConfField(mutable = true, masterOnly = true)
public static int schedule_batch_size = 50;
/**
* tablet health check interval. Do not modify it in production environment.
*/
@ConfField(mutable = false, masterOnly = true)
public static long tablet_checker_interval_ms = 20 * 1000;
/**
* tablet scheduled interval. Do not modify it in production environment.
*/
@ConfField(mutable = false, masterOnly = true)
public static long tablet_schedule_interval_ms = 1000;
/**
* Deprecated after 0.10
*/
@Deprecated
@ConfField public static boolean use_new_tablet_scheduler = true;
/**
* the threshold of cluster balance score, if a backend's load score is 10% lower than average score,
* this backend will be marked as LOW load, if load score is 10% higher than average score, HIGH load
* will be marked.
*/
@ConfField(mutable = true, masterOnly = true)
public static double balance_load_score_threshold = 0.1; // 10%
// if disk usage > balance_load_score_threshold + urgent_disk_usage_extra_threshold
// then this disk need schedule quickly
// this value could less than 0.
@ConfField(mutable = true, masterOnly = true)
public static double urgent_balance_disk_usage_extra_threshold = 0.05;
// when run urgent disk balance, shuffle the top large tablets
// range: [ 0 ~ 100 ]
@ConfField(mutable = true, masterOnly = true)
public static int urgent_balance_shuffle_large_tablet_percentage = 1;
@ConfField(mutable = true, masterOnly = true)
public static double urgent_balance_pick_large_tablet_num_threshold = 1000;
// range: 0 ~ 100
@ConfField(mutable = true, masterOnly = true)
public static int urgent_balance_pick_large_disk_usage_percentage = 80;
// there's a case, all backend has a high disk, by default, it will not run urgent disk balance.
// if set this value to true, urgent disk balance will always run,
// the backends will exchange tablets among themselves.
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_urgent_balance_no_low_backend = true;
/**
* if set to true, TabletScheduler will not do balance.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean disable_balance = false;
/**
* when be rebalancer idle, then disk balance will occurs.
*/
@ConfField(mutable = true, masterOnly = true)
public static int be_rebalancer_idle_seconds = 0;
/**
* if set to true, TabletScheduler will not do disk balance.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean disable_disk_balance = false;
// balance order
// ATTN: a temporary config, may delete later.
@ConfField(mutable = true, masterOnly = true)
public static boolean balance_be_then_disk = true;
/**
* if set to false, TabletScheduler will not do disk balance for replica num = 1.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_disk_balance_for_single_replica = false;
// if the number of scheduled tablets in TabletScheduler exceed max_scheduling_tablets
// skip checking.
@ConfField(mutable = true, masterOnly = true)
public static int max_scheduling_tablets = 2000;
// if the number of balancing tablets in TabletScheduler exceed max_balancing_tablets,
// no more balance check
@ConfField(mutable = true, masterOnly = true)
public static int max_balancing_tablets = 100;
// Rebalancer type(ignore case): BeLoad, Partition. If type parse failed, use BeLoad as default.
@ConfField(masterOnly = true)
public static String tablet_rebalancer_type = "BeLoad";
// Valid only if use PartitionRebalancer. If this changed, cached moves will be cleared.
@ConfField(mutable = true, masterOnly = true)
public static long partition_rebalance_move_expire_after_access = 600; // 600s
// Valid only if use PartitionRebalancer
@ConfField(mutable = true, masterOnly = true)
public static int partition_rebalance_max_moves_num_per_selection = 10;
// 1 slot for reduce unnecessary balance task, provided a more accurate estimate of capacity
@ConfField(masterOnly = true, mutable = true)
public static int balance_slot_num_per_path = 1;
// when execute admin set replica status = 'drop', the replica will marked as user drop.
// will try to drop this replica within time not exceeds manual_drop_replica_valid_second
@ConfField(masterOnly = true, mutable = true)
public static long manual_drop_replica_valid_second = 24 * 3600L;
// This threshold is to avoid piling up too many report task in FE, which may cause OOM exception.
// In some large Doris cluster, eg: 100 Backends with ten million replicas, a tablet report may cost
// several seconds after some modification of metadata(drop partition, etc..).
// And one Backend will report tablets info every 1 min, so unlimited receiving reports is unacceptable.
// TODO(cmy): we will optimize the processing speed of tablet report in future, but now, just discard
// the report if queue size exceeding limit.
// Some online time cost:
// 1. disk report: 0-1 ms
// 2. task report: 0-1 ms
// 3. tablet report
// 10000 replicas: 200ms
@ConfField(mutable = true, masterOnly = true)
public static int report_queue_size = 100;
// if the number of report task in FE exceed max_report_task_num_per_rpc, then split it to multiple rpc
@ConfField(mutable = true, masterOnly = true, description = {
"������������ agent task ������������ RPC ��������������� be ������������������������������������ 10000 ������",
"The maximum number of batched tasks per RPC assigned to each BE when resending agent tasks, "
+ "the default value is 10000."
})
public static int report_resend_batch_task_num_per_rpc = 10000;
/**
* If set to true, metric collector will be run as a daemon timer to collect metrics at fix interval
*/
@ConfField public static boolean enable_metric_calculator = true;
/**
* the max routine load job num, including NEED_SCHEDULED, RUNNING, PAUSE
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_routine_load_job_num = 100;
/**
* the max concurrent routine load task num of a single routine load job
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_routine_load_task_concurrent_num = 256;
/**
* the max concurrent routine load task num per BE.
* This is to limit the num of routine load tasks sending to a BE, and it should also less
* than BE config 'max_routine_load_thread_pool_size'(default 1024),
* which is the routine load task thread pool max size on BE.
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_routine_load_task_num_per_be = 1024;
/**
* routine load timeout is equal to maxBatchIntervalS * routine_load_task_timeout_multiplier.
*/
@ConfField(mutable = true, masterOnly = true)
public static int routine_load_task_timeout_multiplier = 10;
/**
* routine load task min timeout second.
*/
@ConfField(mutable = true, masterOnly = true)
public static int routine_load_task_min_timeout_sec = 60;
/**
* streaming task load timeout is equal to maxIntervalS * streaming_task_timeout_multiplier.
*/
@ConfField(mutable = true, masterOnly = true)
public static int streaming_task_timeout_multiplier = 10;
@ConfField(mutable = true, masterOnly = true)
public static int streaming_cdc_light_rpc_timeout_sec = 90;
@ConfField(mutable = true, masterOnly = true)
public static int streaming_cdc_heavy_rpc_timeout_sec = 600;
/**
* the max timeout of get kafka meta.
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_get_kafka_meta_timeout_second = 60;
/**
* the expire time of routine load blacklist.
*/
@ConfField(mutable = true, masterOnly = true)
public static int routine_load_blacklist_expire_time_second = 300;
/**
* Minimum batch interval for adaptive routine load tasks when not at EOF.
*/
@ConfField(mutable = true, masterOnly = true)
public static int routine_load_adaptive_min_batch_interval_sec = 360;
/**
* The max number of files store in SmallFileMgr
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_small_file_number = 100;
/**
* The max size of a single file store in SmallFileMgr
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_small_file_size_bytes = 1024 * 1024; // 1MB
/**
* Save small files
*/
@ConfField
public static String small_file_dir = EnvUtils.getDorisHome() + "/small_files";
/**
* This will limit the max recursion depth of hash distribution pruner.
* eg: where a in (5 elements) and b in (4 elements) and c in (3 elements) and d in (2 elements).
* a/b/c/d are distribution columns, so the recursion depth will be 5 * 4 * 3 * 2 = 120, larger than 100,
* So that distribution pruner will no work and just return all buckets.
*
* Increase the depth can support distribution pruning for more elements, but may cost more CPU.
*/
@ConfField(mutable = true, masterOnly = false)
public static int max_distribution_pruner_recursion_depth = 100;
/**
* If the jvm memory used percent(heap or old mem pool) exceed this threshold, checkpoint thread will
* not work to avoid OOM.
*/
@ConfField(mutable = true, masterOnly = true)
public static long metadata_checkpoint_memory_threshold = 70;
/**
* If set to true, the checkpoint thread will make the checkpoint regardless of the jvm memory used percent.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean force_do_metadata_checkpoint = false;
/**
* If some joural is wrong, and FE can't start, we can use this to skip it.
*/
@ConfField(mutable = false, masterOnly = false)
public static String[] force_skip_journal_ids = {};
@ConfField(description = {"��������� editlog ������������������������������������������ FE ��������������������������������������������� editlog ������������������������"
+ "������������������������������ replay ������������������������������������",
"When replaying editlog encounters exceptions with specific operation types that prevent FE from starting, "
+ "you can configure the editlog operation type enum values to be ignored, "
+ "thereby skipping these exceptions and allowing the replay thread to continue replaying other logs"})
public static short[] skip_operation_types_on_replay_exception = {-1, -1};
/**
* Decide how often to check dynamic partition
*/
@ConfField(mutable = true, masterOnly = true)
public static long dynamic_partition_check_interval_seconds = 600;
/**
* When scheduling dynamic partition tables,
* the execution interval of each table to prevent excessive consumption of FE CPU at the same time
* default is 0
*/
@ConfField(mutable = true, masterOnly = true)
public static long dynamic_partition_step_interval_ms = 0;
/**
* If set to true, dynamic partition feature will open
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean dynamic_partition_enable = true;
/**
* control rollup job concurrent limit
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_running_rollup_job_num_per_table = 1;
/**
* If set to true, Doris will check if the compiled and running versions of Java are compatible
*/
@ConfField
public static boolean check_java_version = true;
/**
* a period for auto resume routine load
*/
@ConfField(mutable = true, masterOnly = true)
public static int period_of_auto_resume_min = 10;
/**
* If set to true, the backend will be automatically dropped after finishing decommission.
* If set to false, the backend will not be dropped and remaining in DECOMMISSION state.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean drop_backend_after_decommission = true;
/**
* When tablet size of decommissioned backend is lower than this threshold,
* SystemHandler will start to check if all tablets of this backend are in recycled status,
* this backend will be dropped immediately if the check result is true.
* For performance based considerations, better not set a very high value for this.
*/
@ConfField(mutable = true, masterOnly = true)
public static int decommission_tablet_check_threshold = 50000;
/**
* When decommission a backend, need to migrate all its tablets to other backends.
* But there maybe some leaky tablets due to forgetting to delete them from TabletInvertIndex.
* They are not in use. Decommission can skip migrating them.
* For safety, decommission wait for a period after founding leaky tablets.
*/
@ConfField(mutable = true, masterOnly = true)
public static int decommission_skip_leaky_tablet_second = 3600 * 5;
/**
* Decommission a tablet need to wait all the previous txns finished.
* If wait timeout, decommission will fail.
* Need to increase this wait time if the txn take a long time.
*
*/
@ConfField(mutable = true, masterOnly = true)
public static int decommission_tablet_wait_time_seconds = 3600;
/**
* Define thrift server's server model, default is TThreadPoolServer model
*/
@ConfField
public static String thrift_server_type = "THREAD_POOL";
/**
* This config will decide whether to resend agent task when create_time for agent_task is set,
* only when current_time - create_time > agent_task_resend_wait_time_ms can ReportHandler do resend agent task
*/
@ConfField (mutable = true, masterOnly = true)
public static long agent_task_resend_wait_time_ms = 5000;
/**
* min_clone_task_timeout_sec and max_clone_task_timeout_sec is to limit the
* min and max timeout of a clone task.
* Under normal circumstances, the timeout of a clone task is estimated by
* the amount of data and the minimum transmission speed(5MB/s).
* But in special cases, you may need to manually set these two configs
* to ensure that the clone task will not fail due to timeout.
*/
@ConfField(mutable = true, masterOnly = true)
public static long min_clone_task_timeout_sec = 3 * 60; // 3min
@ConfField(mutable = true, masterOnly = true)
public static long max_clone_task_timeout_sec = 2 * 60 * 60; // 2h
/**
* If set to true, fe will enable sql result cache
* This option is suitable for offline data update scenarios
* case1 case2 case3 case4
* enable_sql_cache false true true false
* enable_partition_cache false false true true
*/
@ConfField(mutable = true, masterOnly = false)
public static boolean cache_enable_sql_mode = true;
/**
* Minimum interval between last version when caching results,
* This parameter distinguishes between offline and real-time updates
*/
@ConfField(mutable = true, masterOnly = false)
public static int cache_last_version_interval_second = 30;
/**
* Expire sql sql in frontend time
*/
@ConfField(
mutable = true,
masterOnly = false,
callbackClassString = "org.apache.doris.common.cache.NereidsSqlCacheManager$UpdateConfig",
description = {
"��������������������� 300��������������������� NereidsSqlCacheManager ��� sql cache ������������������������������������������ cache ������������",
"The current default setting is 300, which is used to control the expiration time of SQL cache"
+ "in NereidsSqlCacheManager. If the cache is not accessed for a period of time, "
+ "it will be reclaimed"
}
)
public static int expire_sql_cache_in_fe_second = 300;
/**
* Expire hbo plan stats. cache in frontend time.
*/
@ConfField(
mutable = true,
masterOnly = false,
callbackClassString = "org.apache.doris.nereids.stats.MemoryHboPlanStatisticsProvider$UpdateConfig",
description = {
"��������������������� 86400��������������������� MemoryHboPlanStatisticsProvider ��� stats. cache ������������������������������������������",
"The default setting is 86400, which is used to control the expiration time of plan stats. cache"
+ "in MemoryHboPlanStatisticsProvider. If the cache is not accessed for a period of time, "
+ "it will be reclaimed."
}
)
public static int expire_hbo_plan_stats_cache_in_fe_second = 86400;
/**
* Expire hbo plan info cache in frontend time.
*/
@ConfField(
mutable = true,
masterOnly = false,
callbackClassString = "org.apache.doris.nereids.stats.HboPlanInfoProvider$UpdateConfig",
description = {
"��������������������� 1000��������������������� HboPlanInfoProvider ��� plan info cache ������������������������������������������ cache ������������",
"The default setting is 100, which is used to control the expiration time of hbo plan info cache"
+ "in HboPlanInfoProvider. If the cache is not accessed for a period of time, "
+ "it will be reclaimed."
}
)
public static int expire_hbo_plan_info_cache_in_fe_second = 1000;
/**
* Expire sql sql in frontend time
*/
@ConfField(
mutable = true,
masterOnly = false,
callbackClassString = "org.apache.doris.common.cache.NereidsSortedPartitionsCacheManager$UpdateConfig",
description = {
"��������������������� 300��������������������� NereidsSortedPartitionsCacheManager ���������������������������������������"
+ "��������������������������� cache ������������",
"The current default setting is 300, which is used to control the expiration time of "
+ "the partition metadata cache in NereidsSortedPartitionsCheManager. "
+ "If the cache is not accessed for a period of time, it will be reclaimed"
}
)
public static int expire_cache_partition_meta_table_in_fe_second = 300;
/**
* Set the maximum number of rows that can be cached
*/
@ConfField(mutable = true, masterOnly = false, description = {"SQL/Partition Cache ������������������������������",
"Maximum number of rows that can be cached in SQL/Partition Cache, is 3000 by default."})
public static int cache_result_max_row_count = 3000;
/**
* Set the maximum data size that can be cached
*/
@ConfField(mutable = true, masterOnly = false, description = {"SQL/Partition Cache ������������������������������������",
"Maximum data size of rows that can be cached in SQL/Partition Cache, is 3000 by default."})
public static int cache_result_max_data_size = 31457280; // 30M
/**
* Used to limit element num of InPredicate in delete statement.
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_allowed_in_element_num_of_delete = 1024;
/**
* In some cases, some tablets may have all replicas damaged or lost.
* At this time, the data has been lost, and the damaged tablets
* will cause the entire query to fail, and the remaining healthy tablets cannot be queried.
* In this case, you can set this configuration to true.
* The system will replace damaged tablets with empty tablets to ensure that the query
* can be executed. (but at this time the data has been lost, so the query results may be inaccurate)
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean recover_with_empty_tablet = false;
/**
* Whether to add a version column when create unique table
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_hidden_version_column_by_default = true;
/**
* Whether to add a skip bitmap column when create merge-on-write unique table
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_skip_bitmap_column_by_default = false;
/**
* Used to set default db data quota bytes.
*/
@ConfField(mutable = true, masterOnly = true)
public static long default_db_data_quota_bytes = Long.MAX_VALUE; // 8192 PB
/**
* Used to set default db replica quota num.
*/
@ConfField(mutable = true, masterOnly = true)
public static long default_db_replica_quota_size = 1024 * 1024 * 1024;
/*
* Maximum percentage of data that can be filtered (due to reasons such as data is irregularly)
* The default value is 0.
*/
@ConfField(mutable = true, masterOnly = true)
public static double default_max_filter_ratio = 0;
/**
* HTTP Server V2 is implemented by SpringBoot.
* It uses an architecture that separates front and back ends.
* Only enable httpv2 can user to use the new Frontend UI interface
*/
@ConfField
public static boolean enable_http_server_v2 = true;
/*
* Base path is the URL prefix for all API paths.
* Some deployment environments need to configure additional base path to match resources.
* This Api will return the path configured in Config.http_api_extra_base_path.
* Default is empty, which means not set.
*/
@ConfField
public static String http_api_extra_base_path = "";
/**
* If set to true, FE will be started in BDBJE debug mode
*/
@ConfField
public static boolean enable_bdbje_debug_mode = false;
@ConfField(mutable = false, masterOnly = true, description = {"������������ debug point ���������������������",
"is enable debug points, use in test."})
public static boolean enable_debug_points = false;
/**
* This config is used to try skip broker when access bos or other cloud storage via broker
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_access_file_without_broker = false;
/**
* Whether to allow the outfile function to export the results to the local disk.
* If set to true, there's risk to run out of FE disk capacity.
*/
@ConfField
public static boolean enable_outfile_to_local = false;
/**
* Used to set the initial flow window size of the GRPC client channel, and also used to max message size.
* When the result set is large, you may need to increase this value.
*/
@ConfField
public static int grpc_max_message_size_bytes = 2147483647; // 2GB
/**
* num of thread to handle grpc events in grpc_threadmgr
*/
@ConfField
public static int grpc_threadmgr_threads_nums = 4096;
/**
* sets the time without read activity before sending a keepalive ping
* the smaller the value, the sooner the channel is unavailable, but it will increase network io
*/
@ConfField(description = { "������ grpc ������������ keepalive ping ������������������������������������",
"The time without grpc read activity before sending a keepalive ping" })
public static int grpc_keep_alive_second = 10;
/**
* Used to set minimal number of replication per tablet.
*/
@ConfField(mutable = true, masterOnly = true)
public static short min_replication_num_per_tablet = 1;
/**
* Used to set maximal number of replication per tablet.
*/
@ConfField(mutable = true, masterOnly = true)
public static short max_replication_num_per_tablet = Short.MAX_VALUE;
/**
* Used to limit the maximum number of partitions that can be created when creating a dynamic partition table,
* to avoid creating too many partitions at one time.
* The number is determined by "start" and "end" in the dynamic partition parameters.
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_dynamic_partition_num = 20000;
/**
* Used to limit the maximum number of partitions that can be created when creating multi partition,
* to avoid creating too many partitions at one time.
* The number is determined by "start" and "end" in the multi partition parameters.
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_multi_partition_num = 4096;
/**
* Use this parameter to set the partition name prefix for multi partition,
* Only multi partition takes effect, not dynamic partitions.
* The default prefix is "p_".
*/
@ConfField(mutable = true, masterOnly = true)
public static String multi_partition_name_prefix = "p_";
/**
* Control the max num of backup/restore job per db
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_backup_restore_job_num_per_db = 10;
/**
* A internal config, to reduce the restore job size during serialization by compress.
*
* WARNING: Once this option is enabled and a restore is performed, the FE version cannot be rolled back.
*/
@ConfField(mutable = false)
public static boolean restore_job_compressed_serialization = false;
/**
* A internal config, to reduce the backup job size during serialization by compress.
*
* WARNING: Once this option is enabled and a backup is performed, the FE version cannot be rolled back.
*/
@ConfField(mutable = false)
public static boolean backup_job_compressed_serialization = false;
/**
* A internal config, to indicate whether to enable the restore snapshot rpc compression.
*
* The ccr syncer will depends this config to decide whether to compress the meta and job
* info of the restore snapshot request.
*/
@ConfField(mutable = false)
public static boolean enable_restore_snapshot_rpc_compression = true;
/**
* A internal config, to indicate whether to reset the index id when restore olap table.
*
* The inverted index saves the index id in the file path/header, so the index id between
* two clusters must be the same.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean restore_reset_index_id = false;
/**
* Control the max num of tablets per backup job involved.
*/
@ConfField(mutable = true, masterOnly = true, description = {
"������������������ backup job ��������������� tablet ������������������ OOM",
"Control the max num of tablets per backup job involved, to avoid OOM"
})
public static int max_backup_tablets_per_job = 300000;
/**
* whether to ignore table that not support type when backup, and not report exception.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean ignore_backup_not_support_table_type = false;
/**
* whether to ignore temp partitions when backup, and not report exception.
*/
@ConfField(mutable = true, masterOnly = true, description = {
"���������������������������������������������",
"Whether to ignore temp partitions when backup, and not report exception."
})
public static boolean ignore_backup_tmp_partitions = false;
/**
* A internal config, to control the update interval of backup handler. Only used to speed up tests.
*/
@ConfField(mutable = false)
public static long backup_handler_update_interval_millis = 3000;
/**
* Whether to enable cloud restore job.
*/
@ConfField(mutable = true, masterOnly = true, description = {"���������������������������������������",
"Whether to enable cloud restore job."}, varType = VariableAnnotation.EXPERIMENTAL)
public static boolean enable_cloud_restore_job = false;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������ create tablets rpc ��������� tablet ��������������������������� 256 ���",
"During the cloud restore job, the maximum number of tablets created by one "
+ "create tablets RPC, 256 by default."})
public static int cloud_restore_create_tablet_batch_size = 256;
/**
* Control the default max num of the instance for a user.
*/
@ConfField(mutable = true)
public static int default_max_query_instances = -1;
/*
* One master daemon thread will update global partition info, include in memory and visible version
* info every partition_info_update_interval_secs
*/
@ConfField(mutable = false, masterOnly = true)
public static int partition_info_update_interval_secs = 60;
@Deprecated
@ConfField(masterOnly = true)
public static boolean enable_concurrent_update = false;
/**
* This configuration can only be configured during cluster initialization and cannot be modified during cluster
* restart and upgrade after initialization is complete.
*
* 0: table names are stored as specified and comparisons are case sensitive.
* 1: table names are stored in lowercase and comparisons are not case sensitive.
* 2: table names are stored as given but compared in lowercase.
*/
@ConfField(masterOnly = true)
public static int lower_case_table_names = 0;
/**
* Used to limit the length of table name.
*/
@ConfField(mutable = true, masterOnly = true)
public static int table_name_length_limit = 64;
@ConfField(mutable = true, description = {
"���������������������������������������������������������������������������������������",
"Used to limit the length of column comment; "
+ "If the existing column comment is too long, it will be truncated when displayed."})
public static int column_comment_length_limit = -1;
@ConfField(mutable = true, description = {
"���������������������������������������������������LZ4, LZ4F, LZ4HC, ZLIB, ZSTD, SNAPPY, NONE���",
"Default compression type for internal tables. Supported values: LZ4, LZ4F, LZ4HC, ZLIB, ZSTD,"
+ " SNAPPY, NONE."})
public static String default_compression_type = "ZSTD";
/*
* The job scheduling interval of the schema change handler.
* The user should not set this parameter.
* This parameter is currently only used in the regression test environment to appropriately
* reduce the running speed of the schema change job to test the correctness of the system
* in the case of multiple tasks in parallel.
*/
@ConfField(mutable = false, masterOnly = true)
public static int default_schema_change_scheduler_interval_millisecond = 500;
/*
* If set to true, the thrift structure of query plan will be sent to BE in compact mode.
* This will significantly reduce the size of rpc data, which can reduce the chance of rpc timeout.
* But this may slightly decrease the concurrency of queries, because compress and decompress cost more CPU.
*/
@ConfField(mutable = true, masterOnly = false)
public static boolean use_compact_thrift_rpc = true;
/*
* If set to true, the tablet scheduler will not work, so that all tablet repair/balance task will not work.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean disable_tablet_scheduler = false;
/*
* When doing clone or repair tablet task, there may be replica is REDUNDANT state, which
* should be dropped later. But there are be loading task on these replicas, so the default strategy
* is to wait until the loading task finished before dropping them.
* But the default strategy may takes very long time to handle these redundant replicas.
* So we can set this config to true to not wait any loading task.
* Set this config to true may cause loading task failed, but will
* speed up the process of tablet balance and repair.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_force_drop_redundant_replica = false;
/*
* auto set the slowest compaction replica's status to bad
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean repair_slow_replica = false;
/*
* The relocation of a colocation group may involve a large number of tablets moving within the cluster.
* Therefore, we should use a more conservative strategy to avoid relocation
* of colocation groups as much as possible.
* Reloaction usually occurs after a BE node goes offline or goes down.
* This parameter is used to delay the determination of BE node unavailability.
* The default is 30 minutes, i.e., if a BE node recovers within 30 minutes, relocation of the colocation group
* will not be triggered.
*/
@ConfField(mutable = true, masterOnly = true)
public static long colocate_group_relocate_delay_second = 1800; // 30 min
/*
* If set to true, when creating table, Doris will allow to locate replicas of a tablet
* on same host.
* This is only for local test, so that we can deploy multi BE on same host and create table
* with multi replicas.
* DO NOT use it for production env.
*/
@ConfField
public static boolean allow_replica_on_same_host = false;
/**
* The version count threshold used to judge whether replica compaction is too slow
*/
@ConfField(mutable = true)
public static int min_version_count_indicate_replica_compaction_too_slow = 200;
/**
* The valid ratio threshold of the difference between the version count of the slowest replica and the fastest
* replica. If repair_slow_replica is set to true, it is used to determine whether to repair the slowest replica
*/
@ConfField(mutable = true, masterOnly = true)
public static double valid_version_count_delta_ratio_between_replicas = 0.5;
/**
* The data size threshold used to judge whether replica is too large
*/
@ConfField(mutable = true, masterOnly = true)
public static long min_bytes_indicate_replica_too_large = 2 * 1024 * 1024 * 1024L;
// statistics
/*
* the max unfinished statistics job number
*/
@Deprecated
@ConfField(mutable = true, masterOnly = true)
public static int cbo_max_statistics_job_num = 20;
/*
* the max timeout of a statistics task
*/
@Deprecated
@ConfField(mutable = true, masterOnly = true)
public static int max_cbo_statistics_task_timeout_sec = 300;
/*
* the concurrency of statistics task
*/
@Deprecated
@ConfField(mutable = false, masterOnly = true)
public static int cbo_concurrency_statistics_task_num = 10;
/*
* default sample percentage
* The value from 0 ~ 100. The 100 means no sampling and fetch all data.
*/
@Deprecated
@ConfField(mutable = true, masterOnly = true)
public static int cbo_default_sample_percentage = 10;
/*
* the system automatically checks the time interval for statistics
*/
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������������������������������������������������������������������������",
"This parameter controls the time interval for automatic collection jobs to check the health of table"
+ "statistics and trigger automatic collection"
})
public static int auto_check_statistics_in_minutes = 1;
/**
* If set to TRUE, the compaction slower replica will be skipped when select get queryable replicas
* Default is true.
*/
@ConfField(mutable = true)
public static boolean skip_compaction_slower_replica = true;
/**
* Enable quantile_state type column
* Default is false.
* */
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_quantile_state_type = true;
/*---------------------- JOB CONFIG START------------------------*/
/**
* The number of threads used to dispatch timer job.
* If we have a lot of timer jobs, we need more threads to dispatch them.
* All timer job will be dispatched to a thread pool, and they will be dispatched to the thread queue of the
* corresponding type of job
* The value should be greater than 0, if it is 0 or <=0, set it to 5
*/
@ConfField(masterOnly = true, description = {"������������������������������������",
"The number of threads used to dispatch timer job."})
public static int job_dispatch_timer_job_thread_num = 2;
/**
* The number of timer jobs that can be queued.
* if consumer is slow, the queue will be full, and the producer will be blocked.
* if you have a lot of timer jobs, you need to increase this value or increase the number of
* {@code @dispatch_timer_job_thread_num}
* The value should be greater than 0, if it is 0 or <=0, set it to 1024
*/
@ConfField(masterOnly = true, description = {"������������������������������������������������������", "The number of timer jobs that can be queued."})
public static int job_dispatch_timer_job_queue_size = 1024;
@ConfField(masterOnly = true, description = {"������ Job ��� task ��������������������������������������������������������������� task ������������������ < 1, ���������������������",
"Maximum number of persistence allowed per task in a job,exceeding which old tasks will be discarded,"
+ "If the value is less than 1, it will not be persisted." })
public static int max_persistence_task_count = 100;
@ConfField(masterOnly = true, description = { "MTMV task ������������������������������������������������������ 1024��������������� 2 ���������������������������������������������"
+ " 2 ���������������",
"The size of the MTMV task's waiting queue If the size is negative, 1024 will be used. If "
+ "the size is not a power of two, the nearest power of the size will be"
+ " automatically selected."})
public static int mtmv_task_queue_size = 1024;
@ConfField(masterOnly = true, description = {"Insert task ������������������������������������������������������ 1024��������������� 2 ������������������������������������������"
+ " ��� 2 ���������������", "The size of the Insert task's waiting queue If the size is negative, 1024 will be used."
+ " If the size is not a power of two, the nearest power of the size will "
+ "be automatically selected."})
public static int insert_task_queue_size = 1024;
@ConfField(masterOnly = true, description = { "������������ task ������������������������������������������������������ 1024��������������� 2 ������������������������������������������"
+ " ��� 2 ���������������",
"The size of the Dictionary loading task's waiting queue If the size is negative, 1024 will be used."
+ " If the size is not a power of two, the nearest power of the size will "
+ "be automatically selected." })
public static int dictionary_task_queue_size = 1024;
@ConfField(masterOnly = true, description = {"finished ��������� job ������������������������������������������������������������������������",
"The longest time to save the job in finished status, it will be deleted after this time. Unit: hour"})
public static int finished_job_cleanup_threshold_time_hour = 24;
@ConfField(masterOnly = true, description = {"������������ Insert ������������������������������������ 0������������������ 10",
"The number of threads used to consume Insert tasks, "
+ "the value should be greater than 0, if it is <=0, default is 10."})
public static int job_insert_task_consumer_thread_num = 10;
@ConfField(masterOnly = true, description = {"������������ MTMV ������������������������������������ 0������������������ 10",
"The number of threads used to consume MTMV tasks, "
+ "the value should be greater than 0, if it is <=0, default is 10."})
public static int job_mtmv_task_consumer_thread_num = 10;
@ConfField(masterOnly = true, description = { "��������������������������������������������������������������������� 0������������������ 3",
"The number of threads used to perform the dictionary import and delete tasks, which should be"
+ " greater than 0, otherwise it defaults to 3." })
public static int job_dictionary_task_consumer_thread_num = 3;
@ConfField(masterOnly = true, description = {"������������ Streaming ������������������������������������ 0������������������ 100",
"The number of threads used to execute Streaming Tasks, "
+ "the value should be greater than 0, if it is <=0, default is 100."})
public static int job_streaming_task_exec_thread_num = 100;
@ConfField(masterOnly = true, description = {"��������� Streaming ������������������������������ 0������������������ 1024",
"The maximum number of Streaming jobs, "
+ "the value should be greater than 0, if it is <=0, default is 1024."})
public static int max_streaming_job_num = 1024;
@ConfField(masterOnly = true, description = {"������ Streaming Job ��������������������������� task ���������������������������������������",
"The maximum number of tasks a Streaming Job can keep in memory. If the number exceeds the limit, "
+ "old records will be discarded."})
public static int max_streaming_task_show_count = 100;
@ConfField(masterOnly = true, mutable = true, description = {
"Max auto resume retry count for streaming jobs. "
+ "After exceeding, the failure reason is rewritten to CANNOT_RESUME_ERR "
+ "and the job requires manual intervention."})
public static int streaming_job_max_auto_resume_count = 10;
/* job test config */
/**
* If set to true, we will allow the interval unit to be set to second, when creating a recurring job.
*/
@ConfField
public static boolean enable_job_schedule_second_for_test = false;
/*---------------------- JOB CONFIG END------------------------*/
/**
* The number of async tasks that can be queued. @See TaskDisruptor
* if consumer is slow, the queue will be full, and the producer will be blocked.
*/
@ConfField
public static int async_task_queen_size = 1024;
/**
* The number of threads used to consume async tasks. @See TaskDisruptor
* if we have a lot of async tasks, we need more threads to consume them. Sure, it's depends on the cpu cores.
*/
@ConfField
public static int async_task_consumer_thread_num = 64;
/**
* When job is finished, it will be saved in job manager for a while.
* This configuration is used to control the max saved time.
* Default is 3 days.
*/
@Deprecated
@ConfField
public static int finish_job_max_saved_second = 60 * 60 * 24 * 3;
// enable_workload_group should be immutable and temporarily set to mutable during the development test phase
@ConfField(mutable = true, varType = VariableAnnotation.EXPERIMENTAL)
public static boolean enable_workload_group = true;
@ConfField(mutable = true)
public static boolean enable_query_queue = true;
@ConfField(mutable = true)
public static long query_queue_update_interval_ms = 5000;
@ConfField(mutable = true, description = {
"��� BE ������������������������������������������������������������������������ -1��������������������������������������� 0~1 ���������",
"When be memory usage bigger than this value, query could queue, "
+ "default value is -1, means this value not work. Decimal value range from 0 to 1"})
public static double query_queue_by_be_used_memory = -1;
@ConfField(mutable = true, description = {"������������������������ FE ������������ BE ���������������������������",
"In the scenario of memory backpressure, "
+ "the time interval for obtaining BE memory usage at regular intervals"})
public static long get_be_resource_usage_interval_ms = 10000;
@ConfField(mutable = false, masterOnly = true)
public static int backend_rpc_timeout_ms = 60000; // 1 min
/**
* If set to TRUE, FE will:
* 1. divide BE into high load and low load(no mid load) to force triggering tablet scheduling;
* 2. ignore whether the cluster can be more balanced during tablet scheduling;
*
* It's used to test the reliability in single replica case when tablet scheduling are frequent.
* Default is false.
*/
@ConfField(mutable = true, masterOnly = true)
public static boolean be_rebalancer_fuzzy_test = false;
/**
* If set to TRUE, FE will convert date/datetime to datev2/datetimev2(0) automatically.
*/
@ConfField(mutable = true)
public static boolean enable_date_conversion = true;
@ConfField(mutable = false, masterOnly = true)
public static boolean enable_multi_tags = true;
/**
* If set to TRUE, FE will convert DecimalV2 to DecimalV3 automatically.
*/
@ConfField(mutable = true)
public static boolean enable_decimal_conversion = true;
/**
* Support complex data type ARRAY.
*/
@Deprecated
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_array_type = false;
/**
* The timeout of executing async remote fragment.
* In normal case, the async remote fragment will be executed in a short time. If system are under high load
* condition���try to set this timeout longer.
*/
@ConfField(mutable = true)
public static long remote_fragment_exec_timeout_ms = 30000; // 30 sec
/**
* Max data version of backends serialize block.
*/
@ConfField(mutable = false)
public static int max_be_exec_version = 10;
/**
* Min data version of backends serialize block.
*/
@ConfField(mutable = false)
public static int min_be_exec_version = 8;
/**
* Data version of backends serialize block.
*/
@ConfField(mutable = true, masterOnly = true)
public static int be_exec_version = max_be_exec_version;
/**
* If set to true, query on external table will prefer to assign to compute node.
* And the max number of compute node is controlled by min_backend_num_for_external_table.
* If set to false, query on external table will assign to any node.
*/
@ConfField(mutable = true, description = {"��������������� true������������������������������������������������������",
"������������������������������������ min_backend_num_for_external_table ���������",
"��������������� false������������������������������������������������"
+ "������������������������������������������������������������",
"If set to true, query on external table will prefer to assign to compute node. "
+ "And the max number of compute node is controlled by min_backend_num_for_external_table. "
+ "If set to false, query on external table will assign to any node. "
+ "If there is no compute node in cluster, this config takes no effect."})
public static boolean prefer_compute_node_for_external_table = false;
@ConfField(mutable = true, description = {"��������� prefer_compute_node_for_external_table ��� true ������������"
+ "������������������������������������������������������������������������������������������������������������������������������������������"
+ "���������������������������������������������������������������������������������������-1 ������������������������������������������",
"Only take effect when prefer_compute_node_for_external_table is true. "
+ "If the compute node number is less than this value, "
+ "query on external table will try to get some mix de to assign, "
+ "to let the total number of node reach this value. "
+ "If the compute node number is larger than this value, "
+ "query on external table will assign to compute de only. "
+ "-1 means only use current compute node."})
public static int min_backend_num_for_external_table = -1;
/**
* Max query profile num.
*/
@ConfField(mutable = true, masterOnly = false)
public static int max_query_profile_num = 500;
/**
* Set to true to disable backend black list, so that even if we failed to send task to a backend,
* that backend won't be added to black list.
* This should only be set when running tests, such as regression test.
* Highly recommended NOT disable it in product environment.
*/
@ConfField(mutable = true, masterOnly = false)
public static boolean disable_backend_black_list = false;
@ConfField(mutable = true, masterOnly = false, description = {
"If a backend is tried to be added to black list do_add_backend_black_list_threshold_count times "
+ "in do_add_backend_black_list_threshold_seconds, it will be added to black list."})
public static long do_add_backend_black_list_threshold_count = 10;
@ConfField(mutable = true, masterOnly = false, description = {
"If a backend is tried to be added to black list do_add_backend_black_list_threshold_count times "
+ "in do_add_backend_black_list_threshold_seconds, it will be added to black list."})
public static long do_add_backend_black_list_threshold_seconds = 30;
@ConfField(mutable = true, masterOnly = false, description = {
"Backend will stay in black list for this time after it is added to black list."})
public static long stay_in_backend_black_list_threshold_seconds = 60;
/**
* Maximum backend heartbeat failure tolerance count.
* Default is 1, which means if 1 heart failed, the backend will be marked as dead.
* A larger value can improve the tolerance of the cluster to occasional heartbeat failures.
* For example, when running regression tests, this value can be increased.
*/
@ConfField(mutable = true, masterOnly = true)
public static long max_backend_heartbeat_failure_tolerance_count = 1;
/**
* Even if a backend is healthy, still write a heartbeat editlog to update backend's lastUpdateMs of bdb image.
*/
@ConfField(mutable = true, masterOnly = true)
public static int editlog_healthy_heartbeat_seconds = 300;
/**
* Abort transaction time after lost heartbeat.
* The default value is 300s, which means transactions of be will be aborted after lost heartbeat 300s.
*/
@ConfField(mutable = true, masterOnly = true)
public static int abort_txn_after_lost_heartbeat_time_second = 300;
/**
* Heartbeat interval in seconds.
* Default is 10, which means every 10 seconds, the master will send a heartbeat to all backends.
*/
@ConfField(mutable = false, masterOnly = false)
public static int heartbeat_interval_second = 10;
/**
* After a backend is marked as unavailable, it will be added to blacklist.
* Default is 120.
*/
@ConfField(mutable = true, masterOnly = false)
public static int blacklist_duration_second = 120;
/**
* The default connection timeout for hive metastore.
* hive.metastore.client.socket.timeout
*/
@ConfField(mutable = false, masterOnly = false)
public static long hive_metastore_client_timeout_second = 10;
/**
* Used to determined how many statistics collection SQL could run simultaneously.
*/
@ConfField
public static int statistics_simultaneously_running_task_num = 3;
/**
* if table has too many replicas, Fe occur oom when schema change.
* 10W replicas is a reasonable value for testing.
*/
@ConfField(mutable = true, masterOnly = true)
public static long max_replica_count_when_schema_change = 100000;
/**
* Max cache num of hive partition.
* Decrease this value if FE's memory is small
*/
@ConfField(description = {"Hive Metastore ���������������������������������������",
"Max cache number of partition at table level in Hive Metastore."})
public static long max_hive_partition_cache_num = 10000;
@ConfField(description = {"Hudi/Iceberg/Paimon ���������������������������������",
"Max cache number of hudi/iceberg table."})
public static long max_external_table_cache_num = 1000;
@ConfField(description = {"External Catalog ������Database ��� Table ���������������������������������",
"Max cache number of database and table instance in external catalog."})
public static long max_meta_object_cache_num = 1000;
@ConfField(description = {"Hive ������������������������������",
"Max cache number of hive partition table"})
public static long max_hive_partition_table_cache_num = 1000;
@ConfField(mutable = false, masterOnly = false, description = {"������ Hive ���������������������������������������-1 ���������������������",
"Max number of hive partition values to return while list partitions, -1 means no limitation."})
public static short max_hive_list_partition_num = -1;
@ConfField(mutable = false, masterOnly = false, description = {"���������������������������������������",
"Max cache number of remote file system."})
public static long max_remote_file_system_cache_num = 100;
@ConfField(mutable = false, masterOnly = false, description = {"������������������������������",
"Max cache number of external table row count"})
public static long max_external_table_row_count_cache_num = 100000;
@ConfField(description = {"������������������������������������������������������������������",
"Max cache file number of external table split file meta cache at query level."})
public static long max_external_table_split_file_meta_cache_num = 100000;
/**
* Max cache loader thread-pool size.
* Max thread pool size for loading external meta cache
*/
@ConfField(mutable = false, masterOnly = false)
public static int max_external_cache_loader_thread_pool_size = 64;
/**
* Max cache num of external catalog's file
* Decrease this value if FE's memory is small
*/
@ConfField(mutable = false, masterOnly = false)
public static long max_external_file_cache_num = 10000;
/**
* Max cache num of external table's schema
* Decrease this value if FE's memory is small
*/
@ConfField(mutable = false, masterOnly = false)
public static long max_external_schema_cache_num = 10000;
@ConfField(description = {
"������������������������������������������������������������������",
"The expiration time of a cache object after last access of it. For external meta cache."
})
public static long external_cache_expire_time_seconds_after_access = 86400L; // 24 hours
@ConfField(description = {
"���������������������������������������������������",
"The auto refresh time of external meta cache."
})
public static long external_cache_refresh_time_minutes = 10; // 10 mins
/**
* Github workflow test type, for setting some session variables
* only for certain test type. E.g. only settting batch_size to small
* value for p0.
*/
@ConfField(mutable = true, masterOnly = false, options = {"p0", "daily", "rqg", "external"})
public static String fuzzy_test_type = "";
/**
* Set session variables randomly to check more issues in github workflow
*/
@ConfField(mutable = true, masterOnly = false)
public static boolean use_fuzzy_session_variable = false;
/**
* Set config variables randomly to check more issues in github workflow
*/
@ConfField(mutable = true, masterOnly = false)
public static boolean use_fuzzy_conf = false;
/**
* Max num of same name meta informatntion in catalog recycle bin.
* Default is 3.
* 0 means do not keep any meta obj with same name.
* < 0 means no limit
*/
@ConfField(mutable = true, masterOnly = true)
public static int max_same_name_catalog_trash_num = 3;
/**
* NOTE: The storage policy is still under developement.
*/
@ConfField(mutable = false, masterOnly = true)
public static boolean enable_storage_policy = true;
/**
* This config is mainly used in the k8s cluster environment.
* When enable_fqdn_mode is true, the name of the pod where be is located will remain unchanged
* after reconstruction, while the ip can be changed.
*/
@ConfField(mutable = false, varType = VariableAnnotation.EXPERIMENTAL)
public static boolean enable_fqdn_mode = false;
/**
* If set to true, doris will try to parse the ddl of a hive view and try to execute the query
* otherwise it will throw an AnalysisException.
*/
@ConfField(mutable = true)
public static boolean enable_query_hive_views = true;
@ConfField(mutable = true)
public static boolean enable_query_iceberg_views = true;
/**
* If set to true, doris will automatically synchronize hms metadata to the cache in fe.
*/
@ConfField(masterOnly = true)
public static boolean enable_hms_events_incremental_sync = false;
/**
* the plan cache num which can be reused for the next query
*/
@ConfField(
mutable = true,
callbackClassString = "org.apache.doris.common.cache.NereidsSqlCacheManager$UpdateConfig",
description = {
"��������������������� 100��������������������� NereidsSqlCacheManager ��������� sql cache ���������",
"Now default set to 100, this config is used to control the number of "
+ "sql cache managed by NereidsSqlCacheManager"
}
)
public static int sql_cache_manage_num = 100;
@ConfField(
mutable = true,
callbackClassString = "org.apache.doris.common.cache.NereidsSortedPartitionsCacheManager$UpdateConfig",
description = {
"��������������������� 100��������������������� NereidsSortedPartitionsCacheManager ������������������������������������������"
+ "������������������������",
"The current default setting is 100, which is used to control the number of ordered "
+ "partition metadata caches in NereidsSortedPartitionsCacheManager, "
+ "and to accelerate partition pruning"
}
)
public static int cache_partition_meta_table_manage_num = 100;
/**
* HBO plan stats. cache number which can be reused for the next query.
*/
@ConfField(
mutable = true,
callbackClassString = "org.apache.doris.nereids.stats.MemoryHboPlanStatisticsProvider$UpdateConfig",
description = {
"��������������������� 100000��������������������� MemoryHboPlanStatisticsProvider ��������� plan stats. cache ���������",
"Now default set to 100000, this config is used to control the number of "
+ "hbo plan stats. cache"
}
)
public static int hbo_plan_stats_cache_num = 100000;
/**
* HBO plan recent runs entry number.
*/
@ConfField(
mutable = true,
description = {
"��������������������� 10��������������������� MemoryHboPlanStatisticsProvider ��������� plan stats. cache recent runs ���������",
"Now default set to 10, this config is used to control the number of "
+ "hbo plan stats. cache recent runs' entry number."
}
)
public static int hbo_plan_stats_cache_recent_runs_entry_num = 10;
/**
* Plan info cache number which is used for HboPlanInfoProvider.
*/
@ConfField(
mutable = true,
callbackClassString = "org.apache.doris.nereids.stats.HboPlanInfoProvider$UpdateConfig",
description = {
"��������������������� 1000��������������������� HboPlanInfoProvider ��������� plan info cache ���������",
"Now default set to 1000, this config is used to control the number of "
+ "hbo plan info cache"
}
)
public static int hbo_plan_info_cache_num = 1000;
/**
* Maximum number of events to poll in each RPC.
*/
@ConfField(mutable = true, masterOnly = true)
public static int hms_events_batch_size_per_rpc = 500;
/**
* HMS polling interval in milliseconds.
*/
@ConfField(masterOnly = true)
public static int hms_events_polling_interval_ms = 10000;
/**
* Maximum number of error tablets showed in broker load
*/
@ConfField(masterOnly = true, mutable = true)
public static int max_error_tablet_of_broker_load = 3;
/**
* If set to ture, doris will establish an encrypted channel based on the SSL protocol with mysql.
*/
@ConfField(mutable = false, masterOnly = false, varType = VariableAnnotation.EXPERIMENTAL)
public static boolean enable_ssl = false;
/**
* If set to ture, ssl connection needs to authenticate client's certificate.
*/
@ConfField(mutable = false, masterOnly = false)
public static boolean ssl_force_client_auth = false;
/**
* ssl connection needs to authenticate client's certificate store type.
*/
@ConfField(mutable = false, masterOnly = false)
public static String ssl_trust_store_type = "PKCS12";
/**
* Default CA certificate file location for mysql ssl connection.
*/
@ConfField(mutable = false, masterOnly = false)
public static String mysql_ssl_default_ca_certificate = EnvUtils.getDorisHome()
+ "/mysql_ssl_default_certificate/ca_certificate.p12";
/**
* Default server certificate file location for mysql ssl connection.
*/
@ConfField(mutable = false, masterOnly = false)
public static String mysql_ssl_default_server_certificate = EnvUtils.getDorisHome()
+ "/mysql_ssl_default_certificate/server_certificate.p12";
/**
* Password for default CA certificate file.
*/
@ConfField(mutable = false, masterOnly = false)
public static String mysql_ssl_default_ca_certificate_password = "doris";
/**
* Password for default CA certificate file.
*/
@ConfField(mutable = false, masterOnly = false)
public static String mysql_ssl_default_server_certificate_password = "doris";
/**
* Used to set session variables randomly to check more issues in github workflow
*/
@ConfField(mutable = true)
public static int pull_request_id = 0;
/**
* Used to set default db transaction quota num.
*/
@ConfField(mutable = true, masterOnly = true)
public static long default_db_max_running_txn_num = -1;
/**
* Used by TokenManager to control the number of tokens keep in memory.
* One token will keep alive for {token_queue_size * token_generate_period_hour} hours.
* By defaults, one token will keep for 3 days.
*/
@ConfField(mutable = false, masterOnly = true)
public static int token_queue_size = 6;
/**
* TokenManager will generate token every token_generate_period_hour.
*/
@ConfField(mutable = false, masterOnly = true)
public static int token_generate_period_hour = 12;
/**
* The secure local path of the FE node the place the data which will be loaded in doris.
* The default value is empty for this config which means this feature is not allowed.
* User who want to load fe server local file should config the value to a right local path.
*/
@ConfField(mutable = false, masterOnly = false)
public static String mysql_load_server_secure_path = "";
@ConfField(mutable = false, masterOnly = false)
public static int mysql_load_in_memory_record = 20;
@ConfField(mutable = false, masterOnly = false)
public static int mysql_load_thread_pool = 4;
/**
* BDBJE file logging level
* OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL
*/
@ConfField
public static String bdbje_file_logging_level = "INFO";
/**
* When holding lock time exceeds the threshold, need to report it.
*/
@ConfField
public static long lock_reporting_threshold_ms = 500L;
/**
* If true, auth check will be disabled. The default value is false.
* This is to solve the case that user forgot the password.
*/
@ConfField(mutable = false)
public static boolean skip_localhost_auth_check = true;
@ConfField(mutable = true)
public static boolean enable_round_robin_create_tablet = true;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������ BE ������������������������������������������������ BE ���������",
"When creating tablet of a partition, always start from the first BE. "
+ "Note: This method may cause BE imbalance"})
public static boolean create_tablet_round_robin_from_start = false;
/**
* To prevent different types (V1, V2, V3) of behavioral inconsistencies,
* we may delete the DecimalV2 and DateV1 types in the future.
* At this stage, we use 'disable_decimalv2' and 'disable_datev1'
* to determine whether these two types take effect.
*/
@ConfField(mutable = true)
public static boolean disable_decimalv2 = true;
@ConfField(mutable = true)
public static boolean disable_datev1 = true;
/*
* This variable indicates the number of digits by which to increase the scale
* of the result of division operations performed with the `/` operator. The
* default value is 4, and it is currently only used for the DECIMALV3 type.
*/
@ConfField(mutable = true)
public static int div_precision_increment = 4;
/**
* This config used for export/outfile.
* Whether delete all files in the directory specified by export/outfile.
* It is a very dangerous operation, should only be used in test env.
*/
@ConfField(mutable = false)
public static boolean enable_delete_existing_files = false;
/*
* The actual memory size taken by stats cache highly depends on characteristics of data, since on the different
* dataset and scenarios the max/min literal's average size and buckets count of histogram would be highly
* different. Besides, JVM version etc. also has influence on it, though not much as data itself.
* Here I would give the mem size taken by stats cache with 10_0000 items.Each item's avg length of max/min literal
* is 32, and the avg column name length is 16, and each column has a histogram with 128 buckets
* In this case, stats cache takes total 911.954833984MiB mem.
* If without histogram, stats cache takes total 61.2777404785MiB mem.
* It's strongly discourage analyzing a column with a very large STRING value in the column, since it would cause
* FE OOM.
*/
@ConfField
public static long stats_cache_size = 50_0000;
/**
* This config used for ranger cache data mask/row policy
*/
@ConfField
public static long ranger_cache_size = 10000;
/**
* This configuration is used to enable the statistics of query information, which will record
* the access status of databases, tables, and columns, and can be used to guide the
* optimization of table structures
*
*/
@ConfField(mutable = true)
public static boolean enable_query_hit_stats = false;
@ConfField(mutable = true, description = {
"��������� true��������������������������������������������������������������� tablet ������������������������������" + "������������������������������������",
"When set to true, if a query is unable to select a healthy replica, "
+ "the detailed information of all the replicas of the tablet,"
+ " including the specific reason why they are unqueryable, will be printed out."})
public static boolean show_details_for_unaccessible_tablet = true;
@ConfField(mutable = false, masterOnly = false, varType = VariableAnnotation.EXPERIMENTAL, description = {
"������������ binlog ������",
"Whether to enable binlog feature"})
public static boolean enable_feature_binlog = false;
@ConfField(mutable = false, description = {
"��������������� Database/Table ������ binlog ������",
"Whether to enable binlog feature for Database/Table by default"})
public static boolean force_enable_feature_binlog = false;
@ConfField(mutable = false, masterOnly = false, varType = VariableAnnotation.EXPERIMENTAL, description = {
"������ binlog ���������������������",
"Set the maximum byte length of binlog message"})
public static int max_binlog_messsage_size = 1024 * 1024 * 1024;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������ WITH RESOURCE ������������ Catalog���",
"Whether to disable creating catalog with WITH RESOURCE statement."})
public static boolean disallow_create_catalog_with_resource = true;
@ConfField(mutable = true, masterOnly = false, description = {
"Hive ���������������������������",
"Sample size for hive row count estimation."})
public static int hive_stats_partition_sample_size = 30;
@ConfField(mutable = true, masterOnly = true, description = {
"������ Hive ���������",
"Enable external hive bucket table"})
public static boolean enable_create_hive_bucket_table = false;
@ConfField(mutable = true, masterOnly = true, description = {
"Hive ������������������������������������������",
"Default hive file format for creating table."})
public static String hive_default_file_format = "orc";
@ConfField
public static int statistics_sql_parallel_exec_instance_num = 1;
@ConfField
public static long statistics_sql_mem_limit_in_bytes = 2L * 1024 * 1024 * 1024;
@ConfField(mutable = true, masterOnly = true, description = {
"���������������������������������������������������������������������������������������������������������������������������������������������������������"
+ "���������������������������������������������������������������������������������������������������������������������������������������������������������������������������",
"Used to force the number of replicas of the internal table. If the config is greater than zero, "
+ "the number of replicas specified by the user when creating the table will be ignored, "
+ "and the value set by this parameter will be used. At the same time, the replica tags "
+ "and other parameters specified in the create table statement will be ignored. "
+ "This config does not effect the operations including creating partitions "
+ "and modifying table properties. "
+ "This config is recommended to be used only in the test environment"})
public static int force_olap_table_replication_num = 0;
@ConfField(mutable = true, description = {
"���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"
+ "������������������������������������������������������������������������������������������������������������������",
"Used to force set the replica allocation of the internal table. If the config is not empty, "
+ "the replication_num and replication_allocation specified by the user when creating the table "
+ "or partitions will be ignored, and the value set by this parameter will be used."
+ "This config effect the operations including create tables, create partitions and create "
+ "dynamic partitions. This config is recommended to be used only in the test environment"})
public static String force_olap_table_replication_allocation = "";
@ConfField
public static int auto_analyze_simultaneously_running_task_num = 1;
@Deprecated
@ConfField
public static final int period_analyze_simultaneously_running_task_num = 1;
@ConfField(mutable = false)
public static boolean allow_analyze_statistics_info_polluting_file_cache = true;
@ConfField
public static int cpu_resource_limit_per_analyze_task = 1;
@ConfField(mutable = true)
public static boolean force_sample_analyze = false; // avoid full analyze for performance reason
@ConfField(mutable = true, description = {
"Export ���������������������������������",
"The maximum number of partitions allowed by Export job"})
public static int maximum_number_of_export_partitions = 2000;
@Deprecated
@ConfField(mutable = true, description = {
"Export ������������������������������",
"The maximum parallelism allowed by Export job"})
public static int maximum_parallelism_of_export_job = 50;
@ConfField(mutable = true, description = {
"��������� mysql ��� bigint ��������������� Doris ��� largeint ������",
"Whether to use mysql's bigint type to return Doris's largeint type"})
public static boolean use_mysql_bigint_for_largeint = false;
@ConfField
public static boolean forbid_running_alter_job = false;
@ConfField(description = {
"��������������������������������������������������� olap ��������������� light schema change",
"temporary config filed, will make all olap tables enable light schema change"
})
public static boolean enable_convert_light_weight_schema_change = false;
@ConfField(mutable = true, masterOnly = false, description = {
"������ information_schema.metadata_name_ids ������������������������������������������������������",
"When querying the information_schema.metadata_name_ids table,"
+ " the time used to obtain all tables in one database"
})
public static long query_metadata_name_ids_timeout = 3;
@ConfField(mutable = true, masterOnly = true, description = {
"������������ LocalDeployManager ������������",
"Whether to disable LocalDeployManager drop node"})
public static boolean disable_local_deploy_manager_drop_node = true;
@ConfField(mutable = true, description = {
"������ file cache ������������������������������������������������������������������"
+ "������������������������������������������������������������������������������",
"When file cache is enabled, the number of virtual nodes of each node in the consistent hash algorithm. "
+ "The larger the value, the more uniform the distribution of the hash algorithm, "
+ "but it will increase the memory overhead."})
public static int split_assigner_virtual_node_number = 256;
@ConfField(mutable = true, description = {
"������������������������������������������������������������������������������",
"Local node soft affinity optimization. Prefer local replication node."})
public static boolean split_assigner_optimized_local_scheduling = true;
@ConfField(mutable = true, description = {
"������������������������������������������������������������������������",
"The random algorithm has the smallest number of candidates and will select the most idle node."})
public static int split_assigner_min_random_candidate_num = 2;
@ConfField(mutable = true, description = {
"���������������������������������������������������������������������������������",
"The consistent hash algorithm has the smallest number of candidates and will select the most idle node."})
public static int split_assigner_min_consistent_hash_candidate_num = 2;
@ConfField(mutable = true, description = {
"������������������������ split ��������������������������������������������������������� split���",
"The maximum difference in the number of splits between nodes. "
+ "If this number is exceeded, the splits will be redistributed."})
public static int split_assigner_max_split_num_variance = 1;
@ConfField(description = {
"���������������������������������������������������������������������",
"Determine the persist number of automatic triggered analyze job execution status"
})
public static long analyze_record_limit = 20000;
@ConfField(mutable = true, masterOnly = true, description = {
"Auto Buckets ������������ buckets ������",
"min buckets of auto bucket"
})
public static int autobucket_min_buckets = 1;
@ConfField(mutable = true, masterOnly = true, description = {
"Auto Buckets ������������ buckets ������",
"max buckets of auto bucket"
})
public static int autobucket_max_buckets = 128;
@ConfField(description = {"������������������������������������������������������������������ 768���"
+ "1. ���������������������������������CREATE TABLE / ALTER TABLE ADD PARTITION���������������������������������������������������������������������������������"
+ "2. ������������������������������������������������������������������������ autobucket_max_buckets���"
+ "��������� 0 ���������������������������������������������������",
"Maximum number of buckets when creating a table or adding a partition. Defaults to 768."
+ "1. For user-specified buckets (CREATE TABLE / ALTER TABLE ADD PARTITION): "
+ "if bucket number exceeds this limit, the operation will be rejected with an error message. "
+ "2. For auto-bucket feature (Dynamic Partition): "
+ "bucket number will be capped at autobucket_max_buckets automatically. "
+ "Set to 0 or negative value to disable this limit for user-specified buckets."})
public static int max_bucket_num_per_partition = 768;
@ConfField(description = {"������ FE ��� Arrow Flight Server ���������������������",
"Maximal number of connections of Arrow Flight Server per FE."})
public static int arrow_flight_max_connections = 4096;
@ConfField(mutable = true, masterOnly = true, description = {
"Auto Buckets ��������� partition size ��������� bucket ������������������ partition size 5G ������������ bucket���"
+ "������������������ partition size 10G ������������ bucket������������������ 0��������������������������������������������������������� 5G������������������������ 10G",
"In Auto Buckets, the number of buckets is estimated based on the partition size. "
+ "For storage and computing integration, a partition size of 5G is estimated as one bucket."
+ " but for cloud, a partition size of 10G is estimated as one bucket. "
+ "If the configuration is less than 0, the code will have an adaptive non-cloud mode with a default of 5G,"
+ " and in cloud mode with a default of 10G."
})
public static int autobucket_partition_size_per_bucket_gb = -1;
@ConfField(mutable = true, masterOnly = true, description = {"Auto bucket ��������������������������� bucket num ������������������������"
+ "bucket num ��������������������������������� case ������",
"The new partition bucket number calculated in the auto bucket exceeds the percentage "
+ "of the previous partition's bucket number, which is considered an abnormal case alert."})
public static double autobucket_out_of_bounds_percent_threshold = 0.5;
@ConfField(description = {"(��������������� arrow_flight_max_connection ������) Arrow Flight Server ��������������� token ������������������"
+ "��������� LRU ���������arrow flight sql ���������������������������������������������������������"
+ "bearer token ��� cache ������������������ unregister Connection.",
"(Deprecated, replaced by arrow_flight_max_connection) The cache limit of all user tokens in "
+ "Arrow Flight Server. which will be eliminated by LRU rules after exceeding the limit, "
+ "arrow flight sql is a stateless protocol, the connection is usually not actively disconnected, "
+ "bearer token is evict from the cache will unregister ConnectContext."})
public static int arrow_flight_token_cache_size = 4096;
@ConfField(description = {"Arrow Flight Server ��������� token ��������������������������������������������������������������������������� 86400������ 1 ���",
"The alive time of the user token in Arrow Flight Server, expire after write, unit second,"
+ "the default value is 86400, which is 1 days"})
public static int arrow_flight_token_alive_time_second = 86400;
@ConfField(mutable = true, description = {
"Doris ������������ mysql ������������������������������������������ mysql ������������������������������������������������������������������"
+ "��������������������������� doris ��������� mysql database ������������������",
"To ensure compatibility with the MySQL ecosystem, Doris includes a built-in database called mysql. "
+ "If this database conflicts with a user's own database, please modify this field to replace "
+ "the name of the Doris built-in MySQL database with a different name."})
public static String mysqldb_replace_name = "mysql";
@ConfField(description = {
"������������������������������������������������������������������������������",
"Set the specific domain name that allows cross-domain access. "
+ "By default, any domain name is allowed cross-domain access"
})
public static String access_control_allowed_origin_domain = "*";
@ConfField(description = {
"������ java_udf, ��������� true��������������������� false��������������������������� java_udf������������������������������������������������������������������",
"Used to enable java_udf, default is true. if this configuration is false, creation and use of java_udf is "
+ "disabled. in some scenarios it may be necessary to disable this configuration to prevent "
+ "command injection attacks."
})
public static boolean enable_java_udf = true;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������������������������������ java_udf ������������������������������ false���",
"When enabled, data can be processed using the globally created java_udf function during import."
+ " The default setting is false."
})
public static boolean enable_udf_in_load = false;
@ConfField(description = {
"������������ Image ������������������������������������ true��������� PersistMetaModules.MODULE_NAMES ���������������������������������������������"
+ "��������� false��������� Image ���������������������������������Doris ���������������������"
+ "������������������������������������������������������������������������ Image ���������",
"Whether to ignore unknown modules in Image file. "
+ "If true, metadata modules not in PersistMetaModules.MODULE_NAMES "
+ "will be ignored and skipped. Default is false, if Image file contains unknown modules, "
+ "Doris will throw exception. "
+ "This parameter is mainly used in downgrade operation, "
+ "old version can be compatible with new version Image file."
})
public static boolean ignore_unknown_metadata_module = false;
@ConfField(mutable = true, description = {
"������������������ image ���������������������������������������${meta_dir}/image ������������������ image ������������������������������������������������"
+ "������������������������ 300",
"The timeout for FE Follower/Observer synchronizing an image file from the FE Master, can be adjusted by "
+ "the user on the size of image file in the ${meta_dir}/image and the network environment between "
+ "nodes. The default values is 300."
})
public static int sync_image_timeout_second = 300;
@ConfField(mutable = true, description = {
"FE ��������������� image ��������������������������������������������������������������������������������������� utf8 ���������������������������������������byte, ������ 500MB���"
+ "������������������ -1 ������������������������������������������������������������������������������ utf8 ������������������"
+ "��������� -1 ��������������� 16MB������������������������������������������������������������������ utf8 ������������������������������������������������������������������ -1",
"The size of a single batch (in bytes) when loading the binary content of a module of the "
+ "image file into a byte array and deserializing the byte array into a utf8 encoded string when FE starts."
+ " A value equal to -1 means reading the entire byte array at once and "
+ "then deserializing it into a utf8 encoded string; a value not equal to -1 means reading "
+ "a certain size (at least 16MB) of byte array in batches and then deserializing it into a "
+ "utf8 encoded string, and finally merging it into a completed string. The default value is -1"
})
public static int metadata_text_read_max_batch_bytes = -1;
@ConfField(mutable = true, masterOnly = true)
public static int publish_topic_info_interval_ms = 30000; // 30s
@ConfField(mutable = true)
public static int workload_sched_policy_interval_ms = 10000; // 10s
@ConfField(mutable = true, masterOnly = true)
public static int workload_group_check_interval_ms = 2000; // 2s
@ConfField(mutable = true, masterOnly = true)
public static int workload_max_policy_num = 25;
@ConfField(mutable = true, masterOnly = true)
public static int workload_max_condition_num_in_policy = 5;
@ConfField(mutable = true, masterOnly = true)
public static int workload_max_action_num_in_policy = 5; // mainly used to limit set session var action
@ConfField(mutable = true)
public static int workload_runtime_status_thread_interval_ms = 2000;
// NOTE: it should bigger than be config report_query_statistics_interval_ms
@ConfField(mutable = true)
public static int query_audit_log_timeout_ms = 5000;
@ConfField(description = {
"���������������������������������������������������������������������������������������������������������������",
"The operations of the users in this list will not be recorded in the audit log. "
+ "Multiple users are separated by commas."
})
public static String skip_audit_user_list = "";
@ConfField(mutable = true)
public static int be_report_query_statistics_timeout_ms = 60000;
@ConfField(mutable = true, masterOnly = true)
public static int workload_group_max_num = 15;
@ConfField(description = {"������ be wal_queue ��������������� (ms)",
"the timeout threshold of checking wal_queue on be(ms)"})
public static int check_wal_queue_timeout_threshold = 180000; // 3 min
@ConfField(mutable = true, masterOnly = true, description = {
"��������������������������������������������������������������������� OLAP ���������������������������`max_auto_partition_num`��������� 2000���",
"For auto-partitioned tables to prevent users from accidentally creating a large number of partitions, "
+ "the number of partitions allowed per OLAP table is `max_auto_partition_num`. Default 20000."})
public static int max_auto_partition_num = 20000;
@ConfField(mutable = true, masterOnly = true, description = {
"Partition rebalance ��������������� BE ��� tablet ���������������������������������������������������������",
"The maximum difference in the number of tablets of each BE in partition rebalance mode. "
+ "If it is less than this value, it will be diagnosed as balanced."
})
public static int diagnose_balance_max_tablet_num_diff = 50;
@ConfField(mutable = true, masterOnly = true, description = {
"Partition rebalance ��������������� BE ��� tablet ������������������������������������������������������������",
"The maximum ratio of the number of tablets in each BE in partition rebalance mode. "
+ "If it is less than this value, it will be diagnosed as balanced."
})
public static double diagnose_balance_max_tablet_num_ratio = 1.1;
@ConfField(masterOnly = true, description = {
"������ root ��������������� 2 ������ SHA-1 ������������������������''��������������� root ���������"
+ "������ root ��������� `set password` ������������ root ������������������������"
+ "��������������������������������������� `root@123`��������� Doris ������ SQL `select password('root@123')` "
+ "������������������ `*A00C34073A26B40AB4307650BFB9309D6BFA6999`",
"Set root user initial 2-staged SHA-1 encrypted password, default as '', means no root password. "
+ "Subsequent `set password` operations for root user will overwrite the initial root password. "
+ "Example: If you want to configure a plaintext password `root@123`."
+ "You can execute Doris SQL `select password('root@123')` to generate encrypted "
+ "password `*A00C34073A26B40AB4307650BFB9309D6BFA6999`"})
public static String initial_root_password = "";
@ConfField(description = {"nereids trace ������������������������",
"The path of the nereids trace file."})
public static String nereids_trace_log_dir = System.getenv("LOG_DIR") + "/nereids_trace";
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������ upload ������������������������������������������������ 10 ���",
"The max number of snapshots assigned to a upload task during the backup process, the default value is 10."
})
public static int backup_upload_snapshot_batch_size = 10;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������ download ������������������������������������������������ 10 ���",
"The max number of snapshots assigned to a download task during the restore process, "
+ "the default value is 10."
})
public static int restore_download_snapshot_batch_size = 10;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������ RPC ��������������� be ������������������������������������ 10000 ������",
"The max number of batched tasks per RPC assigned to each be during the backup/restore process, "
+ "the default value is 10000."
})
public static int backup_restore_batch_task_num_per_rpc = 10000;
@ConfField(mutable = true, masterOnly = true, description = {
"������ BE ���������������������������������������",
"The number of concurrent restore tasks per be"})
public static int restore_task_concurrency_per_be = 5000;
@ConfField(mutable = true, description = {"������ agent task ������BE ��������������������������������� BE ���������",
"The time after which BE is considered unavailable if the heartbeat is not received"})
public static int agent_task_be_unavailable_heartbeat_timeout_second = 300;
@ConfField(description = {"������������������ http ������������ log ���������������",
"Whether to enable the function of getting log files through http interface"})
public static boolean enable_get_log_file_api = false;
@ConfField(mutable = true)
public static boolean enable_profile_when_analyze = false;
@ConfField(mutable = true)
public static boolean enable_collect_internal_query_profile = false;
@ConfField(mutable = false, masterOnly = false, description = {
"http ������������/api/query ��� sql ���������������������������",
"The max number work threads of http sql submitter."
})
public static int http_sql_submitter_max_worker_threads = 2;
@ConfField(mutable = false, masterOnly = false, description = {
"http ������������/api/upload ���������������������������",
"The max number work threads of http upload submitter."
})
public static int http_load_submitter_max_worker_threads = 2;
@ConfField(mutable = true, masterOnly = true, description = {
"load label ���������������������������������������������������������������������������������"
+ "��� label ��������������������������� label ������������������������ -1 ���������������������������������",
"The threshold of load labels' number. After this number is exceeded, "
+ "the labels of the completed import jobs or tasks will be deleted, "
+ "and the deleted labels can be reused. "
+ "When the value is -1, it indicates no threshold."
})
public static int label_num_threshold = 2000;
@ConfField(description = {"������ internal catalog ������������������",
"Specify the default authentication class of internal catalog"},
options = {"default", "ranger-doris"})
public static String access_controller_type = "default";
/* https://forums.oracle.com/ords/apexds/post/je-log-checksumexception-2812
when meeting disk damage or other reason described in the oracle forums
and fe cannot start due to `com.sleepycat.je.log.ChecksumException`, we
add a param `ignore_bdbje_log_checksum_read` to ignore the exception, but
there is no guarantee of correctness for bdbje kv data
*/
@ConfField
public static boolean ignore_bdbje_log_checksum_read = false;
@ConfField(description = {"������ mysql ������������������������",
"Specifies the authentication type"},
options = {"default", "ldap"})
public static String authentication_type = "default";
@ConfField(mutable = true, masterOnly = false, description = {"������ trino-connector catalog ���������������������������",
"Specify the default plugins loading path for the trino-connector catalog"})
public static String trino_connector_plugin_dir = EnvUtils.getDorisHome() + "/plugins/connectors";
@ConfField(mutable = true)
public static boolean fix_tablet_partition_id_eq_0 = false;
@ConfField(mutable = true, masterOnly = true, description = {
"������������������������������",
"Default storage format of inverted index, the default value is V3."
})
public static String inverted_index_storage_format = "V3";
@ConfField(mutable = true, masterOnly = true, description = {
"��������� unique ��� mow ��������� delete ��������� delete predicate������������������������ delete ������������������"
+ "��� delete ������������������������������������������������������������������������������������������ delete ������������������������������������",
"Enable the 'delete predicate' for DELETE statements. If enabled, it will enhance the performance of "
+ "DELETE statements, but partial column updates after a DELETE may result in erroneous data. "
+ "If disabled, it will reduce the performance of DELETE statements to ensure accuracy."
})
public static boolean enable_mow_light_delete = false;
@ConfField(description = {
"������������ Proxy Protocol ������",
"Whether to enable proxy protocol"
})
public static boolean enable_proxy_protocol = false;
@ConfField(description = {
"Profile ������������������������������ query ������������������������������������������������ profile ������������������������������������ profile ���������������",
"Profile async collect expire time, after the query is completed, if the profile is not collected within "
+ " the time specified by this parameter, the uncompleted profile will be abandoned."
})
public static int profile_async_collect_expire_time_secs = 5;
@ConfField(description = {
"������������ ProfileManager ������ Profile ������������������������������������������������ ProfileManager ������������������������������ profile "
+ "������������������������������������������������",
"Used to control the interval time of ProfileManager for profile garbage collection. "
})
public static int profile_manager_gc_interval_seconds = 1;
// Used to check compatibility when upgrading.
@ConfField
public static boolean enable_check_compatibility_mode = false;
// Do checkpoint after replaying edit logs.
@ConfField
public static boolean checkpoint_after_check_compatibility = false;
// Advance the next id before transferring to the master.
@ConfField(description = {
"��������������� Master ��������� ID ���������������������������������������������������������������",
"Whether to advance the ID generator after becoming Master to ensure that the id "
+ "generator will not be rolled back even when metadata is rolled back."
})
public static boolean enable_advance_next_id = true;
// The count threshold to do manual GC when doing checkpoint but not enough memory.
// Set zero to disable it.
@ConfField(description = {
"������ checkpoint ��������������������������������������������������������������������� GC",
"The threshold to do manual GC when doing checkpoint but not enough memory"})
public static int checkpoint_manual_gc_threshold = 0;
@ConfField(mutable = true, description = {
"��������������������������������������������������������������������� query ������",
"Should the request content be logged before each request starts, specifically the query statements"})
public static boolean enable_print_request_before_execution = false;
@ConfField
public static String spilled_profile_storage_path = System.getenv("LOG_DIR") + File.separator + "profile";
@ConfField
public static String spilled_minidump_storage_path = System.getenv("LOG_DIR") + File.separator + "minidump";
// The max number of profiles that can be stored to storage.
@ConfField
public static int max_spilled_profile_num = 500;
// The total size of profiles that can be stored to storage.
@ConfField
public static long spilled_profile_storage_limit_bytes = 1 * 1024 * 1024 * 1024; // 1GB
// Profile will be spilled to storage after query has finished for this time.
@ConfField(mutable = true, description = {
"Profile ��� query ���������������������������������������������",
"Profile will be spilled to storage after query has finished for this time"})
public static int profile_waiting_time_for_spill_seconds = 10;
@ConfField(mutable = true, description = {
"��������������������������� BE ��������� abort ������",
"SHould abort txn by checking coorinator be heartbeat"})
public static boolean enable_abort_txn_by_checking_coordinator_be = true;
@ConfField(mutable = true, description = {
"��������� schema change ��������������������������������� abort ���",
"SHould abort txn by checking conflick txn in schema change"})
public static boolean enable_abort_txn_by_checking_conflict_txn = true;
@ConfField(mutable = true, description = {
"���������������������������������������������������������������������������������������������������������������������������������0 ���������������������",
"Columns that have not been collected within the specified interval will trigger automatic analyze. "
+ "0 means not trigger."
})
public static long auto_analyze_interval_seconds = 86400; // 24 hours.
// A internal config to control whether to enable the checkpoint.
//
// ATTN: it only used in test environment.
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_checkpoint = true;
@ConfField(description = {
"������ hadoop conf ������������������������������",
"The default directory for storing hadoop conf configuration files."})
public static String hadoop_config_dir = EnvUtils.getDorisHome() + "/plugins/hadoop_conf/";
@ConfField(mutable = true, masterOnly = true, description = {"��������������� RPC ���������������",
"Timeout of dictionary related RPC"})
public static int dictionary_rpc_timeout_seconds = 5;
@ConfField(mutable = true, masterOnly = true, description = { "������������������������������������������������������������",
"Interval at which the dictionary triggers a data expiration check, in seconds" })
public static int dictionary_auto_refresh_interval_seconds = 5;
//==========================================================================
// begin of cloud config
//==========================================================================
@ConfField(description = {"������������ FE ������������������������������������������������������������������������������������������ log������������������������������������",
"Whether to enable the FE log file deletion policy based on size, "
+ "where logs exceeding the specified size are deleted. "
+ "It is disabled by default and follows a time-based deletion policy."},
options = {"age", "size"})
public static String log_rollover_strategy = "age";
@ConfField public static int info_sys_accumulated_file_size = 4;
@ConfField public static int warn_sys_accumulated_file_size = 2;
@ConfField public static int audit_sys_accumulated_file_size = 4;
@ConfField
public static String deploy_mode = "";
// compatibily with elder version.
// cloud_unique_id has higher priority than cluster_id.
@ConfField
public static String cloud_unique_id = "";
public static boolean isCloudMode() {
return deploy_mode.equals("cloud") || !cloud_unique_id.isEmpty();
}
public static boolean isNotCloudMode() {
return !isCloudMode();
}
/**
* MetaService endpoint, ip:port, such as meta_service_endpoint = "192.0.0.10:8866"
*
* If you want to access a group of meta services, separated the endpoints by comma,
* like "host-1:port,host-2:port".
*/
@ConfField(mutable = true, callback = CommaSeparatedIntersectConfHandler.class)
public static String meta_service_endpoint = "";
@ConfField(mutable = true)
public static boolean meta_service_connection_pooled = true;
@ConfField(mutable = true)
public static int meta_service_connection_pool_size = 20;
@ConfField(mutable = true)
public static int meta_service_rpc_retry_times = 200;
public static int metaServiceRpcRetryTimes() {
if (isCloudMode() && enable_check_compatibility_mode) {
return 1;
}
return meta_service_rpc_retry_times;
}
// A connection will expire after a random time during [base, 2*base), so that the FE
// has a chance to connect to a new RS. Set zero to disable it.
@ConfField(mutable = true)
public static int meta_service_connection_age_base_minutes = 5;
@ConfField(mutable = false)
public static boolean enable_sts_vpc = true;
@ConfField(mutable = true)
public static int sts_duration = 3600;
@ConfField(mutable = true)
public static int drop_rpc_retry_num = 200;
@ConfField
public static int default_get_version_from_ms_timeout_second = 3;
@ConfField(mutable = true)
public static boolean enable_cloud_multi_replica = false;
@ConfField(mutable = true)
public static int cloud_replica_num = 3;
@ConfField(mutable = true)
public static int cloud_cold_read_percent = 10; // 10%
@ConfField(mutable = true)
public static int get_tablet_stat_batch_size = 1000;
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_light_index_change = true;
// The original meta read lock is not enough to keep a snapshot of partition versions,
// so the execution of `createScanRangeLocations` are delayed to `Coordinator::exec`,
// to help to acquire a snapshot of partition versions.
@ConfField
public static boolean enable_cloud_snapshot_version = true;
// Interval in seconds for checking the status of compute groups (cloud clusters).
// Compute groups and cloud clusters refer to the same concept.
@ConfField
public static int cloud_cluster_check_interval_second = 10;
@ConfField
public static String cloud_sql_server_cluster_name = "RESERVED_CLUSTER_NAME_FOR_SQL_SERVER";
@ConfField
public static String cloud_sql_server_cluster_id = "RESERVED_CLUSTER_ID_FOR_SQL_SERVER";
@ConfField
public static int cloud_txn_tablet_batch_size = 50;
/**
* Default number of waiting copy jobs for the whole cluster
*/
@ConfField(mutable = true)
public static int cluster_max_waiting_copy_jobs = 100;
/**
* Default number of max file num for per copy into job
*/
@ConfField(mutable = true)
public static int max_file_num_per_copy_into_job = 50;
/**
* Default number of max meta size for per copy into job
*/
@ConfField(mutable = true)
public static int max_meta_size_per_copy_into_job = 51200;
// 0 means no limit
@ConfField(mutable = true)
public static int cloud_max_copy_job_per_table = 10000;
@ConfField(mutable = true)
public static int cloud_filter_copy_file_num_limit = 100;
@ConfField(mutable = true, masterOnly = true)
public static boolean cloud_delete_loaded_internal_stage_files = false;
@ConfField(mutable = false)
public static int cloud_copy_txn_conflict_error_retry_num = 5;
@ConfField(mutable = false)
public static int cloud_copy_into_statement_submitter_threads_num = 64;
@ConfField
public static int drop_user_notify_ms_max_times = 86400;
@ConfField(mutable = true, masterOnly = true)
public static long cloud_tablet_rebalancer_interval_second = 1;
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_cloud_partition_balance = true;
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_cloud_table_balance = true;
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_cloud_global_balance = true;
@ConfField(mutable = true, masterOnly = true)
public static int cloud_pre_heating_time_limit_sec = 300;
@ConfField(mutable = true, masterOnly = true)
public static double cloud_rebalance_percent_threshold = 0.05;
@ConfField(mutable = true, masterOnly = true)
public static long cloud_rebalance_number_threshold = 2;
@ConfField(mutable = true, masterOnly = true)
public static double cloud_balance_tablet_percent_per_run = 0.05;
@ConfField(mutable = true, masterOnly = true, description = {"��������������������������������� Compute group ���������������������������"
+ "without_warmup: ������������ tablet ��������������������������� S3 ���������������������������������������������"
+ "async_warmup: ��������������������������������� cache������������������������ cache miss���"
+ "sync_warmup: ��������������������� cache ��������������������������������� cache miss���"
+ "peer_read_async_warmup: ������������ tablet ��������������������������� Peer BE ��������������������������������������������������������� BE ���������"
+ "��������������������� FE ��������������������� SQL���ALTER COMPUTE GROUP cg PROPERTIES���"
+ "������ compute group ��������� balance ���������compute group ���������������������������",
"Specify the scaling and warming methods for all Compute groups in a cloud mode. "
+ "without_warmup: Directly modify shard mapping, first read from S3,"
+ "fastest re-balance but largest fluctuation; "
+ "async_warmup: Asynchronous warmup, best-effort cache pulling, "
+ "faster re-balance but possible cache miss; "
+ "sync_warmup: Synchronous warmup, ensure cache migration completion, "
+ "slower re-balance but no cache miss; "
+ "peer_read_async_warmup: Directly modify shard mapping, first read from Peer BE, "
+ "fastest re-balance but may affect other BEs in the same compute group performance. "
+ "Note: This is a global FE configuration, you can also use SQL (ALTER COMPUTE GROUP cg PROPERTIES) "
+ "to set balance type at compute group level, compute group level configuration has higher priority"},
options = {"without_warmup", "async_warmup", "sync_warmup", "peer_read_async_warmup"})
public static String cloud_warm_up_for_rebalance_type = "async_warmup";
@ConfField(mutable = true, masterOnly = true, description = {"���������������������tablet������������"
+ "���������host������������������������tablet���������������10", "The max number of tablets per host "
+ "when batching warm-up requests during tablet rebalancing in "
+ "compute-storage separation mode, default 10"})
public static int cloud_warm_up_batch_size = 10;
@ConfField(mutable = true, masterOnly = true, description = {"���������������������tablet������������"
+ "������������������������������������������������������50ms", "Maximum wait time in milliseconds before a "
+ "pending warm-up batch is flushed, default 50ms"})
public static int cloud_warm_up_batch_flush_interval_ms = 50;
@ConfField(mutable = true, masterOnly = true, description = {"���������������������tablet������������rpc������������������������������4",
"Thread pool size for asynchronous warm-up RPC dispatch during tablet "
+ "rebalancing in compute-storage separation mode, default 4"})
public static int cloud_warm_up_rpc_async_pool_size = 4;
@ConfField(masterOnly = true, description = {"���������������������tablet������������������������������tablet���������������������������������"
+ "When tablets are being balanced in compute-storage separation mode, "
+ "is the active tablet priority scheduling strategy enabled? (Default: Enabled)"})
public static boolean enable_cloud_active_tablet_priority_scheduling = false;
@ConfField(masterOnly = true, description = {"������������������tablet���������������������������������������������",
"Whether to enable active tablet sliding window access statistics feature, default true"})
public static boolean enable_active_tablet_sliding_window_access_stats = false;
@ConfField(mutable = true, masterOnly = true, description = {"������tablet���������������������������������������������������������������3600������1���������",
"Time window size in seconds for active tablet sliding window access statistics, "
+ "default 3600 seconds (1 hour)"})
public static long active_tablet_sliding_window_time_window_second = 3600L;
@ConfField(mutable = true, masterOnly = true, description = {
"������ tablet ������������������������partition ������������������������ TopN ��������� partition���"
+ "��������������������� partition������������ partition��������������� internal db��������� 10000���<=0 ������������ TopN ���������",
"When active tablet priority scheduling is enabled: partition-level scheduling processes TopN active "
+ "partitions first, then other active partitions,"
+ "then inactive partitions, and internal db at last. "
+ "Default 10000. <=0 disables TopN segmentation."})
public static int cloud_active_partition_scheduling_topn = 10000;
@ConfField(mutable = true, masterOnly = false)
public static String security_checker_class_name = "";
@ConfField(mutable = true)
public static int mow_calculate_delete_bitmap_retry_times = 10;
@ConfField(mutable = true, description = {"������ S3 Load endpoint ���������������������s3_load_endpoint_white_list=a,b,c",
"the white list for the s3 load endpoint, if it is empty, no white list will be set,"
+ "for example: s3_load_endpoint_white_list=a,b,c"})
public static String[] s3_load_endpoint_white_list = {};
@ConfField(mutable = true, description = {
"������������������ S3 ������������������������ *, ?������������ HEAD ������������ ListObjects ��������������� ListBucket ���������"
+ "��������������� {1,2,3} ��������������������������� [abc] ���������������������������"
+ "��������������� GetObject ������������������������������������������������������������ false ������������������������",
"For deterministic S3 paths (without wildcards like *, ?), use HEAD requests instead of "
+ "ListObjects to avoid requiring ListBucket permission. Brace patterns {1,2,3} and "
+ "non-negated bracket patterns [abc] are expanded to concrete paths. This is useful when only "
+ "GetObject permission is granted. Set to false to fall back to the original listing behavior."
})
public static boolean s3_skip_list_for_deterministic_path = true;
@ConfField(mutable = true, description = {
"��������� HEAD ������������ ListObjects ���������������������������������������������������������������������������������"
+ "������������������ ListObjects������������������������ {1..100}/{1..100} ������������������������ HEAD ���������",
"Maximum number of expanded paths when using HEAD requests instead of ListObjects. "
+ "If the expanded path count exceeds this limit, falls back to ListObjects. "
+ "This prevents patterns like {1..100}/{1..100} from triggering too many HEAD requests."
})
public static int s3_head_request_max_paths = 100;
@ConfField(mutable = true, description = {
"������ Azure endpoint ������������������������������ blob ��� dfs������������������������������������"
+ "������������ .blob.core.windows.net,.dfs.core.windows.net,"
+ ".blob.core.chinacloudapi.cn,.dfs.core.chinacloudapi.cn,"
+ ".blob.core.usgovcloudapi.net,.dfs.core.usgovcloudapi.net,"
+ ".blob.core.cloudapi.de,.dfs.core.cloudapi.de���",
"The host suffix whitelist for Azure endpoints (both blob and dfs), separated by commas. "
+ "The default value is .blob.core.windows.net,.dfs.core.windows.net,"
+ ".blob.core.chinacloudapi.cn,.dfs.core.chinacloudapi.cn,"
+ ".blob.core.usgovcloudapi.net,.dfs.core.usgovcloudapi.net,"
+ ".blob.core.cloudapi.de,.dfs.core.cloudapi.de."
})
public static String[] azure_blob_host_suffixes = {
".blob.core.windows.net",
".dfs.core.windows.net",
".blob.core.chinacloudapi.cn",
".dfs.core.chinacloudapi.cn",
".blob.core.usgovcloudapi.net",
".dfs.core.usgovcloudapi.net",
".blob.core.cloudapi.de",
".dfs.core.cloudapi.de"
};
@ConfField(mutable = true, description = {"������ Jdbc driver url ���������������������jdbc_driver_url_white_list=a,b,c",
"the white list for jdbc driver url, if it is empty, no white list will be set"
+ "for example: jdbc_driver_url_white_list=a,b,c"
})
public static String[] jdbc_driver_url_white_list = {};
@ConfField(description = {"Stream_Load ������������label ������������������������",
"Stream_Load When importing, the maximum length of label is limited"})
public static int label_regex_length = 128;
@ConfField(mutable = true, masterOnly = true)
public static int history_cloud_warm_up_job_keep_max_second = 7 * 24 * 3600;
@ConfField(mutable = true, masterOnly = true)
public static int max_active_cloud_warm_up_job = 10;
@ConfField(mutable = true, masterOnly = true)
public static int cloud_warm_up_timeout_second = 86400 * 30; // 30 days
@ConfField(mutable = true, masterOnly = true)
public static int cloud_warm_up_job_scheduler_interval_millisecond = 1000; // 1 seconds
@ConfField(mutable = true, masterOnly = true)
public static long cloud_warm_up_job_max_bytes_per_batch = 21474836480L; // 20GB
@ConfField(mutable = true, masterOnly = true)
public static boolean cloud_warm_up_force_all_partitions = false;
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_fetch_cluster_cache_hotspot = true;
@ConfField(mutable = true)
public static long fetch_cluster_cache_hotspot_interval_ms = 3600000;
// to control the max num of values inserted into cache hotspot internal table
// insert into cache table when the size of batch values reaches this limit
@ConfField(mutable = true)
public static long batch_insert_cluster_cache_hotspot_num = 5000;
/**
* intervals between be status checks for CloudUpgradeMgr
*/
@ConfField(mutable = true)
public static int cloud_upgrade_mgr_interval_second = 15;
@ConfField(mutable = true)
public static boolean enable_cloud_running_txn_check = true;
//* audit_event_log_queue_size = qps * query_audit_log_timeout_ms
@ConfField(mutable = true)
public static int audit_event_log_queue_size = 250000;
@ConfField(description = {"���������������������������������������������������������������",
"Max size of lineage event queue��� events will be discarded when exceeded"})
public static int lineage_event_queue_size = 50000;
@ConfField(mutable = true, description = {
"streamload ������������������������������������������ public-private/public/private/direct/random-be/���",
"streamload route policy, available options are "
+ "public-private/public/private/direct/random-be and empty string" })
public static String streamload_redirect_policy = "";
@ConfField(mutable = true, description = {
"��������������������������������� group commit ��� streamload BE ���������������"
+ "������ LB ������������������ group commit ������������������������������ BE ������������������������������������������ BE ���������",
"Whether to enable group commit streamload BE forward feature in cloud mode. "
+ "Solves the issue where LB random forwarding breaks group commit batching "
+ "by implementing BE-level forwarding to ensure same-table requests reach the same BE node." })
public static boolean enable_group_commit_streamload_be_forward = false;
@ConfField(description = {"��������������������������������������������� recycler key, ������ true",
"create table in cloud mode, check recycler key remained, default true"})
public static boolean check_create_table_recycle_key_remained = true;
@ConfField(mutable = true, description = {"��������������������� fe ��� ms ��������������������������������� 60s"})
public static int delete_bitmap_lock_expiration_seconds = 60;
@ConfField(mutable = true, description = {"��������������������� calculate delete bitmap task ��������������������� 60s"})
public static int calculate_delete_bitmap_task_timeout_seconds = 60;
@ConfField(mutable = true, description = {"��������������������������������� calculate delete bitmap task ��������������������� 300s"})
public static int calculate_delete_bitmap_task_timeout_seconds_for_transaction_load = 300;
@ConfField(mutable = true, description = {"��������������������� commit ��������������������������������� 5s"})
public static int try_commit_lock_timeout_seconds = 5;
@ConfField(mutable = true, description = {"��������������������������������������������������������������� true ���������������������������������������"
+ "��������� false ������������ Merge-On-Write ��������������������������������� true���",
"Whether to enable commit lock for all tables during transaction commit."
+ "If true, commit lock will be applied to all tables."
+ "If false, commit lock will only be applied to Merge-On-Write tables."
+ "Default value is true." })
public static boolean enable_commit_lock_for_all_tables = true;
@ConfField(mutable = true, description = {"��������������������������������������������������������� true"})
public static boolean enable_cloud_txn_lazy_commit = true;
@ConfField(mutable = true, masterOnly = true,
description = {"��������������������������� tablet ��������� be ��������������������������� tablet ��������� be ������������ false"})
public static boolean enable_immediate_be_assign = false;
@ConfField(mutable = true, masterOnly = false,
description = { "������������������������������ BE ������������������������������ tablet ��������������������� BE ���" })
public static int rehash_tablet_after_be_dead_seconds = 3600;
@ConfField(mutable = true, description = {"������������������������������������������������������������ true",
"Whether to enable the automatic start-stop feature in cloud model, default is true."})
public static boolean enable_auto_start_for_cloud_cluster = true;
@ConfField(mutable = true, description = {"��������������������������������������� cluster ��������������������������������� 300 ��������� 5 ������",
"The automatic start-stop wait time for cluster wake-up backoff retry count in the cloud "
+ "model is set to 300 times, which is approximately 5 minutes by default."})
public static int auto_start_wait_to_resume_times = 300;
@ConfField(description = {"Get tablet stat task ���������������������",
"Maximal concurrent num of get tablet stat job."})
public static int max_get_tablet_stat_task_threads_num = 4;
@ConfField(description = {
"Maximal concurrent num of master FE sync tablet stats task to observers and followers in cloud mode."})
public static int cloud_sync_tablet_stats_task_threads_num = 4;
@ConfField(mutable = true, description = {"Version of getting tablet stats in cloud mode. "
+ "Version 1: get all tablets; Version 2: get active and interval expired tablets"})
public static int cloud_get_tablet_stats_version = 2;
@ConfField(description = {"��������������������������� table ��� partition version ���������. ������ frontend ������������",
"Cloud table and partition version syncer interval. All frontends will perform the checking"})
public static int cloud_version_syncer_interval_second = 20;
@ConfField(mutable = true, description = {"��������������������������������������� table ��� partition version ���������",
"Whether to enable the function of syncing table and partition version in cloud mode"})
public static boolean cloud_enable_version_syncer = true;
@ConfField(description = {"Get version task ������������", "Concurrent num of get version task."})
public static int cloud_get_version_task_threads_num = 4;
@ConfField(description = {"Master FE ��������������� FE sync version task ������������������",
"Maximal concurrent num of sync version task between Master FE and other FEs."})
public static int cloud_sync_version_task_threads_num = 4;
@ConfField(mutable = true, description = {"Get version task ��������� table ��� partition ��������� batch size",
"Maximal table or partition batch size of get version task."})
public static int cloud_get_version_task_batch_size = 2000;
@ConfField(mutable = true, description = {"schema change job ������������������",
"Whether to enable retry when a schema change job fails, default is true."})
public static boolean enable_schema_change_retry = true;
@ConfField(mutable = true, description = {"schema change job ������������",
"Max retry times when a schema change job fails, default is 3."})
public static int schema_change_max_retry_time = 3;
@ConfField(mutable = true, description = {"������������������ ShowCacheHotSpotStmt ������",
"Whether to enable the use of ShowCacheHotSpotStmt, default is false."})
public static boolean enable_show_file_cache_hotspot_stmt = false;
@ConfField(mutable = true, description = {"��������������������� FE ������ meta service ������������������������ 30000ms",
"Request timeout for FE connecting to meta service in cloud mode, default is 30000ms."})
public static int meta_service_brpc_timeout_ms = 30000;
@ConfField(mutable = true, description = {"��������������������� FE ������ meta service ������������������������ 500ms",
"Connection timeout for FE connecting to meta service in cloud mode., default is 500ms."})
public static int meta_service_brpc_connect_timeout_ms = 500;
@ConfField(mutable = true, description = {"��������������������� FE ������ meta service ������������������������������ 1 ���",
"In cloud mode, the retry number when the FE requests the meta service times out is 1 by default"})
public static int meta_service_rpc_timeout_retry_times = 1;
@ConfField(mutable = true, description = {"���������������������������������������������������������������������������������������������������"
+ "������������������������������������������������������������������������"
+ "���������auto_start_ignore_db_names=__internal_schema, information_schema",
"In the cloud mode, the automatic start and stop ignores the DB name of the internal job,"
+ "used for databases involved in internal jobs, such as those used for statistics, "
+ "For example: auto_start_ignore_db_names=__internal_schema, information_schema"
})
public static String[] auto_start_ignore_resume_db_names = {"__internal_schema", "information_schema"};
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_mow_load_force_take_ms_lock = true;
@ConfField(mutable = true, masterOnly = true)
public static long mow_load_force_take_ms_lock_threshold_ms = 500;
@ConfField(mutable = true, masterOnly = true)
public static long mow_get_ms_lock_retry_backoff_base = 20;
@ConfField(mutable = true, masterOnly = true)
public static long mow_get_ms_lock_retry_backoff_interval = 80;
@ConfField(mutable = true, masterOnly = true)
public static boolean enable_notify_be_after_load_txn_commit = false;
// ATTN: DONOT add any config not related to cloud mode here
// ATTN: DONOT add any config not related to cloud mode here
// ATTN: DONOT add any config not related to cloud mode here
//==========================================================================
// end of cloud config
//==========================================================================
//==========================================================================
// start of lock config
@ConfField(description = {"������������������������",
"Whether to enable deadlock detection"})
public static boolean enable_deadlock_detection = true;
@ConfField(description = {"���������������������������������������",
"Deadlock detection interval time, unit minute"})
public static long deadlock_detection_interval_minute = 5;
@ConfField(mutable = true, description = {"������������������������������������������������������������������������������",
"Maximum lock hold time; logs a warning if exceeded"})
public static long max_lock_hold_threshold_seconds = 10;
@ConfField(mutable = true, description = {"���������������������������������������",
"Is metadata synchronization enabled in safe mode"})
public static boolean meta_helper_security_mode = false;
@ConfField(description = {"���������������������������������������",
"Interval checking if resource is ready"})
public static long resource_not_ready_sleep_seconds = 5;
@ConfField(mutable = true, description = {
"��������� true��������������������������������������������������������������� tablet ������������������������������"})
public static boolean sql_block_rule_ignore_admin = false;
@ConfField(description = {"������������������",
"Authentication plugin directory"})
public static String authentication_plugins_dir = EnvUtils.getDorisHome() + "/plugins/authentication";
@ConfField(description = {"������������������",
"Authorization plugin directory"})
public static String authorization_plugins_dir = EnvUtils.getDorisHome() + "/plugins/authorization";
@ConfField(description = {"������������������������",
"Security plugin directory"})
public static String security_plugins_dir = EnvUtils.getDorisHome() + "/plugins/security";
@ConfField(description = {
"��������������������������������������� DORIS_HOME ��������������� conf/authorization.conf",
"Authorization plugin configuration file path, need to be in DORIS_HOME,"
+ "default is conf/authorization.conf"})
public static String authorization_config_file_path = "/conf/authorization.conf";
@ConfField(description = {
"��������������������������������������� DORIS_HOME ��������������� conf/authentication.conf",
"Authentication plugin configuration file path, need to be in DORIS_HOME,"
+ "default is conf/authentication.conf"})
public static String authentication_config_file_path = "/conf/authentication.conf";
@ConfField(description = {"��������������������������������������� forward ��� master ��������� forward query ���������",
"For testing purposes, all queries are forcibly forwarded to the master to verify"
+ "the behavior of forwarding queries."})
public static boolean force_forward_all_queries = false;
@ConfField(description = {"������������������ SQL��������������� AST ��� class simple name ������ (������ CreateRepositoryStmt,"
+ "CreatePolicyCommand)���������������������",
"For disabling certain SQL queries, the configuration item is a list of simple class names of AST"
+ "(for example CreateRepositoryStmt, CreatePolicyCommand), separated by commas."})
public static String block_sql_ast_names = "";
public static long meta_service_rpc_reconnect_interval_ms = 100;
public static long meta_service_rpc_retry_cnt = 10;
@ConfField(mutable = true, masterOnly = true, description = {"������������ variant ������������������������������������ v1",
"Whether to allow the use of inverted index v1 for variant"})
public static boolean enable_inverted_index_v1_for_variant = false;
@ConfField(mutable = true, description = {"Prometheus ������������������������������������",
"Prometheus output table dimension metric count limit"})
public static int prom_output_table_metrics_limit = 10000;
@ConfField(mutable = true, masterOnly = true)
public static long create_partition_wait_seconds = 300;
@ConfField(mutable = true, description = {
"KMS ������������ ID������������������������������������",
"The ID of the master key in KMS, used for generating and encrypting data keys"
})
public static String doris_tde_key_id = "";
@ConfField(mutable = true, description = {
"KMS ������������������������endpoint��������������������������� region ������",
"The endpoint of the KMS service, should match the region of the key"
})
public static String doris_tde_key_endpoint = "";
@ConfField(mutable = true, description = {
"KMS ������������������������������ SDK ������������������������",
"The region where the KMS key is located, used for SDK configuration"
})
public static String doris_tde_key_region = "";
@ConfField(mutable = true, description = {
"TDE��������������������������������������������������������� aws_kms",
"The key provider for TDE (Transparent Data Encryption), currently supports aws_kms"
})
public static String doris_tde_key_provider = "";
@ConfField(mutable = true, description = {
"��������������������������������������� AES256������������������������ KMS ������������",
"The encryption algorithm used for data, default is AES256, may be set to empty later for KMS to decide"
})
public static String doris_tde_algorithm = "PLAINTEXT";
@ConfField(mutable = true, description = {
"������������������ rotate master key ������������������������������������������������������������",
"The time interval for automatic rotation of the master key in data encryption, in milliseconds."
+ "The default interval is one month."
})
public static long doris_tde_rotate_master_key_interval_ms = 30 * 24 * 3600 * 1000L;
@ConfField(mutable = true, description = {
"��������������������������� rotate ������������������������������������������������������������",
"Data encryption checks whether to rotate the time interval in milliseconds, "
+ "and the default interval is five minutes."
})
public static long doris_tde_check_rotate_master_key_interval_ms = 5 * 60 * 1000L;
@ConfField(mutable = true, description = {
"��������������������������������������������������������������������� 256 ������",
"The maximum length of the first row error message when data quality error occurs, default is 256 bytes"
})
public static int first_error_msg_max_length = 256;
@ConfField(mutable = false, description = {
"Whether to enable file cache admission control(Blocklist and Allowlist)"
})
public static boolean enable_file_cache_admission_control = false;
@ConfField(mutable = false, description = {
"Directory path for storing admission rules JSON files"
})
public static String file_cache_admission_control_json_dir = "";
@ConfField
public static String cloud_snapshot_handler_class = "org.apache.doris.cloud.snapshot.CloudSnapshotHandler";
@ConfField
public static int cloud_snapshot_handler_interval_second = 3600;
@ConfField(mutable = true)
public static long cloud_snapshot_timeout_seconds = 600;
@ConfField(mutable = true)
public static long cloud_auto_snapshot_max_reversed_num = 35;
@ConfField(mutable = true)
public static long cloud_auto_snapshot_min_interval_seconds = 3600;
@ConfField(mutable = true, description = {
"cluster snapshot ������������������������������������������������'root'������ root ��������������������� 'admin'���ADMIN ��������������������������������������� 'root'���",
"The minimum privilege required for cluster snapshot operations. "
+ "Valid values: 'root' (only root user can execute)"
+ " or 'admin' (users with ADMIN privilege can execute). "
+ "Default is 'root'."})
public static String cluster_snapshot_min_privilege = "root";
@ConfField(mutable = true)
public static long multi_part_upload_part_size_in_bytes = 256 * 1024 * 1024L; // 256MB
@ConfField(mutable = true)
public static int multi_part_upload_max_seconds = 3600; // 1 hour
@ConfField(mutable = true)
public static int multi_part_upload_pool_size = 10;
@ConfField(mutable = true)
public static String aws_credentials_provider_version = "v2";
@ConfField(mutable = true, description = {
"��������������������������������� FILE_CACHE ������������������������������ 1 ��� 100������100������������������������ FILE_CACHE",
"The upper limit of FILE_CACHE percent that a single query of a user can use, (range: 1 to 100).",
"100 indicate that the full FILE_CACHE capacity can be used. "
})
public static int file_cache_query_limit_max_percent = 100;
@ConfField(description = {
"AWS SDK ������������������������������������������������������������������������������������������������",
"The thread pool size used by the AWS SDK to schedule asynchronous retries, timeout tasks, "
+ "and other background operations, shared globally"
})
public static int aws_sdk_async_scheduler_thread_pool_size = 20;
@ConfField(description = {
"agent tasks ������������������������������������������������������������0���������������������",
"agent tasks health check interval, default is five minutes, no health check when less than or equal to 0"
})
public static long agent_task_health_check_intervals_ms = 5 * 60 * 1000L; // 5 min
@ConfField(description = {
"��������� catalog ������������������������ FE ��������� catalog ��������������������������������������� access controller ��������� "
+ "catalog ��� SHOW/SELECT ��������������� catalog��������������������� access controller ��� catalog���"
+ "������ CREATE/LOAD/ALTER ���������������������������������������",
"Whether to skip the FE internal catalog privilege check in catalog-level privilege validation. "
+ "This only applies to SHOW/SELECT on external catalogs with a custom access controller. "
+ "Internal catalogs, catalogs without a custom access controller, and other privileges such "
+ "as CREATE/LOAD/ALTER are still validated by the default logic"
})
public static boolean skip_catalog_priv_check = false;
@ConfField(mutable = true, description = {
"���������������������������������������������������������������������������������������������������",
"In the compute-storage separation mode, whether to obtain partition version information in batches when "
+ "calculating the delete bitmap, which is enabled by default"
})
public static boolean calc_delete_bitmap_get_versions_in_batch = true;
@ConfField(mutable = true, description = {
"������������������������������������������������������������������������������������������������������������������������������",
"In the compute-storage separation mode, whether to wait for pending transactions to complete before "
+ "obtaining partition version information when calculating the delete bitmap, which is enabled "
+ "by default"
})
public static boolean calc_delete_bitmap_get_versions_waiting_for_pending_txns = true;
}