diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java index 133ee2114f7c2b..bfce3ab1f58fb1 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java +++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java @@ -21,12 +21,12 @@ public class Config extends ConfigBase { - @ConfField(description = {"The path of the user-defined configuration file, used to store fe_custom.conf. " - + "Configurations in this file will override those in fe.conf"}) + @ConfField(description = "The path of the user-defined configuration file, used to store fe_custom.conf. " + + "Configurations in this file will override those in fe.conf") public static String custom_config_dir = EnvUtils.getDorisHome() + "/conf"; - @ConfField(description = { - "The maximum file size of fe.log and fe.audit.log. Once this size is exceeded, the log file will be split"}) + @ConfField(description = "The maximum file size of fe.log and fe.audit.log. Once this size is exceeded, the log " + + "file will be split") public static int log_roll_size_mb = 1024; // 1 GB /** @@ -64,732 +64,688 @@ public class Config extends ConfigBase { * default is false. if true, will compress fe.log & fe.warn.log by gzip */ @Deprecated // use env var LOG_DIR instead - @ConfField(description = {"The path of the FE log file, used to store fe.log"}) + @ConfField(description = "The path of the FE log file, used to store fe.log") public static String sys_log_dir = ""; - @ConfField(description = {"The level of FE log"}, options = {"INFO", "WARN", "ERROR", "FATAL"}) + @ConfField(description = "The level of FE log", options = {"INFO", "WARN", "ERROR", "FATAL"}) public static String sys_log_level = "INFO"; - @ConfField(description = { - "The output mode of the FE log. " - + "NORMAL mode is synchronous output with location information; " - + "ASYNC mode is the default mode, asynchronous output with location information; " - + "BRIEF mode is asynchronous output without location information. " - + "Performance improves in the order: NORMAL, ASYNC, BRIEF"}, + @ConfField(description = "The output mode of the FE log. NORMAL mode is synchronous output with location " + + "information; ASYNC mode is the default mode, asynchronous output with location " + + "information; BRIEF mode is asynchronous output without location information. " + + "Performance improves in the order: NORMAL, ASYNC, BRIEF", options = {"NORMAL", "ASYNC", "BRIEF"}) public static String sys_log_mode = "ASYNC"; - @ConfField(description = { - "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."}) + @ConfField(description = "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 modules. VERBOSE level logging is implemented by the DEBUG level of log4j. " - + "If set to `org.apache.doris.catalog`, " - + "DEBUG logs of classes under this package will be printed."}) + @ConfField(description = "Verbose modules. VERBOSE level logging is implemented by the DEBUG level of log4j. If " + + "set to `org.apache.doris.catalog`, DEBUG logs of classes under this package will be " + "printed.") public static String[] sys_log_verbose_modules = {}; - @ConfField(description = {"The split cycle of the FE log file"}, options = {"DAY", "HOUR"}) + @ConfField(description = "The split cycle of the FE log file", options = {"DAY", "HOUR"}) public static String sys_log_roll_interval = "DAY"; - @ConfField(description = { - "The maximum retention time of the FE log file. After this time, the log file will be deleted. " - + "Supported formats include: 7d, 10h, 60m, 120s"}) + @ConfField(description = "The maximum retention time of the FE log file. After 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 = {"Whether to enable compression for FE log files"}) + @ConfField(description = "Whether to enable compression for FE log files") public static boolean sys_log_enable_compress = false; - @ConfField(description = {"The path of the FE audit log file, used to store fe.audit.log"}) + @ConfField(description = "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 = {"The maximum number of FE audit log files. " - + "After exceeding this number, the oldest log file will be deleted"}) + @ConfField(description = "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 = {"The type of FE audit log file"}, + @ConfField(description = "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 = {"The threshold of slow query, in milliseconds. " - + "If the response time of a query exceeds this threshold, it will be recorded in audit log."}) + @ConfField(mutable = true, description = "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 = {"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."}) + @ConfField(mutable = true, description = "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 = {"The split cycle of the FE audit log file"}, + @ConfField(description = "The split cycle of the FE audit log file", options = {"DAY", "HOUR"}) public static String audit_log_roll_interval = "DAY"; - @ConfField(description = {"The maximum retention time of the FE audit log file. " - + "After this time, the log file will be deleted. " - + "Supported formats include: 7d, 10h, 60m, 120s"}) + @ConfField(description = "The maximum retention time of the FE audit log file. After 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 = {"Whether to enable compression for FE audit log files"}) + @ConfField(description = "Whether to enable compression for FE audit log files") public static boolean audit_log_enable_compress = false; - @ConfField(description = {"Active lineage plugins. Specify the name returned by LineagePlugin.name()"}) + @ConfField(description = "Active lineage plugins. Specify the name returned by LineagePlugin.name()") public static String[] activate_lineage_plugin = {}; - @ConfField(description = {"Whether to use a file to record logs. When starting FE with --console, " - + "all logs will be written to both standard output and file. " - + "Disabling this option will stop writing logs to files."}) + @ConfField(description = "Whether to use a file to record logs. When starting FE with --console, all logs will be " + + "written to both standard output and file. Disabling this option will stop writing logs " + "to files.") public static boolean enable_file_logger = true; @ConfField(mutable = false, masterOnly = false, - description = {"Whether to check for table lock leaks"}) + description = "Whether to check for table lock leaks") public static boolean check_table_lock_leaky = false; - @ConfField(mutable = false, description = {"当前 FE 节点所属的 Resource Group。可通过命令行参数 " - + "`--local_resource_group` 或环境变量 `DORIS_LOCAL_RESOURCE_GROUP` 覆盖。空字符串表示未设置。", - "The Resource Group that the current FE node belongs to. It can be overridden by the " - + "`--local_resource_group` command line option or the " - + "`DORIS_LOCAL_RESOURCE_GROUP` environment variable. An empty string means unset."}) + @ConfField(mutable = false, description = "The Resource Group that the current FE node belongs to. It can be " + + "overridden by the `--local_resource_group` command line option or the " + + "`DORIS_LOCAL_RESOURCE_GROUP` environment variable. An empty string " + "means unset.") public static String local_resource_group = ""; @ConfField(mutable = true, masterOnly = false, - description = {"PreparedStatement stmtId starting position, used for testing only"}) + description = "PreparedStatement stmtId starting position, used for testing only") public static long prepared_stmt_start_id = -1; - @ConfField(description = {"The installation directory of the plugin"}) + @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"}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to enable the plugin") public static boolean plugin_enable = true; - @ConfField(description = {"The path to save JDBC drivers. When creating a JDBC Catalog, " - + "if the specified driver file path is not an absolute path, Doris will look for jars in this path"}) + @ConfField(description = "The path to save JDBC drivers. When creating a JDBC Catalog, if the specified driver " + + "file path is not an absolute path, Doris will look for jars in this path") public static String jdbc_drivers_dir = EnvUtils.getDorisHome() + "/plugins/jdbc_drivers"; - @ConfField(description = {"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, it also means to allow all. " - + "When set to concrete paths, driver URLs are matched structurally (component-based), " - + "so path traversal and prefix confusion are rejected."}) + @ConfField(description = "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, it also means to allow all. When set to " + + "concrete paths, driver URLs are matched structurally (component-based), so path " + + "traversal and prefix confusion are rejected.") public static String jdbc_driver_secure_path = "*"; - @ConfField(description = {"Functions that MySQL JDBC Catalog does not support pushing down"}) + @ConfField(description = "Functions that MySQL JDBC Catalog does not support pushing down") public static String[] jdbc_mysql_unsupported_pushdown_functions = {"date_trunc", "money_format", "negative"}; - @ConfField(mutable = true, description = { - "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."}) + @ConfField(mutable = true, description = "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(description = {"Force SQLServer Jdbc Catalog encrypt to false. " - + "This is a security-sensitive switch (it disables SQLServer JDBC transport encryption), " - + "so it can only be set in fe.conf and is not modifiable at runtime via ADMIN SET FRONTEND CONFIG."}) + @ConfField(description = "Force SQLServer Jdbc Catalog encrypt to false. This is a security-sensitive switch (it " + + "disables SQLServer JDBC transport encryption), so it can only be set in fe.conf and is " + + "not modifiable at runtime via ADMIN SET FRONTEND CONFIG.") public static boolean force_sqlserver_jdbc_encrypt_false = false; - @ConfField(mutable = true, masterOnly = true, description = { - "The default parallelism of the load execution plan on a single node when the broker load is submitted"}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "Labels of finished or cancelled load jobs will be removed after this time. " - + "The removed labels can be reused."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "For some high-frequency load jobs such as INSERT, STREAMING LOAD, ROUTINE_LOAD_TASK, and DELETE, " - + "remove the finished job or task if expired. The removed labels can be reused."}) + @ConfField(mutable = true, masterOnly = true, description = "For some high-frequency load jobs such as INSERT, " + + "STREAMING LOAD, ROUTINE_LOAD_TASK, and DELETE, " + "remove the finished job or task if expired. The " + + "removed labels can be reused.") public static int streaming_label_keep_max_second = 43200; // 12 hour - @ConfField(mutable = true, masterOnly = true, description = { - "For ALTER and EXPORT jobs, remove the finished job if expired."}) + @ConfField(mutable = true, masterOnly = true, description = "For ALTER and 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 = { - "For EXPORT jobs, if the number of EXPORT jobs in the system exceeds this value, " - + "the oldest records will be deleted."}) + @ConfField(mutable = true, masterOnly = true, description = "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 cleanup interval for transactions, in seconds. " - + "In each cycle, expired historical transactions will be cleaned up"}) + @ConfField(description = "The cleanup interval for transactions, in seconds. In each cycle, expired historical " + + "transactions will be cleaned up") public static int transaction_clean_interval_second = 30; - @ConfField(description = {"The cleanup interval for load jobs, in seconds. " - + "In each cycle, expired historical load jobs will be cleaned up"}) + @ConfField(description = "The cleanup interval for load jobs, in seconds. In each cycle, expired historical load " + + "jobs will be cleaned up") public static int label_clean_interval_second = 1 * 3600; // 1 hours - @ConfField(mutable = true, masterOnly = true, description = {"Time interval for cleaning up discarded temporary " - + "partitions after an Insert Overwrite task fails, in milliseconds"}) + @ConfField(mutable = true, masterOnly = true, description = "Time interval for cleaning up discarded temporary " + + "partitions after an Insert Overwrite task fails, in " + "milliseconds") public static int overwrite_clean_interval_ms = 10000; - @ConfField(description = {"The directory to save Doris meta data"}) + @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"}) + @ConfField(description = "The directory to save Doris temp data") public static String tmp_dir = EnvUtils.getDorisHome() + "/temp_dir"; - @ConfField(description = {"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"}) + @ConfField(description = "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 = {"The port of BDBJE"}) + @ConfField(description = "The port of BDBJE") public static int edit_log_port = 9010; - @ConfField(mutable = true, masterOnly = true, description = { - "The log roll size of BDBJE. When the number of log entries exceeds this value, the log will be rolled"}) + @ConfField(mutable = true, masterOnly = true, description = "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 = {"The max number of log entries for batching BDBJE"}) + @ConfField(mutable = true, masterOnly = true, description = "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 = {"The max size for batching BDBJE"}) + @ConfField(mutable = true, masterOnly = true, description = "The max size for batching BDBJE") public static long batch_edit_log_max_byte_size = 640 * 1024L; - @ConfField(mutable = true, masterOnly = true, description = { - "The sleep time after writing multiple batching BDBJE entries continuously"}) + @ConfField(mutable = true, masterOnly = true, description = "The sleep time after writing multiple batching BDBJE " + + "entries continuously") public static long batch_edit_log_rest_time_ms = 10; - @ConfField(mutable = true, masterOnly = true, description = { - "After writing multiple batching BDBJE entries continuously, a short rest is needed. " - + "This indicates the write count before a rest"}) + @ConfField(mutable = true, masterOnly = true, description = "After writing multiple batching BDBJE entries " + + "continuously, a short rest is needed. This indicates " + "the write count before a rest") public static long batch_edit_log_continuous_count_for_rest = 1000; - @ConfField(description = {"Batch EditLog writing"}) + @ConfField(description = "Batch EditLog writing") public static boolean enable_batch_editlog = true; - @ConfField(description = {"The tolerated delay time of metadata synchronization, in seconds. " - + "If the metadata delay exceeds this value, non-master FE will stop offering service"}) + @ConfField(description = "The tolerated delay time of metadata synchronization, in seconds. If the metadata delay " + + "exceeds this value, non-master FE will stop offering service") public static int meta_delay_toleration_second = 300; // 5 min - @ConfField(description = {"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"}, + @ConfField(description = "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.htm" + "l", options = {"SYNC", "NO_SYNC", "WRITE_NO_SYNC"}) public static String master_sync_policy = "SYNC"; // SYNC, NO_SYNC, WRITE_NO_SYNC - @ConfField(description = {"Same as `master_sync_policy`"}, + @ConfField(description = "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 = {"The replica ack policy of bdbje. " - + "See: http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.ReplicaAckPolicy.html"}, + @ConfField(description = "The replica ack policy of bdbje. See: " + + "http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.ReplicaAckPoli" + "cy.html", options = {"ALL", "NONE", "SIMPLE_MAJORITY"}) public static String replica_ack_policy = "SIMPLE_MAJORITY"; // ALL, NONE, SIMPLE_MAJORITY - @ConfField(description = {"The heartbeat timeout of BDBJE between master and follower, in seconds. " - + "The default is 30 seconds, which is the same as the default value in BDBJE. " - + "If the network is experiencing transient problems, " - + "or some unexpected long Java GC is bothering you, " - + "you can try to increase this value to decrease the chances of false timeouts"}) + @ConfField(description = "The heartbeat timeout of BDBJE between master and follower, in seconds. The default is " + + "30 seconds, which is the same as the default value in BDBJE. If the network is " + + "experiencing transient problems, or some unexpected long Java GC is bothering 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 = {"The lock timeout of bdbje operation, in seconds. " - + "If there are many LockTimeoutException in FE WARN log, you can try to increase this value"}) + @ConfField(description = "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 = {"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"}) + @ConfField(description = "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 = {"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."}) + @ConfField(description = "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 = {"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."}) + @ConfField(description = "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 = {"Amount of memory used by BDBJE as cache."}) + @ConfField(description = "Amount of memory used by BDBJE as cache.") public static long bdbje_cache_size_bytes = 10 * 1024 * 1024; // 10 MB - @ConfField(description = {"Maximum message size of BDBJE."}) + @ConfField(description = "Maximum message size of BDBJE.") public static long bdbje_max_message_size_bytes = Integer.MAX_VALUE; // 2 GB - @ConfField(masterOnly = true, description = {"Number of threads to handle heartbeat events"}) + @ConfField(masterOnly = true, description = "Number of threads to handle heartbeat events") public static int heartbeat_mgr_threads_num = 8; - @ConfField(masterOnly = true, description = {"Queue size to store heartbeat tasks in heartbeat_mgr"}) + @ConfField(masterOnly = true, description = "Queue size to store heartbeat tasks in heartbeat_mgr") public static int heartbeat_mgr_blocking_queue_size = 1024; - @ConfField(masterOnly = true, description = {"Number of threads to update tablet statistics"}) + @ConfField(masterOnly = true, description = "Number of threads to update tablet statistics") public static int tablet_stat_mgr_threads_num = -1; - @ConfField(masterOnly = true, description = { - "Number of threads to handle agent tasks in the agent task thread pool."}) + @ConfField(masterOnly = true, description = "Number of threads to handle agent tasks in the agent task thread " + + "pool.") public static int max_agent_task_threads_num = 4096; - @ConfField(description = { - "The maximum number of transactions that BDBJE can roll back when trying to rejoin the group. " - + "If the number of transactions to roll back is larger than this value, " - + "BDBJE will not be able to rejoin the group, and you need to clean up BDBJE data manually."}) + @ConfField(description = "The maximum number of transactions that BDBJE can roll back when trying to rejoin the " + + "group. If the number of transactions to roll back 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 = {"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"}) + @ConfField(description = "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 = { - "If true, non-master FE will ignore the metadata delay gap between Master FE and itself, " - + "even if the metadata delay gap exceeds the threshold. " - + "Non-master FE will still offer read service. " - + "This is helpful when you need to stop the Master FE for a relatively long time for some reason, " - + "but still want the non-master FE to offer read service."}) + @ConfField(mutable = true, description = "If true, non-master FE will ignore the metadata delay gap between " + + "Master FE and itself, even if the metadata delay gap exceeds the " + + "threshold. Non-master FE will still offer read service. This is helpful " + + "when you need to stop the Master FE for a relatively long time for some " + + "reason, but still want the non-master FE to offer read service.") public static boolean ignore_meta_check = false; - @ConfField(description = {"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."}) + @ConfField(description = "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 = { - "Whether to enable authentication for all HTTP interfaces"}, varType = VariableAnnotation.EXPERIMENTAL) + @ConfField(mutable = true, description = "Whether to enable " + + "authentication for all HTTP " + "interfaces", varType = VariableAnnotation.EXPERIMENTAL) public static boolean enable_all_http_auth = false; - @ConfField(description = {"Whether to enable FE unified TLS configuration. When enabled, protocols not listed in " - + "tls_excluded_protocols will use TLS implementation."}) + @ConfField(description = "Whether to enable FE unified TLS configuration. When enabled, protocols not listed in " + + "tls_excluded_protocols will use TLS implementation.") public static boolean enable_tls = false; - @ConfField(description = {"Verify mode used by FE TLS. Supported values are verify_peer, verify_none and " - + "verify_fail_if_no_peer_cert."}) + @ConfField(description = "Verify mode used by FE TLS. Supported values are verify_peer, verify_none and " + + "verify_fail_if_no_peer_cert.") public static String tls_verify_mode = "verify_peer"; - @ConfField(description = {"Path to the FE TLS server certificate."}) + @ConfField(description = "Path to the FE TLS server certificate.") public static String tls_certificate_path = ""; - @ConfField(description = {"Path to the FE TLS private key."}) + @ConfField(description = "Path to the FE TLS private key.") public static String tls_private_key_path = ""; - @ConfField(description = {"Password for the FE TLS private key."}) + @ConfField(description = "Password for the FE TLS private key.") public static String tls_private_key_password = ""; - @ConfField(description = {"Path to the FE TLS CA certificate."}) + @ConfField(description = "Path to the FE TLS CA certificate.") public static String tls_ca_certificate_path = ""; - @ConfField(description = {"Refresh interval for FE TLS certificate reload, in seconds."}) + @ConfField(description = "Refresh interval for FE TLS certificate reload, in seconds.") public static int tls_cert_refresh_interval_seconds = 3600; - @ConfField(description = {"Comma-separated list of protocols that should not use TLS. Supported values are " - + "thrift,mysql,http,arrowflight."}) + @ConfField(description = "Comma-separated list of protocols that should not use TLS. Supported values are " + + "thrift,mysql,http,arrowflight.") public static String tls_excluded_protocols = ""; - @ConfField(description = {"Peer certificate DNS SAN allowlist for private protocols. " - + "Syntax: protocol=dns1,dns2;... . Currently supported protocols are thrift and brpc."}) + @ConfField(description = "Peer certificate DNS SAN allowlist for private protocols. Syntax: " + + "protocol=dns1,dns2;... . Currently supported protocols are thrift and brpc.") public static String tls_peer_cert_required_san_dns = ""; - @ConfField(mutable = true, description = { - "Whether password verification can be skipped after cert-based auth succeeds."}) + @ConfField(mutable = true, description = "Whether password verification can be skipped after cert-based auth " + + "succeeds.") public static boolean tls_cert_based_auth_ignore_password = false; - @ConfField(description = {"FE HTTP port. Currently, all FEs' HTTP port must be the same"}) + @ConfField(description = "FE HTTP port. Currently, all FEs' HTTP port must be the same") public static int http_port = 8030; - @ConfField(description = {"FE HTTPS port. Currently, all FEs' HTTPS port must be the same"}) + @ConfField(description = "FE HTTPS port. Currently, all FEs' HTTPS port must be the same") public static int https_port = 8050; - @ConfField(description = {"The key store path of FE https service"}) + @ConfField(description = "The key store path of FE https service") public static String key_store_path = EnvUtils.getDorisHome() + "/conf/ssl/doris_ssl_certificate.keystore"; - @ConfField(description = {"The key store password of FE https service"}) + @ConfField(description = "The key store password of FE https service") public static String key_store_password = ""; - @ConfField(description = {"The key store type of FE https service"}) + @ConfField(description = "The key store type of FE https service") public static String key_store_type = "JKS"; - @ConfField(description = {"The key store alias of FE https service"}) + @ConfField(description = "The key store alias of FE https service") public static String key_store_alias = "doris_ssl_certificate"; - @ConfField(description = {"Whether to enable https, if enabled, http port will not be available"}, + @ConfField(description = "Whether to enable https, if enabled, http port will not be available", varType = VariableAnnotation.EXPERIMENTAL) public static boolean enable_https = false; - @ConfField(description = { - "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."}) + @ConfField(description = "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 = {"The number of selector threads for Jetty."}) + @ConfField(description = "The number of selector threads for Jetty.") public static int jetty_server_selectors = 4; - @ConfField(description = {"The number of worker threads for Jetty. 0 means using the default thread pool."}) + @ConfField(description = "The number of worker threads for Jetty. 0 means using the default thread pool.") public static int jetty_server_workers = 0; - @ConfField(description = {"The default minimum number of threads for jetty."}) + @ConfField(description = "The default minimum number of threads for jetty.") public static int jetty_threadPool_minThreads = 20; - @ConfField(description = {"The default maximum number of threads for jetty."}) + @ConfField(description = "The default maximum number of threads for jetty.") public static int jetty_threadPool_maxThreads = 400; - @ConfField(description = {"The maximum HTTP POST size of Jetty, in bytes, the default value is 100MB."}) + @ConfField(description = "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 在应用未消费完请求体时,额外尝试读取剩余内容的最大次数。" - + "-1 表示不限制,0 表示不额外读取,正数表示最大读取次数。", - "The maximum number of extra reads Jetty performs for unconsumed request content. " - + "-1 means unlimited, 0 means disabled, and a positive value limits the read attempts."}) + @ConfField(description = "The maximum number of extra reads Jetty performs for unconsumed request content. -1 " + + "means unlimited, 0 means disabled, and a positive value limits the read attempts.") public static int jetty_server_max_unconsumed_request_content_reads = -1; - @ConfField(description = {"The maximum HTTP header size of Jetty, in bytes, the default value is 1MB."}) + @ConfField(description = "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 = {"Whether to disable mini load, disabled by default"}) + @ConfField(description = "Whether to disable mini load, disabled by default") public static boolean disable_mini_load = true; - @ConfField(description = {"The backlog number of the MySQL NIO server. " - + "If you increase this value, you should also increase the value in " - + "`/proc/sys/net/core/somaxconn` at the same time"}) + @ConfField(description = "The backlog number of the MySQL NIO server. If you increase this value, you should also " + + "increase the value in `/proc/sys/net/core/somaxconn` at the same time") public static int mysql_nio_backlog_num = 1024; - @ConfField(description = {"Whether to enable TCP Keep-Alive for MySQL connections, disabled by default"}) + @ConfField(description = "Whether to enable TCP Keep-Alive for MySQL connections, disabled by default") public static boolean mysql_nio_enable_keep_alive = false; - @ConfField(description = {"The connection timeout of thrift client, in milliseconds. 0 means no timeout."}) + @ConfField(description = "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."}) + description = "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 = {"The maximum size of a received message of the Thrift server, in bytes"}) + @ConfField(description = "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 = {"The size limit of one frame for the Thrift server transport"}) + @ConfField(description = "The size limit of one frame for the Thrift server transport") public static int thrift_max_frame_size = 16384000; - @ConfField(description = {"The backlog number of the Thrift server. " - + "If you increase this value, you should also increase the value in " - + "`/proc/sys/net/core/somaxconn` at the same time"}) + @ConfField(description = "The backlog number of the Thrift server. If you increase this value, you should also " + + "increase the value in `/proc/sys/net/core/somaxconn` at the same time") public static int thrift_backlog_num = 1024; - @ConfField(description = {"The port of FE thrift server"}) + @ConfField(description = "The port of FE thrift server") public static int rpc_port = 9020; - @ConfField(description = {"The port of FE MySQL server"}) + @ConfField(description = "The port of FE MySQL server") public static int query_port = 9030; - @ConfField(description = {"The port of FE Arrow-Flight-SQL server"}) + @ConfField(description = "The port of FE Arrow-Flight-SQL server") public static int arrow_flight_sql_port = 8070; - @ConfField(description = {"The number of IO threads in the MySQL service"}) + @ConfField(description = "The number of IO threads in the MySQL service") public static int mysql_service_io_threads_num = 4; - @ConfField(description = {"The maximum number of task threads in the MySQL service"}) + @ConfField(description = "The maximum number of task threads in the MySQL service") public static int max_mysql_service_task_threads_num = 4096; - @ConfField(description = {"BackendServiceProxy pool size for pooling GRPC channels."}) + @ConfField(description = "BackendServiceProxy pool size for pooling GRPC channels.") public static int backend_proxy_num = 48; - @ConfField(description = { - "Cluster ID used for internal authentication. Usually a random integer generated when the master FE " - + "starts for the first time. You can also specify one."}) + @ConfField(description = "Cluster ID used for internal authentication. Usually a random integer generated when " + + "the master FE starts for the first time. You can also specify one.") public static int cluster_id = -1; - @ConfField(sensitive = true, description = {"Cluster token used for internal authentication."}) + @ConfField(sensitive = true, description = "Cluster token used for internal authentication.") public static String auth_token = ""; @ConfField(mutable = true, masterOnly = true, - description = {"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"}) + description = "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."}) + @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."}) + @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 = { - "Maximal waiting time for all publish version tasks of one transaction to be finished, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "Waiting time for a transaction to reach \"at least one replica success\", in seconds. " - + "If time exceeds this and each tablet has at least one replica published successfully, " - + "then the load task will be considered successful."}) + @ConfField(mutable = true, masterOnly = true, description = "Waiting time for a transaction to reach \"at least " + + "one replica success\", in seconds. If time exceeds " + "this and each tablet has at least one replica " + + "published successfully, then the load task will be " + "considered successful.") public static int publish_wait_time_second = 300; - @ConfField(mutable = true, masterOnly = true, description = { - "Check the replicas that are undergoing schema change when publishing a transaction. " - + "Do not turn off this check " - + "under normal circumstances. It only temporarily skips the check if " - + "publish version and schema change encounter a deadlock"}) + @ConfField(mutable = true, masterOnly = true, description = "Check the replicas that are undergoing schema change " + + "when publishing a transaction. Do not turn off this " + "check under normal circumstances. It only " + + "temporarily skips the check if publish version and " + "schema change encounter a deadlock") public static boolean publish_version_check_alter_replica = true; - @ConfField(mutable = true, masterOnly = true, description = { - "Log printing interval for failed publish transactions, in seconds"}) + @ConfField(mutable = true, masterOnly = true, description = "Log printing interval for failed publish " + + "transactions, in seconds") public static long publish_fail_log_interval_second = 5 * 60; - @ConfField(mutable = true, masterOnly = true, description = { - "The upper limit of failure logs for PUBLISH_VERSION tasks"}) + @ConfField(mutable = true, masterOnly = true, description = "The upper limit of failure logs for PUBLISH_VERSION " + + "tasks") public static long publish_version_task_failed_log_threshold = 80; - @ConfField(masterOnly = true, description = {"Number of threads to handle publish tasks"}) + @ConfField(masterOnly = true, description = "Number of threads to handle publish tasks") public static int publish_thread_pool_num = 128; - @ConfField(masterOnly = true, description = {"Queue size to store publish tasks in the publish thread pool"}) + @ConfField(masterOnly = true, description = "Queue size to store publish tasks in the publish thread pool") public static int publish_queue_size = 128; - @ConfField(mutable = true, description = {"Whether to enable parallel publish version"}) + @ConfField(mutable = true, description = "Whether to enable parallel publish version") public static boolean enable_parallel_publish_version = true; - @ConfField(masterOnly = true, description = {"Number of threads to handle tablet report tasks"}) + @ConfField(masterOnly = true, description = "Number of threads to handle tablet report tasks") public static int tablet_report_thread_pool_num = 10; - @ConfField(masterOnly = true, description = { - "Queue size to store tablet report tasks in the tablet report thread pool."}) + @ConfField(masterOnly = true, description = "Queue size to store tablet report tasks in the tablet report thread " + + "pool.") public static int tablet_report_queue_size = 1024; - @ConfField(mutable = true, masterOnly = true, description = { - "Maximal waiting time for all data inserted before one transaction to be committed, in seconds. " - + "This parameter is only used for transactional insert operation"}) + @ConfField(mutable = true, masterOnly = true, description = "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 = {"The interval of the publish task trigger thread, in milliseconds"}) + @ConfField(masterOnly = true, description = "The interval of the 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."}) + @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.") public static long max_publishing_txn_num_per_table = 500; - @ConfField(description = {"The maximum number of worker threads of the Thrift server"}) + @ConfField(description = "The maximum number of worker threads of the Thrift server") public static int thrift_server_max_worker_threads = 4096; - @ConfField(mutable = true, masterOnly = true, description = {"Maximal timeout for delete job, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximal timeout for delete job, in seconds.") public static int delete_job_max_timeout_second = 300; - @ConfField(mutable = true, masterOnly = true, description = { - "Minimum number of successfully written replicas for a load job."}) + @ConfField(mutable = true, masterOnly = true, description = "Minimum number of successfully written replicas for " + + "a load job.") public static short min_load_replica_num = -1; - @ConfField(description = {"The interval of the load job scheduler, in seconds."}) + @ConfField(description = "The interval of the load job scheduler, in seconds.") public static int load_checker_interval_second = 5; - @ConfField(description = {"The interval of the ingestion load job scheduler, in seconds."}) + @ConfField(description = "The interval of the ingestion load job scheduler, in seconds.") public static int ingestion_load_checker_interval_second = 60; - @ConfField(mutable = true, masterOnly = true, description = {"Default timeout for broker load jobs, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Default timeout for broker load jobs, in seconds.") public static int broker_load_default_timeout_second = 14400; // 4 hour - @ConfField(description = {"The timeout of RPC between FE and Broker, in milliseconds"}) + @ConfField(description = "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-concurrency short-circuit queries"}) + @ConfField(description = "The timeout of RPC for high-concurrency short-circuit queries") public static int point_query_timeout_ms = 10000; // 10s - @ConfField(mutable = true, masterOnly = true, description = {"Default timeout for insert load jobs, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Default timeout for insert load jobs, in seconds.") public static int insert_load_default_timeout_second = 14400; // 4 hour - @ConfField(mutable = true, masterOnly = true, description = { - "Randomly set ORDER BY keys for MOW tables for testing."}) + @ConfField(mutable = true, masterOnly = true, description = "Randomly set ORDER BY keys for MOW tables for " + + "testing.") public static boolean random_add_order_by_keys_for_mow = false; - @ConfField(mutable = true, masterOnly = true, description = { - "Randomly use V3 storage_format (ext_meta) for some tables in fuzzy tests to increase coverage"}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "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."}) + @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 = true, masterOnly = true, description = { - "Wait for the internal batch to be written before returning; " - + "insert into and stream load use group commit by default."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = false, masterOnly = true, description = {"Default commit interval in ms for group commit"}) + @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 = {"Default commit data bytes for group commit"}) + @ConfField(mutable = false, masterOnly = true, description = "Default commit data bytes for group commit") public static int group_commit_data_bytes_default_value = 134217728; - @ConfField(mutable = true, masterOnly = true, description = { - "The internal group commit timeout is a multiple of the table's group_commit_interval_ms"}) + @ConfField(mutable = true, masterOnly = true, description = "The internal group commit timeout is a multiple of " + + "the table's group_commit_interval_ms") public static int group_commit_timeout_multipler = 10; - @ConfField(mutable = true, masterOnly = true, description = {"Default timeout for stream load jobs, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Default timeout for stream load jobs, in seconds.") public static int stream_load_default_timeout_second = 86400 * 3; // 3days - @ConfField(mutable = true, masterOnly = true, description = { - "Default pre-commit timeout for stream load jobs, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Default pre-commit timeout for stream load jobs, in " + + "seconds.") public static int stream_load_default_precommit_timeout_second = 3600; // 3600s - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to enable memtable on sink node by default in stream load"}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "Whether to enable forwarding group commit stream load to follower nodes." - + " If true, stream load with group commit mode will be forwarded to a follower FE round robin."}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to enable forwarding group commit stream " + + "load to follower nodes. If true, stream load with " + + "group commit mode will be forwarded to a follower FE " + "round robin.") public static boolean enable_forward_group_commit_stream_load_to_follower = false; - @ConfField(mutable = true, masterOnly = true, description = {"Maximum timeout for load jobs, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximum timeout for load jobs, in seconds.") public static int max_load_timeout_second = 259200; // 3days - @ConfField(mutable = true, masterOnly = true, description = {"Maximum timeout for stream load jobs, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximum timeout for stream load jobs, in seconds.") public static int max_stream_load_timeout_second = 259200; // 3days - @ConfField(mutable = true, masterOnly = true, description = {"Minimum timeout for load jobs, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Minimum timeout for load jobs, in seconds.") public static int min_load_timeout_second = 1; // 1s - @ConfField(mutable = true, masterOnly = true, description = { - "Default timeout for ingestion load jobs, in seconds."}) + @ConfField(mutable = true, masterOnly = true, description = "Default timeout for ingestion load jobs, in seconds.") public static int ingestion_load_default_timeout_second = 86400; // 1 day - @ConfField(mutable = true, masterOnly = true, description = { - "Maximum number of waiting jobs for Broker Load. This is a desired number. " - + "In some situations, such as switching the master, " - + "the current number may exceed this value."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximum number of waiting jobs for Broker Load. This " + + "is a desired number. In some situations, such as " + + "switching the master, the current number may exceed " + "this value.") public static int desired_max_waiting_jobs = 100; - @ConfField(mutable = true, masterOnly = true, description = { - "The interval at which FE fetches stream load records from BE."}) + @ConfField(mutable = true, masterOnly = true, description = "The interval at which FE fetches stream load records " + + "from BE.") public static int fetch_stream_load_record_interval_second = 120; - @ConfField(mutable = true, masterOnly = true, description = { - "Default maximum number of recent stream load records that can be stored in memory."}) + @ConfField(mutable = true, masterOnly = true, description = "Default maximum number of recent stream load records " + + "that can be stored in memory.") public static int max_stream_load_record_size = 5000; - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to disable show stream load and clear stream load records in memory."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = {"Whether to enable stream load profile"}) + @ConfField(mutable = true, description = "Whether to enable stream load profile") public static boolean enable_stream_load_profile = false; - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to enable writing to a single replica for stream load and broker load."}, + @ConfField(mutable = true, masterOnly = true, description = "Whether to enable writing to a 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 = { - "Shuffle will not be enabled for DUPLICATE KEY tables if their tablet count is lower than this number"}, + @ConfField(mutable = true, masterOnly = true, description = "Shuffle will not be enabled for DUPLICATE KEY tables " + + "if their tablet count is lower than this number", varType = VariableAnnotation.EXPERIMENTAL) public static int min_tablets_for_dup_table_shuffle = 64; - @ConfField(mutable = true, masterOnly = true, description = { - "Maximum number of concurrently running transactions, including prepare and commit transactions, " - + "under a single database.", - "The transaction manager will reject incoming transactions once this limit is reached."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximum number of concurrently running transactions, " + + "including prepare and commit transactions, under a " + + "single database. The transaction manager will reject " + + "incoming transactions once this limit is reached.") public static int max_running_txn_num_per_db = 10000; - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to move transaction edit log writes outside the write lock to reduce lock contention. " - + "When enabled, edit log entries are enqueued inside the write lock (FIFO preserves ordering) " - + "and awaited outside the lock, reducing write lock hold time " - + "and improving concurrent transaction throughput. " - + "Default is true. Set to false to use the traditional in-lock synchronous write mode."}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to move transaction edit log writes outside " + + "the write lock to reduce lock contention. When " + "enabled, edit log entries are enqueued inside the " + + "write lock (FIFO preserves ordering) and awaited " + + "outside the lock, reducing write lock hold time and " + + "improving concurrent transaction throughput. Default " + + "is true. Set to false to use the traditional in-lock " + "synchronous write mode.") public static boolean enable_txn_log_outside_lock = true; - @ConfField(mutable = true, description = { - "Whether to enable per-transaction parallel publish. When enabled, different transactions " - + "in the same database can finish publishing in parallel across executor threads, " - + "instead of being serialized per database. " - + "When disabled, falls back to per-database routing (old behavior) " - + "where transactions within a DB are published sequentially."}) + @ConfField(mutable = true, description = "Whether to enable per-transaction parallel publish. When enabled, " + + "different transactions in the same database can finish publishing in " + + "parallel across executor threads, instead of being serialized per " + + "database. When disabled, falls back to per-database routing (old " + + "behavior) where transactions within a DB are published sequentially.") public static boolean enable_per_txn_publish = true; - @ConfField(masterOnly = true, description = {"The pending load task executor pool size. " - + "This pool size limits the maximum number of running pending load tasks.", - "Currently, it only limits the pending load tasks of broker load and ingestion load.", - "It should be less than `max_running_txn_num_per_db`"}) + @ConfField(masterOnly = true, description = "The pending load task executor pool size. This pool size limits the " + + "maximum number of running pending load tasks. Currently, it only " + + "limits the pending load tasks 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 = {"The loading load task executor pool size. " - + "This pool size limits the maximum number of running loading load tasks.", - "Currently, it only limits the loading load tasks of broker load."}) + @ConfField(masterOnly = true, description = "The loading load task executor pool size. This pool size limits the " + + "maximum number of running loading load tasks. Currently, it only " + + "limits the loading load tasks of broker load.") public static int async_loading_load_task_pool_size = 10; - @ConfField(mutable = true, masterOnly = true, description = { - "The same meaning as `tablet_create_timeout_second`, but used when deleting a tablet."}) + @ConfField(mutable = true, masterOnly = true, description = "The same meaning as `tablet_create_timeout_second`, " + + "but used when deleting a tablet.") public static int tablet_delete_timeout_second = 2; - @ConfField(mutable = true, masterOnly = true, description = { - "The high watermark of disk capacity usage percent. " - + "This is used for calculating the load score of a backend."}) + @ConfField(mutable = true, masterOnly = true, description = "The high watermark of disk capacity usage percent. " + + "This is used for calculating the load score of a " + "backend.") public static double capacity_used_percent_high_water = 0.75; - @ConfField(mutable = true, masterOnly = true, description = { - "The maximum difference in disk capacity usage percent between BEs. " - + "It is used for calculating the load score of a backend."}) + @ConfField(mutable = true, masterOnly = true, description = "The maximum difference in disk capacity usage " + + "percent between BEs. It is used for calculating the " + "load score of a backend.") public static double used_capacity_percent_max_diff = 0.30; - @ConfField(mutable = true, masterOnly = true, description = { - "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."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "Maximum timeout for ALTER TABLE requests. Set this long enough to accommodate your table data size."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximum timeout for ALTER TABLE requests. Set this " + + "long enough to accommodate your table data size.") public static int alter_table_timeout_second = 86400 * 30; // 1month - @ConfField(mutable = true, masterOnly = true, description = { - "When disable_storage_medium_check is true, ReportHandler will not check the tablet's storage medium " - + "and will disable the storage cooldown function."}) + @ConfField(mutable = true, masterOnly = true, description = "When disable_storage_medium_check is true, " + + "ReportHandler will not check the tablet's storage " + "medium and will disable the storage cooldown " + + "function.") public static boolean disable_storage_medium_check = false; - @ConfField(description = {"When creating a table (or partition), you can specify its storage medium (HDD or SSD)."}) + @ConfField(description = "When creating 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 = { - "After dropping a database (table/partition), you can recover it by using the RECOVER statement.", - "This specifies the maximum data retention time. After this time, the data will be deleted permanently."}) + @ConfField(mutable = true, masterOnly = true, description = "After dropping a database (table/partition), you can " + + "recover it by using the RECOVER statement. This " + "specifies the maximum data retention time. After " + + "this 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 = { - "Minimum bytes that a single broker scanner will read. When splitting files in broker load, " - + "if the size of a split file is less than this value, it will not be split."}) + @ConfField(mutable = true, masterOnly = true, description = "Minimum bytes that a single broker scanner will " + + "read. When splitting files in broker load, if the " + "size of a 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 = {"Maximal concurrency of broker scanners."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "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."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "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."}) + @ConfField(mutable = true, masterOnly = true, description = "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."}) + @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 = {"Maximum number of MySQL server connections per FE."}) + @ConfField(description = "Maximum number of MySQL server connections per FE.") public static int qe_max_connection = 1024; - @ConfField(mutable = true, description = {"Colocate join PlanFragment instance memory limit penalty factor.", - "The memory_limit for colocate join PlanFragment instance = " - + "`exec_mem_limit / min (query_colocate_join_memory_limit_penalty_factor, instance_num)`"}) + @ConfField(mutable = true, description = "Colocate join PlanFragment instance memory limit penalty factor. The " + + "memory_limit for colocate 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; /** @@ -803,8 +759,7 @@ public class Config extends ConfigBase { */ @ConfField(mutable = true, masterOnly = true) public static boolean disable_colocate_balance = false; - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to allow colocate balance between all groups."}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to allow colocate balance between all groups.") public static boolean disable_colocate_balance_between_groups = false; @ConfField public static boolean proxy_auth_enable = false; @@ -829,16 +784,14 @@ public class Config extends ConfigBase { // check token when download image file. @ConfField public static boolean enable_token_check = true; - @ConfField(sensitive = true, description = {"Cluster token for FE meta-service internal HTTP authentication. " - + "When set (non-empty), FE meta-service endpoints (such as image/role/check/put/journal_id) " - + "additionally require the caller to present a matching token header, on top of the existing " - + "node-host check. Empty (default) keeps the legacy behavior of node-host check only, so " - + "existing clusters and rolling upgrades are unaffected. Must be identical on all FEs and " - + "provisioned in fe.conf before enabling, otherwise FEs will reject each other.", - "FE meta-service 内部 HTTP 鉴权使用的集群 token。设置(非空)后,meta-service 端点(如 " - + "image/role/check/put/journal_id)在原有 node-host 校验之上,额外要求调用方携带匹配的 token 头。" - + "为空(默认)时维持仅 node-host 校验的旧行为,存量集群与滚动升级不受影响。必须在所有 FE 上取值一致," - + "并在启用前写入 fe.conf,否则 FE 之间会互相拒绝。"}) + @ConfField(sensitive = true, description = "Cluster token for FE meta-service internal HTTP authentication. When " + + "set (non-empty), FE meta-service endpoints (such as " + + "image/role/check/put/journal_id) additionally require the caller to " + + "present a matching token header, on top of the existing node-host " + + "check. Empty (default) keeps the legacy behavior of node-host check " + + "only, so existing clusters and rolling upgrades are unaffected. Must " + + "be identical on all FEs and provisioned in fe.conf before enabling, " + + "otherwise FEs will reject each other.") public static String fe_meta_auth_token = ""; /** @@ -948,16 +901,11 @@ public class Config extends ConfigBase { * * 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." - }) + @ConfField(mutable = true, description = "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; /** @@ -1172,9 +1120,8 @@ public class Config extends ConfigBase { 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 = { - "The maximum number of batched tasks per RPC assigned to each BE when resending agent tasks, " - + "the default value is 10000."}) + @ConfField(mutable = true, masterOnly = true, description = "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; /** @@ -1307,11 +1254,10 @@ public class Config extends ConfigBase { @ConfField(mutable = false, masterOnly = false) public static String[] force_skip_journal_ids = {}; - @ConfField(description = { - "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."}) + @ConfField(description = "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}; /** @@ -1436,11 +1382,9 @@ public class Config extends ConfigBase { mutable = true, masterOnly = false, callbackClassString = "org.apache.doris.common.cache.NereidsSqlCacheManager$UpdateConfig", - description = { - "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."} - ) + description = "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; /** @@ -1450,11 +1394,9 @@ public class Config extends ConfigBase { mutable = true, masterOnly = false, callbackClassString = "org.apache.doris.nereids.stats.MemoryHboPlanStatisticsProvider$UpdateConfig", - description = { - "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."} - ) + description = "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; /** @@ -1464,11 +1406,9 @@ public class Config extends ConfigBase { mutable = true, masterOnly = false, callbackClassString = "org.apache.doris.nereids.stats.HboPlanInfoProvider$UpdateConfig", - description = { - "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."} - ) + description = "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; /** @@ -1478,24 +1418,23 @@ public class Config extends ConfigBase { mutable = true, masterOnly = false, callbackClassString = "org.apache.doris.common.cache.NereidsSortedPartitionsCacheManager$UpdateConfig", - description = {"The current default setting is 300, which is used to control the expiration time of " - + "the partition metadata cache in NereidsSortedPartitionsCacheManager. " - + "If the cache is not accessed for a period of time, it will be reclaimed."} - ) + description = "The current default setting is 300, which is used to control the expiration time of the " + + "partition metadata cache in NereidsSortedPartitionsCacheManager. 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 = { - "Maximum number of rows that can be cached in SQL/Partition Cache, is 3000 by default."}) + @ConfField(mutable = true, masterOnly = false, description = "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 = { - "Maximum data size of rows that can be cached in SQL/Partition Cache. The default is 30MB."}) + @ConfField(mutable = true, masterOnly = false, description = "Maximum data size of rows that can be cached in " + + "SQL/Partition Cache. The default is 30MB.") public static int cache_result_max_data_size = 31457280; // 30M /** @@ -1569,7 +1508,7 @@ public class Config extends ConfigBase { @ConfField public static boolean enable_bdbje_debug_mode = false; - @ConfField(mutable = false, masterOnly = true, description = {"Whether to enable debug points, used in testing."}) + @ConfField(mutable = false, masterOnly = true, description = "Whether to enable debug points, used in testing.") public static boolean enable_debug_points = false; /** @@ -1602,7 +1541,7 @@ public class Config extends ConfigBase { * 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 = {"The time without GRPC read activity before sending a keepalive ping"}) + @ConfField(description = "The time without GRPC read activity before sending a keepalive ping") public static int grpc_keep_alive_second = 10; /** @@ -1615,8 +1554,7 @@ public class Config extends ConfigBase { * This option should only be enabled when you are sure responses are small and the risk is acceptable. * Takes effect after FE restart. */ - @ConfField(description = {"是否为 BackendServiceClient 使用 gRPC directExecutor", - "Whether to use gRPC directExecutor for BackendServiceClient"}) + @ConfField(description = "Whether to use gRPC directExecutor for BackendServiceClient") public static boolean grpc_backend_client_use_direct_executor = false; /** @@ -1698,8 +1636,8 @@ public class Config extends ConfigBase { /** * Control the max num of tablets per backup job involved. */ - @ConfField(mutable = true, masterOnly = true, description = { - "Control the maximum number of tablets per backup job, to avoid OOM."}) + @ConfField(mutable = true, masterOnly = true, description = "Control the maximum number of tablets per backup " + + "job, to avoid OOM.") public static int max_backup_tablets_per_job = 300000; /** @@ -1711,8 +1649,8 @@ public class Config extends ConfigBase { /** * whether to ignore temp partitions when backup, and not report exception. */ - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to ignore temporary partitions during backup without reporting an exception."}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to ignore temporary partitions during backup " + + "without reporting an exception.") public static boolean ignore_backup_tmp_partitions = false; /** @@ -1725,13 +1663,12 @@ public class Config extends ConfigBase { /** * Whether to enable cloud restore job. */ - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to enable cloud restore job."}, varType = VariableAnnotation.EXPERIMENTAL) + @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 = { - "During the cloud restore job, the maximum number of tablets created per " - + "create-tablets RPC. Default is 256."}) + @ConfField(mutable = true, masterOnly = true, description = "During the cloud restore job, the maximum number of " + + "tablets created per create-tablets RPC. Default is " + "256.") public static int cloud_restore_create_tablet_batch_size = 256; /** @@ -1764,13 +1701,12 @@ public class Config extends ConfigBase { @ConfField(mutable = true, masterOnly = true) public static int table_name_length_limit = 64; - @ConfField(mutable = true, description = {"Used to limit the length of column comments. " - + "If the existing column comment is too long, it will be truncated when displayed."}) + @ConfField(mutable = true, description = "Used to limit the length of column comments. 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 = { - "Default compression type for internal tables. Supported values: LZ4, LZ4F, LZ4HC, ZLIB, ZSTD, " - + "SNAPPY, NONE."}) + @ConfField(mutable = true, description = "Default compression type for internal tables. Supported values: LZ4, " + + "LZ4F, LZ4HC, ZLIB, ZSTD, SNAPPY, NONE.") public static String default_compression_type = "ZSTD"; /* @@ -1859,9 +1795,9 @@ public class Config extends ConfigBase { /* * 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."}) + @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; /** @@ -1886,7 +1822,7 @@ public class Config extends ConfigBase { * 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 jobs."}) + @ConfField(masterOnly = true, description = "The number of threads used to dispatch timer jobs.") public static int job_dispatch_timer_job_thread_num = 2; /** @@ -1896,63 +1832,56 @@ public class Config extends ConfigBase { * {@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."}) + @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 = { - "Maximum number of persisted tasks allowed per job. Tasks exceeding this limit will be discarded. " - + "If the value is less than 1, tasks will not be persisted."}) + @ConfField(masterOnly = true, description = "Maximum number of persisted tasks allowed per job. Tasks exceeding " + + "this limit will be discarded. If the value is less than 1, tasks " + "will not be persisted.") public static int max_persistence_task_count = 100; - @ConfField(masterOnly = true, description = { - "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 two will be" - + " automatically selected."}) + @ConfField(masterOnly = true, description = "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 two will be automatically selected.") public static int mtmv_task_queue_size = 1024; - @ConfField(masterOnly = true, description = { - "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 two will " - + "be automatically selected."}) + @ConfField(masterOnly = true, description = "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 two will be automatically selected.") public static int insert_task_queue_size = 1024; - @ConfField(masterOnly = true, description = { - "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 two will " - + "be automatically selected."}) + @ConfField(masterOnly = true, description = "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 two will be automatically selected.") public static int dictionary_task_queue_size = 1024; - @ConfField(masterOnly = true, description = { - "The maximum time to retain a finished job before it is deleted. Unit: hour."}) + @ConfField(masterOnly = true, description = "The maximum time to retain a finished job before it is deleted. " + + "Unit: hour.") public static int finished_job_cleanup_threshold_time_hour = 24; - @ConfField(masterOnly = true, description = {"The number of threads used to consume Insert tasks, " - + "the value should be greater than 0, if it is <=0, default is 10."}) + @ConfField(masterOnly = true, description = "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 = {"The number of threads used to consume MTMV tasks, " - + "the value should be greater than 0, if it is <=0, default is 10."}) + @ConfField(masterOnly = true, description = "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 = { - "The number of threads used to perform dictionary import and delete tasks. The value should be" - + " greater than 0; otherwise it defaults to 3."}) + @ConfField(masterOnly = true, description = "The number of threads used to perform dictionary import and delete " + + "tasks. The value should be greater than 0; otherwise it defaults to " + "3.") public static int job_dictionary_task_consumer_thread_num = 3; - @ConfField(masterOnly = true, description = {"The number of threads used to execute streaming tasks. " - + "The value should be greater than 0; if it is <=0, the default is 100."}) + @ConfField(masterOnly = true, description = "The number of threads used to execute streaming tasks. The value " + + "should be greater than 0; if it is <=0, the default is 100.") public static int job_streaming_task_exec_thread_num = 100; - @ConfField(masterOnly = true, description = {"The maximum number of streaming jobs. " - + "The value should be greater than 0; if it is <=0, the default is 1024."}) + @ConfField(masterOnly = true, description = "The maximum number of streaming jobs. The value should be greater " + + "than 0; if it is <=0, the default is 1024.") public static int max_streaming_job_num = 1024; - @ConfField(masterOnly = true, description = { - "The maximum number of tasks a streaming job can keep in memory. If the number exceeds the limit, " - + "old records will be discarded."}) + @ConfField(masterOnly = true, description = "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."}) + @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 */ @@ -1987,12 +1916,12 @@ public class Config extends ConfigBase { @ConfField(mutable = true) public static long query_queue_update_interval_ms = 5000; - @ConfField(mutable = true, description = {"When BE memory usage is higher than this value, queries may be queued. " - + "Default value is -1, meaning this feature is disabled. Decimal value range is from 0 to 1."}) + @ConfField(mutable = true, description = "When BE memory usage is higher than this value, queries may be queued. " + + "Default value is -1, meaning this feature is disabled. Decimal value " + "range is from 0 to 1.") public static double query_queue_by_be_used_memory = -1; - @ConfField(mutable = true, description = {"In the scenario of memory back-pressure, " - + "the time interval for periodically obtaining BE memory usage."}) + @ConfField(mutable = true, description = "In the scenario of memory back-pressure, the time interval for " + + "periodically obtaining BE memory usage.") public static long get_be_resource_usage_interval_ms = 10000; @ConfField(mutable = false, masterOnly = true) @@ -2055,20 +1984,19 @@ public class Config extends ConfigBase { * 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 = { - "If set to true, queries on external tables will prefer to be assigned to compute nodes. " - + "The maximum number of compute nodes is controlled by min_backend_num_for_external_table. " - + "If set to false, queries on external tables will be assigned to any node. " - + "If there are no compute nodes in the cluster, this config has no effect."}) + @ConfField(mutable = true, description = "If set to true, queries on external tables will prefer to be assigned " + + "to compute nodes. The maximum number of compute nodes is controlled by " + + "min_backend_num_for_external_table. If set to false, queries on " + + "external tables will be assigned to any node. If there are no compute " + + "nodes in the cluster, this config has no effect.") public static boolean prefer_compute_node_for_external_table = false; - @ConfField(mutable = true, description = {"Only takes effect when prefer_compute_node_for_external_table is true. " - + "If the compute node count is less than this value, " - + "queries on external tables will try to use some mix nodes as well, " - + "to let the total number of nodes reach this value. " - + "If the compute node count is larger than this value, " - + "queries on external tables will be assigned to compute nodes only. " - + "-1 means only use current compute nodes."}) + @ConfField(mutable = true, description = "Only takes effect when prefer_compute_node_for_external_table is true. " + + "If the compute node count is less than this value, queries on external " + + "tables will try to use some mix nodes as well, to let the total number " + + "of nodes reach this value. If the compute node count is larger than " + + "this value, queries on external tables will be assigned to compute " + + "nodes only. -1 means only use current compute nodes.") public static int min_backend_num_for_external_table = -1; /** @@ -2086,18 +2014,18 @@ public class Config extends ConfigBase { @ConfField(mutable = true, masterOnly = false) public static boolean disable_backend_black_list = false; - @ConfField(mutable = true, masterOnly = false, description = { - "If a backend is attempted to be added to the blacklist do_add_backend_black_list_threshold_count times " - + "within do_add_backend_black_list_threshold_seconds, it will be added to the blacklist."}) + @ConfField(mutable = true, masterOnly = false, description = "If a backend is attempted to be added to the " + + "blacklist do_add_backend_black_list_threshold_count " + "times within " + + "do_add_backend_black_list_threshold_seconds, it " + "will be added to the blacklist.") public static long do_add_backend_black_list_threshold_count = 10; - @ConfField(mutable = true, masterOnly = false, description = { - "If a backend is attempted to be added to the blacklist do_add_backend_black_list_threshold_count times " - + "within do_add_backend_black_list_threshold_seconds, it will be added to the blacklist."}) + @ConfField(mutable = true, masterOnly = false, description = "If a backend is attempted to be added to the " + + "blacklist do_add_backend_black_list_threshold_count " + "times within " + + "do_add_backend_black_list_threshold_seconds, it " + "will be added to the blacklist.") public static long do_add_backend_black_list_threshold_seconds = 30; - @ConfField(mutable = true, masterOnly = false, description = { - "A backend will stay in the blacklist for this duration after being added."}) + @ConfField(mutable = true, masterOnly = false, description = "A backend will stay in the blacklist for this " + + "duration after being added.") public static long stay_in_backend_black_list_threshold_seconds = 60; /** @@ -2160,48 +2088,48 @@ public class Config extends ConfigBase { * Max cache num of hive partition. * Decrease this value if FE's memory is small */ - @ConfField(description = {"Maximum cache number of partitions at table level in Hive Metastore."}) + @ConfField(description = "Maximum cache number of partitions at table level in Hive Metastore.") public static long max_hive_partition_cache_num = 100000; - @ConfField(description = {"Maximum cache number of Hudi/Iceberg tables."}) + @ConfField(description = "Maximum cache number of Hudi/Iceberg tables.") public static long max_external_table_cache_num = 1000; - @ConfField(description = {"Maximum cache number of database and table instances in external catalogs."}) + @ConfField(description = "Maximum cache number of database and table instances in external catalogs.") public static long max_meta_object_cache_num = 1000; - @ConfField(mutable = false, masterOnly = false, description = { - "Stripe count used by multi-key MetaCacheEntry instances such as external object caches."}) + + @ConfField(mutable = false, masterOnly = false, description = + "Stripe count used by multi-key MetaCacheEntry instances such as external object caches.") public static int external_meta_cache_object_entry_lock_stripes = 256; - @ConfField(mutable = true, masterOnly = false, description = { + @ConfField(mutable = true, masterOnly = false, description = "Whether to synchronously refresh external database/table names when a name lookup misses in an " + "existing cached snapshot. This option is enabled by default to preserve existing external " + "catalog visibility behavior. Disable it to avoid repeated remote name enumeration for " - + "non-existent objects."}) + + "non-existent objects.") public static boolean enable_external_meta_cache_name_miss_refresh = true; - @ConfField(description = {"Maximum cache number of Hive partitioned tables."}) + @ConfField(description = "Maximum cache number of Hive partitioned tables.") public static long max_hive_partition_table_cache_num = 10000; - @ConfField(mutable = false, masterOnly = false, description = { - "Max number of hive partition values to return while list partitions, -1 means no limitation."}) + @ConfField(mutable = false, masterOnly = false, description = "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."}) + @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 = { - "Maximum cache number of external table row counts."}) + @ConfField(mutable = false, masterOnly = false, description = "Maximum cache number of external table row counts.") public static long max_external_table_row_count_cache_num = 100000; - @ConfField(description = {"Maximum cached file number for external table split file meta cache at query level."}) + @ConfField(description = "Maximum cached file number for external table split file meta cache at query level.") public static long max_external_table_split_file_meta_cache_num = 100000; /** * Maximum number of MaxCompute Storage API write block IDs that can be allocated in one write session. */ - @ConfField(mutable = false, masterOnly = true, description = { - "Maximum number of MaxCompute Storage API write block IDs that can be allocated in one write session."}) + @ConfField(mutable = false, masterOnly = true, description = "Maximum number of MaxCompute Storage API write " + + "block IDs that can be allocated in one write " + "session.") public static long max_compute_write_max_block_count = 20000L; /** @@ -2225,13 +2153,18 @@ public class Config extends ConfigBase { @ConfField(mutable = false, masterOnly = false) public static long max_external_schema_cache_num = 10000; - @ConfField(description = { - "The expiration time of a cache object after its last access. Used for external meta cache."}) + @ConfField(description = "The expiration time of a cache object after its last access. Used for external meta " + + "cache.") public static long external_cache_expire_time_seconds_after_access = 86400L; // 24 hours - @ConfField(description = {"The auto-refresh interval of the external meta cache."}) + @ConfField(description = "The auto-refresh interval of the external meta cache.") public static long external_cache_refresh_time_minutes = 10; // 10 mins + // Enable manual miss load for external meta cache to avoid blocking replayer on slow loaders. + @ConfField(mutable = true, masterOnly = false, + description = "Whether external meta cache uses manual miss load instead of Caffeine sync load.") + public static boolean enable_external_meta_cache_manual_miss_load = true; + /** * Github workflow test type, for setting some session variables * only for certain test type. E.g. only settting batch_size to small @@ -2261,9 +2194,8 @@ public class Config extends ConfigBase { @ConfField(mutable = true, masterOnly = true) public static int max_same_name_catalog_trash_num = 3; - @ConfField(masterOnly = true, description = { - "The interval between catalog recycle bin clean tasks. " - + "Default is 30000 milliseconds (30 seconds)."}) + @ConfField(masterOnly = true, description = "The interval between catalog recycle bin clean tasks. Default is " + + "30000 milliseconds (30 seconds).") public static long catalog_recycle_bin_interval_ms = 30 * 1000; /** @@ -2308,18 +2240,16 @@ public class Config extends ConfigBase { @ConfField( mutable = true, callbackClassString = "org.apache.doris.common.cache.NereidsSqlCacheManager$UpdateConfig", - description = {"Currently defaults to 100. This config is used to control the number of " - + "SQL caches managed by NereidsSqlCacheManager."} - ) + description = "Currently defaults to 100. This config is used to control the number of SQL caches managed " + + "by NereidsSqlCacheManager.") public static int sql_cache_manage_num = 100; @ConfField( mutable = true, callbackClassString = "org.apache.doris.common.cache.NereidsSortedPartitionsCacheManager$UpdateConfig", - description = {"Currently defaults to 100. This is used to control the number of ordered " - + "partition metadata caches in NereidsSortedPartitionsCacheManager, " - + "and to accelerate partition pruning."} - ) + description = "Currently defaults to 100. This 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; /** @@ -2328,9 +2258,8 @@ public class Config extends ConfigBase { @ConfField( mutable = true, callbackClassString = "org.apache.doris.nereids.stats.MemoryHboPlanStatisticsProvider$UpdateConfig", - description = {"Currently defaults to 100000. This config is used to control the number of " - + "HBO plan stats cache entries."} - ) + description = "Currently defaults to 100000. This config is used to control the number of HBO plan stats " + + "cache entries.") public static int hbo_plan_stats_cache_num = 100000; /** @@ -2338,9 +2267,8 @@ public class Config extends ConfigBase { */ @ConfField( mutable = true, - description = {"Currently defaults to 10. This config is used to control the number of " - + "recent runs entries in the HBO plan stats cache."} - ) + description = "Currently defaults to 10. This config is used to control the number of recent runs entries " + + "in the HBO plan stats cache.") public static int hbo_plan_stats_cache_recent_runs_entry_num = 10; /** @@ -2349,9 +2277,8 @@ public class Config extends ConfigBase { @ConfField( mutable = true, callbackClassString = "org.apache.doris.nereids.stats.HboPlanInfoProvider$UpdateConfig", - description = {"Currently defaults to 1000. This config is used to control the number of " - + "HBO plan info cache entries."} - ) + description = "Currently defaults to 1000. This config is used to control the number of HBO plan info " + + "cache entries.") public static int hbo_plan_info_cache_num = 1000; /** @@ -2479,9 +2406,8 @@ public class Config extends ConfigBase { @ConfField(mutable = true) public static boolean enable_round_robin_create_tablet = true; - @ConfField(mutable = true, masterOnly = true, description = { - "When creating tablets for a partition, always start from the first BE. " - + "Note: This method may cause BE imbalance."}) + @ConfField(mutable = true, masterOnly = true, description = "When creating tablets for 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; /** @@ -2541,33 +2467,33 @@ public class Config extends ConfigBase { @ConfField(mutable = true) public static boolean enable_query_hit_stats = false; - @ConfField(mutable = true, description = {"When set to true, if a query is unable to select a healthy replica, " - + "the detailed information of all replicas of the tablet, " - + "including the specific reason why they are unqueryable, will be printed out."}) + @ConfField(mutable = true, description = "When set to true, if a query is unable to select a healthy replica, the " + + "detailed information of all 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 = { - "Whether to enable the binlog feature"}) + @ConfField(mutable = false, masterOnly = false, varType = VariableAnnotation.EXPERIMENTAL, description = "Whether " + + "to " + "enable " + "the " + "binlog " + "feature") public static boolean enable_feature_binlog = false; - @ConfField(mutable = false, description = {"Whether to enable the binlog feature for databases/tables by default"}) + @ConfField(mutable = false, description = "Whether to enable the binlog feature for databases/tables by default") public static boolean force_enable_feature_binlog = false; - @ConfField(mutable = false, masterOnly = false, varType = VariableAnnotation.EXPERIMENTAL, description = { - "Set the maximum byte length of a binlog message"}) + @ConfField(mutable = false, masterOnly = false, varType = VariableAnnotation.EXPERIMENTAL, description = "Set the " + + "maximum " + "byte " + "length " + "of a " + "binlog " + "message") public static int max_binlog_messsage_size = 1024 * 1024 * 1024; - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to disable creating catalog with WITH RESOURCE statement."}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to disable creating catalog with WITH " + + "RESOURCE statement.") public static boolean disallow_create_catalog_with_resource = true; - @ConfField(mutable = true, masterOnly = false, description = {"Sample size for hive row count estimation."}) + @ConfField(mutable = true, masterOnly = false, description = "Sample size for hive row count estimation.") public static int hive_stats_partition_sample_size = 30; - @ConfField(mutable = true, masterOnly = true, description = {"Whether to enable external Hive bucket tables"}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to enable external Hive bucket tables") public static boolean enable_create_hive_bucket_table = false; - @ConfField(mutable = true, masterOnly = true, description = {"Default Hive file format when creating tables."}) + @ConfField(mutable = true, masterOnly = true, description = "Default Hive file format when creating tables.") public static String hive_default_file_format = "orc"; @ConfField @@ -2576,42 +2502,34 @@ public class Config extends ConfigBase { @ConfField(mutable = true) 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 internal tables. If this 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 affect operations including creating partitions " - + "and modifying table properties. " - + "This config is recommended to be used only in the test environment."}) + @ConfField(mutable = true, masterOnly = true, description = "Used to force the number of replicas of internal " + + "tables. If this 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 affect 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 internal tables. If this 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 affects operations including creating tables, creating partitions, and creating " - + "dynamic partitions. This config is recommended to be used only in the test environment."}) + @ConfField(mutable = true, description = "Used to force set the replica allocation of internal tables. If this " + + "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 " + + "affects operations including creating tables, creating partitions, and " + + "creating 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; - @ConfField(mutable = true, masterOnly = true, description = { - "统计信息收集时 string 列允许的最大字节长度。若列中存在长度超过该值的行," - + "该列的统计信息将被跳过收集(task 仍标记为 FINISHED,在 SHOW ANALYZE 中显示跳过原因)。" - + "≤ 0 表示关闭此保护。默认 1024 (1KB)。" - + "注意:此保护只覆盖 FULL / LINEAR / DUJ1 统计收集路径(即 analyze 全表和 sample 的主 SQL)。" - + "当 enable_partition_analyze=true 时的 per-partition 路径(PARTITION_ANALYZE_TEMPLATE)" - + "出于正确性考虑不启用该保护,详见 BaseAnalysisTask 中的 NOTE。", - "Max byte length allowed for a string column when collecting statistics. " - + "If any row in a string column is longer than this value, the column's stats " - + "collection is skipped (the task is still marked FINISHED, with the skip reason " - + "shown in SHOW ANALYZE). A value <= 0 disables this protection. Default: 1024 (1KB). " - + "Note: this protection applies to the FULL / LINEAR / DUJ1 collection paths " - + "(i.e. the main SQL used by full-table and sample analyze). The per-partition path " - + "(PARTITION_ANALYZE_TEMPLATE, used when enable_partition_analyze=true) is intentionally " - + "not guarded for correctness reasons; see the NOTE in BaseAnalysisTask."}) + @ConfField(mutable = true, masterOnly = true, description = "Max byte length allowed for a string column when " + + "collecting statistics. If any row in a string column " + "is longer than this value, the column's stats " + + "collection is skipped (the task is still marked " + "FINISHED, with the skip reason shown in SHOW " + + "ANALYZE). A value <= 0 disables this protection. " + + "Default: 1024 (1KB). Note: this protection applies " + + "to the FULL / LINEAR / DUJ1 collection paths (i.e. " + + "the main SQL used by full-table and sample analyze). " + + "The per-partition path (PARTITION_ANALYZE_TEMPLATE, " + "used when enable_partition_analyze=true) is " + + "intentionally not guarded for correctness reasons; " + "see the NOTE in BaseAnalysisTask.") public static long statistics_max_string_column_length = 1024; @ConfField(mutable = false) @@ -2623,145 +2541,132 @@ public class Config extends ConfigBase { @ConfField(mutable = true) public static boolean force_sample_analyze = false; // avoid full analyze for performance reason - @ConfField(mutable = true, description = {"The maximum number of partitions allowed for an Export job"}) + @ConfField(mutable = true, description = "The maximum number of partitions allowed for an Export job") public static int maximum_number_of_export_partitions = 2000; - @ConfField(mutable = true, description = {"Whether to use MySQL's BIGINT type to return Doris's LARGEINT type"}) + @ConfField(mutable = true, description = "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 = {"Temporary config field. Will make all OLAP tables enable light schema change."}) + @ConfField(description = "Temporary config field. 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 = { - "When querying the information_schema.metadata_name_ids table, " - + "the timeout for obtaining all tables in one database."}) + @ConfField(mutable = true, masterOnly = false, description = "When querying the " + + "information_schema.metadata_name_ids table, the " + "timeout for obtaining all tables in one database.") public static long query_metadata_name_ids_timeout = 3; - @ConfField(mutable = true, masterOnly = true, description = {"Whether to disable LocalDeployManager drop node."}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to disable LocalDeployManager drop node.") public static boolean disable_local_deploy_manager_drop_node = true; - @ConfField(mutable = true, description = { - "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."}) + @ConfField(mutable = true, description = "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."}) + @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."}) + @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."}) + @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 = {"The maximum difference in the number of splits between nodes. " - + "If this number is exceeded, the splits will be redistributed."}) + @ConfField(mutable = true, description = "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 = {"Determines the number of persisted automatic analyze job execution status records."}) + @ConfField(description = "Determines the number of persisted automatic analyze job execution status records.") public static long analyze_record_limit = 20000; - @ConfField(mutable = true, masterOnly = true, description = {"Minimum number of buckets for auto bucketing."}) + @ConfField(mutable = true, masterOnly = true, description = "Minimum number of buckets for auto bucketing.") public static int autobucket_min_buckets = 3; - @ConfField(mutable = true, masterOnly = true, description = {"Maximum number of buckets for auto bucketing."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximum number of buckets for auto bucketing.") public static int autobucket_max_buckets = 128; - @ConfField(mutable = true, masterOnly = true, description = { - "Maximum number of buckets allowed when creating a table or adding a partition. " - + "This config shares the same default value with autobucket_max_buckets for consistency. " - + "Behavior: " - + "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."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximum number of buckets allowed when creating a " + + "table or adding a partition. This config shares the " + + "same default value with autobucket_max_buckets for " + + "consistency. Behavior: 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 = {"Maximum number of connections for the Arrow Flight Server per FE."}) + @ConfField(description = "Maximum number of connections for the Arrow Flight Server per FE.") public static int arrow_flight_max_connections = 4096; - @ConfField(mutable = true, masterOnly = true, description = { - "In auto bucketing, the number of buckets is estimated based on the partition size. " - + "For storage and computing integration, a partition size of 5GB is estimated as one bucket, " - + "but for cloud, a partition size of 10GB is estimated as one bucket. " - + "If the configuration is less than 0, the code will adaptively use a default of 5GB " - + "in non-cloud mode, and 10GB in cloud mode."}) + @ConfField(mutable = true, masterOnly = true, description = "In auto bucketing, the number of buckets is " + + "estimated based on the partition size. For storage " + + "and computing integration, a partition size of 5GB " + "is estimated as one bucket, but for cloud, a " + + "partition size of 10GB is estimated as one bucket. " + + "If the configuration is less than 0, the code will " + + "adaptively use a default of 5GB in non-cloud mode, " + "and 10GB in cloud mode.") public static int autobucket_partition_size_per_bucket_gb = -1; - @ConfField(mutable = true, masterOnly = true, description = { - "If the new partition bucket number calculated by auto bucketing exceeds this percentage " - + "of the previous partition's bucket number, " - + "it is considered an abnormal case and triggers an alert."}) + @ConfField(mutable = true, masterOnly = true, description = "If the new partition bucket number calculated by " + + "auto bucketing exceeds this percentage of the " + "previous partition's bucket number, it is considered " + + "an abnormal case and triggers an alert.") public static double autobucket_out_of_bounds_percent_threshold = 0.5; - @ConfField(description = { - "(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. " - + "A bearer token evicted from the cache will unregister its ConnectContext."}) + @ConfField(description = "(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. A bearer token evicted from the cache will unregister its " + "ConnectContext.") public static int arrow_flight_token_cache_size = 4096; - @ConfField(description = { - "The alive time of the user token in Arrow Flight Server (expire after write), in seconds. " - + "The default value is 86400, which is 1 day."}) + @ConfField(description = "The alive time of the user token in Arrow Flight Server (expire after write), in " + + "seconds. The default value is 86400, which is 1 day.") public static int arrow_flight_token_alive_time_second = 86400; - @ConfField(mutable = true, description = { - "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."}) + @ConfField(mutable = true, description = "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."}) + @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 = { - "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."}) + @ConfField(description = "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 = { - "When enabled, data can be processed using the globally created Java UDF function during import. " - + "The default setting is false."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "Used to enable Python UDF. Default is true. If this configuration is false, " - + "creation and use of Python UDF is disabled. " - + "In some scenarios it may be necessary to disable this configuration to prevent " - + "command injection attacks."}) + @ConfField(description = "Used to enable Python UDF. Default is true. If this configuration is false, creation " + + "and use of Python UDF is disabled. In some scenarios it may be necessary to disable " + + "this configuration to prevent command injection attacks.") public static boolean enable_python_udf = true; - @ConfField(description = {"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."}) + @ConfField(description = "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 = { - "The timeout for FE Follower/Observer synchronizing an image file from the FE Master. Can be adjusted " - + "based on the size of the image file in ${meta_dir}/image and the network environment between " - + "nodes. The default value is 300."}) + @ConfField(mutable = true, description = "The timeout for FE Follower/Observer synchronizing an image file from " + + "the FE Master. Can be adjusted based on the size of the image file in " + + "${meta_dir}/image and the network environment between nodes. The " + "default value is 300.") public static int sync_image_timeout_second = 300; - @ConfField(mutable = true, description = { - "The batch size (in bytes) when loading the binary content of a module from the " - + "image file into a byte array and deserializing it into a UTF-8 encoded string " - + "when FE starts. A value of -1 means reading the entire byte array at once and " - + "then deserializing it into a UTF-8 encoded string; any other value means reading " - + "a certain size (at least 16MB) of byte array in batches, deserializing each into a " - + "UTF-8 encoded string, and then merging them into a complete string. The default value is -1."}) + @ConfField(mutable = true, description = "The batch size (in bytes) when loading the binary content of a module " + + "from the image file into a byte array and deserializing it into a UTF-8 " + + "encoded string when FE starts. A value of -1 means reading the entire " + + "byte array at once and then deserializing it into a UTF-8 encoded " + + "string; any other value means reading a certain size (at least 16MB) of " + + "byte array in batches, deserializing each into a UTF-8 encoded string, " + + "and then merging them into a complete string. The default value is -1.") public static int metadata_text_read_max_batch_bytes = -1; @ConfField(mutable = true, masterOnly = true) @@ -2789,8 +2694,8 @@ public class Config extends ConfigBase { @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."}) + @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) @@ -2799,58 +2704,54 @@ public class Config extends ConfigBase { @ConfField(mutable = true, masterOnly = true) public static int workload_group_max_num = 15; - @ConfField(description = {"The timeout threshold for checking the WAL queue on BE, in milliseconds."}) + @ConfField(description = "The timeout threshold for checking the WAL queue on BE, in milliseconds.") public static int check_wal_queue_timeout_threshold = 180000; // 3 min - @ConfField(mutable = true, masterOnly = true, description = { - "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."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "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."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "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."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = { - "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`"}) + @ConfField(masterOnly = true, description = "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 = {"The path of the nereids trace file."}) + @ConfField(description = "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 = { - "The maximum number of snapshots assigned to an upload task during the backup process. " - + "The default value is 10."}) + @ConfField(mutable = true, masterOnly = true, description = "The maximum number of snapshots assigned to an " + + "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 = { - "The maximum number of snapshots assigned to a download task during the restore process. " - + "The default value is 10."}) + @ConfField(mutable = true, masterOnly = true, description = "The maximum 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 = { - "The maximum number of batched tasks per RPC assigned to each BE during the backup/restore process. " - + "The default value is 10000."}) + @ConfField(mutable = true, masterOnly = true, description = "The maximum 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 = {"The number of concurrent restore tasks per BE."}) + @ConfField(mutable = true, masterOnly = true, description = "The number of concurrent restore tasks per BE.") public static int restore_task_concurrency_per_be = 5000; - @ConfField(mutable = true, description = { - "The time after which a BE is considered unavailable if no heartbeat is received."}) + @ConfField(mutable = true, description = "The time after which a BE is considered unavailable if no heartbeat is " + + "received.") public static int agent_task_be_unavailable_heartbeat_timeout_second = 300; - @ConfField(description = {"Whether to enable the function of getting log files through the HTTP interface."}) + @ConfField(description = "Whether to enable the function of getting log files through the HTTP interface.") public static boolean enable_get_log_file_api = false; @ConfField(mutable = true) @@ -2858,18 +2759,16 @@ public class Config extends ConfigBase { @ConfField(mutable = true) public static boolean enable_collect_internal_query_profile = false; - @ConfField(mutable = false, masterOnly = false, description = { - "The maximum number of worker threads for the HTTP SQL submitter."}) + @ConfField(mutable = false, masterOnly = false, description = "The maximum number of worker threads for the HTTP " + + "SQL submitter.") public static int http_sql_submitter_max_worker_threads = 2; - @ConfField(mutable = true, masterOnly = true, description = { - "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."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = {"Specify the default authentication class of internal catalog"}, + @ConfField(description = "Specify the default authentication class of internal catalog", options = {"default", "ranger-doris"}) public static String access_controller_type = "default"; @@ -2882,46 +2781,43 @@ public class Config extends ConfigBase { @ConfField public static boolean ignore_bdbje_log_checksum_read = false; - @ConfField(description = { - "Specifies the primary MySQL authenticator name, either a built-in authenticator " - + "or an authentication plugin name"}, + @ConfField(description = "Specifies the primary MySQL authenticator name, either a built-in authenticator or an " + + "authentication plugin name", options = {"default", "password", "ldap", ""}) public static String authentication_type = "default"; - @ConfField(mutable = true, description = { - "Specifies the authentication chain used after primary authentication failure, " - + "multiple integration names are comma-separated"}) + @ConfField(mutable = true, description = "Specifies the authentication chain used after primary authentication " + + "failure, multiple integration names are comma-separated") public static String authentication_chain = ""; // The dir the trino-connector catalog loads Trino's own plugins from, used verbatim. Keep the // default in sync with BE config trino_connector_plugin_dir: FE and BE load the same plugins and // an operator who leaves both untouched expects both to find them. - @ConfField(mutable = true, masterOnly = false, description = { - "Specify the default plugins loading path for the trino-connector catalog"}) + @ConfField(mutable = true, masterOnly = false, description = "Specify the default plugins loading path for the " + + "trino-connector catalog") public static String trino_connector_plugin_dir = EnvUtils.getDorisHome() + "/plugins/trino_plugins"; @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."}) + @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 = { - "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."}) + @ConfField(mutable = true, masterOnly = true, description = "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 = {"Whether to enable proxy protocol"}) + @ConfField(description = "Whether to enable proxy protocol") public static boolean enable_proxy_protocol = false; - @ConfField(description = { - "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."}) + @ConfField(description = "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 = {"Used to control the interval time of ProfileManager for profile garbage collection."}) + @ConfField(description = "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 @@ -2932,17 +2828,17 @@ public class Config extends ConfigBase { public static boolean checkpoint_after_check_compatibility = false; // Advance the next id before transferring to the master. - @ConfField(description = {"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."}) + @ConfField(description = "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 = {"The threshold to do manual GC when doing checkpoint but not enough memory"}) + @ConfField(description = "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 = { - "Whether to log the request content before each request starts, specifically the query statements."}) + @ConfField(mutable = true, description = "Whether to log the request content before each request starts, " + + "specifically the query statements.") public static boolean enable_print_request_before_execution = false; @ConfField @@ -2960,54 +2856,51 @@ public class Config extends ConfigBase { 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 will be spilled to storage after the query has been finished for this duration."}) + @ConfField(mutable = true, description = "Profile will be spilled to storage after the query has been finished " + + "for this duration.") public static int profile_waiting_time_for_spill_seconds = 10; // Enable profile archive feature. When enabled, profiles exceeding storage limits // will be archived to compressed ZIP files instead of being directly deleted. - @ConfField(mutable = true, description = { - "Enable profile archive feature. When enabled, profiles exceeding storage limits " - + "will be archived to compressed ZIP files instead of being directly deleted."}) + @ConfField(mutable = true, description = "Enable profile archive feature. When enabled, profiles exceeding " + + "storage limits will be archived to compressed ZIP files instead of " + "being directly deleted.") public static boolean enable_profile_archive = true; // Number of profiles to include in each archive ZIP file. // Recommended value: 1000 - @ConfField(mutable = true, description = {"Number of profiles per archive ZIP file. Recommended: 1000"}) + @ConfField(mutable = true, description = "Number of profiles per archive ZIP file. Recommended: 1000") public static int profile_archive_batch_size = 1000; // Storage path for archived profiles. // If empty, defaults to ${spilled_profile_storage_path}/archive - @ConfField(description = { - "Storage path for archived profiles. Defaults to ${spilled_profile_storage_path}/archive if empty."}) + @ConfField(description = "Storage path for archived profiles. Defaults to ${spilled_profile_storage_path}/archive " + + "if empty.") public static String profile_archive_path = ""; // Retention period for archive files in seconds. // -1: keep forever // 0: disable archiving (equivalent to enable_profile_archive = false) // >0: delete archives older than specified seconds (e.g., 604800 = 30 days) - @ConfField(mutable = true, description = { - "Retention period for archive files in seconds. -1 for unlimited, 0 to disable archiving."}) + @ConfField(mutable = true, description = "Retention period for archive files in seconds. -1 for unlimited, 0 to " + + "disable archiving.") public static int profile_archive_retention_seconds = 28800; // 8 hours // Maximum waiting time for pending archive files in seconds. // If the oldest file in pending directory exceeds this time, archive will be forced // even if the batch size is not reached. - @ConfField(mutable = true, description = {"Maximum waiting time for pending archive files in seconds. " - + "Forces archive even if the batch is not full."}) + @ConfField(mutable = true, description = "Maximum waiting time for pending archive files in seconds. Forces " + + "archive even if the batch is not full.") public static int profile_archive_pending_timeout_seconds = 3600; // 1 hours - @ConfField(mutable = true, description = {"Whether to abort transactions by checking coordinator BE heartbeat."}) + @ConfField(mutable = true, description = "Whether to abort transactions by checking coordinator BE heartbeat.") public static boolean enable_abort_txn_by_checking_coordinator_be = true; - @ConfField(mutable = true, description = { - "Whether to abort transactions by checking conflict transactions in schema change " - + "or cloud upgrade checks."}) + @ConfField(mutable = true, description = "Whether to abort transactions by checking conflict transactions in " + + "schema change or cloud upgrade checks.") public static boolean enable_abort_txn_by_checking_conflict_txn = true; - @ConfField(mutable = true, description = { - "Columns that have not been collected within the specified interval will trigger automatic analyze. " - + "0 means not trigger."}) + @ConfField(mutable = true, description = "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. @@ -3016,32 +2909,32 @@ public class Config extends ConfigBase { @ConfField(mutable = true, masterOnly = true) public static boolean enable_checkpoint = true; - @ConfField(description = {"The default directory for storing hadoop conf configuration files."}) + @ConfField(description = "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 = {"Timeout for dictionary-related RPCs."}) + @ConfField(mutable = true, masterOnly = true, description = "Timeout for dictionary-related RPCs.") 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."}) + @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; - @ConfField(mutable = false, masterOnly = false, description = { - "Whether to enable the experimental Table Stream functionality" }, + @ConfField(mutable = false, masterOnly = false, description = "Whether to enable the experimental Table Stream " + + "functionality", varType = VariableAnnotation.EXPERIMENTAL) public static boolean enable_table_stream = false; - @ConfField(mutable = true, masterOnly = true, description = { - "The interval at which FE cleans stale partition offset state from table streams, in seconds."}, + @ConfField(mutable = true, masterOnly = true, description = "The interval at which FE cleans stale partition " + + "offset state from table streams, in seconds.", varType = VariableAnnotation.EXPERIMENTAL) public static int table_stream_partition_offset_cleanup_interval_second = 3600; //========================================================================== // begin of cloud config //========================================================================== - @ConfField(description = {"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."}, + @ConfField(description = "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"; @@ -3203,66 +3096,59 @@ public static int metaServiceRpcRetryTimes() { @ConfField(mutable = true, masterOnly = true) public static double cloud_balance_tablet_percent_per_run = 0.05; - @ConfField(mutable = true, masterOnly = true, description = { - "Specify the scaling and warming methods for all compute groups in cloud mode. " - + "without_warmup: Directly modify shard mapping, first read from S3, " - + "fastest rebalance but largest fluctuation; " - + "async_warmup: Asynchronous warmup, best-effort cache pulling, " - + "faster rebalance but possible cache miss; " - + "sync_warmup: Synchronous warmup, ensure cache migration completion, " - + "slower rebalance but no cache miss; " - + "peer_read_async_warmup: Directly modify shard mapping, first read from peer BE, " - + "fastest rebalance but may affect other BEs in the same compute group's 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."}, + @ConfField(mutable = true, masterOnly = true, description = "Specify the scaling and warming methods for all " + + "compute groups in cloud mode. without_warmup: " + "Directly modify shard mapping, first read from S3, " + + "fastest rebalance but largest fluctuation; " + "async_warmup: Asynchronous warmup, best-effort cache " + + "pulling, faster rebalance but possible cache miss; " + "sync_warmup: Synchronous warmup, ensure cache " + + "migration completion, slower rebalance but no cache " + + "miss; peer_read_async_warmup: Directly modify shard " + + "mapping, first read from peer BE, fastest rebalance " + + "but may affect other BEs in the same compute group's " + "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 = {"The maximum number of tablets per host " - + "when batching warm-up requests during tablet rebalancing in " - + "compute-storage separation mode. Default is 10."}) + @ConfField(mutable = true, masterOnly = true, description = "The maximum number of tablets per host when batching " + + "warm-up requests during tablet rebalancing in " + "compute-storage separation mode. Default is 10.") public static int cloud_warm_up_batch_size = 10; - @ConfField(mutable = true, masterOnly = true, description = {"Maximum wait time in milliseconds before a " - + "pending warm-up batch is flushed. Default is 50ms."}) + @ConfField(mutable = true, masterOnly = true, description = "Maximum wait time in milliseconds before a pending " + + "warm-up batch is flushed. Default is 50ms.") public static int cloud_warm_up_batch_flush_interval_ms = 50; - @ConfField(mutable = true, masterOnly = true, description = { - "Thread pool size for asynchronous warm-up RPC dispatch during tablet " - + "rebalancing in compute-storage separation mode. Default is 4."}) + @ConfField(mutable = true, masterOnly = true, description = "Thread pool size for asynchronous warm-up RPC " + + "dispatch during tablet rebalancing in " + "compute-storage separation mode. Default is 4.") public static int cloud_warm_up_rpc_async_pool_size = 4; - @ConfField(masterOnly = true, description = {"When tablets are being balanced in compute-storage separation mode, " - + "whether to enable the active tablet priority scheduling strategy. Default is true."}) + @ConfField(masterOnly = true, description = "When tablets are being balanced in compute-storage separation mode, " + + "whether to enable the active tablet priority scheduling strategy. " + "Default is true.") public static boolean enable_cloud_active_tablet_priority_scheduling = true; - @ConfField(masterOnly = true, description = { - "Whether to enable active tablet sliding window access statistics feature. Default is true."}) + @ConfField(masterOnly = true, description = "Whether to enable active tablet sliding window access statistics " + + "feature. Default is true.") public static boolean enable_active_tablet_sliding_window_access_stats = true; - @ConfField(mutable = true, masterOnly = true, description = { - "Time window size in seconds for active tablet sliding window access statistics. " - + "Default is 3600 seconds (1 hour)."}) + @ConfField(mutable = true, masterOnly = true, description = "Time window size in seconds for active tablet " + + "sliding window access statistics. Default is 3600 " + "seconds (1 hour).") public static long active_tablet_sliding_window_time_window_second = 3600L; - @ConfField(mutable = true, masterOnly = true, description = { - "When active tablet priority scheduling is enabled: partition-level scheduling processes TopN active " - + "partitions first, then other active partitions, " - + "then inactive partitions, and internal databases last. " - + "Default is 10000. <=0 disables TopN segmentation."}) + @ConfField(mutable = true, masterOnly = true, description = "When active tablet priority scheduling is enabled: " + + "partition-level scheduling processes TopN active " + + "partitions first, then other active partitions, then " + + "inactive partitions, and internal databases last. " + + "Default is 10000. <=0 disables TopN segmentation.") public static int cloud_active_partition_scheduling_topn = 10000; - @ConfField(mutable = true, masterOnly = true, description = { - "Refresh interval in seconds for the active-tablet snapshot when active priority scheduling is enabled. " - + "Default 60 seconds. Reuses the same active-tablet set within the interval."}) + @ConfField(mutable = true, masterOnly = true, description = "Refresh interval in seconds for the active-tablet " + + "snapshot when active priority scheduling is enabled. " + + "Default 60 seconds. Reuses the same active-tablet " + "set within the interval.") public static long cloud_active_tablet_ids_refresh_interval_second = 60L; - @ConfField(mutable = true, masterOnly = true, description = { - "When active priority scheduling is enabled and the active phase remains unbalanced for N consecutive " - + "rounds, force one inactive phase round to avoid long-term starvation. " - + "Default 10. <=0 disables this forced mechanism."}) + @ConfField(mutable = true, masterOnly = true, description = "When active priority scheduling is enabled and the " + + "active phase remains unbalanced for N consecutive " + "rounds, force one inactive phase round to avoid " + + "long-term starvation. Default 10. <=0 disables this " + "forced mechanism.") public static int cloud_active_unbalanced_force_inactive_after_rounds = 10; @ConfField(mutable = true, masterOnly = false) @@ -3271,31 +3157,29 @@ public static int metaServiceRpcRetryTimes() { @ConfField(mutable = true) public static int mow_calculate_delete_bitmap_retry_times = 10; - @ConfField(description = { - "The allowlist for S3 load endpoints. If it is empty, no allowlist will be set. " - + "For example: s3_load_endpoint_white_list=a,b,c. " - + "This can only be set in fe.conf and takes effect after a restart; " - + "it is intentionally not modifiable at runtime via ADMIN SET FRONTEND CONFIG."}) + @ConfField(description = "The allowlist for S3 load endpoints. If it is empty, no allowlist will be set. For " + + "example: s3_load_endpoint_white_list=a,b,c. This can only be set in fe.conf and takes " + + "effect after a restart; it is intentionally not modifiable at runtime via ADMIN SET " + + "FRONTEND CONFIG.") public static String[] s3_load_endpoint_white_list = {}; - @ConfField(mutable = true, description = { - "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."}) + @ConfField(mutable = true, description = "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 = { - "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."}) + @ConfField(mutable = true, description = "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 = { - "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."}) + @ConfField(mutable = true, description = "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.usgov" + + "cloudapi.net,.blob.core.cloudapi.de,.dfs.core.cloudapi.de.") public static String[] azure_blob_host_suffixes = { ".blob.core.windows.net", ".dfs.core.windows.net", @@ -3307,14 +3191,13 @@ public static int metaServiceRpcRetryTimes() { ".dfs.core.cloudapi.de" }; - @ConfField(description = { - "The allowlist for JDBC driver URLs. If it is empty, no allowlist will be set. " - + "For example: jdbc_driver_url_white_list=a,b,c. " - + "This can only be set in fe.conf and takes effect after a restart; " - + "it is intentionally not modifiable at runtime via ADMIN SET FRONTEND CONFIG."}) + @ConfField(description = "The allowlist for JDBC driver URLs. If it is empty, no allowlist will be set. For " + + "example: jdbc_driver_url_white_list=a,b,c. This can only be set in fe.conf and takes " + + "effect after a restart; it is intentionally not modifiable at runtime via ADMIN SET " + + "FRONTEND CONFIG.") public static String[] jdbc_driver_url_white_list = {}; - @ConfField(description = {"The maximum length of label in Stream Load is limited."}) + @ConfField(description = "The maximum length of label in Stream Load is limited.") public static int label_regex_length = 128; @ConfField(mutable = true, masterOnly = true) @@ -3332,19 +3215,16 @@ public static int metaServiceRpcRetryTimes() { @ConfField(mutable = true, masterOnly = true) public static long cloud_warm_up_job_max_bytes_per_batch = 21474836480L; // 20GB - @ConfField(mutable = true, masterOnly = true, description = { - "zh-CN: 定期刷新 table-level warmup 任务匹配的 table ID 集合的时间间隔(毫秒)", - "en: Interval in milliseconds to refresh matched table IDs for table-level warmup jobs"}) + @ConfField(mutable = true, masterOnly = true, description = "en: Interval in milliseconds to refresh matched " + + "table IDs for table-level warmup jobs") public static long cloud_warm_up_table_filter_refresh_interval_ms = 60000; // 60 seconds - @ConfField(mutable = true, masterOnly = true, description = { - "zh-CN: 定期从 BE 拉取主动增量预热 SyncStats 并缓存到 FE job 的时间间隔(毫秒)", - "en: Interval in milliseconds to collect event-driven warmup SyncStats from BEs and cache it in FE jobs"}) + @ConfField(mutable = true, masterOnly = true, description = "en: Interval in milliseconds to collect event-driven " + + "warmup SyncStats from BEs and cache it in FE jobs") public static long cloud_warm_up_sync_stats_refresh_interval_ms = 15000; // 15 seconds - @ConfField(mutable = true, masterOnly = true, description = { - "zh-CN: SHOW WARM UP JOB 和 FE 日志中 MatchedTables 最多展示的表数量", - "en: Maximum number of MatchedTables entries displayed in SHOW WARM UP JOB and FE logs"}) + @ConfField(mutable = true, masterOnly = true, description = "en: Maximum number of MatchedTables entries " + + "displayed in SHOW WARM UP JOB and FE logs") public static int cloud_warm_up_matched_tables_display_limit = 100; @ConfField(mutable = true, masterOnly = true) @@ -3373,177 +3253,158 @@ public static int metaServiceRpcRetryTimes() { @ConfField(mutable = true) public static int audit_event_log_queue_size = 250000; - @ConfField(description = {"Maximum size of the lineage event queue. Events will be discarded when exceeded."}) + @ConfField(description = "Maximum size of the lineage event queue. Events will be discarded when exceeded.") public static int lineage_event_queue_size = 50000; - @ConfField(mutable = true, description = {"Stream load route policy. Available options are " - + "public-private/public/private/direct/random-be and empty string."}) + @ConfField(mutable = true, description = "Stream load 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 = { - "Stream Load redirect 场景下,FE 在返回 307 后额外丢弃请求体的最大字节数。" - + "0 表示关闭该兼容逻辑,正数表示最大丢弃字节数。", - "The maximum number of request body bytes FE drains after returning 307 for Stream Load redirects. " - + "0 disables the compatibility logic, and a positive value sets the byte limit."}) + @ConfField(mutable = true, description = "The maximum number of request body bytes FE drains after returning 307 " + + "for Stream Load redirects. 0 disables the compatibility logic, and a " + + "positive value sets the byte limit.") // Enable a generous bounded drain window by default to preserve FE redirect compatibility on Jetty 12. public static long stream_load_redirect_bounded_drain_max_bytes = 1024L * 1024 * 1024; - @ConfField(mutable = true, description = { - "Stream Load redirect 场景下,FE 在检测到请求体暂时无可读数据后继续等待的最大空闲时长,单位毫秒。" - + "0 表示不额外等待,用于给慢客户端或分段到达的数据保留一个有限的缓冲窗口。", - "The maximum idle wait time in milliseconds after FE detects no readable request body bytes " - + "during Stream Load redirect drain. 0 disables the extra idle wait, while a positive value " - + "keeps a bounded grace window for slow clients or delayed request body chunks."}) + @ConfField(mutable = true, description = "The maximum idle wait time in milliseconds after FE detects no readable " + + "request body bytes during Stream Load redirect drain. 0 disables the " + + "extra idle wait, while a positive value keeps a bounded grace window " + + "for slow clients or delayed request body chunks.") // Keep a small grace period for delayed body chunks after FE has already written the redirect. public static int stream_load_redirect_bounded_drain_max_idle_time_ms = 1000; - @ConfField(mutable = true, description = { - "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."}) + @ConfField(mutable = true, description = "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 = {"When creating a table in cloud mode, check if recycler keys remain. Default is true."}) + @ConfField(description = "When creating a table in cloud mode, check if recycler keys remain. Default is true.") public static boolean check_create_table_recycle_key_remained = true; - @ConfField(mutable = true, description = { - "Lock expiration time for FE requesting a lock from meta service in cloud mode. Default is 60s."}) + @ConfField(mutable = true, description = "Lock expiration time for FE requesting a lock from meta service in " + + "cloud mode. Default is 60s.") public static int delete_bitmap_lock_expiration_seconds = 60; - @ConfField(mutable = true, description = { - "Timeout for calculate delete bitmap task in cloud mode. Default is 60s."}) + @ConfField(mutable = true, description = "Timeout for calculate delete bitmap task in cloud mode. Default is 60s.") public static int calculate_delete_bitmap_task_timeout_seconds = 60; - @ConfField(mutable = true, description = { - "Timeout for calculate delete bitmap task during transaction load in cloud mode. Default is 300s."}) + @ConfField(mutable = true, description = "Timeout for calculate delete bitmap task during transaction load in " + + "cloud mode. Default is 300s.") public static int calculate_delete_bitmap_task_timeout_seconds_for_transaction_load = 300; - @ConfField(mutable = true, description = {"Lock wait timeout during commit phase in cloud mode. Default is 5s."}) + @ConfField(mutable = true, description = "Lock wait timeout during commit phase in cloud mode. Default is 5s.") public static int try_commit_lock_timeout_seconds = 5; - @ConfField(mutable = true, description = {"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."}) + @ConfField(mutable = true, description = "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 = { - "Whether to enable lazy commit for large transactions in cloud mode. Default is true."}) + @ConfField(mutable = true, description = "Whether to enable lazy commit for large transactions in cloud mode. " + + "Default is true.") public static boolean enable_cloud_txn_lazy_commit = true; @ConfField(mutable = true, masterOnly = true, - description = { - "Whether to immediately reassign tablets to a new BE when the assigned BE is abnormal " - + "in cloud mode. Default is false."}) + description = "Whether to immediately reassign tablets to a new BE when the assigned BE is abnormal in " + + "cloud mode. Default is false.") public static boolean enable_immediate_be_assign = false; @ConfField(mutable = true, masterOnly = false, - description = { - "Time in seconds after a BE goes down before its tablets are permanently reassigned " - + "to other BEs in cloud mode."}) + description = "Time in seconds after a BE goes down before its tablets are permanently reassigned to " + + "other BEs in cloud mode.") public static int rehash_tablet_after_be_dead_seconds = 3600; @ConfField(mutable = false, masterOnly = true, - description = { - "Whether to use rendezvous hashing for colocate bucket placement in cloud mode. " - + "If false, use the legacy modulo placement. Restart-only."}) + description = "Whether to use rendezvous hashing for colocate bucket placement in cloud mode. If false, " + + "use the legacy modulo placement. Restart-only.") public static boolean enable_cloud_colocate_consistent_hash = true; - @ConfField(mutable = true, description = { - "Whether to enable the automatic start-stop feature in cloud model, default is true."}) + @ConfField(mutable = true, description = "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 = { - "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."}) + @ConfField(mutable = true, description = "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 = { - "Maximal concurrent num of master FE sync tablet stats task to observers and followers in cloud mode."}) + @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"}) + @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 = {"Maximum concurrent number of get tablet stat jobs."}) + @ConfField(description = "Maximum concurrent number of get tablet stat jobs.") public static int max_get_tablet_stat_task_threads_num = 4; - @ConfField(description = { - "Cloud table and partition version syncer interval. All frontends will perform the checking."}) + @ConfField(description = "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 = { - "Whether to enable the function of syncing table and partition version in cloud mode."}) + @ConfField(mutable = true, description = "Whether to enable the function of syncing table and partition version " + + "in cloud mode.") public static boolean cloud_enable_version_syncer = true; - @ConfField(description = {"Concurrent number of get version tasks."}) + @ConfField(description = "Concurrent number of get version tasks.") public static int cloud_get_version_task_threads_num = 4; - @ConfField(description = {"Maximum concurrent number of sync version tasks between Master FE and other FEs."}) + @ConfField(description = "Maximum concurrent number of sync version tasks between Master FE and other FEs.") public static int cloud_sync_version_task_threads_num = 4; - @ConfField(mutable = true, description = {"Maximum table or partition batch size for get version tasks."}) + @ConfField(mutable = true, description = "Maximum table or partition batch size for get version tasks.") public static int cloud_get_version_task_batch_size = 2000; - @ConfField(mutable = true, description = { - "Whether to enable retry when a schema change job fails, default is true."}) + @ConfField(mutable = true, description = "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 = {"Max retry times when a schema change job fails, default is 3."}) + @ConfField(mutable = true, description = "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 = {"Whether to enable the use of ShowCacheHotSpotStmt, default is false."}) + @ConfField(mutable = true, description = "Whether to enable the use of ShowCacheHotSpotStmt, default is false.") public static boolean enable_show_file_cache_hotspot_stmt = false; - @ConfField(mutable = true, description = { - "Request timeout for FE connecting to meta service in cloud mode, default is 30000ms."}) + @ConfField(mutable = true, description = "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 = { - "Connection timeout for FE connecting to meta service in cloud mode. Default is 500ms."}) + @ConfField(mutable = true, description = "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 = { - "In cloud mode, the retry count when the FE request to meta service times out. Default is 1."}) + @ConfField(mutable = true, description = "In cloud mode, the retry count when the FE request to meta service " + + "times out. Default is 1.") public static int meta_service_rpc_timeout_retry_times = 1; - @ConfField(mutable = true, description = { - "Whether to enable QPS rate limit for RPC requests to meta service."}) + @ConfField(mutable = true, description = "Whether to enable QPS rate limit for RPC requests to meta service.") public static boolean meta_service_rpc_rate_limit_enabled = false; - @ConfField(mutable = true, description = { - "Default QPS limit for each method (requests per second) in each cpu core, " - + "non-positive value (<= 0) means no limit"}) + @ConfField(mutable = true, description = "Default QPS limit for each method (requests per second) in each cpu " + + "core, non-positive value (<= 0) means no limit") public static int meta_service_rpc_rate_limit_default_qps_per_core = 50; @ConfField(mutable = true, callback = MetaServiceRpcRateLimitConfigValidator.QpsConfigHandler.class, - description = { - "QPS limit config per rpc method to meta service in per cpu core, " - + "format: method1:qps1;method2:qps2, " - + "e.g.: getPartitionVersion:100;getTableVersion:100;getTabletStats:50, " - + "non-positive value (<= 0) means no limit"}) + description = "QPS limit config per rpc method to meta service in per cpu core, format: " + + "method1:qps1;method2:qps2, e.g.: " + + "getPartitionVersion:100;getTableVersion:100;getTabletStats:50, non-positive value (<= 0) " + + "means no limit") public static String meta_service_rpc_rate_limit_qps_per_core_config = "getPartitionVersion:500;getTableVersion:500;getTabletStats:50;beginTxn:50"; @ConfField(mutable = true, callback = MetaServiceRpcRateLimitConfigValidator.PositiveIntConfigHandler.class, - description = { - "Burst window for meta service RPC rate limit in seconds. " - + "The long-term average QPS is unchanged, while calls can burst within this window."}) + description = "Burst window for meta service RPC rate limit in seconds. The long-term average QPS is " + + "unchanged, while calls can burst within this window.") public static int meta_service_rpc_rate_limit_burst_seconds = 2; @ConfField(mutable = true, callback = MetaServiceRpcRateLimitConfigValidator.NonNegativeLongConfigHandler.class, - description = { - "Max wait time in milliseconds when meta service RPC is rate limited, " - + "zero means fail fast."}) + description = "Max wait time in milliseconds when meta service RPC is rate limited, zero means fail fast.") public static long meta_service_rpc_rate_limit_wait_timeout_ms = 1000; - @ConfField(mutable = true, description = { - "In cloud mode, the auto start and stop ignores the databases used by internal jobs, " - + "such as those used for statistics. " - + "For example: auto_start_ignore_db_names=__internal_schema, information_schema"}) + @ConfField(mutable = true, description = "In cloud mode, the auto start and stop ignores the databases used by " + + "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) @@ -3558,38 +3419,34 @@ public static int metaServiceRpcRetryTimes() { @ConfField(mutable = true, masterOnly = true) public static long mow_get_ms_lock_retry_backoff_interval = 80; - @ConfField(mutable = false, masterOnly = true, description = { - "TSO service update interval in milliseconds. Default is 50, which means the TSO service " - + "will perform timestamp update checks every 50 milliseconds."}) + @ConfField(mutable = false, masterOnly = true, description = "TSO service update interval in milliseconds. " + + "Default is 50, which means the TSO service will " + "perform timestamp update checks every 50 " + + "milliseconds.") public static int tso_service_update_interval_ms = 50; - @ConfField(mutable = true, masterOnly = true, description = { - "TSO service max retry count. Default is 3, which means the TSO service will retry 3 times " - + "to update the global timestamp."}) + @ConfField(mutable = true, masterOnly = true, description = "TSO service max retry count. Default is 3, which " + + "means the TSO service will retry 3 times to update " + "the global timestamp.") public static int tso_max_update_retry_count = 3; - @ConfField(mutable = true, masterOnly = true, description = { - "TSO get max retry count. Default is 10, which means the TSO service will retry 10 times " - + "to generate TSO."}) + @ConfField(mutable = true, masterOnly = true, description = "TSO get max retry count. Default is 10, which means " + + "the TSO service will retry 10 times to generate TSO.") public static int tso_max_get_retry_count = 10; - @ConfField(mutable = true, masterOnly = true, description = { - "TSO service time window in milliseconds. Default is 5000, which means the TSO service " - + "will apply for a TSO time window of 5000ms from BDBJE once."}) + @ConfField(mutable = true, masterOnly = true, description = "TSO service time window in milliseconds. Default is " + + "5000, which means the TSO service will apply for a " + "TSO time window of 5000ms from BDBJE once.") public static int tso_service_window_duration_ms = 5000; - @ConfField(mutable = true, masterOnly = true, description = { - "Max tolerated clock backward threshold during TSO calibration in milliseconds. " - + "Exceeding this threshold will fail enabling TSO. Default is 30 minutes."}) + @ConfField(mutable = true, masterOnly = true, description = "Max tolerated clock backward threshold during TSO " + + "calibration in milliseconds. Exceeding this " + "threshold will fail enabling TSO. Default is 30 " + + "minutes.") public static long tso_clock_backward_startup_threshold_ms = 30L * 60 * 1000; - @ConfField(mutable = true, description = { - "TSO service time offset in milliseconds. Only for test. Default is 0, which means the TSO service " - + "timestamp offset is 0 milliseconds."}) + @ConfField(mutable = true, description = "TSO service time offset in milliseconds. Only for test. Default is 0, " + + "which means the TSO service timestamp offset is 0 milliseconds.") public static int tso_time_offset_debug_mode = 0; - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to forward TSO 1ms when logical counter is nearly full. Default is true."}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to forward TSO 1ms when logical counter is " + + "nearly full. Default is true.") public static boolean enable_tso_forward_when_counter_full = true; @ConfField(mutable = true, masterOnly = true) @@ -3603,119 +3460,111 @@ public static int metaServiceRpcRetryTimes() { //========================================================================== //========================================================================== // start of lock config - @ConfField(description = {"Whether to enable deadlock detection."}) + @ConfField(description = "Whether to enable deadlock detection.") public static boolean enable_deadlock_detection = true; - @ConfField(description = {"Deadlock detection interval time, in minutes."}) + @ConfField(description = "Deadlock detection interval time, in minutes.") public static long deadlock_detection_interval_minute = 5; - @ConfField(mutable = true, description = {"Maximum lock hold time. Logs a warning if exceeded."}) + @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 = {"Whether metadata synchronization is enabled in safe mode."}) + @ConfField(mutable = true, description = "Whether metadata synchronization is enabled in safe mode.") public static boolean meta_helper_security_mode = false; - @ConfField(description = {"Interval for checking if a resource is ready."}) + @ConfField(description = "Interval for checking if a resource is ready.") public static long resource_not_ready_sleep_seconds = 5; - @ConfField(mutable = true, description = { - "When set to true, if a query cannot select a healthy replica, " - + "detailed information of all replicas of the tablet will be printed."}) + @ConfField(mutable = true, description = "When set to true, if a query cannot select a healthy replica, detailed " + + "information of all replicas of the tablet will be printed.") public static boolean sql_block_rule_ignore_admin = false; - @ConfField(description = {"Authentication plugin root directories. Use a comma-separated list to configure " - + "multiple roots."}) + @ConfField(description = "Authentication plugin root directories. Use a comma-separated list to configure " + + "multiple roots.") public static String authentication_plugins_dir = EnvUtils.getDorisHome() + "/plugins/authentication"; - @ConfField(description = {"Authorization plugin root directories. Use a comma-separated list to configure " - + "multiple roots."}) + @ConfField(description = "Authorization plugin root directories. Use a comma-separated list to configure multiple " + + "roots.") public static String authorization_plugins_dir = EnvUtils.getDorisHome() + "/plugins/authorization"; - @ConfField(description = {"Security plugin directory."}) + @ConfField(description = "Security plugin directory.") public static String security_plugins_dir = EnvUtils.getDorisHome() + "/plugins/security"; - @ConfField(description = {"Directory containing filesystem provider plugin subdirectories. " - + "Each subdirectory is one storage backend (e.g., s3/, hdfs/, azure/). " - + "If empty, only classpath-based built-in providers are used (test/dev mode)."}) + @ConfField(description = "Directory containing filesystem provider plugin subdirectories. Each subdirectory is " + + "one storage backend (e.g., s3/, hdfs/, azure/). If empty, only classpath-based built-in " + + "providers are used (test/dev mode).") public static String filesystem_plugin_root = EnvUtils.getDorisHome() + "/plugins/filesystem"; - @ConfField(description = {"Directory containing connector provider plugin subdirectories. " - + "Each subdirectory is one connector (e.g., es/, jdbc/, iceberg/). " - + "If empty, only classpath-based built-in providers are used (test/dev mode)."}) + @ConfField(description = "Directory containing connector provider plugin subdirectories. Each subdirectory is one " + + "connector (e.g., es/, jdbc/, iceberg/). If empty, only classpath-based built-in " + + "providers are used (test/dev mode).") public static String connector_plugin_root = EnvUtils.getDorisHome() + "/plugins/connector"; - @ConfField(description = {"Authorization plugin configuration file path. Must be under DORIS_HOME. " - + "Default is conf/authorization.conf."}) + @ConfField(description = "Authorization plugin configuration file path. Must be under DORIS_HOME. Default is " + + "conf/authorization.conf.") public static String authorization_config_file_path = "/conf/authorization.conf"; - @ConfField(description = {"Authentication plugin configuration file path. Must be under DORIS_HOME. " - + "Default is conf/authentication.conf."}) + @ConfField(description = "Authentication plugin configuration file path. Must be under DORIS_HOME. Default is " + + "conf/authentication.conf.") public static String authentication_config_file_path = "/conf/authentication.conf"; - @ConfField(description = {"For testing purposes, all queries are forcibly forwarded to the master to verify " - + "the behavior of forwarding queries."}) + @ConfField(description = "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 = { - "For disabling certain SQL queries, the configuration item is a list of simple class names of AST " - + "(for example CreateRepositoryStmt, CreatePolicyCommand), separated by commas."}) + @ConfField(description = "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 = { - "Whether to allow the use of inverted index v1 for variant."}) + @ConfField(mutable = true, masterOnly = true, description = "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 output table dimension metric count limit."}) + @ConfField(mutable = true, description = "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 = { - "The ID of the master key in KMS, used for generating and encrypting data keys"}) + @ConfField(mutable = true, description = "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 = {"The endpoint of the KMS service, should match the region of the key"}) + @ConfField(mutable = true, description = "The endpoint of the KMS service, should match the region of the key") public static String doris_tde_key_endpoint = ""; - @ConfField(mutable = true, description = {"The region where the KMS key is located, used for SDK configuration"}) + @ConfField(mutable = true, description = "The region where the KMS key is located, used for SDK configuration") public static String doris_tde_key_region = ""; - @ConfField(mutable = true, description = { - "The key provider for TDE (Transparent Data Encryption), currently supports aws_kms"}) + @ConfField(mutable = true, description = "The key provider for TDE (Transparent Data Encryption), currently " + + "supports aws_kms") public static String doris_tde_key_provider = ""; - @ConfField(mutable = true, description = { - "The encryption algorithm used for data. Default is AES256; may be set to empty later for KMS to decide."}) + @ConfField(mutable = true, description = "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 = { - "The time interval for automatic rotation of the master key in data encryption, in milliseconds." - + "The default interval is one month."}) + @ConfField(mutable = true, description = "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 = { - "The interval at which data encryption checks whether to rotate the master key, in milliseconds. " - + "The default interval is five minutes."}) + @ConfField(mutable = true, description = "The interval at which data encryption checks whether to rotate the " + + "master key, in milliseconds. The default interval is five minutes.") public static long doris_tde_check_rotate_master_key_interval_ms = 5 * 60 * 1000L; - @ConfField(mutable = true, description = { - "The maximum length of the first row error message when data quality error occurs, default is 256 bytes"}) + @ConfField(mutable = true, description = "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)" - }) + @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" - }) + @ConfField(mutable = false, description = "Directory path for storing admission rules JSON files") public static String file_cache_admission_control_json_dir = ""; @ConfField @@ -3729,10 +3578,9 @@ public static int metaServiceRpcRetryTimes() { @ConfField(mutable = true) public static long cloud_auto_snapshot_min_interval_seconds = 3600; - @ConfField(mutable = true, description = {"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'."}) + @ConfField(mutable = true, description = "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) @@ -3745,46 +3593,38 @@ public static int metaServiceRpcRetryTimes() { @ConfField(mutable = true) public static String aws_credentials_provider_version = "v2"; - @ConfField(mutable = true, description = { - "The soft upper limit of FILE_CACHE percent that a single query of a user can use (range: 1 to 100).", - "100 indicates that the full FILE_CACHE capacity can be used."}) + @ConfField(mutable = true, description = "The soft upper limit of FILE_CACHE percent that a single query of a " + + "user can use (range: 1 to 100). 100 indicates that the full FILE_CACHE " + "capacity can be used.") public static int file_cache_query_limit_max_percent = 100; - @ConfField(description = { - "The thread pool size used by the AWS SDK to schedule asynchronous retries, timeout tasks, " - + "and other background operations. Shared globally."}) + @ConfField(description = "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 health check interval. Default is five minutes. " - + "No health check when less than or equal to 0."}) + @ConfField(description = "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 = { - "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."}) + @ConfField(description = "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 compute-storage separation mode, whether to obtain partition version information in batches when " - + "calculating the delete bitmap. Enabled by default."}) + @ConfField(mutable = true, description = "In compute-storage separation mode, whether to obtain partition version " + + "information in batches when calculating the delete bitmap. Enabled by " + "default.") public static boolean calc_delete_bitmap_get_versions_in_batch = true; - @ConfField(mutable = true, description = { - "In compute-storage separation mode, whether to wait for pending transactions to complete before " - + "obtaining partition version information when calculating the delete bitmap. Enabled " - + "by default."}) + @ConfField(mutable = true, description = "In compute-storage separation mode, whether to wait for pending " + + "transactions to complete before obtaining partition version information " + + "when calculating the delete bitmap. Enabled by default.") public static boolean calc_delete_bitmap_get_versions_waiting_for_pending_txns = true; - @ConfField(mutable = true, masterOnly = true, description = { - "Whether to enable adaptive random bucket load. When enabled, each BE computes its own local " - + "bucket set (buckets whose primary replica it hosts) from the tablet location info " - + "sent by FE, and rotates across those buckets once per-tablet write volume exceeds " - + "the threshold (default 200 MB). This reduces import memory pressure and improves " - + "throughput for random-distribution tables. Covers all load types uniformly.", - "是否启用自适应随机桶导入。开启后每个 BE 根据 FE 下发的 tablet 位置信息自行计算本地桶集合" - + "(持有主副本的桶),并在单个 tablet 写入量超过阈值(默认 200 MB)后在本地桶之间轮转。" - + "可降低导入内存压力并提升随机分桶表的吞吐量,覆盖所有导入类型。"}) + @ConfField(mutable = true, masterOnly = true, description = "Whether to enable adaptive random bucket load. When " + + "enabled, each BE computes its own local bucket set " + + "(buckets whose primary replica it hosts) from the " + + "tablet location info sent by FE, and rotates across " + + "those buckets once per-tablet write volume exceeds " + + "the threshold (default 200 MB). This reduces import " + "memory pressure and improves throughput for " + + "random-distribution tables. Covers all load types " + "uniformly.") public static boolean enable_adaptive_random_bucket_load = true; } diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/ConfigBase.java b/fe/fe-common/src/main/java/org/apache/doris/common/ConfigBase.java index e58fea913d7b48..436a8a34d33366 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/common/ConfigBase.java +++ b/fe/fe-common/src/main/java/org/apache/doris/common/ConfigBase.java @@ -65,10 +65,7 @@ public class ConfigBase { String callbackClassString() default ""; // description for this config item. - // There should be 2 elements in the array. - // The first element is the description in Chinese. - // The second element is the description in English. - String[] description() default {"待补充", "TODO"}; + String description() default "TODO"; // Enum options for this config item, if it has. String[] options() default {}; diff --git a/fe/fe-common/src/main/java/org/apache/doris/qe/GlobalVariable.java b/fe/fe-common/src/main/java/org/apache/doris/qe/GlobalVariable.java index d2ba60eb13e78e..46eceb0ecaf1ef 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/qe/GlobalVariable.java +++ b/fe/fe-common/src/main/java/org/apache/doris/qe/GlobalVariable.java @@ -165,14 +165,11 @@ private static String resolveSystemTimeZone() { public static long validatePasswordPolicy = 0; @VarAttrDef.VarAttr(name = VALIDATE_PASSWORD_DICTIONARY_FILE, flag = VarAttrDef.GLOBAL, - description = {"密码验证字典文件路径。文件为纯文本格式,每行一个词。" - + "当 validate_password_policy 为 STRONG(2) 时,密码中不能包含字典中的任何词(不区分大小写)。" - + "如果为空,则使用内置字典。", - "Path to the password validation dictionary file. " - + "The file should be plain text with one word per line. " - + "When validate_password_policy is STRONG(2), " - + "the password cannot contain any word from the dictionary " - + "(case-insensitive). If empty, a built-in dictionary will be used."}) + description = "Path to the password validation dictionary file. " + + "The file should be plain text with one word per line. " + + "When validate_password_policy is STRONG(2), " + + "the password cannot contain any word from the dictionary " + + "(case-insensitive). If empty, a built-in dictionary will be used.") public static volatile String validatePasswordDictionaryFile = ""; // If set to true, the db name of TABLE_SCHEMA column in tables in information_schema @@ -197,94 +194,69 @@ private static String resolveSystemTimeZone() { public static int auditPluginMaxSqlLength = 2097152; @VarAttrDef.VarAttr(name = AUDIT_PLUGIN_MAX_INSERT_STMT_LENGTH, flag = VarAttrDef.GLOBAL, - description = {"专门用于限制 INSERT 语句的长度。如果该值大于 AUDIT_PLUGIN_MAX_SQL_LENGTH," - + "则使用 AUDIT_PLUGIN_MAX_SQL_LENGTH 的值。" - + "如果 INSERT 语句超过该长度,将会被截断。", - "This is specifically used to limit the length of INSERT statements. " - + "If this value is greater than AUDIT_PLUGIN_MAX_SQL_LENGTH, " - + "it will use the value of AUDIT_PLUGIN_MAX_SQL_LENGTH. " - + "If an INSERT statement exceeds this length, it will be truncated."}) + description = "This is specifically used to limit the length of INSERT statements. " + + "If this value is greater than AUDIT_PLUGIN_MAX_SQL_LENGTH, " + + "it will use the value of AUDIT_PLUGIN_MAX_SQL_LENGTH. " + + "If an INSERT statement exceeds this length, it will be truncated.") public static int auditPluginMaxInsertStmtLength = Integer.MAX_VALUE; @VarAttrDef.VarAttr(name = AUDIT_PLUGIN_LOAD_TIMEOUT, flag = VarAttrDef.GLOBAL) public static int auditPluginLoadTimeoutS = 600; @VarAttrDef.VarAttr(name = ENABLE_GET_ROW_COUNT_FROM_FILE_LIST, flag = VarAttrDef.GLOBAL, - description = { - "针对外表,是否允许根据文件列表估算表行数。获取文件列表可能是一个耗时的操作," - + "如果不需要估算表行数或者对性能有影响,可以关闭该功能。", - "For external tables, whether to enable getting row count from file list. " - + "Getting file list may be a time-consuming operation. " - + "If you don't need to estimate the number of rows in the table " - + "or it affects performance, you can disable this feature."}) + description = "For external tables, whether to enable getting row count from file list. " + + "Getting file list may be a time-consuming operation. " + + "If you don't need to estimate the number of rows in the table " + + "or it affects performance, you can disable this feature.") public static boolean enable_get_row_count_from_file_list = true; @VarAttrDef.VarAttr(name = READ_ONLY, flag = VarAttrDef.GLOBAL, - description = {"仅用于兼容 MySQL 生态,暂无实际意义", - "Only for compatibility with MySQL ecosystem, no practical meaning"}) + description = "Only for compatibility with MySQL ecosystem, no practical meaning") public static boolean read_only = true; @VarAttrDef.VarAttr(name = SUPER_READ_ONLY, flag = VarAttrDef.GLOBAL, - description = {"仅用于兼容 MySQL 生态,暂无实际意义", - "Only for compatibility with MySQL ecosystem, no practical meaning"}) + description = "Only for compatibility with MySQL ecosystem, no practical meaning") public static boolean super_read_only = true; @VarAttrDef.VarAttr(name = PARTITION_ANALYZE_BATCH_SIZE, flag = VarAttrDef.GLOBAL, - description = { - "批量收集分区信息的分区数", - "Number of partitions to collect in one batch."}) + description = "Number of partitions to collect in one batch.") public static int partitionAnalyzeBatchSize = 10; @VarAttrDef.VarAttr(name = HUGE_PARTITION_LOWER_BOUND_ROWS, flag = VarAttrDef.GLOBAL, - description = { - "行数超过该值的分区将跳过自动分区收集", - "This defines the lower size bound for large partitions, which will skip auto partition analyze."}) + description = "This defines the lower size bound for large partitions, " + + "which will skip auto partition analyze.") public static long hugePartitionLowerBoundRows = 100000000L; @VarAttrDef.VarAttr(name = ENABLE_FETCH_ICEBERG_STATS, flag = VarAttrDef.GLOBAL, - description = { - "当 HMS catalog 中的 Iceberg 表没有统计信息时,是否通过 Iceberg Api 获取统计信息", - "Enable fetch stats for HMS Iceberg table when it's not analyzed."}) + description = "Enable fetch stats for HMS Iceberg table when it's not analyzed.") public static boolean enableFetchIcebergStats = false; @VarAttrDef.VarAttr(name = ENABLE_ANSI_QUERY_ORGANIZATION_BEHAVIOR, flag = VarAttrDef.GLOBAL, - description = { - "控制 query organization 的行为。当设置为 true 时使用 ANSI 的 query organization 行为,即作用于整个语句。" - + "当设置为 false 时,使用 Doris 历史版本的行为," - + "即 order by 默认只作用于 set operation 的最后一个 operand。", - "Controls the behavior of query organization. When set to true, uses the ANSI query" - + " organization behavior, which applies to the entire statement. When set to false," - + " uses the behavior of Doris's historical versions, where order by by default only" - + " applies to the last operand of the set operation."}) + description = "Controls the behavior of query organization. When set to true, uses the ANSI query" + + " organization behavior, which applies to the entire statement. When set to false," + + " uses the behavior of Doris's historical versions, where order by by default only" + + " applies to the last operand of the set operation.") public static boolean enable_ansi_query_organization_behavior = true; @VarAttrDef.VarAttr(name = ENABLE_NEW_TYPE_COERCION_BEHAVIOR, flag = VarAttrDef.GLOBAL, - description = { - "控制隐式类型转换的行为,当设置为 true 时,使用新的行为。新行为更为合理。类型优先级从高到低为时间相关类型 > " - + "数值类型 > 复杂类型 / JSON 类型 / IP 类型 > 字符串类型 > VARIANT 类型。当两个或多个不同类型的表达式" - + "进行比较时,强制类型转换优先向高优先级类型转换。转换时尽可能保留精度,如:" - + "当转换为时间相关类型时,当无法确定精度时,优先使用 6 位精度的 DATETIME 类型。" - + "当转换为数值类型时,当无法确定精度时,优先使用 DECIMAL 类型。", - "Controls the behavior of implicit type conversion. When set to true, the new behavior is used," - + " which is more reasonable. The type priority, from highest to lowest, is: time-related" - + " types > numeric types > complex types / JSON types / IP types > string types" - + " > VARIANT types. When comparing two or more expressions of different types, " - + "type coercion preferentially converts values toward the type with higher priority. " - + "Precision is preserved as much as possible during conversion. For example, " - + "when converting to a time-related type and precision cannot be determined, " - + "the DATETIME type with 6-digit precision is preferred. When converting to" - + " a numeric type and precision cannot be determined, the DECIMAL type is preferred."}) + description = "Controls the behavior of implicit type conversion. When set to true, " + + "the new behavior is used," + + " which is more reasonable. The type priority, from highest to lowest, is: time-related" + + " types > numeric types > complex types / JSON types / IP types > string types" + + " > VARIANT types. When comparing two or more expressions of different types, " + + "type coercion preferentially converts values toward the type with higher priority. " + + "Precision is preserved as much as possible during conversion. For example, " + + "when converting to a time-related type and precision cannot be determined, " + + "the DATETIME type with 6-digit precision is preferred. When converting to" + + " a numeric type and precision cannot be determined, the DECIMAL type is preferred.") public static boolean enableNewTypeCoercionBehavior = true; @VarAttrDef.VarAttr(name = ENABLE_NESTED_NAMESPACE, flag = VarAttrDef.GLOBAL, - description = { - "是否允许访问 `ns1.ns2` 这种类型的 database。当前仅适用于 External Catalog 中映射 Database 并访问。" - + "不支持创建。", - "Whether to allow accessing databases of the form `ns1.ns2`. " - + "Currently, this only applies to mapping databases in " - + "External Catalogs and accessing them. " - + "Creation is not supported."}) + description = "Whether to allow accessing databases of the form `ns1.ns2`. " + + "Currently, this only applies to mapping databases in " + + "External Catalogs and accessing them. " + + "Creation is not supported.") public static boolean enableNestedNamespace = false; // Don't allow creating instance. diff --git a/fe/fe-common/src/main/java/org/apache/doris/qe/VarAttrDef.java b/fe/fe-common/src/main/java/org/apache/doris/qe/VarAttrDef.java index 25de254eee01c6..a5d4eda439169c 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/qe/VarAttrDef.java +++ b/fe/fe-common/src/main/java/org/apache/doris/qe/VarAttrDef.java @@ -68,11 +68,8 @@ public class VarAttrDef { VariableAnnotation varType() default VariableAnnotation.NONE; - // description for this config item. - // There should be 2 elements in the array. - // The first element is the description in Chinese. - // The second element is the description in English. - String[] description() default {"待补充", "TODO"}; + // description for this config item + String description() default "TODO"; // Enum options for this config item, if it has. String[] options() default {}; diff --git a/fe/fe-common/src/test/java/org/apache/doris/common/ConfigTest.java b/fe/fe-common/src/test/java/org/apache/doris/common/ConfigTest.java index c59cb44c66d65e..09572c618c7ba3 100644 --- a/fe/fe-common/src/test/java/org/apache/doris/common/ConfigTest.java +++ b/fe/fe-common/src/test/java/org/apache/doris/common/ConfigTest.java @@ -21,6 +21,7 @@ import org.junit.BeforeClass; import org.junit.Test; +import java.lang.reflect.Field; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -99,6 +100,18 @@ public void testSetEmptyArray() throws ConfigException { Assert.assertEquals("array length should be 0", 0, Config.mysql_compat_var_whitelist.length); } + @Test + public void testConfFieldDescriptionsAreEnglishStrings() throws Exception { + for (Field field : Config.class.getFields()) { + ConfigBase.ConfField confField = field.getAnnotation(ConfigBase.ConfField.class); + if (confField == null) { + continue; + } + Assert.assertFalse("Chinese description found in config: " + field.getName(), + confField.description().matches(".*[\\u4e00-\\u9fff].*")); + } + } + // File-path and jdbc-driver security configs must only be settable in fe.conf (ops), never at runtime // via ADMIN SET FRONTEND CONFIG. setMutableConfig is exactly that runtime entrypoint, so it must reject them. @Test diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index 312f8cb9fe6059..7b93ac099456bb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java @@ -916,13 +916,12 @@ public String toString() { public static final String HOT_VALUE_COLLECT_COUNT = "hot_value_collect_count"; @VarAttrDef.VarAttr(name = HOT_VALUE_COLLECT_COUNT, needForward = true, - description = {"列统计信息收集时,收集占比排名前 HOT_VALUE_COLLECT_COUNT 的值作为 hot value", - "When collecting column statistics, collect the top values ranked by their " - + "proportion as hot values, up to HOT_VALUE_COLLECT_COUNT."}) + description = "When collecting column statistics, collect the top values ranked by their " + + "proportion as hot values, up to HOT_VALUE_COLLECT_COUNT.") public int hotValueCollectCount = 10; // Select the values that account for at least 10% of the column @VarAttrDef.VarAttr(name = ENABLE_INVERTED_INDEX_WAND_QUERY, - description = {"是否开启倒排索引WAND查询优化", "Whether to enable inverted index WAND query optimization"}) + description = "Whether to enable inverted index WAND query optimization") public boolean enableInvertedIndexWandQuery = true; public void setHotValueCollectCount(int count) { @@ -944,11 +943,10 @@ public static int getHotValueCollectCount() { public static final String SKEW_VALUE_THRESHOLD = "skew_value_threshold"; @VarAttrDef.VarAttr(name = SKEW_VALUE_THRESHOLD, needForward = true, - description = {"当列中某个特定值的出现次数大于等于(rowCount/ndv)× skewValueThreshold 时,该值即被视为热点值", - "When the occurrence of a value in a column is greater than " - + "skewValueThreshold tmies of average occurences " - + "(occurrences >= skewValueThreshold * rowCount / ndv), " - + "the value is regarded as hot value"}) + description = "When the occurrence of a value in a column is greater than " + + "skewValueThreshold tmies of average occurences " + + "(occurrences >= skewValueThreshold * rowCount / ndv), " + + "the value is regarded as hot value") private double skewValueThreshold = 10; public void setSkewValueThreshold(int threshold) { @@ -965,8 +963,7 @@ public static double getSkewValueThreshold() { public static final String HOT_VALUE_THRESHOLD = "hot_value_threshold"; @VarAttrDef.VarAttr(name = HOT_VALUE_THRESHOLD, needForward = true, - description = {"hot value 在列中出现的最小比例", - "The minimum ratio of occurrences of a hot value in a column"}) + description = "The minimum ratio of occurrences of a hot value in a column") private double hotValueThreshold = 0.10d; public void setHotValueThreshold(double threshold) { @@ -1059,10 +1056,8 @@ public static double getHotValueThreshold() { public boolean enableStats = true; @VarAttrDef.VarAttr(name = ENABLE_LOW_CONFIDENCE_EQ_JOIN_REMAINING_CONDITION_DECAY, needForward = true, - description = { - "是否在低置信度等值 join 只有 untrust 条件时,基于最小 ratio 对剩余条件继续做衰减", - "Whether to continue decaying remaining low-confidence equality join conditions after " - + "applying the minimum ratio when all equality predicates are untrustworthy" }) + description = "Whether to continue decaying remaining low-confidence equality join conditions after " + + "applying the minimum ratio when all equality predicates are untrustworthy") public boolean enableLowConfidenceEqJoinRemainingConditionDecay = true; // session origin value @@ -1075,25 +1070,20 @@ public static double getHotValueThreshold() { public boolean expandRuntimeFilterByInnerJoin = true; @VarAttrDef.VarAttr(name = ENABLE_DECOUPLED_RUNTIME_FILTER, - description = {"启用解耦 Runtime Filter:允许 RF 的生产者和条件来源分属不同 join 节点", - "Enable decoupled runtime filter: allow RF producer and predicate source " - + "to be on different join nodes"}) + description = "Enable decoupled runtime filter: allow RF producer and predicate source " + + "to be on different join nodes") public boolean enableDecoupledRuntimeFilter = true; @VarAttrDef.VarAttr(name = DECOUPLED_RF_NDV_RATIO_THRESHOLD, - description = {"解耦 RF 的 NDV 比值阈值。当 probe_ndv/build_ndv < 该值时," - + "优先使用解耦 RF 并删除标准 RF;否则保留标准 RF,解耦 RF 设为非阻塞", - "NDV ratio threshold for decoupled RF. When probe_ndv/build_ndv < threshold, " + description = "NDV ratio threshold for decoupled RF. When probe_ndv/build_ndv < threshold, " + "prefer decoupled RF and remove standard RF; otherwise keep standard RF " - + "and make decoupled RF non-blocking"}) + + "and make decoupled RF non-blocking") public double decoupledRfNdvRatioThreshold = 0.5; @VarAttrDef.VarAttr(name = MIN_DECOUPLED_RF_TARGET_ROWS, - description = {"解耦 RF 目标扫描节点的最小行数。当目标扫描行数低于此阈值时," - + "跳过生成解耦 RF(因为小表扫描太快,RF 来不及生效)", - "Minimum row count for the target scan of a decoupled RF. " + description = "Minimum row count for the target scan of a decoupled RF. " + "Skip generating decoupled RF when the target scan has fewer rows " - + "(small scans complete too quickly for the RF to arrive in time)"}) + + "(small scans complete too quickly for the RF to arrive in time)") public long minDecoupledRfTargetRows = 5_000_000; @VarAttrDef.VarAttr(name = "enable_aggregate_cse", needForward = true) @@ -1103,26 +1093,24 @@ public static double getHotValueThreshold() { // When false (default), the optimizer rule PushDownVirtualColumnsIntoOlapScan will not apply. @VarAttrDef.VarAttr(name = "enable_virtual_slot_for_cse", needForward = true, varType = VariableAnnotation.EXPERIMENTAL, - description = {"是否启用将公共子表达式作为虚拟列下推到 OlapScan(实验特性)", - "Enable pushing common sub-expressions as virtual columns into OlapScan (experimental)"}) + description = "Enable pushing common sub-expressions as virtual columns into OlapScan (experimental)") public boolean experimentalEnableVirtualSlotForCse = false; @VarAttrDef.VarAttr(name = ENABLE_NEW_SHUFFLE_HASH_METHOD) public boolean enableNewShffleHashMethod = true; @VarAttrDef.VarAttr(name = JDBC_CLICKHOUSE_QUERY_FINAL, needForward = true, - description = {"是否在查询 ClickHouse JDBC 外部表时,对查询 SQL 添加 FINAL 关键字。", - "Whether to add the FINAL keyword to the query SQL when querying ClickHouse JDBC external tables."}) + description = "Whether to add the FINAL keyword to the query SQL when querying ClickHouse JDBC external " + + "tables.") public boolean jdbcClickhouseQueryFinal = false; @VarAttrDef.VarAttr(name = ENABLE_JDBC_ORACLE_NULL_PREDICATE_PUSH_DOWN, needForward = true, - description = {"是否允许将 NULL 谓词下推到 Oracle JDBC 外部表。", - "Whether to allow NULL predicates to be pushed down to Oracle JDBC external tables."}) + description = "Whether to allow NULL predicates to be pushed down to Oracle JDBC external tables.") public boolean enableJdbcOracleNullPredicatePushDown = false; @VarAttrDef.VarAttr(name = ENABLE_JDBC_CAST_PREDICATE_PUSH_DOWN, needForward = true, - description = {"是否允许将带有 CAST 表达式的谓词下推到 JDBC 外部表。", - "Whether to allow predicates with CAST expressions to be pushed down to JDBC external tables."}) + description = "Whether to allow predicates with CAST expressions to be pushed down to JDBC external tables." + ) public boolean enableJdbcCastPredicatePushDown = true; @VarAttrDef.VarAttr(name = INSERT_VISIBLE_TIMEOUT_MS, needForward = true) @@ -1131,21 +1119,19 @@ public static double getHotValueThreshold() { // Control whether publish timeout keeps the committed response or returns an explicit error. @VarAttrDef.VarAttr(name = INSERT_VISIBLE_TIMEOUT_RETURN_MODE, needForward = true, checker = "checkInsertVisibleTimeoutReturnMode", setter = "setInsertVisibleTimeoutReturnMode", - description = {"控制普通内表 INSERT 在 publish timeout 时返回给客户端的状态。", - "Controls the status returned to the client when a normal internal-table INSERT times out " - + "while waiting for publish visibility."}, + description = "Controls the status returned to the client when a normal internal-table INSERT times out " + + "while waiting for publish visibility.", options = {INSERT_VISIBLE_TIMEOUT_RETURN_MODE_COMMITTED, INSERT_VISIBLE_TIMEOUT_RETURN_MODE_ERROR}) public String insertVisibleTimeoutReturnMode = INSERT_VISIBLE_TIMEOUT_RETURN_MODE_COMMITTED; @VarAttrDef.VarAttr(name = ENABLE_EVENTUAL_CONSISTENT_CHANGE, needForward = true, - description = {"是否允许在 CHANGES/快照类时间查询中使用最终一致语义(不等待事务发布)。开启后可能返回不包含最新 commit 的结果。", - "Whether to allow eventual consistent semantics for time-based CHANGES/snapshot queries. " - + "If true, query may return results without waiting committed txns to be visible."}) + description = "Whether to allow eventual consistent semantics for time-based CHANGES/snapshot queries. " + + "If true, query may return results without waiting committed txns to be visible.") public boolean enableEventualConsistentChange = false; @VarAttrDef.VarAttr(name = CHANGE_VISIBLE_TIMEOUT_MS, needForward = true, - description = {"时间范围 CHANGES/快照查询等待 COMMITTED 事务发布为 VISIBLE 的最长时间(毫秒)。", - "Max time in ms to wait committed txns become visible for time-based CHANGES/snapshot queries."}) + description = "Max time in ms to wait committed txns become visible for time-based CHANGES/snapshot " + + "queries.") public long changeVisibleTimeoutMs = DEFAULT_CHANGE_VISIBLE_TIMEOUT_MS; // max memory used on every backend. Default value to 100G. @@ -1157,46 +1143,41 @@ public static double getHotValueThreshold() { public boolean enableAdaptiveScan = true; @VarAttrDef.VarAttr(name = SCAN_QUEUE_MEM_LIMIT, needForward = true, - description = {"每个 Scan Instance 的 block queue 能够保存多少字节的 block", - "How many bytes of block can be saved in the block queue of each Scan Instance"}) + description = "How many bytes of block can be saved in the block queue of each Scan Instance") // 100MB public long maxScanQueueMemByte = 2147483648L / 20; - @VarAttrDef.VarAttr(name = MAX_SCANNERS_CONCURRENCY, needForward = true, description = { - "ScanNode 扫描数据的最大并发,默认为 4", "The max threads to read data of ScanNode, default 4"}) + @VarAttrDef.VarAttr(name = MAX_SCANNERS_CONCURRENCY, needForward = true, description = "The max threads to read " + + "data of ScanNode, default 4") public int maxScannersConcurrency = 4; - @VarAttrDef.VarAttr(name = MAX_FILE_SCANNERS_CONCURRENCY, needForward = true, description = { - "FileScanNode 扫描数据的最大并发,默认为 16", "The max threads to read data of FileScanNode, default 16"}) + @VarAttrDef.VarAttr(name = MAX_FILE_SCANNERS_CONCURRENCY, needForward = true, description = "The max threads to " + + "read data of FileScanNode, default 16") public int maxFileScannersConcurrency = 16; - @VarAttrDef.VarAttr(name = ENABLE_FILE_SCANNER_V2, needForward = true, fuzzy = true, description = { - "开启后 FileScanNode 会在支持的查询场景使用 FileScannerV2,默认开启", - "When enabled, FileScanNode uses FileScannerV2 for supported query scans. Enabled by default."}) + @VarAttrDef.VarAttr(name = ENABLE_FILE_SCANNER_V2, needForward = true, fuzzy = true, description = "When enabled, " + + "FileScanNode uses FileScannerV2 for supported query scans. Enabled by default.") public boolean enableFileScannerV2 = true; @VarAttrDef.VarAttr(name = LOCAL_EXCHANGE_FREE_BLOCKS_LIMIT) public int localExchangeFreeBlocksLimit = 4; - @VarAttrDef.VarAttr(name = MIN_SCANNERS_CONCURRENCY, needForward = true, description = { - "Scanner 的最小并发度,默认为 1", "The min concurrency of Scanner, default 1" - }) + @VarAttrDef.VarAttr(name = MIN_SCANNERS_CONCURRENCY, needForward = true, description = "The min concurrency of " + + "Scanner, default 1") public int minScannersConcurrency = 1; - @VarAttrDef.VarAttr(name = MIN_FILE_SCANNERS_CONCURRENCY, needForward = true, description = { - "外表Scanner 的最小并发度,默认为 1", "The min concurrency of Remote Scanner, default 1" - }) + @VarAttrDef.VarAttr(name = MIN_FILE_SCANNERS_CONCURRENCY, needForward = true, description = "The min concurrency " + + "of Remote Scanner, default 1") public int minFileScannersConcurrency = 1; - @VarAttrDef.VarAttr(name = MIN_SCAN_SCHEDULER_CONCURRENCY, needForward = true, description = { - "ScanScheduler 的最小并发度,默认值 0 表示使用 Scan 线程池线程数量的两倍", "The min concurrency of ScanScheduler, " - + "default 0 means use twice the number of Scan thread pool threads" - }, varType = VariableAnnotation.DEPRECATED) + @VarAttrDef.VarAttr(name = MIN_SCAN_SCHEDULER_CONCURRENCY, needForward = true, description = "The min concurrency " + + "of ScanScheduler, " + + "default 0 means use twice the number of Scan thread pool threads", + varType = VariableAnnotation.DEPRECATED) public int minScanSchedulerConcurrency = 0; - @VarAttrDef.VarAttr(name = CTE_MAX_RECURSION_DEPTH, needForward = true, description = { - "CTE递归的最大深度,默认值100", - "The maximum depth of CTE recursion. Default is 100" }) + @VarAttrDef.VarAttr(name = CTE_MAX_RECURSION_DEPTH, needForward = true, description = "The maximum depth of CTE " + + "recursion. Default is 100") public int cteMaxRecursionDepth = 100; // By default, the number of Limit items after OrderBy is changed from 65535 items @@ -1260,16 +1241,13 @@ public static double getHotValueThreshold() { @VarAttrDef.VarAttr(name = WORKLOAD_VARIABLE, needForward = true) public String workloadGroup = ""; - @VarAttrDef.VarAttr(name = BYPASS_WORKLOAD_GROUP, needForward = true, description = { - "查询是否绕开 WorkloadGroup 的限制,目前仅支持绕开查询排队的逻辑", - "whether bypass workload group's limitation, currently only support bypass query queue"}) + @VarAttrDef.VarAttr(name = BYPASS_WORKLOAD_GROUP, needForward = true, description = "whether bypass workload " + + "group's limitation, currently only support bypass query queue") public boolean bypassWorkloadGroup = false; @VarAttrDef.VarAttr(name = QUERY_SLOT_COUNT, needForward = true, checker = "checkQuerySlotCount", - description = { - "每个查询占用的 slot 的数量,workload group 的 query slot 的总数等于设置的最大并发数", - "Number of slots occupied by each query, the total number of query slots " - + "of the workload group equals the maximum number of concurrent requests"}) + description = "Number of slots occupied by each query, the total number of query slots " + + "of the workload group equals the maximum number of concurrent requests") public int wgQuerySlotCount = 1; public void checkQuerySlotCount(String slotCnt) { @@ -1392,10 +1370,8 @@ public void checkQuerySlotCount(String slotCnt) { // Valid range: [1MB, 512MB]. Default 8MB. @VarAttrDef.VarAttr(name = PREFERRED_BLOCK_SIZE_BYTES, needForward = true, checker = "checkPreferredBlockSizeBytes", - description = {"目标输出 Block 字节数上限,自适应 batch size 功能使用。" - + "范围 [1MB, 512MB],默认 8MB", - "Target output block size in bytes for adaptive batch size. " - + "Range [1MB, 512MB]. Default 8MB."}) + description = "Target output block size in bytes for adaptive batch size. " + + "Range [1MB, 512MB]. Default 8MB.") public long preferredBlockSizeBytes = 8388608L; // 8MB @VarAttrDef.VarAttr(name = DISABLE_STREAMING_PREAGGREGATIONS, fuzzy = true) @@ -1468,45 +1444,38 @@ public enum IgnoreSplitType { @VarAttrDef.VarAttr(name = IGNORE_SPLIT_TYPE, checker = "checkIgnoreSplitType", options = {"NONE", "IGNORE_JNI", "IGNORE_NATIVE", "IGNORE_PAIMON_CPP"}, - description = {"忽略指定类型的 split", "Ignore splits of the specified type"}) + description = "Ignore splits of the specified type") public String ignoreSplitType = IgnoreSplitType.NONE.toString(); public static final String USE_CONSISTENT_HASHING_FOR_EXTERNAL_SCAN = "use_consistent_hash_for_external_scan"; @VarAttrDef.VarAttr(name = USE_CONSISTENT_HASHING_FOR_EXTERNAL_SCAN, - description = {"对外表采用一致性 hash 的方式做 split 的分发", - "Use consistent hashing to split the appearance for external scan"}) + description = "Use consistent hashing to split the appearance for external scan") public boolean useConsistentHashForExternalScan = false; @VarAttrDef.VarAttr(name = PROFILE_LEVEL, fuzzy = false, setter = "setProfileLevel", checker = "checkProfileLevel", - description = { "查询 profile 的级别,1 表示只收集 MergedProfile 级别的 Counter,2 表示打印详细信息," - + "3 表示打开一些可能导致性能回退的 Counter", "The level of query profile, " - + "1 means only collect Counter of MergedProfile, 2 means print detailed information," - + " 3 means open some Counters that may cause performance degradation"}) + description = "The level of query profile, " + + "1 means only collect Counter of MergedProfile, 2 means print detailed information," + + " 3 means open some Counters that may cause performance degradation") public int profileLevel = 2; @VarAttrDef.VarAttr(name = MAX_INSTANCE_NUM) public int maxInstanceNum = 64; - @VarAttrDef.VarAttr(name = DML_PLAN_RETRY_TIMES, needForward = true, description = { - "写入规划的最大重试次数。为了避免死锁,写入规划时采用了分阶段加锁。当在两次加锁中间,表结构发生变更时,会尝试重新规划。" - + "此变量限制重新规划的最大尝试次数。", - "Maximum retry attempts for write planning. To avoid deadlocks, " - + "phased locking is adopted during write planning. " - + "When changes occur to the table structure between two locking phases, " - + "re-planning will be attempted. " - + "This variable limits the maximum number of retry attempts for re-planning." - }) + @VarAttrDef.VarAttr(name = DML_PLAN_RETRY_TIMES, needForward = true, description = "Maximum retry attempts for " + + "write planning. To avoid deadlocks, " + + "phased locking is adopted during write planning. " + + "When changes occur to the table structure between two locking phases, " + + "re-planning will be attempted. " + + "This variable limits the maximum number of retry attempts for re-planning.") public int dmlPlanRetryTimes = 3; @VarAttrDef.VarAttr(name = ENABLE_INSERT_STRICT, needForward = true) public boolean enableInsertStrict = true; - @VarAttrDef.VarAttr(name = ENABLE_INSERT_VALUE_AUTO_CAST, needForward = true, description = { - "INSERT VALUE 语句是否自动类型转换。当前只针对长字符串自动截短。默认开。", - "INSERT VALUE statement whether to automatically type cast. Only use for truncate long string. " - + "ON by default." - }) + @VarAttrDef.VarAttr(name = ENABLE_INSERT_VALUE_AUTO_CAST, needForward = true, description = "INSERT VALUE " + + "statement whether to automatically type cast. Only use for truncate long string. " + + "ON by default.") public boolean enableInsertValueAutoCast = true; @VarAttrDef.VarAttr(name = INSERT_MAX_FILTER_RATIO, needForward = true) @@ -1518,30 +1487,21 @@ public enum IgnoreSplitType { @VarAttrDef.VarAttr( name = ENABLE_BINARY_SEARCH_FILTERING_PARTITIONS, fuzzy = true, - description = { - "是否允许使用二分查找算法去过滤分区。默认开。", - "Whether to allow use binary search algorithm to filter partitions. ON by default." - } + description = "Whether to allow use binary search algorithm to filter partitions. ON by default." ) public boolean enableBinarySearchFilteringPartitions = true; @VarAttrDef.VarAttr( name = CACHE_SORTED_PARTITION_INTERVAL_SECOND, fuzzy = false, - description = { - "表数据更新后,多少秒之内不能使用二分查找分区裁剪", - "After updating table data, within how many seconds can " - + "binary search partitioning and pruning not be used." - } + description = "After updating table data, within how many seconds can " + + "binary search partitioning and pruning not be used." ) public int cacheSortedPartitionIntervalSecond = 10; @VarAttrDef.VarAttr(name = SKIP_PRUNE_PREDICATE, fuzzy = true, - description = { - "是否跳过“在分区裁剪后删除恒真谓词”的优化。默认为 OFF(即执行此优化)。", - "Skips the removal of always-true predicates after partition pruning. " - + "Defaults to OFF (optimization is active)." - } + description = "Skips the removal of always-true predicates after partition pruning. " + + "Defaults to OFF (optimization is active)." ) public boolean skipPrunePredicate = false; @@ -1574,13 +1534,7 @@ public enum IgnoreSplitType { // once it graduates. @VarAttrDef.VarAttr(name = ENABLE_QUERY_CACHE_INCREMENTAL, varType = VariableAnnotation.EXPERIMENTAL, needForward = true, - description = {"是否允许 BE 以增量合并的方式复用过期的 Query Cache 条目:只扫描缓存版本之后的" - + "增量 rowset,并与缓存的聚合中间结果一起交给上游合并。仅对聚合直压扫描且不做 finalize " - + "的缓存点生效,且选中索引须为追加写:DUP_KEYS 表,或增量窗口内未改写既有主键的写时合并" - + "(merge-on-write)UNIQUE_KEYS 表(BE 按 tablet 检查 delete bitmap);增量不可捕获(如" - + "已被 compaction 合并)、含 DELETE 谓词或改写了历史行时自动回退全量重算。需与 " - + "enable_query_cache 同时开启。", - "Whether BE may reuse a stale query cache entry by incremental merge: scan only" + description = "Whether BE may reuse a stale query cache entry by incremental merge: scan only" + " the delta rowsets since the cached version and emit them together with the" + " cached partial aggregation blocks for the upstream merge. Only takes effect" + " when the cache point is a non-finalize aggregation directly over the scan" @@ -1588,7 +1542,7 @@ public enum IgnoreSplitType { + " UNIQUE_KEYS whose delta did not rewrite pre-existing keys (BE checks the" + " delete bitmap per tablet); falls back to a full recompute whenever the" + " delta cannot be captured (e.g. compacted away), contains delete predicates" - + " or rewrites history rows. Requires enable_query_cache."}) + + " or rewrites history rows. Requires enable_query_cache.") public boolean enableQueryCacheIncremental = false; // Forwarded for the same reason as enable_query_cache: the master builds @@ -1635,11 +1589,9 @@ public enum IgnoreSplitType { ) public boolean showHiddenColumns = false; - @VarAttrDef.VarAttr(name = ALLOW_PARTITION_COLUMN_NULLABLE, description = { - "是否允许 NULLABLE 列作为 PARTITION 列。开启后,RANGE PARTITION 允许 NULLABLE PARTITION 列" - + "(LIST PARTITION 当前不支持)。默认开。", - "Whether to allow NULLABLE columns as PARTITION columns. When ON, RANGE PARTITION allows " - + "NULLABLE PARTITION columns (LIST PARTITION is not supported currently). ON by default." }) + @VarAttrDef.VarAttr(name = ALLOW_PARTITION_COLUMN_NULLABLE, description = "Whether to allow NULLABLE columns as " + + "PARTITION columns. When ON, RANGE PARTITION allows " + + "NULLABLE PARTITION columns (LIST PARTITION is not supported currently). ON by default.") public boolean allowPartitionColumnNullable = true; @VarAttrDef.VarAttr(name = DELETE_WITHOUT_PARTITION, needForward = true) @@ -1652,8 +1604,7 @@ public enum IgnoreSplitType { public boolean enableNereidsDML = true; @VarAttrDef.VarAttr(name = ENABLE_NEREIDS_DML_WITH_PIPELINE, - varType = VariableAnnotation.REMOVED, description = { "在新优化器中,使用 pipeline 引擎执行 DML", - "execute DML with pipeline engine in Nereids" }) + varType = VariableAnnotation.REMOVED, description = "execute DML with pipeline engine in Nereids") public boolean enableNereidsDmlWithPipeline = true; @VarAttrDef.VarAttr(name = ENABLE_STRICT_CONSISTENCY_DML, needForward = true) @@ -1680,8 +1631,8 @@ public enum IgnoreSplitType { @VarAttrDef.VarAttr(name = OPTIMIZE_INDEX_SCAN_PARALLELISM, needForward = true, - description = {"优化索引扫描时的 Scan 并行度,该优化目前只对 ann topn 查询生效", - "Optimize the Scan parallelism when indexing, this optimization only works for ann topn queries."}) + description = "Optimize the Scan parallelism when indexing, this optimization only works for ann topn " + + "queries.") private boolean optimizeIndexScanParallelism = true; @VarAttrDef.VarAttr(name = PARALLEL_SCAN_MAX_SCANNERS_COUNT, fuzzy = true, @@ -1702,41 +1653,33 @@ public enum IgnoreSplitType { @VarAttrDef.VarAttr( name = ENABLE_LOCAL_SHUFFLE, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, - description = {"是否在 pipelineX 引擎上开启 local shuffle 优化", - "Whether to enable local shuffle on pipelineX engine."}, needForward = true) + description = "Whether to enable local shuffle on pipelineX engine.", needForward = true) private boolean enableLocalShuffle = true; @VarAttrDef.VarAttr( name = ENABLE_LOCAL_SHUFFLE_PLANNER, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, - description = {"是否在FE规划Local Shuffle", - "Whether to plan local shuffle in frontend"}, needForward = true) + description = "Whether to plan local shuffle in frontend", needForward = true) private boolean enableLocalShufflePlanner = true; @VarAttrDef.VarAttr( name = FORCE_TO_LOCAL_SHUFFLE, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, - description = {"是否在 pipelineX 引擎上强制开启 local shuffle 优化", - "Whether to force to local shuffle on pipelineX engine."}) + description = "Whether to force to local shuffle on pipelineX engine.") private boolean forceToLocalShuffle = false; @VarAttrDef.VarAttr( name = LOCAL_SHUFFLE_BUCKET_UPGRADE_RATIO, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, - description = {"FE规划Local Shuffle时, 当池化bucket join所在fragment的每BE实例数大于" - + "每BE有数据分桶数的该倍数时, 将join两侧的桶分布本地重分发为hash分布以突破桶数并发上限。" - + "必须大于1才生效; 小于等于1(含0和负数)时关闭该优化", - "When FE plans local shuffle and a pooled bucket join fragment has more instances" + description = "When FE plans local shuffle and a pooled bucket join fragment has more instances" + " per BE than (buckets-with-data per BE) * this ratio, re-distribute both join" + " sides with local hash instead of bucket hash so join parallelism is no longer" + " capped at bucket count. Only takes effect when > 1; values <= 1 (including 0" - + " and negatives) disable the upgrade."}, needForward = true) + + " and negatives) disable the upgrade.", needForward = true) private double localShuffleBucketUpgradeRatio = 1.5; @VarAttrDef.VarAttr( name = BUCKET_SHUFFLE_DOWNGRADE_RATIO, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, - description = {"当一侧基表总桶数小于总实例数的该倍数时, 放弃bucket shuffle join降级为shuffle join。" - + "小于等于0时永不降级。默认0.8保持原有行为", - "Downgrade bucket shuffle join to shuffle join when the base table side's total" + description = "Downgrade bucket shuffle join to shuffle join when the base table side's total" + " bucket count is less than total instance count times this ratio. Values <= 0" - + " never downgrade. Default 0.8 keeps the original behavior."}, needForward = true) + + " never downgrade. Default 0.8 keeps the original behavior.", needForward = true) private double bucketShuffleDowngradeRatio = 0.8; @VarAttrDef.VarAttr(name = ENABLE_LOCAL_MERGE_SORT) @@ -1765,14 +1708,12 @@ public enum IgnoreSplitType { public int parallelPrepareThreshold = 32; @VarAttrDef.VarAttr(name = READ_HIVE_JSON_IN_ONE_COLUMN, - description = {"在读取 hive json 的时候,由于存在一些不支持的 json 格式,我们默认会报错。为了让用户使用体验更好," - + "当该变量为 true 的时候,将一整行 json 读取到第一列中,用户可以自行选择对一整行 json 进行处理,例如 JSON_PARSE。" - + "需要表的第一列的数据类型为 string.", - "When reading hive json, we will report an error by default because there are some unsupported " + description = "When reading hive json, we will report an error by default because there are some " + + "unsupported " + "json formats. In order to provide users with a better experience, when this variable is true," + "a whole line of json is read into the first column. Users can choose to process a whole line" + "of json, such as JSON_PARSE. The data type of the first column of the table needs to" - + "be string."}) + + "be string.") private boolean readHiveJsonInOneColumn = false; @VarAttrDef.VarAttr(name = ENABLE_COST_BASED_JOIN_REORDER) @@ -1786,16 +1727,16 @@ public enum IgnoreSplitType { @VarAttrDef.VarAttr(name = ENABLE_REWRITE_ELEMENT_AT_TO_SLOT, fuzzy = true) private boolean enableRewriteElementAtToSlot = true; - @VarAttrDef.VarAttr(name = FORCE_SORT_ALGORITHM, needForward = true, description = { "强制指定 SortNode 的排序算法", - "Force the sort algorithm of SortNode to be specified" }) + @VarAttrDef.VarAttr(name = FORCE_SORT_ALGORITHM, needForward = true, description = "Force the sort algorithm of " + + "SortNode to be specified") public String forceSortAlgorithm = ""; @VarAttrDef.VarAttr(name = FULL_SORT_MAX_BUFFERED_BYTES, needForward = true, setter = "setFullSortMaxBufferedBytes") public long fullSortMaxBufferedBytes = 64L * 1024L * 1024L; - @VarAttrDef.VarAttr(name = "ignore_runtime_filter_error", needForward = true, description = { "在 rf 遇到错误的时候忽略该 rf", - "Ignore the rf when it encounters an error" }) + @VarAttrDef.VarAttr(name = "ignore_runtime_filter_error", + needForward = true, description = "Ignore the rf when it encounters an error") public boolean ignoreRuntimeFilterError = false; @VarAttrDef.VarAttr(name = RUNTIME_FILTER_MODE, needForward = true) @@ -1827,11 +1768,9 @@ public enum IgnoreSplitType { private boolean enableSyncRuntimeFilterSize = true; @VarAttrDef.VarAttr(name = RUNTIME_FILTER_BROADCAST_JOIN_PRODUCER_NUM, needForward = true, - description = {"控制 Nereids 分布式规划中每个 broadcast join runtime filter 的生产 BE 数量。" - + "设置为小于等于 0 时不限制。Legacy Coordinator 路径保持原行为。", - "Controls the number of producer BEs for each broadcast join runtime filter in " + description = "Controls the number of producer BEs for each broadcast join runtime filter in " + "the Nereids distributed planner. Values less than or equal to 0 disable the limit. " - + "The legacy Coordinator path keeps the existing behavior."}) + + "The legacy Coordinator path keeps the existing behavior.") private int runtimeFilterBroadcastJoinProducerNum = 3; @VarAttrDef.VarAttr(name = RUNTIME_FILTER_TREE_PUBLISH_MAX_SEND_BYTES, needForward = true, fuzzy = true, @@ -1845,16 +1784,14 @@ public enum IgnoreSplitType { private boolean enableParallelResultSink = true; @VarAttrDef.VarAttr(name = "sort_phase_num", fuzzy = true, needForward = true, - description = {"如设置为 1,则只生成 1 阶段 sort,设置为 2,则只生成 2 阶段 sort,设置其它值,优化器根据代价选择 sort 类型", - "set the number of sort phases 1 or 2. if set other value, let cbo decide the sort type"}) + description = "set the number of sort phases 1 or 2. if set other value, let cbo decide the sort type") public int sortPhaseNum = 0; @VarAttrDef.VarAttr(name = HIVE_TEXT_COMPRESSION, fuzzy = true, needForward = true) private String hiveTextCompression = "plain"; @VarAttrDef.VarAttr(name = READ_CSV_EMPTY_LINE_AS_NULL, needForward = true, - description = {"在读取 csv 文件时是否读取 csv 的空行为 null", - "Determine whether to read empty rows in CSV files as NULL when reading CSV files."}) + description = "Determine whether to read empty rows in CSV files as NULL when reading CSV files.") public boolean readCsvEmptyLineAsNull = false; @VarAttrDef.VarAttr(name = USE_RF_DEFAULT) @@ -1873,16 +1810,14 @@ public enum IgnoreSplitType { @VarAttrDef.VarAttr(name = "enable_topn_expr_pullup", needForward = true, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, - description = {"是否将TopN下方Project中的非平凡表达式上拉至TopN之上," - + "以扩大延迟物化范围", - "Whether to pull up non-trivial expressions from Project below TopN, " - + "to expand lazy materialization scope"}) + description = "Whether to pull up non-trivial expressions from Project below TopN, " + + "to expand lazy materialization scope") public boolean enableTopnExprPullup = true; @VarAttrDef.VarAttr(name = ENABLE_PRUNE_NESTED_COLUMN, needForward = true, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, - description = {"是否裁剪 map/struct 类型", "Whether to prune the type of map/struct"} + description = "Whether to prune the type of map/struct" ) public boolean enablePruneNestedColumns = true; @@ -1995,20 +1930,16 @@ public void setMaxJoinNumberOfReorder(int maxJoinNumberOfReorder) { @VarAttrDef.VarAttr(name = ENABLE_PARTITION_TOPN) private boolean enablePartitionTopN = true; - @VarAttrDef.VarAttr(name = PARTITION_TOPN_MAX_PARTITIONS, needForward = true, description = { - "这个阈值决定了 partition_topn 计算时的最大分区数量,超过这个阈值后且输入总行数少于预估总量,剩余的数据将直接透传给下一个算子", - "This threshold determines how many partitions will be allocated for window function get topn." - + " if this threshold is exceeded and input rows less than the estimated total rows, the remaining" - + " data will be pass through to other node directly." - }) + @VarAttrDef.VarAttr(name = PARTITION_TOPN_MAX_PARTITIONS, needForward = true, description = "This threshold " + + "determines how many partitions will be allocated for window function get topn." + + " if this threshold is exceeded and input rows less than the estimated total rows, the remaining" + + " data will be pass through to other node directly.") private int partitionTopNMaxPartitions = 1024; - @VarAttrDef.VarAttr(name = PARTITION_TOPN_PER_PARTITION_ROWS, needForward = true, description = { - "这个数值用于 partition_topn 预估每个分区的行数,用来计算所有分区的预估数据总量,决定是否能透传下一个算子", - "This value is used for partition_topn to estimate the number of rows in each partition, to calculate " + @VarAttrDef.VarAttr(name = PARTITION_TOPN_PER_PARTITION_ROWS, needForward = true, description = "This value is " + + "used for partition_topn to estimate the number of rows in each partition, to calculate " + " the estimated total amount of data for all partitions, and to determine whether the next operator " - + " can be passed transparently." - }) + + " can be passed transparently.") private int partitionTopNPerPartitionRows = 1000; @VarAttrDef.VarAttr(name = GLOBAL_PARTITION_TOPN_THRESHOLD) @@ -2033,18 +1964,17 @@ public void setMaxJoinNumberOfReorder(int maxJoinNumberOfReorder) { private boolean checkOverflowForDecimal = true; @VarAttrDef.VarAttr(name = DECIMAL_OVERFLOW_SCALE, needForward = true, affectQueryResultInPlan = true, - description = { - "当 decimal 数值计算结果精度溢出时,计算结果最多可保留的小数位数", "When the precision of the result of" + description = "When the precision of the result of" + " a decimal numerical calculation overflows," - + "the maximum number of decimal scale that the result can be retained"} + + "the maximum number of decimal scale that the result can be retained" ) public int decimalOverflowScale = 6; @VarAttrDef.VarAttr(name = ENABLE_DPHYP_OPTIMIZER) public boolean enableDPHypOptimizer = false; - @VarAttrDef.VarAttr(name = SHORT_CIRCUIT_EVALUATION, fuzzy = true, description = { "是否启用短路求值", - "Whether to enable short-circuit evaluation" }) + @VarAttrDef.VarAttr(name = SHORT_CIRCUIT_EVALUATION, fuzzy = true, description = "Whether to enable short-circuit " + + "evaluation") public boolean shortCircuitEvaluation = false; /** @@ -2056,9 +1986,8 @@ public void setMaxJoinNumberOfReorder(int maxJoinNumberOfReorder) { private int nthOptimizedPlan = 1; @VarAttrDef.VarAttr(name = REQUIRED_GROUP_IDS, - description = {"指定优化器必须选择包含这些 Group ID 的物理计划(逗号分隔的整数列表)", - "Force the optimizer to choose a physical plan containing these Group IDs " - + "(comma-separated integer list)"}) + description = "Force the optimizer to choose a physical plan containing these Group IDs " + + "(comma-separated integer list)") public String requiredGroupIds = ""; public boolean isEnableLeftZigZag() { @@ -2124,11 +2053,12 @@ public boolean isEnableHboNonStrictMatchingMode() { private boolean enableNereidsPlanner = true; @VarAttrDef.VarAttr(name = ENABLE_PRELOAD_EXTERNAL_METADATA, - needForward = true, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, description = { - "是否在获取内表规划期读锁前预加载 Hive/Hudi/Iceberg/Paimon/JDBC 外表元数据", - "Whether to preload Hive/Hudi/Iceberg/Paimon/JDBC external table metadata before internal table " - + "plan-time read locks are acquired" - }) + needForward = true, + fuzzy = false, + varType = VariableAnnotation.EXPERIMENTAL, + description = "Whether to preload Hive/Hudi/Iceberg/Paimon/JDBC external table metadata before internal " + + "table " + + "plan-time read locks are acquired") private boolean enablePreloadExternalMetadata = false; @VarAttrDef.VarAttr(name = DISABLE_NEREIDS_RULES, needForward = true) @@ -2137,12 +2067,9 @@ public boolean isEnableHboNonStrictMatchingMode() { @VarAttrDef.VarAttr(name = ENABLE_NEREIDS_RULES, needForward = true) public String enableNereidsRules = ""; - @VarAttrDef.VarAttr(name = ENABLE_VISITOR_REWRITER_DEPTH_THRESHOLD, needForward = true, description = { - "当查询计划的深度小于或等于这个阈值时,使用 visitor rewriter 去加速改写,否则使用 stack rewriter 去改写," - + "防止 StackOverflowError", - "When the depth of the query plan is less than or equal to this threshold, use visitor rewriter to " - + "speed up rewriting, otherwise use stack rewriter to rewrite to prevent StackOverflowError" - }) + @VarAttrDef.VarAttr(name = ENABLE_VISITOR_REWRITER_DEPTH_THRESHOLD, needForward = true, description = "When the " + + "depth of the query plan is less than or equal to this threshold, use visitor rewriter to " + + "speed up rewriting, otherwise use stack rewriter to rewrite to prevent StackOverflowError") public int enableVisitorRewriterDepthThreshold = 100; @VarAttrDef.VarAttr(name = DISABLE_NEREIDS_EXPRESSION_RULES, needForward = true, @@ -2155,13 +2082,11 @@ public boolean isEnableHboNonStrictMatchingMode() { public double filterCostFactor = 0.0001; @VarAttrDef.VarAttr(name = ENABLE_NEREIDS_DISTRIBUTE_PLANNER, needForward = true, - fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL, description = { - "使用新的 nereids 的分布式规划器的开关,这个分布式规划器可以规划出一些更高效的查询计划,比如在某些情况下," - + "可以把左表 shuffle 到右表去做 bucket shuffle join", - "The switch to use new DistributedPlanner of nereids, this planner can planning some " - + "more efficient query plans, e.g. in certain situations, shuffle left side to " - + "right side to do bucket shuffle join" - } + fuzzy = false, + varType = VariableAnnotation.EXPERIMENTAL, + description = "The switch to use new DistributedPlanner of nereids, this planner can planning some " + + "more efficient query plans, e.g. in certain situations, shuffle left side to " + + "right side to do bucket shuffle join" ) private boolean enableNereidsDistributePlanner = true; @@ -2223,10 +2148,7 @@ public boolean isEnableHboNonStrictMatchingMode() { @VarAttrDef.VarAttr( name = ENABLE_FAST_ANALYZE_INSERT_INTO_VALUES, fuzzy = true, - description = { - "跳过大部分的优化规则,快速分析 insert into values 语句", - "Skip most optimization rules and quickly analyze insert into values statements" - } + description = "Skip most optimization rules and quickly analyze insert into values statements" ) private boolean enableFastAnalyzeInsertIntoValues = true; @@ -2234,17 +2156,15 @@ public boolean isEnableHboNonStrictMatchingMode() { public boolean enableFunctionPushdown = false; @VarAttrDef.VarAttr(name = ENABLE_EXT_FUNC_PRED_PUSHDOWN, needForward = true, - description = {"启用外部表(如通过 ODBC 或 JDBC 访问的表)查询中谓词的函数下推", - "Enable function pushdown for predicates in queries to external tables " - + "(such as tables accessed via ODBC or JDBC)"}) + description = "Enable function pushdown for predicates in queries to external tables " + + "(such as tables accessed via ODBC or JDBC)") public boolean enableExtFuncPredPushdown = true; @VarAttrDef.VarAttr(name = FORBID_UNKNOWN_COLUMN_STATS) public boolean forbidUnknownColStats = false; @VarAttrDef.VarAttr(name = ENABLE_SEGMENT_LIMIT_PUSHDOWN, fuzzy = true, needForward = true, - description = {"是否启用 SegmentIterator 层 LIMIT 下推。", - "Set whether to push down LIMIT into SegmentIterator."}) + description = "Set whether to push down LIMIT into SegmentIterator.") public boolean enableSegmentLimitPushdown = true; @VarAttrDef.VarAttr(name = ENABLE_LOCAL_EXCHANGE, fuzzy = false, flag = VarAttrDef.INVISIBLE, @@ -2336,10 +2256,7 @@ public boolean isEnableHboNonStrictMatchingMode() { name = USE_ONE_PHASE_AGG_FOR_GROUP_CONCAT_WITH_ORDER, needForward = true, fuzzy = true, - description = { - "允许使用一阶段聚合来执行带有 order 的 group_concat 函数", - "Enable to use one stage aggregation to execute the group_concat function with order" - } + description = "Enable to use one stage aggregation to execute the group_concat function with order" ) public boolean useOnePhaseAggForGroupConcatWithOrder = false; @@ -2347,10 +2264,8 @@ public boolean isEnableHboNonStrictMatchingMode() { // 1. read related rowids along with necessary column data // 2. spawn fetch RPC to other nodes to get related data by sorted rowids @VarAttrDef.VarAttr(name = ENABLE_TWO_PHASE_READ_OPT, fuzzy = true, varType = VariableAnnotation.REMOVED, - description = {"由topn_lazy_materialization_threshold 替代," - + "当topn_lazy_materialization_threshold=-1时关闭两阶段读优化", - "Replaced by topn_lazy_materialization_threshold. The two-stage read optimization " - + "is disabled when topn_lazy_materialization_threshold = -1."}) + description = "Replaced by topn_lazy_materialization_threshold. The two-stage read optimization " + + "is disabled when topn_lazy_materialization_threshold = -1.") public boolean enableTwoPhaseReadOpt = true; @VarAttrDef.VarAttr(name = TOPN_OPT_LIMIT_THRESHOLD) public long topnOptLimitThreshold = 1024; @@ -2359,13 +2274,12 @@ public boolean isEnableHboNonStrictMatchingMode() { @VarAttrDef.VarAttr(name = ENABLE_SNAPSHOT_POINT_QUERY) public boolean enableSnapshotPointQuery = true; - @VarAttrDef.VarAttr(name = ENABLE_SERVER_SIDE_PREPARED_STATEMENT, needForward = true, description = { - "是否启用开启服务端 prepared statement", "Set whether to enable server side prepared statement."}) + @VarAttrDef.VarAttr(name = ENABLE_SERVER_SIDE_PREPARED_STATEMENT, needForward = true, description = "Set whether " + + "to enable server side prepared statement.") public boolean enableServeSidePreparedStatement = true; @VarAttrDef.VarAttr(name = MAX_PREPARED_STMT_COUNT, flag = VarAttrDef.GLOBAL, - needForward = true, description = { - "服务端 prepared statement 最大个数", "the maximum prepared statements server holds."}) + needForward = true, description = "the maximum prepared statements server holds.") public int maxPreparedStmtCount = 100000; @VarAttrDef.VarAttr(name = ENABLE_GROUP_COMMIT_FULL_PREPARE) @@ -2382,66 +2296,58 @@ public boolean isEnableHboNonStrictMatchingMode() { public boolean disableFileCache = false; @VarAttrDef.VarAttr(name = ENABLE_TOPN_LAZY_MAT_PHASE2_NO_WRITE_FILE_CACHE, needForward = true, - description = { - "开启后,TopN 延迟物化第二阶段读取在 file cache miss 时直接读远端且不写回 file cache。", - "When enabled, TopN lazy materialization phase-2 reads go remote-only on " - + "file-cache miss and do not write the missed range back to file cache." - }) + description = "When enabled, TopN lazy materialization phase-2 reads go remote-only on " + + "file-cache miss and do not write the missed range back to file cache.") public boolean enableTopnLazyMatPhase2NoWriteFileCache = false; // Whether enable block file cache. Only take effect when BE config item enable_file_cache is true. - @VarAttrDef.VarAttr(name = ENABLE_FILE_CACHE, needForward = true, description = { - "是否启用 file cache。该变量只有在 be.conf 中 enable_file_cache=true 时才有效," - + "如果 be.conf 中 enable_file_cache=false,该 BE 节点的 file cache 处于禁用状态。", - "Set wether to use file cache. This variable takes effect only if the BE config enable_file_cache=true. " - + "The cache is not used when BE config enable_file_cache=false."}) + @VarAttrDef.VarAttr(name = ENABLE_FILE_CACHE, needForward = true, description = "Set wether to use file cache. " + + "This variable takes effect only if the BE config enable_file_cache=true. " + + "The cache is not used when BE config enable_file_cache=false.") public boolean enableFileCache = false; // Specify base path for file cache, or chose a random path. - @VarAttrDef.VarAttr(name = FILE_CACHE_BASE_PATH, needForward = true, description = { - "指定 block file cache 在 BE 上的存储路径,默认 'random',随机选择 BE 配置的存储路径。", - "Specify the storage path of the block file cache on BE, default 'random', " - + "and randomly select the storage path configured by BE."}) + @VarAttrDef.VarAttr(name = FILE_CACHE_BASE_PATH, needForward = true, description = "Specify the storage path of " + + "the block file cache on BE, default 'random', " + + "and randomly select the storage path configured by BE.") public String fileCacheBasePath = "random"; // Whether enable query with inverted index. - @VarAttrDef.VarAttr(name = ENABLE_INVERTED_INDEX_QUERY, needForward = true, description = { - "是否启用 inverted index query。", "Set whether to use inverted index query."}) + @VarAttrDef.VarAttr(name = ENABLE_INVERTED_INDEX_QUERY, needForward = true, description = "Set whether to use " + + "inverted index query.") public boolean enableInvertedIndexQuery = true; // Whether enable pushdown count agg to scan node when using inverted index match. - @VarAttrDef.VarAttr(name = ENABLE_PUSHDOWN_COUNT_ON_INDEX, needForward = true, description = { - "是否启用 count_on_index pushdown。", "Set whether to pushdown count_on_index."}) + @VarAttrDef.VarAttr(name = ENABLE_PUSHDOWN_COUNT_ON_INDEX, needForward = true, description = "Set whether to " + + "pushdown count_on_index.") public boolean enablePushDownCountOnIndex = true; // Whether enable no need read data opt in segment_iterator. - @VarAttrDef.VarAttr(name = ENABLE_NO_NEED_READ_DATA_OPT, needForward = true, description = { - "是否启用 no_need_read_data opt。", "Set whether to enable no_need_read_data opt."}) + @VarAttrDef.VarAttr(name = ENABLE_NO_NEED_READ_DATA_OPT, needForward = true, description = "Set whether to enable " + + "no_need_read_data opt.") public boolean enableNoNeedReadDataOpt = true; // Whether enable pushdown minmax to scan node of unique table. - @VarAttrDef.VarAttr(name = ENABLE_PUSHDOWN_MINMAX_ON_UNIQUE, needForward = true, description = { - "是否启用 pushdown minmax on unique table。", "Set whether to pushdown minmax on unique table."}) + @VarAttrDef.VarAttr(name = ENABLE_PUSHDOWN_MINMAX_ON_UNIQUE, needForward = true, description = "Set whether to " + + "pushdown minmax on unique table.") public boolean enablePushDownMinMaxOnUnique = false; // Whether enable push down string type minmax to scan node. - @VarAttrDef.VarAttr(name = ENABLE_PUSHDOWN_STRING_MINMAX, needForward = true, description = { - "是否启用 string 类型 min max 下推。", "Set whether to enable push down string type minmax."}) + @VarAttrDef.VarAttr(name = ENABLE_PUSHDOWN_STRING_MINMAX, needForward = true, description = "Set whether to enable " + + "push down string type minmax.") public boolean enablePushDownStringMinMax = false; // Comma-separated list of MOR tables to enable value predicate pushdown. - @VarAttrDef.VarAttr(name = ENABLE_MOR_VALUE_PREDICATE_PUSHDOWN_TABLES, needForward = true, description = { - "指定启用MOR表value列谓词下推的表列表,格式:db1.tbl1,db2.tbl2 或 * 表示所有MOR表。", - "Comma-separated list of MOR tables to enable value predicate pushdown. " - + "Format: db1.tbl1,db2.tbl2 or * for all MOR tables."}) + @VarAttrDef.VarAttr(name = ENABLE_MOR_VALUE_PREDICATE_PUSHDOWN_TABLES, needForward = true, description = "Comma-sep" + + "arated list of MOR tables to enable value predicate pushdown. " + + "Format: db1.tbl1,db2.tbl2 or * for all MOR tables.") public String enableMorValuePredicatePushdownTables = ""; // Comma-separated list of MOR tables to read as DUP (skip merge, skip delete sign filter). @VarAttrDef.VarAttr(name = READ_MOR_AS_DUP_TABLES, needForward = true, - affectQueryResultInPlan = true, description = { - "指定以DUP模式读取MOR表的表列表(跳过合并和删除标记过滤),格式:db1.tbl1,db2.tbl2 或 * 表示所有MOR表。", - "Comma-separated list of MOR tables to read as DUP (skip merge, skip delete sign filter). " - + "Format: db1.tbl1,db2.tbl2 or * for all MOR tables."}) + affectQueryResultInPlan = true, + description = "Comma-separated list of MOR tables to read as DUP (skip merge, skip delete sign filter). " + + "Format: db1.tbl1,db2.tbl2 or * for all MOR tables.") public String readMorAsDupTables = ""; @VarAttrDef.VarAttr(name = MAX_TABLE_COUNT_USE_CASCADES_JOIN_REORDER, needForward = true) @@ -2463,11 +2369,9 @@ public boolean isEnableHboNonStrictMatchingMode() { @VarAttrDef.VarAttr(name = MEMO_LOGICAL_ROW_COUNT_AGGREGATION_POLICY, needForward = true, checker = "checkMemoLogicalRowCountAggregationPolicy", setter = "setMemoLogicalRowCountAggregationPolicy", - options = {"trust_join_count", "average", "median", "min" }, description = { - "控制 MemoStatsAndCostRecomputer 在多个逻辑候选统计之间如何聚合 group row count。" - + "支持 trust_join_count, average、median、min。", - "Controls how MemoStatsAndCostRecomputer aggregates group row count across multiple logical " - + "statistics candidates. Supported values: trust_join_count, average, median, min." }, + options = {"trust_join_count", "average", "median", "min" }, + description = "Controls how MemoStatsAndCostRecomputer aggregates group row count across multiple logical " + + "statistics candidates. Supported values: trust_join_count, average, median, min.", affectQueryResultInPlan = true) public String memoLogicalRowCountAggregationPolicy = "median"; @@ -2479,35 +2383,23 @@ public boolean isEnableHboNonStrictMatchingMode() { public int dphyperLimit = 2600; @VarAttrDef.VarAttr(name = "eager_aggregation_mode", needForward = true, - description = {"0: 根据统计信息决定是使用eager aggregation," - + "1: 强制使用 eager aggregation," - + "-1: 禁止使用 eager aggregation", - "0: Determine eager aggregation by statistics, " - + "1: force eager aggregation, " - + "-1: Prohibit eager aggregation "} + description = "0: Determine eager aggregation by statistics, " + + "1: force eager aggregation, " + + "-1: Prohibit eager aggregation " ) private int eagerAggregationMode = 0; @VarAttrDef.VarAttr(name = "force_eager_agg_hint", needForward = true, setter = "setForceEagerAggHint", - description = { - "用于测试/调试 eager aggregation 下推的匹配 hint。" - + "格式:`:=`," - + "多个条目以分号分隔。例如:" - + "`sum:t1.a=push; sum:t2.a=nopush; count:*=push`。" - + "注意:hint 按聚合函数匹配,但生效粒度是当前候选下推分支/子树,而不是单个聚合函数独立生效;" - + "同一分支中只要有任一匹配项为 `nopush`,该分支本次不下推;" - + "否则只要有任一匹配项为 `push`,该分支本次可被强制下推," - + "同分支内其他聚合函数会跟随这一决定。", - "Test/debug hint for eager aggregation push-down. " - + "Format: `:=`, " - + "with multiple entries separated by `;`. " - + "Example: `sum:t1.a=push; sum:t2.a=nopush; count:*=push`. " - + "Note: entries are matched per aggregate-function key, but the effect " - + "is applied at the current candidate push-down branch/subtree rather " - + "than to one function independently. If any matched entry in the branch " - + "is `nopush`, push-down is disabled for that branch; otherwise, if any " - + "matched entry is `push`, push-down may be forced for that branch, and " - + "the other aggregates in the same branch follow that branch-level decision."}) + description = "Test/debug hint for eager aggregation push-down. " + + "Format: `:=`, " + + "with multiple entries separated by `;`. " + + "Example: `sum:t1.a=push; sum:t2.a=nopush; count:*=push`. " + + "Note: entries are matched per aggregate-function key, but the effect " + + "is applied at the current candidate push-down branch/subtree rather " + + "than to one function independently. If any matched entry in the branch " + + "is `nopush`, push-down is disabled for that branch; otherwise, if any " + + "matched entry is `push`, push-down may be forced for that branch, and " + + "the other aggregates in the same branch follow that branch-level decision.") public String forceEagerAggHint = ""; private Map forceEagerAggHintMap = ImmutableMap.of(); @@ -2549,16 +2441,14 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr( name = ENABLE_PAGE_CACHE, - description = {"控制是否启用 page cache。默认为 true。", - "Controls whether to use page cache. " - + "The default value is true."}, + description = "Controls whether to use page cache. " + + "The default value is true.", needForward = true) public boolean enablePageCache = true; @VarAttrDef.VarAttr( name = ENABLE_PARQUET_FILE_PAGE_CACHE, - description = {"控制是否启用 Parquet file page cache。默认为 true。", - "Controls whether to use Parquet file page cache. The default is true."}, + description = "Controls whether to use Parquet file page cache. The default is true.", needForward = true) public boolean enableParquetFilePageCache = true; @@ -2577,38 +2467,31 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr( name = MAX_INITIAL_FILE_SPLIT_SIZE, - description = {"对于每个 table scan,最大文件分片初始大小。" - + "初始化使用 MAX_INITIAL_FILE_SPLIT_SIZE,一旦超过了 MAX_INITIAL_FILE_SPLIT_NUM,则使用 MAX_FILE_SPLIT_SIZE。", - "For each table scan, The maximum initial file split size. " - + "Initialize using MAX_INITIAL_FILE_SPLIT_SIZE," - + " and once MAX_INITIAL_FILE_SPLIT_NUM is exceeded, use MAX_FILE_SPLIT_SIZE instead."}, + description = "For each table scan, The maximum initial file split size. " + + "Initialize using MAX_INITIAL_FILE_SPLIT_SIZE," + + " and once MAX_INITIAL_FILE_SPLIT_NUM is exceeded, use MAX_FILE_SPLIT_SIZE instead.", needForward = true) public long maxInitialSplitSize = 32L * 1024L * 1024L; @VarAttrDef.VarAttr( name = MAX_FILE_SPLIT_SIZE, - description = {"对于每个 table scan,最大文件分片大小。" - + "初始化使用 MAX_INITIAL_FILE_SPLIT_SIZE,一旦超过了 MAX_INITIAL_FILE_SPLIT_NUM,则使用 MAX_FILE_SPLIT_SIZE。", - "For each table scan, the maximum initial file split size. " - + "Initialize using MAX_INITIAL_FILE_SPLIT_SIZE," - + " and once MAX_INITIAL_FILE_SPLIT_NUM is exceeded, use MAX_FILE_SPLIT_SIZE instead."}, + description = "For each table scan, the maximum initial file split size. " + + "Initialize using MAX_INITIAL_FILE_SPLIT_SIZE," + + " and once MAX_INITIAL_FILE_SPLIT_NUM is exceeded, use MAX_FILE_SPLIT_SIZE instead.", needForward = true) public long maxSplitSize = 64L * 1024L * 1024L; @VarAttrDef.VarAttr( name = MAX_INITIAL_FILE_SPLIT_NUM, - description = {"对于每个 table scan,最大文件分片初始数目。" - + "初始化使用 MAX_INITIAL_FILE_SPLIT_SIZE,一旦超过了 MAX_INITIAL_FILE_SPLIT_NUM,则使用 MAX_FILE_SPLIT_SIZE。", - "For each table scan, the maximum initial file split number. " - + "Initialize using MAX_INITIAL_FILE_SPLIT_SIZE," - + " and once MAX_INITIAL_FILE_SPLIT_NUM is exceeded, use MAX_FILE_SPLIT_SIZE instead."}, + description = "For each table scan, the maximum initial file split number. " + + "Initialize using MAX_INITIAL_FILE_SPLIT_SIZE," + + " and once MAX_INITIAL_FILE_SPLIT_NUM is exceeded, use MAX_FILE_SPLIT_SIZE instead.", needForward = true) public int maxInitialSplitNum = 200; @VarAttrDef.VarAttr( name = MAX_FILE_SPLIT_NUM, - description = {"在非 batch 模式下,每个 table scan 最大允许的 split 数量,防止产生过多 split 导致 OOM。", - "In non-batch mode, the maximum number of splits allowed per table scan to avoid OOM."}, + description = "In non-batch mode, the maximum number of splits allowed per table scan to avoid OOM.", needForward = true) public int maxFileSplitNum = 100000; @@ -2620,55 +2503,48 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr( name = NUM_PARTITIONS_IN_BATCH_MODE, fuzzy = true, - description = {"如果分区数量超过阈值,BE 将通过 batch 方式获取 scan ranges。作用于 Hive、Hudi、MaxCompute 表。", - "If the number of partitions exceeds the threshold, scan ranges will be got through batch mode."}, + description = "If the number of partitions exceeds the threshold, scan ranges will be got through batch " + + "mode.", needForward = true) public int numPartitionsInBatchMode = 1024; @VarAttrDef.VarAttr( name = NUM_FILES_IN_BATCH_MODE, fuzzy = true, - description = {"如果文件数量超过阈值,BE 将通过 batch 方式获取 scan ranges", - "If the number of files exceeds the threshold, scan ranges will be got through batch mode."}, + description = "If the number of files exceeds the threshold, scan ranges will be got through batch mode.", needForward = true) public int numFilesInBatchMode = 1024; @VarAttrDef.VarAttr( name = FETCH_SPLITS_MAX_WAIT_TIME, - description = {"batch 方式中 BE 获取 splits 的最大等待时间", - "The max wait time of getting splits in batch mode."}, + description = "The max wait time of getting splits in batch mode.", needForward = true) public long fetchSplitsMaxWaitTime = 1000; @VarAttrDef.VarAttr( name = ENABLE_PARQUET_LAZY_MAT, fuzzy = true, - description = {"控制 parquet reader 是否启用延迟物化技术。默认为 true。", - "Controls whether to use lazy materialization technology in parquet reader. " - + "The default value is true."}, + description = "Controls whether to use lazy materialization technology in parquet reader. " + + "The default value is true.", needForward = true) public boolean enableParquetLazyMat = true; @VarAttrDef.VarAttr( name = ENABLE_ORC_LAZY_MAT, fuzzy = true, - description = {"控制 orc reader 是否启用延迟物化技术。默认为 true。", - "Controls whether to use lazy materialization technology in orc reader. " - + "The default value is true."}, + description = "Controls whether to use lazy materialization technology in orc reader. " + + "The default value is true.", needForward = true) public boolean enableOrcLazyMat = true; @VarAttrDef.VarAttr( name = ORC_TINY_STRIPE_THRESHOLD_BYTES, fuzzy = true, - description = {"在 orc 文件中如果一个 stripe 的字节大小小于`orc_tiny_stripe_threshold`," - + "我们认为该 stripe 为 tiny stripe。对于多个连续的 tiny stripe 我们会进行读取优化,即一次性读多个 tiny stripe." - + "如果你不想使用该优化,可以将该值设置为 0。默认为 8M。", - "In an orc file, if the byte size of a stripe is less than `orc_tiny_stripe_threshold`," - + "we consider the stripe to be a tiny stripe. For multiple consecutive tiny stripes," - + "we will perform read optimization, that is, read multiple tiny stripes at a time." - + "If you do not want to use this optimization, you can set this value to 0." - + "The default is 8M."}, + description = "In an orc file, if the byte size of a stripe is less than `orc_tiny_stripe_threshold`," + + "we consider the stripe to be a tiny stripe. For multiple consecutive tiny stripes," + + "we will perform read optimization, that is, read multiple tiny stripes at a time." + + "If you do not want to use this optimization, you can set this value to 0." + + "The default is 8M.", needForward = true, setter = "setOrcTinyStripeThresholdBytes") public long orcTinyStripeThresholdBytes = 8L * 1024L * 1024L; @@ -2676,12 +2552,10 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr( name = ORC_ONCE_MAX_READ_BYTES, fuzzy = true, - description = {"在使用 tiny stripe 读取优化的时候,会对多个 tiny stripe 合并成一次 IO," - + "该参数用来控制每次 IO 请求的最大字节大小。你不应该将值设置的小于`orc_tiny_stripe_threshold`。默认为 8M。", - "When using tiny stripe read optimization, multiple tiny stripes will be merged into one IO." - + "This parameter is used to control the maximum byte size of each IO request." - + "You should not set the value less than `orc_tiny_stripe_threshold`." - + "The default is 8M."}, + description = "When using tiny stripe read optimization, multiple tiny stripes will be merged into one IO." + + "This parameter is used to control the maximum byte size of each IO request." + + "You should not set the value less than `orc_tiny_stripe_threshold`." + + "The default is 8M.", needForward = true, setter = "setOrcOnceMaxReadBytes") public long orcOnceMaxReadBytes = 8L * 1024L * 1024L; @@ -2689,11 +2563,9 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr( name = ORC_MAX_MERGE_DISTANCE_BYTES, fuzzy = true, - description = {"在使用 tiny stripe 读取优化的时候,由于 tiny stripe 并不一定连续。" - + "当两个 tiny stripe 之间距离大于该参数时,我们不会将其合并成一次 IO。默认为 1M。", - "When using tiny stripe read optimization, since tiny stripes are not necessarily continuous," - + "when the distance between two tiny stripes is greater than this parameter," - + "we will not merge them into one IO. The default value is 1M."}, + description = "When using tiny stripe read optimization, since tiny stripes are not necessarily continuous," + + "when the distance between two tiny stripes is greater than this parameter," + + "we will not merge them into one IO. The default value is 1M.", needForward = true, setter = "setOrcMaxMergeDistanceBytes") public long orcMaxMergeDistanceBytes = 1024L * 1024L; @@ -2701,53 +2573,46 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr( name = ENABLE_PARQUET_FILTER_BY_MIN_MAX, fuzzy = true, - description = {"控制 parquet reader 是否启用 min-max 值过滤。默认为 true。", - "Controls whether to filter by min-max values in parquet reader. " - + "The default value is true."}, + description = "Controls whether to filter by min-max values in parquet reader. " + + "The default value is true.", needForward = true) public boolean enableParquetFilterByMinMax = true; @VarAttrDef.VarAttr( name = ENABLE_PARQUET_FILTER_BY_BLOOM_FILTER, fuzzy = true, - description = {"控制 parquet reader 是否启用 bloom filter 过滤。默认为 true。", - "Controls whether to filter by bloom filter in parquet reader. " - + "The default value is true."}, + description = "Controls whether to filter by bloom filter in parquet reader. " + + "The default value is true.", needForward = true) public boolean enableParquetFilterByBloomFilter = true; @VarAttrDef.VarAttr( name = ENABLE_ORC_FILTER_BY_MIN_MAX, - description = {"控制 orc reader 是否启用 min-max 值过滤。默认为 true。", - "Controls whether to filter by min-max values in orc reader. " - + "The default value is true."}, + description = "Controls whether to filter by min-max values in orc reader. " + + "The default value is true.", needForward = true) public boolean enableOrcFilterByMinMax = true; @VarAttrDef.VarAttr( name = ENABLE_EXPR_ZONEMAP_FILTER, fuzzy = true, - description = {"控制支持该变量的 scanner 是否启用表达式 ZoneMap 过滤。" - + "File Scanner V2 始终启用安全的表达式 ZoneMap 过滤。默认为 true。", - "Controls expression ZoneMap filtering in scanners that honor this variable. " - + "File Scanner V2 always enables safe expression ZoneMap filtering. " - + "The default value is true."}, + description = "Controls expression ZoneMap filtering in scanners that honor this variable. " + + "File Scanner V2 always enables safe expression ZoneMap filtering. " + + "The default value is true.", needForward = true) public boolean enableExprZonemapFilter = true; @VarAttrDef.VarAttr( name = CHECK_ORC_INIT_SARGS_SUCCESS, - description = {"是否检查 orc init sargs 是否成功。默认为 false。", - "Whether to check whether orc init sargs is successful. " - + "The default value is false."}, + description = "Whether to check whether orc init sargs is successful. " + + "The default value is false.", needForward = true) public boolean checkOrcInitSargsSuccess = false; @VarAttrDef.VarAttr( name = EXTERNAL_TABLE_ANALYZE_PART_NUM, - description = {"收集外表统计信息行数时选取的采样分区数,默认 -1 表示全部分区", - "Number of sample partition for collecting external table line number, " - + "default -1 means all partitions"}, + description = "Number of sample partition for collecting external table line number, " + + "default -1 means all partitions", needForward = false) public int externalTableAnalyzePartNum = -1; @@ -2760,37 +2625,31 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr(name = ENABLE_ORDERED_SCAN_RANGE_LOCATIONS) public boolean enableOrderedScanRangeLocations = false; - @VarAttrDef.VarAttr(name = CTE_INLINE_MODE, description = { - "CTE内联模式。<0:禁用; =0:仅当CTE体含UNION ALL且filter可消除部分分支时内联; >=1:CBO比较物化与内联", - "CTE inline mode. <0: disable; =0: only inline when CTE body contains UNION ALL " - + "and consumer filters can eliminate some union branches; " - + ">=1: both materialized and inlined alternatives are added to Memo for CBO." }) + @VarAttrDef.VarAttr(name = CTE_INLINE_MODE, description = "CTE inline mode. <0: disable; =0: only inline when CTE " + + "body contains UNION ALL " + + "and consumer filters can eliminate some union branches; " + + ">=1: both materialized and inlined alternatives are added to Memo for CBO.") public int cteInlineMode = 0; @VarAttrDef.VarAttr(name = ENABLE_ANALYZE_COMPLEX_TYPE_COLUMN) public boolean enableAnalyzeComplexTypeColumn = false; - @VarAttrDef.VarAttr(name = ENABLE_STRONG_CONSISTENCY, description = {"用以开启强一致读。Doris 默认支持同一个会话内的" - + "强一致性,即同一个会话内对数据的变更操作是实时可见的。如需要会话间的强一致读,则需将此变量设置为 true。", - "Used to enable strong consistent reading. By default, Doris supports strong consistency " - + "within the same session, that is, changes to data within the same session are visible in " - + "real time. If you want strong consistent reads between sessions, set this variable to true. " - }) + @VarAttrDef.VarAttr(name = ENABLE_STRONG_CONSISTENCY, description = "Used to enable strong consistent reading. By " + + "default, Doris supports strong consistency " + + "within the same session, that is, changes to data within the same session are visible in " + + "real time. If you want strong consistent reads between sessions, set this variable to true. ") public boolean enableStrongConsistencyRead = false; @VarAttrDef.VarAttr(name = PARALLEL_SYNC_ANALYZE_TASK_NUM) public int parallelSyncAnalyzeTaskNum = 2; @VarAttrDef.VarAttr(name = TRUNCATE_CHAR_OR_VARCHAR_COLUMNS, - description = {"是否按照表的 schema 来截断 char 或者 varchar 列。默认为 false。\n" - + "因为外表会存在表的 schema 中 char 或者 varchar 列的最大长度和底层 parquet 或者 orc 文件中的 schema 不一致" - + "的情况。此时开启改选项,会按照表的 schema 中的最大长度进行截断。", - "Whether to truncate char or varchar columns according to the table's schema. " - + "The default is true.\n" + description = "Whether to truncate char or varchar columns according to the table's schema. " + + "The default is true.\n" + "Because the maximum length of the char or varchar column in the schema of the table" - + " is inconsistent with the schema in the underlying parquet or orc file." + + " is inconsistent with the schema in the underlying parquet or orc file." + " At this time, if the option is turned on, it will be truncated according to the maximum length" - + " in the schema of the table."}, + + " in the schema of the table.", needForward = true) public boolean truncateCharOrVarcharColumns = false; @@ -2807,49 +2666,42 @@ public static boolean isEagerAggregationOnJoin() { public boolean enablePreparedStmtAuditLog = false; @VarAttrDef.VarAttr(name = INVERTED_INDEX_CONJUNCTION_OPT_THRESHOLD, - description = {"在 match_all 中求取多个倒排索引的交集时,如果最大的倒排索引中的总数是最小倒排索引中的总数的整数倍," - + "则使用跳表来优化交集操作。", - "When intersecting multiple inverted indexes in match_all," + description = "When intersecting multiple inverted indexes in match_all," + " if the maximum total count of the largest inverted index" + " is a multiple of the minimum total count of the smallest inverted index," - + " use a skiplist to optimize the intersection."}) + + " use a skiplist to optimize the intersection.") public int invertedIndexConjunctionOptThreshold = 1000; @VarAttrDef.VarAttr(name = INVERTED_INDEX_MAX_EXPANSIONS, affectQueryResultInExecution = true, - description = {"这个参数用来限制查询时扩展的词项(terms)的数量,以此来控制查询的性能", - "This parameter is used to limit the number of term expansions during a query," - + " thereby controlling query performance"}) + description = "This parameter is used to limit the number of term expansions during a query," + + " thereby controlling query performance") public int invertedIndexMaxExpansions = 50; @VarAttrDef.VarAttr(name = INVERTED_INDEX_SKIP_THRESHOLD, - description = {"在倒排索引中如果预估命中量占比总量超过百分比阈值,则跳过索引直接进行匹配。", - "In the inverted index," - + " if the estimated hit ratio exceeds the percentage threshold of the total amount, " - + " then skip the index and proceed directly to matching."}) + description = "In the inverted index," + + " if the estimated hit ratio exceeds the percentage threshold of the total amount, " + + " then skip the index and proceed directly to matching.") public int invertedIndexSkipThreshold = 50; @VarAttrDef.VarAttr(name = INVERTED_INDEX_COMPATIBLE_READ, - description = {"兼容读取倒排索引,用于在 x86 和 arm 集群之间读取旧版本索引文件。", - "Compatible read for inverted index between x86 and arm, " - + "used to read old version index file from x86 in arm cluster" - + "or read old version index file from arm in x86 cluster"}) + description = "Compatible read for inverted index between x86 and arm, " + + "used to read old version index file from x86 in arm cluster" + + "or read old version index file from arm in x86 cluster") public boolean invertedIndexCompatibleRead = false; @VarAttrDef.VarAttr(name = SQL_DIALECT, needForward = true, checker = "checkSqlDialect", - description = {"解析 sql 使用的方言", "The dialect used to parse sql."}, + description = "The dialect used to parse sql.", affectQueryResultInPlan = true ) public String sqlDialect = "doris"; @VarAttrDef.VarAttr(name = RETRY_ORIGIN_SQL_ON_CONVERT_FAIL, needForward = true, - description = {"当转换后的 SQL 解析失败时,是否重试原始 SQL", - "Enable retrying original SQL when converted SQL parsing fails."}) + description = "Enable retrying original SQL when converted SQL parsing fails.") public boolean retryOriginSqlOnConvertFail = false; @VarAttrDef.VarAttr(name = SERDE_DIALECT, needForward = true, checker = "checkSerdeDialect", - description = {"返回给 MySQL 客户端时各数据类型的输出格式方言", - "The output format dialect of each data type returned to the MySQL client."}, + description = "The output format dialect of each data type returned to the MySQL client.", options = {"doris", "presto", "trino"}, affectQueryResultInPlan = true, affectQueryResultInExecution = true ) @@ -2858,232 +2710,195 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr(name = ENABLE_UNIQUE_KEY_PARTIAL_UPDATE, needForward = true) public boolean enableUniqueKeyPartialUpdate = false; - @VarAttrDef.VarAttr(name = PARTIAL_UPDATE_NEW_KEY_BEHAVIOR, needForward = true, description = { - "用于设置部分列更新中对于新插入的行的行为", - "Used to set the behavior for newly inserted rows in partial update." - }, checker = "checkPartialUpdateNewKeyBehavior", options = {"APPEND", "ERROR"}) + @VarAttrDef.VarAttr(name = PARTIAL_UPDATE_NEW_KEY_BEHAVIOR, needForward = true, description = "Used to set the " + + "behavior for newly inserted rows in partial update.", + checker = "checkPartialUpdateNewKeyBehavior", options = {"APPEND", "ERROR"}) public String partialUpdateNewKeyPolicy = "APPEND"; @VarAttrDef.VarAttr(name = ENABLE_AUTO_ANALYZE, - description = {"该参数控制是否开启自动收集", "Set false to disable auto analyze"}, + description = "Set false to disable auto analyze", flag = VarAttrDef.GLOBAL) public volatile boolean enableAutoAnalyze = true; @VarAttrDef.VarAttr(name = FORCE_SAMPLE_ANALYZE, needForward = true, - description = {"是否将 full analyze 自动转换成 sample analyze", "Set true to force sample analyze"}, + description = "Set true to force sample analyze", flag = VarAttrDef.GLOBAL) public boolean forceSampleAnalyze = Config.force_sample_analyze; @VarAttrDef.VarAttr(name = ENABLE_AUTO_ANALYZE_INTERNAL_CATALOG, - description = {"临时参数,收否自动收集所有内表", "Temp variable, enable to auto collect all OlapTable."}, + description = "Temp variable, enable to auto collect all OlapTable.", flag = VarAttrDef.GLOBAL) public boolean enableAutoAnalyzeInternalCatalog = true; @VarAttrDef.VarAttr(name = ENABLE_PARTITION_ANALYZE, - description = {"临时参数,收否收集分区级别统计信息", "Temp variable, enable to collect partition level statistics."}, + description = "Temp variable, enable to collect partition level statistics.", flag = VarAttrDef.GLOBAL) public boolean enablePartitionAnalyze = false; @VarAttrDef.VarAttr(name = AUTO_ANALYZE_TABLE_WIDTH_THRESHOLD, - description = {"参与自动收集的最大表宽度,列数多于这个参数的表不参与自动收集", - "Maximum table width to enable auto analyze, " - + "table with more columns than this value will not be auto analyzed."}, + description = "Maximum table width to enable auto analyze, " + + "table with more columns than this value will not be auto analyzed.", flag = VarAttrDef.GLOBAL) public int autoAnalyzeTableWidthThreshold = 300; @VarAttrDef.VarAttr(name = AUTO_ANALYZE_START_TIME, needForward = true, checker = "checkAnalyzeTimeFormat", - description = {"该参数定义自动 ANALYZE 例程的开始时间", - "This parameter defines the start time for the automatic ANALYZE routine."}, + description = "This parameter defines the start time for the automatic ANALYZE routine.", flag = VarAttrDef.GLOBAL) public String autoAnalyzeStartTime = "00:00:00"; @VarAttrDef.VarAttr(name = AUTO_ANALYZE_END_TIME, needForward = true, checker = "checkAnalyzeTimeFormat", - description = {"该参数定义自动 ANALYZE 例程的结束时间", - "This parameter defines the end time for the automatic ANALYZE routine."}, + description = "This parameter defines the end time for the automatic ANALYZE routine.", flag = VarAttrDef.GLOBAL) public String autoAnalyzeEndTime = "23:59:59"; @VarAttrDef.VarAttr(name = IGNORE_RUNTIME_FILTER_IDS, - description = {"在 IGNORE_RUNTIME_FILTER_IDS 列表中的 runtime filter 将不会被生成", - "the runtime filter id in IGNORE_RUNTIME_FILTER_IDS list will not be generated"}) + description = "the runtime filter id in IGNORE_RUNTIME_FILTER_IDS list will not be generated") public String ignoreRuntimeFilterIds = ""; - @VarAttrDef.VarAttr(name = STATS_INSERT_MERGE_ITEM_COUNT, flag = VarAttrDef.GLOBAL, description = { - "控制统计信息相关 INSERT 攒批数量", "Controls the batch size for stats INSERT merging." - } + @VarAttrDef.VarAttr(name = STATS_INSERT_MERGE_ITEM_COUNT, flag = VarAttrDef.GLOBAL, description = "Controls the " + + "batch size for stats INSERT merging." ) public int statsInsertMergeItemCount = 200; - @VarAttrDef.VarAttr(name = HUGE_TABLE_DEFAULT_SAMPLE_ROWS, flag = VarAttrDef.GLOBAL, description = { - "定义开启开启大表自动 sample 后,对大表的采样比例", - "This defines the number of sample percent for large tables when automatic sampling for" - + "large tables is enabled" - - }) + @VarAttrDef.VarAttr(name = HUGE_TABLE_DEFAULT_SAMPLE_ROWS, flag = VarAttrDef.GLOBAL, description = "This defines " + + "the number of sample percent for large tables when automatic sampling for" + + "large tables is enabled") public long hugeTableDefaultSampleRows = 4194304; @VarAttrDef.VarAttr(name = HUGE_TABLE_LOWER_BOUND_SIZE_IN_BYTES, flag = VarAttrDef.GLOBAL, - description = { - "大小超过该值的表将会自动通过采样收集统计信息", - "This defines the lower size bound for large tables. " - + "When enable_auto_sample is enabled, tables" - + "larger than this value will automatically collect " - + "statistics through sampling"}) + description = "This defines the lower size bound for large tables. " + + "When enable_auto_sample is enabled, tables" + + "larger than this value will automatically collect " + + "statistics through sampling") public long hugeTableLowerBoundSizeInBytes = 0; @VarAttrDef.VarAttr(name = HUGE_TABLE_AUTO_ANALYZE_INTERVAL_IN_MILLIS, flag = VarAttrDef.GLOBAL, - description = {"控制对大表的自动 ANALYZE 的最小时间间隔," - + "在该时间间隔内大小超过 huge_table_lower_bound_size_in_bytes 的表仅 ANALYZE 一次", - "This controls the minimum time interval for automatic ANALYZE on large tables." - + "Within this interval," - + "tables larger than huge_table_lower_bound_size_in_bytes are analyzed only once."}) + description = "This controls the minimum time interval for automatic ANALYZE on large tables." + + "Within this interval," + + "tables larger than huge_table_lower_bound_size_in_bytes are analyzed only once.") public long hugeTableAutoAnalyzeIntervalInMillis = TimeUnit.HOURS.toMillis(0); @VarAttrDef.VarAttr(name = EXTERNAL_TABLE_AUTO_ANALYZE_INTERVAL_IN_MILLIS, flag = VarAttrDef.GLOBAL, - description = {"控制对外表的自动 ANALYZE 的最小时间间隔,在该时间间隔内的外表仅 ANALYZE 一次", - "This controls the minimum time interval for automatic ANALYZE on external tables." - + "Within this interval, external tables are analyzed only once."}) + description = "This controls the minimum time interval for automatic ANALYZE on external tables." + + "Within this interval, external tables are analyzed only once.") public long externalTableAutoAnalyzeIntervalInMillis = TimeUnit.HOURS.toMillis(24); @VarAttrDef.VarAttr(name = TABLE_STATS_HEALTH_THRESHOLD, flag = VarAttrDef.GLOBAL, - description = {"取值在 0-100 之间,当自上次统计信息收集操作之后" - + "数据更新量达到 (100 - table_stats_health_threshold)% ,认为该表的统计信息已过时", - "The value should be between 0 and 100. When the data update quantity " - + "exceeds (100 - table_stats_health_threshold)% since the last " - + "statistics collection operation, the statistics for this table are" - + "considered outdated."}) + description = "The value should be between 0 and 100. When the data update quantity " + + "exceeds (100 - table_stats_health_threshold)% since the last " + + "statistics collection operation, the statistics for this table are" + + "considered outdated.") public int tableStatsHealthThreshold = 90; @VarAttrDef.VarAttr(name = PARTITION_SAMPLE_COUNT, flag = VarAttrDef.GLOBAL, - description = { - "大分区表采样的分区数上限", - "The upper limit of the number of partitions for sampling large partitioned tables.\n"}) + description = "The upper limit of the number of partitions for sampling large partitioned tables.\n") public int partitionSampleCount = 30; @VarAttrDef.VarAttr(name = PARTITION_SAMPLE_ROW_COUNT, flag = VarAttrDef.GLOBAL, - description = { - "大分区表采样的行数上限", - "The upper limit of the number of rows for sampling large partitioned tables.\n"}) + description = "The upper limit of the number of rows for sampling large partitioned tables.\n") public long partitionSampleRowCount = 3_000_000_000L; @VarAttrDef.VarAttr(name = FETCH_HIVE_ROW_COUNT_SYNC, fuzzy = true, - description = {"同步获取 Hive 外表行数", "Fetch Hive external table row count synchronously"}) + description = "Fetch Hive external table row count synchronously") public boolean fetchHiveRowCountSync = true; @VarAttrDef.VarAttr(name = ENABLE_MATERIALIZED_VIEW_REWRITE, needForward = true, - description = {"是否开启基于结构信息的物化视图透明改写", - "Whether to enable materialized view rewriting based on struct info"}) + description = "Whether to enable materialized view rewriting based on struct info") public boolean enableMaterializedViewRewrite = true; @VarAttrDef.VarAttr(name = PRE_MATERIALIZED_VIEW_REWRITE_STRATEGY, needForward = true, fuzzy = true, - description = {"在 RBO 阶段基于结构信息的物化视图透明改写的策略,FORCE_IN_RBO:强制在 RBO 阶段透明改写," - + "TRY_IN_RBO:如果在 NEED_PRE_REWRITE_RULE_TYPES 中的规则改写成功了,那么就会尝试在 RBO 阶段透明改写" - + "NOT_IN_RBO:不尝试在 RBO 阶段改写,只在 CBO 阶段改写", - "Whether to enable pre materialized view rewriting based on struct info," - + "FORCE_IN_RBO : Force transparent rewriting in the RBO phase," - + "TRY_IN_RBO : Attempt transparent rewriting in the RBO phase " - + "if rules in NEED_PRE_REWRITE_RULE_TYPES, " - + "NOT_IN_RBO : Do not attempt rewriting in the RBO phase; apply only during the CBO phase" - }) + description = "Whether to enable pre materialized view rewriting based on struct info," + + "FORCE_IN_RBO : Force transparent rewriting in the RBO phase," + + "TRY_IN_RBO : Attempt transparent rewriting in the RBO phase " + + "if rules in NEED_PRE_REWRITE_RULE_TYPES, " + + "NOT_IN_RBO : Do not attempt rewriting in the RBO phase; apply only during the CBO phase") public String preMaterializedViewRewriteStrategy = "TRY_IN_RBO"; @VarAttrDef.VarAttr(name = ALLOW_MODIFY_MATERIALIZED_VIEW_DATA, needForward = true, - description = {"是否允许修改物化视图的数据", - "Is it allowed to modify the data of the materialized view"}) + description = "Is it allowed to modify the data of the materialized view") public boolean allowModifyMaterializedViewData = false; @VarAttrDef.VarAttr(name = ENABLE_MATERIALIZED_VIEW_REWRITE_WHEN_BASE_TABLE_UNAWARENESS, needForward = true, - description = {"查询时,当物化视图存在无法实时感知数据的外表时,是否开启基于结构信息的物化视图透明改写", - ""}) + description = "") public boolean enableMaterializedViewRewriteWhenBaseTableUnawareness = false; @VarAttrDef.VarAttr(name = MATERIALIZED_VIEW_REWRITE_SUCCESS_CANDIDATE_NUM, needForward = true, - description = {"异步物化视图透明改写成功的结果集合,允许参与到 CBO 候选的最大数量", - "The max candidate num which participate in CBO when using asynchronous materialized views"}) + description = "The max candidate num which participate in CBO when using asynchronous materialized views") public int materializedViewRewriteSuccessCandidateNum = 3; @VarAttrDef.VarAttr(name = ENABLE_DML_MATERIALIZED_VIEW_REWRITE, needForward = true, - description = {"DML 时,是否开启基于结构信息的物化视图透明改写", - "Whether to enable materialized view rewriting based on struct info"}) + description = "Whether to enable materialized view rewriting based on struct info") public boolean enableDmlMaterializedViewRewrite = true; @VarAttrDef.VarAttr(name = ENABLE_DML_MATERIALIZED_VIEW_REWRITE_WHEN_BASE_TABLE_UNAWARENESS, needForward = true, - description = {"DML 时,当物化视图存在无法实时感知数据的外表时,是否开启基于结构信息的物化视图透明改写", - ""}) + description = "") public boolean enableDmlMaterializedViewRewriteWhenBaseTableUnawareness = false; @VarAttrDef.VarAttr(name = MATERIALIZED_VIEW_RELATION_MAPPING_MAX_COUNT, needForward = true, - description = {"透明改写过程中,relation mapping 最大允许数量,如果超过,进行截取", - "During transparent rewriting, relation mapping specifies the maximum allowed number. " - + "If the number exceeds the allowed number, the number is intercepted"}) + description = "During transparent rewriting, relation mapping specifies the maximum allowed number. " + + "If the number exceeds the allowed number, the number is intercepted") public int materializedViewRelationMappingMaxCount = 8; @VarAttrDef.VarAttr(name = ENABLE_MATERIALIZED_VIEW_UNION_REWRITE, needForward = true, - description = {"当物化视图不足以提供查询的全部数据时,是否允许基表和物化视图 union 来响应查询", - "When the materialized view is not enough to provide all the data for the query, " - + "whether to allow the union of the base table and the materialized view to " - + "respond to the query"}, varType = VariableAnnotation.REMOVED) + description = "When the materialized view is not enough to provide all the data for the query, " + + "whether to allow the union of the base table and the materialized view to " + + "respond to the query", varType = VariableAnnotation.REMOVED) public boolean enableMaterializedViewUnionRewrite = true; @VarAttrDef.VarAttr(name = ENABLE_MATERIALIZED_VIEW_NEST_REWRITE, needForward = true, - description = {"是否允许嵌套物化视图改写", - "Whether enable materialized view nest rewrite"}) + description = "Whether enable materialized view nest rewrite") public boolean enableMaterializedViewNestRewrite = false; @VarAttrDef.VarAttr(name = MATERIALIZED_VIEW_REWRITE_DURATION_THRESHOLD_MS, needForward = true, - description = {"物化视图透明改写允许的最长耗时,超过此时长不再进行透明改写", - "The maximum duration allowed for transparent rewriting of materialized views; " - + "if this duration is exceeded, transparent rewriting will no longer be performed."}) + description = "The maximum duration allowed for transparent rewriting of materialized views; " + + "if this duration is exceeded, transparent rewriting will no longer be performed.") public long materializedViewRewriteDurationThresholdMs = 1000L; @VarAttrDef.VarAttr(name = CREATE_TABLE_PARTITION_MAX_NUM, needForward = true, - description = {"建表时创建分区的最大数量", - "The maximum number of partitions created during table creation"}) + description = "The maximum number of partitions created during table creation") public int createTablePartitionMaxNum = 10000; @VarAttrDef.VarAttr(name = HIVE_PARQUET_USE_COLUMN_NAMES, affectQueryResultInExecution = true, - description = {"默认情况下按名称访问 Parquet 列。将此属性设置为“false”可按 Hive 表定义中的序号位置访问列。", - "Access Parquet columns by name by default. Set this property to `false` to access columns " - + "by their ordinal position in the Hive table definition."}) + description = "Access Parquet columns by name by default. Set this property to `false` to access columns " + + "by their ordinal position in the Hive table definition.") public boolean hiveParquetUseColumnNames = true; @VarAttrDef.VarAttr(name = HIVE_ORC_USE_COLUMN_NAMES, affectQueryResultInExecution = true, - description = {"默认情况下按照 Hive 表定义中的序号位置访问列。将此属性设置为“true”可按名称访问 Orc 列 。", - "By default, columns are accessed based on their ordinal position in the Hive table definition." - + " Set this property to `true` to access ORC columns by name."}) + description = "By default, columns are accessed based on their ordinal position in the Hive table " + + "definition." + + " Set this property to `true` to access ORC columns by name.") public boolean hiveOrcUseColumnNames = false; @VarAttrDef.VarAttr(name = KEEP_CARRIAGE_RETURN, - description = {"在同时处理\r和\r\n作为 CSV 的行分隔符时,是否保留\r", - "When processing both \\n and \\r\\n as CSV line separators, should \\r be retained?"}) + description = "When processing both \\n and \\r\\n as CSV line separators, should \\r be retained?") public boolean keepCarriageReturn = false; @VarAttrDef.VarAttr(name = EXCHANGE_MULTI_BLOCKS_BYTE_SIZE, - description = {"Enable exchange to send multiple blocks in one RPC. Default is 256KB. A negative" - + " value disables multi-block exchange."}) + description = "Enable exchange to send multiple blocks in one RPC. Default is 256KB. A negative" + + " value disables multi-block exchange.") public int exchangeMultiBlocksByteSize = 256 * 1024; @VarAttrDef.VarAttr(name = FORCE_JNI_SCANNER, fuzzy = true, - description = {"强制使用 jni 方式读取外表", "Force the use of jni mode to read external table"}) + description = "Force the use of jni mode to read external table") private boolean forceJniScanner = false; @VarAttrDef.VarAttr(name = ENABLE_PAIMON_CPP_READER, fuzzy = true, - description = {"Paimon 非原生文件读取使用 paimon-cpp", "Use paimon-cpp for non-native Paimon reads"}) + description = "Use paimon-cpp for non-native Paimon reads") private boolean enablePaimonCppReader = false; @VarAttrDef.VarAttr(name = ENABLE_COUNT_PUSH_DOWN_FOR_EXTERNAL_TABLE, fuzzy = true, - description = {"对外表启用 count(*) 下推优化", "enable count(*) pushdown optimization for external table"}) + description = "enable count(*) pushdown optimization for external table") private boolean enableCountPushDownForExternalTable = true; @VarAttrDef.VarAttr(name = MINIMUM_OPERATOR_MEMORY_REQUIRED_KB, needForward = true, - description = {"一个算子运行需要的最小的内存大小", - "The minimum memory required to be used by an operator, if not meet, the operator will not run"}) + description = "The minimum memory required to be used by an operator, if not meet, the operator will not " + + "run") public int minimumOperatorMemoryRequiredKB = 32000; public static final String IGNORE_RUNTIME_FILTER_IDS = "ignore_runtime_filter_ids"; @@ -3094,44 +2909,37 @@ public static boolean isEagerAggregationOnJoin() { @VarAttrDef.VarAttr( name = ENABLE_EXTERNAL_TABLE_BATCH_MODE, fuzzy = true, - description = {"使能外表的 batch mode 功能", "Enable the batch mode function of the external table."}, + description = "Enable the batch mode function of the external table.", needForward = true) public boolean enableExternalTableBatchMode = true; @VarAttrDef.VarAttr( name = ENABLE_MC_LIMIT_SPLIT_OPTIMIZATION, fuzzy = true, - description = {"开启 MaxCompute 表 LIMIT 查询的 split 优化。当查询仅包含分区等值条件且带有 LIMIT 时," - + "使用 row_offset 策略减少 split 数量以加速查询。", - "Enable split optimization for LIMIT queries on MaxCompute tables. " + description = "Enable split optimization for LIMIT queries on MaxCompute tables. " + "When the query contains only partition equality predicates with LIMIT, " - + "use row_offset strategy to reduce split count for faster query execution."}, + + "use row_offset strategy to reduce split count for faster query execution.", needForward = true) public boolean enableMcLimitSplitOptimization = false; @VarAttrDef.VarAttr(name = SKEW_REWRITE_AGG_BUCKET_NUM, needForward = true, - description = {"bucketNum 参数控制 count(distinct) 倾斜优化的数据分布。决定不同值在 worker 间的分配方式," - + "值越大越能处理极端倾斜但增加 shuffle 开销,值越小网络开销越低但可能无法完全解决倾斜。", - "The bucketNum parameter controls data distribution for skew optimization " - + "in count(distinct) queries. Determines how distinct values " - + "are distributed across workers to avoid data skew. " - + "Larger values better handle extreme skew but increase shuffle overhead. " - + "Smaller values reduce network traffic but may not fully resolve skew. " - }, checker = "checkSkewRewriteAggBucketNum") + description = "The bucketNum parameter controls data distribution for skew optimization " + + "in count(distinct) queries. Determines how distinct values " + + "are distributed across workers to avoid data skew. " + + "Larger values better handle extreme skew but increase shuffle overhead. " + + "Smaller values reduce network traffic but may not fully resolve skew. ", + checker = "checkSkewRewriteAggBucketNum") public int skewRewriteAggBucketNum = 1024; - @VarAttrDef.VarAttr(name = AGG_SHUFFLE_USE_PARENT_KEY, description = { - "在聚合算子进行 shuffle 时,是否使用父节点的分组键进行 shuffle", - "Whether to use the parent node's grouping key for shuffling during the aggregation operator" - }, needForward = false) + @VarAttrDef.VarAttr(name = AGG_SHUFFLE_USE_PARENT_KEY, description = "Whether to use the parent node's grouping " + + "key for shuffling during the aggregation operator", needForward = false) public boolean aggShuffleUseParentKey = true; @VarAttrDef.VarAttr(name = ENABLE_SHUFFLE_KEY_PRUNE) public boolean enableShuffleKeyPrune = true; @VarAttrDef.VarAttr(name = ENABLE_PREFER_CACHED_ROWSET, needForward = false, - description = {"是否启用 prefer cached rowset 功能", - "Whether to enable prefer cached rowset feature"}) + description = "Whether to enable prefer cached rowset feature") public boolean enablePreferCachedRowset = false; @VarAttrDef.VarAttr(name = QUERY_FRESHNESS_TOLERANCE_MS, needForward = false) @@ -3142,74 +2950,57 @@ public void setSkewRewriteAggBucketNum(int num) { } @VarAttrDef.VarAttr(name = ENABLE_STRICT_CAST, - description = {"cast 使用严格模式", "Use strict mode for cast"}, affectQueryResultInPlan = true) + description = "Use strict mode for cast", affectQueryResultInPlan = true) public boolean enableStrictCast = false; - @VarAttrDef.VarAttr(name = MULTI_DISTINCT_STRATEGY, description = {"用于控制在包含多个 DISTINCT 函数的 SQL 查询中所采用的" - + "执行策略。默认值为 0,表示由系统自动选择最优策略;设为 1 表示强制使用 MultiDistinct 方式处理;" - + "设为 2 表示强制采用 CTE 拆分方式执行。", - "Used to control the execution strategy used in SQL queries containing multiple DISTINCT " - + "functions. The default value is 0, which means that the system automatically selects " - + "the optimal strategy; setting it to 1 means forcing the use of MultiDistinct processing;" - + " setting it to 2 means forcing the use of CTE splitting execution"}, + @VarAttrDef.VarAttr(name = MULTI_DISTINCT_STRATEGY, description = "Used to control the execution strategy used in " + + "SQL queries containing multiple DISTINCT " + + "functions. The default value is 0, which means that the system automatically selects " + + "the optimal strategy; setting it to 1 means forcing the use of MultiDistinct processing;" + + " setting it to 2 means forcing the use of CTE splitting execution", checker = "checkMultiDistinctStrategy") public int multiDistinctStrategy = 0; - @VarAttrDef.VarAttr(name = AGG_PHASE, description = {"用于控制聚合查询的执行阶段划分策略。默认值为 0," - + "表示由系统自动选择最优执行阶段;设为 1 至 4 之间的值则表示强制指定使用对应 1 至 4 阶段进行聚合计算。", - "Controls the execution phase strategy for aggregate queries. The default value is 0," - + "which means the system automatically selects the optimal execution phase. Setting this value" - + "between 1 and 4 forces the use of phases 1 to 4 for aggregate calculations."}, + @VarAttrDef.VarAttr(name = AGG_PHASE, description = "Controls the execution phase strategy for aggregate queries. " + + "The default value is 0," + + "which means the system automatically selects the optimal execution phase. Setting this value" + + "between 1 and 4 forces the use of phases 1 to 4 for aggregate calculations.", checker = "checkAggPhase") public int aggPhase = 0; - @VarAttrDef.VarAttr(name = ENABLE_BUCKETED_HASH_AGG, needForward = true, description = { - "是否启用 bucketed hash aggregation 优化。该优化在单 BE 场景下将两阶段聚合融合为单个算子," - + "消除 Exchange 开销和序列化/反序列化成本。默认开启。", - "Whether to enable bucketed hash aggregation optimization. This optimization fuses two-phase " - + "aggregation into a single operator on single-BE deployments, eliminating exchange overhead " - + "and serialization/deserialization costs. Enabled by default."}) + @VarAttrDef.VarAttr(name = ENABLE_BUCKETED_HASH_AGG, needForward = true, description = "Whether to enable bucketed " + + "hash aggregation optimization. This optimization fuses two-phase " + + "aggregation into a single operator on single-BE deployments, eliminating exchange overhead " + + "and serialization/deserialization costs. Enabled by default.") public boolean enableBucketedHashAgg = true; - @VarAttrDef.VarAttr(name = BUCKETED_AGG_MIN_INPUT_ROWS, fuzzy = true, needForward = true, description = { - "bucketed hash aggregation 要求的最小输入行数。当估算输入行数小于此阈值时," - + "数据量太小,256-bucket two-level hash table 的初始化和 merge 开销大于收益," - + "不生成 bucketed agg 候选计划。设为 0 表示不限制。默认 100000。", - "Minimum estimated input rows required for bucketed hash aggregation. When estimated input " - + "rows are below this threshold, the data volume is too small for the 256-bucket two-level " - + "hash table overhead to be worthwhile. Set to 0 to disable this check. Default 100000."}) + @VarAttrDef.VarAttr(name = BUCKETED_AGG_MIN_INPUT_ROWS, fuzzy = true, needForward = true, description = "Minimum " + + "estimated input rows required for bucketed hash aggregation. When estimated input " + + "rows are below this threshold, the data volume is too small for the 256-bucket two-level " + + "hash table overhead to be worthwhile. Set to 0 to disable this check. Default 100000.") public long bucketedAggMinInputRows = 100000; - @VarAttrDef.VarAttr(name = BUCKETED_AGG_MAX_GROUP_KEYS, needForward = true, description = { - "bucketed hash aggregation 允许的最大估算分组数(key 数量)。当估算分组数超过此阈值时," - + "merge 阶段需要合并大量 key,开销会超过 bucketed agg 带来的收益。" - + "类似于 ClickHouse 的 group_by_two_level_threshold。设为 0 表示不限制。默认 0", - "Maximum estimated number of group keys for bucketed hash aggregation. When the estimated " - + "number of groups exceeds this threshold, the merge phase cost of combining large numbers " - + "of keys outweighs the benefit. Similar to ClickHouse's group_by_two_level_threshold. " - + "Set to 0 to disable this check. Default 0."}) + @VarAttrDef.VarAttr(name = BUCKETED_AGG_MAX_GROUP_KEYS, needForward = true, description = "Maximum estimated " + + "number of group keys for bucketed hash aggregation. When the estimated " + + "number of groups exceeds this threshold, the merge phase cost of combining large numbers " + + "of keys outweighs the benefit. Similar to ClickHouse's group_by_two_level_threshold. " + + "Set to 0 to disable this check. Default 0.") public long bucketedAggMaxGroupKeys = 0; - @VarAttrDef.VarAttr(name = BUCKETED_AGG_HIGH_CARD_THRESHOLD, needForward = true, description = { - "bucketed hash aggregation 的高基数阈值比例。当任意 GROUP BY 列的 NDV 超过" - + "输入行数 * 该阈值,或聚合输出行数超过输入行数 * 该阈值时,跳过 bucketed agg。" - + "取值范围 (0, 1.0]。默认 0.3。", - "High-cardinality ratio threshold for bucketed hash aggregation. When any GROUP BY key's NDV " - + "exceeds input rows * threshold, or aggregation output rows exceed input rows * threshold, " - + "bucketed agg is skipped. Range (0, 1.0]. Default 0.3."}) + @VarAttrDef.VarAttr(name = BUCKETED_AGG_HIGH_CARD_THRESHOLD, needForward = true, description = "High-cardinality " + + "ratio threshold for bucketed hash aggregation. When any GROUP BY key's NDV " + + "exceeds input rows * threshold, or aggregation output rows exceed input rows * threshold, " + + "bucketed agg is skipped. Range (0, 1.0]. Default 0.3.") public double bucketedAggHighCardThreshold = 0.3; - @VarAttrDef.VarAttr(name = MERGE_IO_READ_SLICE_SIZE_BYTES, description = { - "调整 READ_SLICE_SIZE 大小,降低 Merge IO 读放大影响", - "Make the READ_SLICE_SIZE variable configurable to reduce the impact caused by read amplification."}) + @VarAttrDef.VarAttr(name = MERGE_IO_READ_SLICE_SIZE_BYTES, description = "Make the READ_SLICE_SIZE variable " + + "configurable to reduce the impact caused by read amplification.") public int mergeReadSliceSizeBytes = 8388608; @VarAttrDef.VarAttr(name = FILE_CACHE_QUERY_LIMIT_PERCENT, needForward = true, checker = "checkFileCacheQueryLimitPercent", - description = {"限制用户的单个查询能使用的 FILE_CACHE 比例 " - + "(用户设置,取值范围 1 到 Config.file_cache_query_limit_max_percent)。", - "Limit the FILE_CACHE percent that a single query of a user can use " - + "(set by user via session variables, range: 1 to Config.file_cache_query_limit_max_percent)."}) + description = "Limit the FILE_CACHE percent that a single query of a user can use " + + "(set by user via session variables, range: 1 to Config.file_cache_query_limit_max_percent).") public int fileCacheQueryLimitPercent = -1; public void checkFileCacheQueryLimitPercent(String fileCacheQueryLimitPercentStr) { @@ -3222,11 +3013,9 @@ public void checkFileCacheQueryLimitPercent(String fileCacheQueryLimitPercentStr } @VarAttrDef.VarAttr(name = FILE_CACHE_QUERY_LIMIT_BYTES, needForward = true, - description = {"单个查询在每个 BE 上最多允许 read-through 写入 file cache 的远端 scan bytes。" - + "< 0 表示关闭,= 0 表示查询开始即不写 file cache,> 0 表示达到阈值后不写 file cache。", - "Maximum remote scan bytes allowed to write file cache per query on each BE. " - + "< 0 disables it, = 0 disables file cache writes from query start, " - + "> 0 disables file cache writes after the threshold is reached."}) + description = "Maximum remote scan bytes allowed to write file cache per query on each BE. " + + "< 0 disables it, = 0 disables file cache writes from query start, " + + "> 0 disables file cache writes after the threshold is reached.") public long fileCacheQueryLimitBytes = -1; public void setAggPhase(int phase) { @@ -3311,19 +3100,15 @@ public void setIgnoreShapePlanNodes(String ignoreShapePlanNodes) { } @VarAttrDef.VarAttr(name = IGNORE_SHAPE_NODE, - description = {"'explain shape plan' 命令中忽略的 PlanNode 类型", - "the plan node type which is ignored in 'explain shape plan' command"}) + description = "the plan node type which is ignored in 'explain shape plan' command") public String ignoreShapePlanNodes = ""; @VarAttrDef.VarAttr(name = DETAIL_SHAPE_NODES, needForward = true, setter = "setDetailShapePlanNodes", - description = {"'explain shape plan' 命令中显示详细信息的 PlanNode 类型", - "the plan node type show detail in 'explain shape plan' command"}) + description = "the plan node type show detail in 'explain shape plan' command") public String detailShapePlanNodes = ""; - @VarAttrDef.VarAttr(name = ENABLE_EXPLAIN_NONE, needForward = true, description = { - "执行 explain 命令,但不打印 explain 结果", - "execute explain command and return nothing" - }) + @VarAttrDef.VarAttr(name = ENABLE_EXPLAIN_NONE, needForward = true, description = "execute explain command and " + + "return nothing") public boolean enableExplainNone = false; private Set detailShapePlanNodesSet = ImmutableSet.of(); @@ -3338,30 +3123,26 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { this.detailShapePlanNodes = detailShapePlanNodes; } - @VarAttrDef.VarAttr(name = ENABLE_DECIMAL256, needForward = true, description = { "控制是否在计算过程中使用 Decimal256 类型", - "Set to true to enable Decimal256 type" }, affectQueryResultInPlan = true) + @VarAttrDef.VarAttr(name = ENABLE_DECIMAL256, needForward = true, description = "Set to true to enable Decimal256 " + + "type", affectQueryResultInPlan = true) public boolean enableDecimal256 = false; @VarAttrDef.VarAttr(name = FALLBACK_OTHER_REPLICA_WHEN_FIXED_CORRUPT, needForward = true, - description = { "当开启 use_fix_replica 时遇到故障,是否漂移到其他健康的副本", - "use other health replica when the use_fix_replica meet error" }) + description = "use other health replica when the use_fix_replica meet error") public boolean fallbackOtherReplicaWhenFixedCorrupt = false; public static final String FE_DEBUG = "fe_debug"; @VarAttrDef.VarAttr(name = FE_DEBUG, needForward = true, fuzzy = true, - description = {"when set true, FE will throw exceptions instead swallow them. This is used for test", - "when set true, FE will throw exceptions instead swallow them. This is used for test"}) + description = "when set true, FE will throw exceptions instead swallow them. This is used for test") public boolean feDebug = false; @VarAttrDef.VarAttr(name = FETCH_ALL_FE_FOR_SYSTEM_TABLE, - description = {"When the variable is true, some system tables retrieve data from all fe", - "当变量为 true 时,部分系统表从所有 fe 获取数据"}) + description = "When the variable is true, some system tables retrieve data from all fe") public boolean fetchAllFeForSystemTable = true; @VarAttrDef.VarAttr(name = MAX_MSG_SIZE_OF_RESULT_RECEIVER, - description = {"Max message size during result deserialization, change this if you meet error" - + " like \"MaxMessageSize reached\"", - "用于控制结果反序列化时 thrift 字段的最大值,当遇到类似\"MaxMessageSize reached\"这样的错误时可以考虑修改该参数"}) + description = "Max message size during result deserialization, change this if you meet error" + + " like \"MaxMessageSize reached\"") public int maxMsgSizeOfResultReceiver = TConfiguration.DEFAULT_MAX_MESSAGE_SIZE; // CLOUD_VARIABLES_BEGIN @@ -3388,8 +3169,7 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { @VarAttrDef.VarAttr( name = "enable_compress_materialize", - description = {"控制是否启用 compress materialize。", - "enable compress-materialize. "}, + description = "enable compress-materialize. ", needForward = true, fuzzy = false, varType = VariableAnnotation.EXPERIMENTAL ) @@ -3397,34 +3177,29 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { @VarAttrDef.VarAttr( name = DATA_QUEUE_MAX_BLOCKS, - description = {"DataQueue 中每个子队列允许最大的 block 个数", - "Max blocks in DataQueue."}, + description = "Max blocks in DataQueue.", needForward = true, fuzzy = true) public long dataQueueMaxBlocks = 1; // for spill to disk @VarAttrDef.VarAttr( name = ENABLE_SPILL, - description = {"控制是否启用查询算子落盘。默认为 false。", - "Controls whether to enable spill to disk for query. " - + "The default value is false."}, + description = "Controls whether to enable spill to disk for query. " + + "The default value is false.", needForward = true, fuzzy = true) public boolean enableSpill = false; @VarAttrDef.VarAttr( name = ENABLE_FORCE_SPILL, - description = {"控制是否开启强制落盘(即使在内存足够的情况),默认为 false。", - "Controls whether enable force spill." - }, + description = "Controls whether enable force spill.", needForward = true, fuzzy = false ) public boolean enableForceSpill = false; @VarAttrDef.VarAttr( name = ENABLE_RESERVE_MEMORY, - description = {"控制是否启用分配内存前先 reverve memory 的功能。默认为 true。", - "Controls whether to enable reserve memory before allocating memory. " - + "The default value is true."}, + description = "Controls whether to enable reserve memory before allocating memory. " + + "The default value is true.", needForward = true, fuzzy = true) public boolean enableReserveMemory = true; @@ -3432,11 +3207,9 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { public long spillMinRevocableMem = 4 * 1024 * 1024; @VarAttrDef.VarAttr(name = SPILL_BUFFER_SIZE_BYTES, fuzzy = true, needForward = true, - description = {"落盘时写 block 的最大大小(字节)。如果一个 block 超过该阈值,会按此大小拆分后再写入磁盘。" - + "同时也控制 merge sort 阶段每个文件的读 buffer 大小。默认 8MB。", - "Maximum block size for spill writes (in bytes). Blocks larger than this threshold are " + description = "Maximum block size for spill writes (in bytes). Blocks larger than this threshold are " + "split before writing to disk. Also controls per-file read buffer size during merge sort. " - + "Default is 8MB."}) + + "Default is 8MB.") public long spillBufferSizeBytes = 8L * 1024L * 1024L; @VarAttrDef.VarAttr(name = SPILL_AGGREGATION_PARTITION_COUNT, fuzzy = true) @@ -3454,34 +3227,29 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { public int spillHashJoinPartitionCount = 4; @VarAttrDef.VarAttr(name = SPILL_REPARTITION_MAX_DEPTH, fuzzy = true, needForward = true, - description = {"重分区的最大递归深度,超过该深度不再继续重分区,\n默认值为 8", - "Maximum depth for repartition recursion. When exceeded, repartitioning will stop. Default is 8."}) + description = "Maximum depth for repartition recursion. When exceeded, repartitioning will stop. Default " + + "is 8.") public int spillRepartitionMaxDepth = 8; @VarAttrDef.VarAttr(name = SPILL_JOIN_BUILD_SINK_MEM_LIMIT_BYTES, fuzzy = true, needForward = true, - description = {"一旦触发 spill 后,join build sink 的 revocable memory 超过该阈值就主动落盘(字节)。默认 64MB。", - "After spill is triggered, join build sink will proactively spill when revocable memory " - + "exceeds this threshold (in bytes). Default is 64MB."}) + description = "After spill is triggered, join build sink will proactively spill when revocable memory " + + "exceeds this threshold (in bytes). Default is 64MB.") public long spillJoinBuildSinkMemLimitBytes = 64L * 1024L * 1024L; @VarAttrDef.VarAttr(name = SPILL_AGGREGATION_SINK_MEM_LIMIT_BYTES, fuzzy = true, needForward = true, - description = {"一旦触发 spill 后,aggregation sink 的 revocable memory 超过该阈值就主动落盘(字节)。默认 64MB。", - "After spill is triggered, aggregation sink will proactively spill when revocable memory " - + "exceeds this threshold (in bytes). Default is 64GB."}) + description = "After spill is triggered, aggregation sink will proactively spill when revocable memory " + + "exceeds this threshold (in bytes). Default is 64GB.") public long spillAggregationSinkMemLimitBytes = 64L * 1024L * 1024L * 1024L; @VarAttrDef.VarAttr(name = SPILL_SORT_SINK_MEM_LIMIT_BYTES, fuzzy = true, needForward = true, - description = {"一旦触发 spill 后,sort sink 的 revocable memory 超过该阈值就主动落盘(字节)。默认 64MB。", - "After spill is triggered, sort sink will proactively spill when revocable memory " - + "exceeds this threshold (in bytes). Default is 64MB."}) + description = "After spill is triggered, sort sink will proactively spill when revocable memory " + + "exceeds this threshold (in bytes). Default is 64MB.") public long spillSortSinkMemLimitBytes = 64L * 1024L * 1024L; @VarAttrDef.VarAttr(name = SPILL_SORT_MERGE_MEM_LIMIT_BYTES, fuzzy = true, needForward = true, - description = {"一旦触发 spill 后,sort merge 阶段可用的总内存大小(字节)。" - + "该值除以 spill_buffer_size_bytes 即为可并行读取合并的文件数。默认 64MB。", - "After spill is triggered, total memory budget for the sort merge phase (in bytes). " + description = "After spill is triggered, total memory budget for the sort merge phase (in bytes). " + "Divided by spill_buffer_size_bytes gives the number of files that can be merged " - + "in parallel. Default is 64MB."}) + + "in parallel. Default is 64MB.") public long spillSortMergeMemLimitBytes = 64L * 1024L * 1024L; @VarAttrDef.VarAttr(name = SPILL_REVOCABLE_MEMORY_HIGH_WATERMARK_PERCENT, fuzzy = true) @@ -3489,9 +3257,9 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { @VarAttrDef.VarAttr( name = DUMP_HEAP_PROFILE_WHEN_MEM_LIMIT_EXCEEDED, - description = {"查询因为内存不足被 Cancel 时,是否 Dump heap profile 到日志文件。默认为 false。", - "Whether to dump heap profile to log file when query is canceled becuase of memory not enough. " - + "The default value is false."}, + description = "Whether to dump heap profile to log file when query is canceled becuase of memory not " + + "enough. " + + "The default value is false.", needForward = true) public boolean dumpHeapProfileWhenMemLimitExceeded = false; @@ -3501,18 +3269,15 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { @VarAttrDef.VarAttr( name = ENABLE_USE_HYBRID_SORT, - description = {"是否启用混合排序,动态选择 PdqSort 和 TimSort 以适应数据模式。默认为 true。", - "Enable hybrid sorting: dynamically selects between PdqSort and TimSort " - + "based on runtime profiling to choose the most efficient algorithm " - + "for the data pattern. The default value is true."}, + description = "Enable hybrid sorting: dynamically selects between PdqSort and TimSort " + + "based on runtime profiling to choose the most efficient algorithm " + + "for the data pattern. The default value is true.", needForward = true, fuzzy = true) public boolean enableUseHybridSort = true; - @VarAttrDef.VarAttr(name = USE_MAX_LENGTH_OF_VARCHAR_IN_CTAS, needForward = true, description = { - "在 CTAS 中,如果 CHAR / VARCHAR 列不来自于源表,是否是将这一列的长度设置为 MAX,即 65533。默认为 true。", - "In CTAS (Create Table As Select), if CHAR/VARCHAR columns do not originate from the source table," - + " whether to set the length of such a column to MAX, which is 65533. The default is true." - }) + @VarAttrDef.VarAttr(name = USE_MAX_LENGTH_OF_VARCHAR_IN_CTAS, needForward = true, description = "In CTAS (Create " + + "Table As Select), if CHAR/VARCHAR columns do not originate from the source table," + + " whether to set the length of such a column to MAX, which is 65533. The default is true.") public boolean useMaxLengthOfVarcharInCtas = true; // Whether enable segment cache. Segment cache only works when FE's query options sets enableSegmentCache true @@ -3524,184 +3289,127 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { * When enabling shard scroll, FE will plan scan ranges by shards of ES indices. * Otherwise, FE will plan a single query to ES. */ - @VarAttrDef.VarAttr(name = ENABLE_ES_PARALLEL_SCROLL, description = { - "ES catalog 是否开启 shard 级别并发的 scroll 请求,默认开启。", - "Whether to enable shard-level parallel scroll requests for ES catalog, enabled by default." - }) + @VarAttrDef.VarAttr(name = ENABLE_ES_PARALLEL_SCROLL, description = "Whether to enable shard-level parallel scroll " + + "requests for ES catalog, enabled by default.") public boolean enableESParallelScroll = true; - @VarAttrDef.VarAttr(name = ENABLE_MATCH_WITHOUT_INVERTED_INDEX, description = { - "开启无索引 match 查询功能,建议正式环境保持开启", - "Enable no-index match query functionality." - + " it is recommended to keep this enabled in the production environment." - }) + @VarAttrDef.VarAttr(name = ENABLE_MATCH_WITHOUT_INVERTED_INDEX, description = "Enable no-index match query " + + "functionality." + + " it is recommended to keep this enabled in the production environment.") public boolean enableMatchWithoutInvertedIndex = true; - @VarAttrDef.VarAttr(name = ENABLE_FALLBACK_ON_MISSING_INVERTED_INDEX, description = { - "开启后在没有找到索引的情况下直接查询报错,建议正式环境保持开启", - "After enabling, it will directly query and report an error if no index is found." - + " It is recommended to keep this enabled in the production environment." - }) + @VarAttrDef.VarAttr(name = ENABLE_FALLBACK_ON_MISSING_INVERTED_INDEX, description = "After enabling, it will " + + "directly query and report an error if no index is found." + + " It is recommended to keep this enabled in the production environment.") public boolean enableFallbackOnMissingInvertedIndex = true; - @VarAttrDef.VarAttr(name = ENABLE_INVERTED_INDEX_SEARCHER_CACHE, description = { - "开启后会缓存倒排索引 searcher", - "Enabling this will cache the inverted index searcher." - }) + @VarAttrDef.VarAttr(name = ENABLE_INVERTED_INDEX_SEARCHER_CACHE, description = "Enabling this will cache the " + + "inverted index searcher.") public boolean enableInvertedIndexSearcherCache = true; - @VarAttrDef.VarAttr(name = ENABLE_INVERTED_INDEX_QUERY_CACHE, description = { - "开启后会缓存倒排索引查询结果", - "Enabling this will cache the results of inverted index queries." - }) + @VarAttrDef.VarAttr(name = ENABLE_INVERTED_INDEX_QUERY_CACHE, description = "Enabling this will cache the results " + + "of inverted index queries.") public boolean enableInvertedIndexQueryCache = true; - @VarAttrDef.VarAttr(name = ENABLE_ANN_INDEX_RESULT_CACHE, needForward = true, description = { - "开启后会缓存 ANN 索引查询结果", - "Enabling this will cache the results of ANN index queries." - }) + @VarAttrDef.VarAttr(name = ENABLE_ANN_INDEX_RESULT_CACHE, needForward = true, description = "Enabling this will " + + "cache the results of ANN index queries.") public boolean enableAnnIndexResultCache = true; - @VarAttrDef.VarAttr(name = IN_LIST_VALUE_COUNT_THRESHOLD, description = { - "in 条件 value 数量大于这个 threshold 后将不会走 fast_execute", - "When the number of values in the IN condition exceeds this threshold," - + " fast_execute will not be used." - }, affectQueryResultInExecution = true) + @VarAttrDef.VarAttr(name = IN_LIST_VALUE_COUNT_THRESHOLD, description = "When the number of values in the IN " + + "condition exceeds this threshold," + + " fast_execute will not be used.", affectQueryResultInExecution = true) public int inListValueCountThreshold = 10; - @VarAttrDef.VarAttr(name = ENABLE_ADAPTIVE_PIPELINE_TASK_SERIAL_READ_ON_LIMIT, needForward = true, description = { - "开启后将会允许自动调整 pipeline task 的并发数。当 scan 节点没有过滤条件,且 limit 参数小于" - + "adaptive_pipeline_task_serial_read_on_limit 中指定的行数时,scanner 的并行度将会被设置为 1", - "When enabled, the pipeline task concurrency will be adjusted automatically. When the scan node has no filter " + @VarAttrDef.VarAttr(name = ENABLE_ADAPTIVE_PIPELINE_TASK_SERIAL_READ_ON_LIMIT, needForward = true, description = "W" + + "hen enabled, the pipeline task concurrency will be adjusted automatically. When the scan node has no " + + "filter " + "conditions and the limit parameter is less than the number of rows specified in " - + "adaptive_pipeline_task_serial_read_on_limit, the parallelism of the scan will be set to 1." - }) + + "adaptive_pipeline_task_serial_read_on_limit, the parallelism of the scan will be set to 1.") public boolean enableAdaptivePipelineTaskSerialReadOnLimit = true; - @VarAttrDef.VarAttr(name = ADAPTIVE_PIPELINE_TASK_SERIAL_READ_ON_LIMIT, needForward = true, description = { - "当 enable_adaptive_pipeline_task_serial_read_on_limit 开启时,scanner 的并行度将会被设置为 1 的行数阈值", - "When enable_adaptive_pipeline_task_serial_read_on_limit is enabled, " - + "the number of rows at which the parallelism of the scan will be set to 1." - }) + @VarAttrDef.VarAttr(name = ADAPTIVE_PIPELINE_TASK_SERIAL_READ_ON_LIMIT, needForward = true, description = "When " + + "enable_adaptive_pipeline_task_serial_read_on_limit is enabled, " + + "the number of rows at which the parallelism of the scan will be set to 1.") public int adaptivePipelineTaskSerialReadOnLimit = 10000; @VarAttrDef.VarAttr(name = "enable_adjust_conjunct_order_by_cost", needForward = true) public boolean enableAdjustConjunctOrderByCost = true; - @VarAttrDef.VarAttr(name = REQUIRE_SEQUENCE_IN_INSERT, needForward = true, description = { - "该变量用于控制,使用了 sequence 列的 unique key 表,insert into 操作是否要求必须提供每一行的 sequence 列的值", - "This variable controls whether the INSERT INTO operation on unique key tables with a sequence" - + " column requires a sequence column to be provided for each row" - }) + @VarAttrDef.VarAttr(name = REQUIRE_SEQUENCE_IN_INSERT, needForward = true, description = "This variable controls " + + "whether the INSERT INTO operation on unique key tables with a sequence" + + " column requires a sequence column to be provided for each row") public boolean requireSequenceInInsert = true; @VarAttrDef.VarAttr(name = ENABLE_COOLDOWN_REPLICA_AFFINITY, needForward = true) public boolean enableCooldownReplicaAffinity = true; - @VarAttrDef.VarAttr(name = ENABLE_AUTO_CREATE_WHEN_OVERWRITE, needForward = true, description = { - "开启后对自动分区表的 insert overwrite 操作会对没有找到分区的插入数据按自动分区规则创建分区,默认关闭", - "The insert overwrite operation on an auto-partitioned table will create partitions for inserted data" - + " for which no partition is found according to the auto-partitioning rules, which is turned off" - + " by default." - }) + @VarAttrDef.VarAttr(name = ENABLE_AUTO_CREATE_WHEN_OVERWRITE, needForward = true, description = "The insert " + + "overwrite operation on an auto-partitioned table will create partitions for inserted data" + + " for which no partition is found according to the auto-partitioning rules, which is turned off" + + " by default.") public boolean enableAutoCreateWhenOverwrite = false; - @VarAttrDef.VarAttr(name = ENABLE_TEXT_VALIDATE_UTF8, needForward = true, description = { - "对于 text 类型的文件读取,是否开启 utf8 编码检查。非 utf8 字符会显示成乱码。", - "For text type file reading, whether to enable utf8 encoding check." - + "non-utf8 characters will be displayed as garbled characters." - }) + @VarAttrDef.VarAttr(name = ENABLE_TEXT_VALIDATE_UTF8, needForward = true, description = "For text type file " + + "reading, whether to enable utf8 encoding check." + + "non-utf8 characters will be displayed as garbled characters.") public boolean enableTextValidateUtf8 = true; @VarAttrDef.VarAttr(name = SKIP_CHECKING_ACID_VERSION_FILE, needForward = true, affectQueryResultInPlan = true, - description = { - "跳过检查 transactional hive 版本文件 '_orc_acid_version.'", - "Skip checking transactional hive version file '_orc_acid_version.'" - } + description = "Skip checking transactional hive version file '_orc_acid_version.'" ) public boolean skipCheckingAcidVersionFile = false; @VarAttrDef.VarAttr(name = ENABLE_SQL_CONVERTOR_FEATURES, needForward = true, checker = "checkSqlConvertorFeatures", - description = { - "开启 SQL 转换器的指定功能。多个功能使用逗号分隔", - "enable SQL convertor features. Multiple features are separated by commas" - }) + description = "enable SQL convertor features. Multiple features are separated by commas") public String enableSqlConvertorFeatures = ""; // The default value is true, // which throughs reducing rpc call from follower node to meta service to improve query performance // for getting version is memory operation in master node, // but it will slightly increase the pressure on the FE master. - @VarAttrDef.VarAttr(name = ENABLE_SCHEMA_SCAN_FROM_MASTER_FE, description = { - "在 follower 节点查询时,是否允许从 master 节点扫描 information_schema.tables 的结果", - "Whether to allow scanning information_schema.tables from the master node" - }) + @VarAttrDef.VarAttr(name = ENABLE_SCHEMA_SCAN_FROM_MASTER_FE, description = "Whether to allow scanning " + + "information_schema.tables from the master node") public boolean enableSchemaScanFromMasterFe = true; @VarAttrDef.VarAttr(name = SHOW_COLUMN_COMMENT_IN_DESCRIBE, needForward = true, - description = { - "是否在 DESCRIBE TABLE 语句中显示列注释", - "whether to show column comments in DESCRIBE TABLE statement" - }) + description = "whether to show column comments in DESCRIBE TABLE statement") public boolean showColumnCommentInDescribe = false; @VarAttrDef.VarAttr(name = SQL_CONVERTOR_CONFIG, needForward = true, - description = { - "SQL 转换器的相关配置,使用 Json 格式。以 {} 为根元素。", - "SQL convertor config, use Json format. The root element is {}" - }) + description = "SQL convertor config, use Json format. The root element is {}") public String sqlConvertorConfig = "{}"; @VarAttrDef.VarAttr(name = PREFER_UDF_OVER_BUILTIN, needForward = true, - description = { - "是否优先查找 UDF 而不是内置函数", - "Whether to prefer UDF over builtin functions" - }) + description = "Whether to prefer UDF over builtin functions") public boolean preferUdfOverBuiltin = false; - @VarAttrDef.VarAttr(name = SKEW_REWRITE_JOIN_SALT_EXPLODE_FACTOR, description = { - "join 加盐优化的扩展因子,对指定的倾斜值,join 倾斜侧生成 0 到 ExplodeFactor - 1 的随机值," - + "join 扩展侧复制为 ExplodeFactor 个副本,使 hash shuffle 之后计算负载均匀分布。" - + "可以配置为 0-65535 中的数字:0 代表根据集群中 be 的数量和 cpu 核数自适应,1-65535 中的数量代表扩展倍数", - "ExplodeFactor: The expansion factor for join skew optimization. " - + "For specified skewed values, it generates random values between 0 and ExplodeFactor-1 " - + "on the skewed side, while replicating the expanded side into ExplodeFactor copies," - + "ensuring even load distribution after hash shuffling. " - + "Configurable range: 0-65535 (0=auto-adapt based on BEs and CPU cores;" - + "1-65535=manual expansion multiplier)" - }, checker = "checkSkewRewriteJoinSaltExplodeFactor") + @VarAttrDef.VarAttr(name = SKEW_REWRITE_JOIN_SALT_EXPLODE_FACTOR, description = "ExplodeFactor: The expansion " + + "factor for join skew optimization. " + + "For specified skewed values, it generates random values between 0 and ExplodeFactor-1 " + + "on the skewed side, while replicating the expanded side into ExplodeFactor copies," + + "ensuring even load distribution after hash shuffling. " + + "Configurable range: 0-65535 (0=auto-adapt based on BEs and CPU cores;" + + "1-65535=manual expansion multiplier)", checker = "checkSkewRewriteJoinSaltExplodeFactor") public int skewRewriteJoinSaltExplodeFactor = 0; @VarAttrDef.VarAttr(name = DEFAULT_AI_RESOURCE, needForward = true, - description = { - "当函数参数未指定 AI Resource 时,系统将默认使用此变量定义的 Resource。", - "Defines the default AI resource to be used when no specific AI resource is specified " - + "in the function arguments." - }) + description = "Defines the default AI resource to be used when no specific AI resource is specified " + + "in the function arguments.") public String defaultAIResource = ""; @VarAttrDef.VarAttr(name = FILE_PRESIGNED_URL_TTL_SECONDS, needForward = true, - description = { - "EMBED 多模态场景中,S3 预签名 URL 的有效期(秒)。", - "Expiration time in seconds for S3 presigned URL used by multimodal EMBED." - }) + description = "Expiration time in seconds for S3 presigned URL used by multimodal EMBED.") public long filePresignedUrlTtlSeconds = 3600; @VarAttrDef.VarAttr(name = EMBED_MAX_BATCH_SIZE, needForward = true, checker = "checkEmbedMaxBatchSize", - description = { - "EMBED 场景中,单次批量请求允许携带的最大输入数量,文本与多模态共用。", - "Maximum number of inputs allowed in one EMBED batch request for both text and multimodal." - }) + description = "Maximum number of inputs allowed in one EMBED batch request for both text and multimodal.") public int embedMaxBatchSize = 5; @VarAttrDef.VarAttr(name = AI_CONTEXT_WINDOW_SIZE, needForward = true, checker = "checkAiContextWindowSize", - description = { - "AI 函数批量请求时使用的上下文窗口字节上限。", - "Context window size in bytes for AI function batching." - }) + description = "Context window size in bytes for AI function batching.") public long aiContextWindowSize = 128 * 1024; public void setEnableEsParallelScroll(boolean enableESParallelScroll) { @@ -3712,50 +3420,40 @@ public boolean isEnableESParallelScroll() { return enableESParallelScroll; } - @VarAttrDef.VarAttr(name = ENABLE_ADD_INDEX_FOR_NEW_DATA, needForward = true, description = { - "是否启用仅对新数据生效的索引添加模式,开启时新建索引只对后续写入的数据生效,关闭时对全部数据重建索引", - "Whether to enable add index mode that only affects new data, " - + "when enabled new indexes only affect subsequently written data, " - + "when disabled rebuild indexes for all data" - }) + @VarAttrDef.VarAttr(name = ENABLE_ADD_INDEX_FOR_NEW_DATA, needForward = true, description = "Whether to enable add " + + "index mode that only affects new data, " + + "when enabled new indexes only affect subsequently written data, " + + "when disabled rebuild indexes for all data") public boolean enableAddIndexForNewData = false; @VarAttrDef.VarAttr(name = HNSW_EF_SEARCH, needForward = true, checker = "checkHnswEfSearch", - description = {"HNSW 索引的 EF 搜索参数,控制搜索的精度和速度", - "HNSW index EF search parameter, controls the precision and speed of the search"}) + description = "HNSW index EF search parameter, controls the precision and speed of the search") public int hnswEFSearch = 32; @VarAttrDef.VarAttr(name = HNSW_CHECK_RELATIVE_DISTANCE, needForward = true, - description = {"是否启用相对距离检查机制,以提升 HNSW 搜索的准确性", - "Enable relative distance checking to improve HNSW search accuracy"}) + description = "Enable relative distance checking to improve HNSW search accuracy") public boolean hnswCheckRelativeDistance = true; @VarAttrDef.VarAttr(name = HNSW_BOUNDED_QUEUE, needForward = true, - description = {"是否使用有界优先队列来优化 HNSW 的搜索性能", - "Whether to use a bounded priority queue to optimize HNSW search performance"}) + description = "Whether to use a bounded priority queue to optimize HNSW search performance") public boolean hnswBoundedQueue = true; @VarAttrDef.VarAttr(name = IVF_NPROBE, needForward = true, checker = "checkIvfNprobe", - description = {"IVF 索引的 nprobe 参数,控制搜索时访问的聚类数量", - "IVF index nprobe parameter, controls the number of clusters to search"}) + description = "IVF index nprobe parameter, controls the number of clusters to search") public int ivfNprobe = 32; @VarAttrDef.VarAttr(name = ANN_INDEX_CANDIDATE_ROWS_THRESHOLD, needForward = true, checker = "checkAnnIndexCandidateRowsThreshold", - description = {"Skip ANN index when candidate rows before ANN search are less " - + "than this threshold. 0 disables the absolute row threshold", - "Skip ANN index when candidate rows before ANN search are less " - + "than this threshold. 0 disables the absolute row threshold"}) + description = "Skip ANN index when candidate rows before ANN search are less " + + "than this threshold. 0 disables the absolute row threshold") public long annIndexCandidateRowsThreshold = 0; @VarAttrDef.VarAttr(name = ANN_INDEX_CANDIDATE_ROWS_PERCENT_THRESHOLD, needForward = true, checker = "checkAnnIndexCandidateRowsPercentThreshold", - description = {"Skip ANN index when candidate row ratio before ANN search is less " - + "than this threshold", - "Skip ANN index when candidate row ratio before ANN search is less " - + "than this threshold"}) + description = "Skip ANN index when candidate row ratio before ANN search is less " + + "than this threshold") public double annIndexCandidateRowsPercentThreshold = 0.3; public void checkAnnIndexCandidateRowsThreshold(String value) { @@ -3786,11 +3484,8 @@ public void checkAnnIndexCandidateRowsPercentThreshold(String value) { name = ENABLE_VARIANT_SCHEMA_AUTO_CAST, needForward = true, affectQueryResultInExecution = true, - description = { - "是否启用基于 schema template 的 variant 自动 cast,默认开启。", - "Whether to enable schema-template-based auto cast for variant expressions. " - + "The default is true." - } + description = "Whether to enable schema-template-based auto cast for variant expressions. " + + "The default is true." ) public boolean enableVariantSchemaAutoCast = true; @@ -3799,10 +3494,7 @@ public void checkAnnIndexCandidateRowsPercentThreshold(String value) { needForward = true, affectQueryResultInPlan = true, varType = VariableAnnotation.EXPERIMENTAL, - description = { - "是否对纯计算表达式启用 ColumnVariantV2,默认关闭。", - "Whether to enable ColumnVariantV2 for compute expressions. The default is false." - } + description = "Whether to enable ColumnVariantV2 for compute expressions. The default is false." ) public boolean enableVariantV2 = false; @@ -3822,8 +3514,7 @@ public void checkAnnIndexCandidateRowsPercentThreshold(String value) { public int defaultVariantMaxSparseColumnStatisticsSize = 10000; @VarAttrDef.VarAttr(name = ENABLE_EXTENDED_REGEX, needForward = true, affectQueryResultInExecution = true, - description = {"是否启用扩展的正则表达式,支持如 look-around 类的零宽断言", - "Enable extended regular expressions, support look-around zero-width assertions"}) + description = "Enable extended regular expressions, support look-around zero-width assertions") public boolean enableExtendedRegex = false; @VarAttrDef.VarAttr( @@ -3834,9 +3525,8 @@ public void checkAnnIndexCandidateRowsPercentThreshold(String value) { public int defaultVariantSparseHashShardCount = 0; @VarAttrDef.VarAttr(name = CLOUD_PARTITIONS_TABLE_USE_CACHED_VISIBLE_VERSION, needForward = false, - description = {"partitions系统表的visible_version列在cloud模式是否使用cached", - "Whether cache is used for the visible_version column" - + "in the partitions system table on cloud mode"}) + description = "Whether cache is used for the visible_version column" + + "in the partitions system table on cloud mode") public boolean cloudPartitionsTableUseCachedVisibleVersion = true; @VarAttrDef.VarAttr( @@ -3870,9 +3560,7 @@ public void checkAnnIndexCandidateRowsPercentThreshold(String value) { @VarAttrDef.VarAttr( name = "use_v3_storage_format", fuzzy = true, - description = { - "In fuzzy tests, randomly use V3 storage_format (ext_meta) for some tables.", - "Only takes effect when user does not explicitly specify storage_format."} + description = "In fuzzy tests, randomly use V3 storage_format (ext_meta) for some tables." ) public boolean useV3StorageFormat = false; @@ -3881,21 +3569,18 @@ public void checkAnnIndexCandidateRowsPercentThreshold(String value) { public static final String IGNORE_ICEBERG_DANGLING_DELETE = "ignore_iceberg_dangling_delete"; @VarAttrDef.VarAttr(name = IGNORE_ICEBERG_DANGLING_DELETE, - description = {"是否忽略 Iceberg 表中 dangling delete 文件对 COUNT(*) 统计信息的影响。" - + "默认为 true,COUNT(*) 会直接从元信息中获取行数,性能更好,但是如果有 dangling delete,结果可能是不准确的。" - + "设置为 false 时,COUNT(*) 会扫描数据文件以排除 dangling delete 文件的影响。", - " Whether to ignore the impact of dangling delete files in Iceberg tables on COUNT(*) statistics. " - + "The default is true, COUNT(*) will directly obtain the number of rows from metadata, " - + "which has better performance, but if there are dangling deletes, " - + "the result may be inaccurate. " - + "When set to false, COUNT(*) will scan data files " - + "to exclude the impact of dangling delete files."}) + description = " Whether to ignore the impact of dangling delete files in Iceberg tables on COUNT(*) " + + "statistics. " + + "The default is true, COUNT(*) will directly obtain the number of rows from metadata, " + + "which has better performance, but if there are dangling deletes, " + + "the result may be inaccurate. " + + "When set to false, COUNT(*) will scan data files " + + "to exclude the impact of dangling delete files.") public boolean ignoreIcebergDanglingDelete = false; @VarAttrDef.VarAttr(name = ENABLE_ICEBERG_MERGE_PARTITIONING, - description = {"是否启用 Iceberg UPDATE/DELETE 合并写入的双分支分发(INSERT 按分区列,DELETE 按 row_id)。", - "Enable merge partitioning for Iceberg UPDATE/DELETE (INSERT by partition columns, " - + "DELETE by row_id)."}) + description = "Enable merge partitioning for Iceberg UPDATE/DELETE (INSERT by partition columns, " + + "DELETE by row_id).") public boolean enableIcebergMergePartitioning = true; // If this fe is in fuzzy mode, then will use initFuzzyModeVariables to generate some variables, // not the default value set in the code. diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java b/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java index 75bc69ba7c5531..f1f0bd14033c47 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/qe/SessionVariablesTest.java @@ -152,11 +152,10 @@ public void testInsertVisibleTimeoutReturnMode() throws Exception { Field field = SessionVariable.class.getDeclaredField("insertVisibleTimeoutReturnMode"); VarAttrDef.VarAttr varAttr = field.getAnnotation(VarAttrDef.VarAttr.class); - Assertions.assertArrayEquals(new String[] { - "控制普通内表 INSERT 在 publish timeout 时返回给客户端的状态。", + Assertions.assertEquals( "Controls the status returned to the client when a normal internal-table INSERT times out " - + "while waiting for publish visibility." - }, varAttr.description()); + + "while waiting for publish visibility.", + varAttr.description()); Assertions.assertArrayEquals(new String[] { SessionVariable.INSERT_VISIBLE_TIMEOUT_RETURN_MODE_COMMITTED, SessionVariable.INSERT_VISIBLE_TIMEOUT_RETURN_MODE_ERROR @@ -196,13 +195,11 @@ public void testRuntimeFilterBroadcastJoinProducerNumDescription() throws Except Field field = SessionVariable.class.getDeclaredField("runtimeFilterBroadcastJoinProducerNum"); VarAttrDef.VarAttr varAttr = field.getAnnotation(VarAttrDef.VarAttr.class); - Assertions.assertArrayEquals(new String[] { - "控制 Nereids 分布式规划中每个 broadcast join runtime filter 的生产 BE 数量。" - + "设置为小于等于 0 时不限制。Legacy Coordinator 路径保持原行为。", + Assertions.assertEquals( "Controls the number of producer BEs for each broadcast join runtime filter in " + "the Nereids distributed planner. Values less than or equal to 0 disable the limit. " - + "The legacy Coordinator path keeps the existing behavior." - }, varAttr.description()); + + "The legacy Coordinator path keeps the existing behavior.", + varAttr.description()); } @Test