From 4198a35b53e37c4c9943b44106d81e8f30cea1c9 Mon Sep 17 00:00:00 2001 From: lsy3993 Date: Fri, 31 Jul 2026 21:10:07 +0800 Subject: [PATCH 1/2] [refactor](fe) Remove bilingual descriptions from variable annotations ### What problem does this PR solve? Issue Number: N/A Problem Summary: Session and global variable annotations currently store both Chinese and English descriptions as a two-element array. The Chinese description is unused and the array shape makes callers cumbersome. This change keeps only the English description, updates the VarAttr annotation type, and adjusts the affected unit tests. ### Release note None ### Check List (For Author) - Test: Unit Test - `./run-fe-ut.sh --run org.apache.doris.qe.SessionVariablesTest` - Behavior changed: No - Does this need documentation: No --- .../org/apache/doris/qe/GlobalVariable.java | 102 +- .../java/org/apache/doris/qe/VarAttrDef.java | 7 +- .../org/apache/doris/qe/SessionVariable.java | 1270 +++++++---------- .../apache/doris/qe/SessionVariablesTest.java | 15 +- 4 files changed, 523 insertions(+), 871 deletions(-) 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-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index 1938d19670b1e7..3651ac36c74fcf 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; @@ -2215,10 +2140,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; @@ -2226,17 +2148,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, @@ -2328,10 +2248,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; @@ -2339,10 +2256,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; @@ -2351,13 +2266,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) @@ -2374,66 +2288,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) @@ -2455,11 +2361,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"; @@ -2471,35 +2375,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(); @@ -2541,16 +2433,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; @@ -2569,38 +2459,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; @@ -2612,55 +2495,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; @@ -2668,12 +2544,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; @@ -2681,11 +2555,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; @@ -2693,51 +2565,45 @@ 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 过滤。默认为 true。", - "Controls whether to enable expression ZoneMap filtering in scanners. " - + "The default value is true."}, + description = "Controls whether to enable expression ZoneMap filtering in scanners. " + + "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; @@ -2750,37 +2616,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; @@ -2797,49 +2657,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 ) @@ -2848,232 +2701,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"; @@ -3084,44 +2900,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) @@ -3132,74 +2941,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) { @@ -3212,11 +3004,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) { @@ -3301,19 +3091,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(); @@ -3328,30 +3114,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 @@ -3378,8 +3160,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 ) @@ -3387,34 +3168,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; @@ -3422,11 +3198,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) @@ -3444,34 +3218,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) @@ -3479,9 +3248,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; @@ -3491,18 +3260,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 @@ -3514,184 +3280,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) { @@ -3702,50 +3411,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) { @@ -3776,11 +3475,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; @@ -3789,10 +3485,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; @@ -3812,8 +3505,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( @@ -3824,9 +3516,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( @@ -3860,9 +3551,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; @@ -3871,21 +3560,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 From 3c09be36ad6c2dbabb277ac16666adf418b20e36 Mon Sep 17 00:00:00 2001 From: lsy3993 Date: Fri, 31 Jul 2026 23:12:05 +0800 Subject: [PATCH 2/2] [refactor](fe) Remove bilingual descriptions from config annotations ### What problem does this PR solve? Issue Number: N/A Problem Summary: Config annotations currently store bilingual descriptions as a two-element array. The Chinese description is unused, and the array shape makes callers cumbersome. This change keeps only the English description, updates the ConfField annotation type, and adds a unit test asserting config descriptions do not contain Chinese. ### Release note None ### Check List (For Author) - Test: Unit Test - `./run-fe-ut.sh --run org.apache.doris.common.ConfigTest` - Behavior changed: No - Does this need documentation: No --- .../java/org/apache/doris/common/Config.java | 1916 ++++++++--------- .../org/apache/doris/common/ConfigBase.java | 5 +- .../org/apache/doris/common/ConfigTest.java | 13 + 3 files changed, 889 insertions(+), 1045 deletions(-) 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 c0baaa650c515c..4cb7d1ac646e30 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,37 +2088,36 @@ 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(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; /** @@ -2214,16 +2141,16 @@ 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."}) + 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; /** @@ -2255,9 +2182,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; /** @@ -2302,18 +2228,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; /** @@ -2322,9 +2246,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; /** @@ -2332,9 +2255,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; /** @@ -2343,9 +2265,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; /** @@ -2473,9 +2394,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; /** @@ -2535,33 +2455,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 @@ -2570,42 +2490,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) @@ -2617,145 +2529,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) @@ -2783,8 +2682,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) @@ -2793,58 +2692,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) @@ -2852,18 +2747,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"; @@ -2876,46 +2769,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 @@ -2926,17 +2816,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 @@ -2954,54 +2844,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. @@ -3010,32 +2897,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"; @@ -3197,66 +3084,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) @@ -3265,31 +3145,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", @@ -3301,14 +3179,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) @@ -3326,19 +3203,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) @@ -3367,177 +3241,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) @@ -3552,38 +3407,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) @@ -3597,119 +3448,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 @@ -3723,10 +3566,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) @@ -3739,46 +3581,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/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