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

dataroaring pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 8fe520a9836 [fix](group commit) forbid set group_commit_interval_ms 
and group_commit_data_bytes to 0 (#61034)
8fe520a9836 is described below

commit 8fe520a9836e91103b1ebcdcb78991b41f342952
Author: meiyi <[email protected]>
AuthorDate: Mon Mar 9 19:31:13 2026 +0800

    [fix](group commit) forbid set group_commit_interval_ms and 
group_commit_data_bytes to 0 (#61034)
---
 .../cloud/alter/CloudSchemaChangeHandler.java      |  6 ++--
 .../apache/doris/common/util/PropertyAnalyzer.java | 23 +++++++++++----
 .../apache/doris/datasource/InternalCatalog.java   |  4 +--
 .../commands/info/ModifyTablePropertiesOp.java     | 26 ++---------------
 .../insert_p0/insert_group_commit_into.groovy      | 34 ++++++++++++++++++++++
 5 files changed, 57 insertions(+), 36 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
index 1b4c1899845..d199fcbb10e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
@@ -152,8 +152,7 @@ public class CloudSchemaChangeHandler extends 
SchemaChangeHandler {
             param.ttlSeconds = ttlSeconds;
             param.type = UpdatePartitionMetaParam.TabletMetaType.TTL_SECONDS;
         } else if 
(properties.containsKey(PropertyAnalyzer.PROPERTIES_GROUP_COMMIT_INTERVAL_MS)) {
-            long groupCommitIntervalMs = 
Long.parseLong(properties.get(PropertyAnalyzer
-                    .PROPERTIES_GROUP_COMMIT_INTERVAL_MS));
+            int groupCommitIntervalMs = 
PropertyAnalyzer.analyzeGroupCommitIntervalMs(properties, false);
             olapTable.readLock();
             try {
                 if (groupCommitIntervalMs == 
olapTable.getGroupCommitIntervalMs()) {
@@ -168,8 +167,7 @@ public class CloudSchemaChangeHandler extends 
SchemaChangeHandler {
             param.groupCommitIntervalMs = groupCommitIntervalMs;
             param.type = 
UpdatePartitionMetaParam.TabletMetaType.GROUP_COMMIT_INTERVAL_MS;
         } else if 
(properties.containsKey(PropertyAnalyzer.PROPERTIES_GROUP_COMMIT_DATA_BYTES)) {
-            long groupCommitDataBytes = 
Long.parseLong(properties.get(PropertyAnalyzer
-                    .PROPERTIES_GROUP_COMMIT_DATA_BYTES));
+            int groupCommitDataBytes = 
PropertyAnalyzer.analyzeGroupCommitDataBytes(properties, false);
             olapTable.readLock();
             try {
                 if (groupCommitDataBytes == 
olapTable.getGroupCommitDataBytes()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
index 4a9818aed7d..02347cd38e7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
@@ -1857,11 +1857,11 @@ public class PropertyAnalyzer {
      * 1000
      *
      * @param properties
-     * @param defaultValue
      * @return
      * @throws AnalysisException
      */
-    public static int analyzeGroupCommitIntervalMs(Map<String, String> 
properties) throws AnalysisException {
+    public static int analyzeGroupCommitIntervalMs(Map<String, String> 
properties, boolean removeProperty)
+            throws AnalysisException {
         int groupCommitIntervalMs = 
PROPERTIES_GROUP_COMMIT_INTERVAL_MS_DEFAULT_VALUE;
         if (properties != null && 
properties.containsKey(PROPERTIES_GROUP_COMMIT_INTERVAL_MS)) {
             String groupIntervalCommitMsStr = 
properties.get(PROPERTIES_GROUP_COMMIT_INTERVAL_MS);
@@ -1870,24 +1870,35 @@ public class PropertyAnalyzer {
             } catch (Exception e) {
                 throw new AnalysisException("parse group_commit_interval_ms 
format error");
             }
+            if (groupCommitIntervalMs <= 0) {
+                throw new AnalysisException("group_commit_interval_ms must be 
greater than 0");
+            }
 
-            properties.remove(PROPERTIES_GROUP_COMMIT_INTERVAL_MS);
+            if (removeProperty) {
+                properties.remove(PROPERTIES_GROUP_COMMIT_INTERVAL_MS);
+            }
         }
 
         return groupCommitIntervalMs;
     }
 
-    public static int analyzeGroupCommitDataBytes(Map<String, String> 
properties) throws AnalysisException {
+    public static int analyzeGroupCommitDataBytes(Map<String, String> 
properties, boolean removeProperty)
+            throws AnalysisException {
         int groupCommitDataBytes = 
PROPERTIES_GROUP_COMMIT_DATA_BYTES_DEFAULT_VALUE;
         if (properties != null && 
properties.containsKey(PROPERTIES_GROUP_COMMIT_DATA_BYTES)) {
             String groupIntervalCommitDataBytesStr = 
properties.get(PROPERTIES_GROUP_COMMIT_DATA_BYTES);
             try {
                 groupCommitDataBytes = 
Integer.parseInt(groupIntervalCommitDataBytesStr);
             } catch (Exception e) {
-                throw new AnalysisException("parse group_commit_interval_ms 
format error");
+                throw new AnalysisException("parse group_commit_data_bytes 
format error");
+            }
+            if (groupCommitDataBytes <= 0) {
+                throw new AnalysisException("group_commit_data_bytes must be 
greater than 0");
             }
 
-            properties.remove(PROPERTIES_GROUP_COMMIT_DATA_BYTES);
+            if (removeProperty) {
+                properties.remove(PROPERTIES_GROUP_COMMIT_DATA_BYTES);
+            }
         }
 
         return groupCommitDataBytes;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
index 50fc4edea69..14a13343939 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
@@ -2933,14 +2933,14 @@ public class InternalCatalog implements 
CatalogIf<Database> {
             throw new DdlException(e.getMessage());
         }
         try {
-            int groupCommitIntervalMs = 
PropertyAnalyzer.analyzeGroupCommitIntervalMs(properties);
+            int groupCommitIntervalMs = 
PropertyAnalyzer.analyzeGroupCommitIntervalMs(properties, true);
             olapTable.setGroupCommitIntervalMs(groupCommitIntervalMs);
         } catch (Exception e) {
             throw new DdlException(e.getMessage());
         }
 
         try {
-            int groupCommitDataBytes = 
PropertyAnalyzer.analyzeGroupCommitDataBytes(properties);
+            int groupCommitDataBytes = 
PropertyAnalyzer.analyzeGroupCommitDataBytes(properties, true);
             olapTable.setGroupCommitDataBytes(groupCommitDataBytes);
         } catch (Exception e) {
             throw new DdlException(e.getMessage());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
index dc55d99d249..72f4a00bf2c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
@@ -310,33 +310,11 @@ public class ModifyTablePropertiesOp extends AlterTableOp 
{
             this.needTableStable = false;
             this.opType = AlterOpType.MODIFY_TABLE_PROPERTY_SYNC;
         } else if 
(properties.containsKey(PropertyAnalyzer.PROPERTIES_GROUP_COMMIT_INTERVAL_MS)) {
-            long groupCommitIntervalMs;
-            String groupCommitIntervalMsStr = 
properties.get(PropertyAnalyzer.PROPERTIES_GROUP_COMMIT_INTERVAL_MS);
-            try {
-                groupCommitIntervalMs = 
Long.parseLong(groupCommitIntervalMsStr);
-                if (groupCommitIntervalMs < 0) {
-                    throw new AnalysisException("group_commit_interval_ms can 
not be less than 0:"
-                            + groupCommitIntervalMsStr);
-                }
-            } catch (NumberFormatException e) {
-                throw new AnalysisException("Invalid group_commit_interval_ms 
format: "
-                        + groupCommitIntervalMsStr);
-            }
+            PropertyAnalyzer.analyzeGroupCommitIntervalMs(properties, false);
             this.needTableStable = false;
             this.opType = AlterOpType.MODIFY_TABLE_PROPERTY_SYNC;
         } else if 
(properties.containsKey(PropertyAnalyzer.PROPERTIES_GROUP_COMMIT_DATA_BYTES)) {
-            long groupCommitDataBytes;
-            String groupCommitDataBytesStr = 
properties.get(PropertyAnalyzer.PROPERTIES_GROUP_COMMIT_DATA_BYTES);
-            try {
-                groupCommitDataBytes = Long.parseLong(groupCommitDataBytesStr);
-                if (groupCommitDataBytes < 0) {
-                    throw new AnalysisException("group_commit_data_bytes can 
not be less than 0:"
-                            + groupCommitDataBytesStr);
-                }
-            } catch (NumberFormatException e) {
-                throw new AnalysisException("Invalid group_commit_data_bytes 
format: "
-                        + groupCommitDataBytesStr);
-            }
+            PropertyAnalyzer.analyzeGroupCommitDataBytes(properties, false);
             this.needTableStable = false;
             this.opType = AlterOpType.MODIFY_TABLE_PROPERTY_SYNC;
         } else if 
(properties.containsKey(PropertyAnalyzer.PROPERTIES_FILE_CACHE_TTL_SECONDS)) {
diff --git a/regression-test/suites/insert_p0/insert_group_commit_into.groovy 
b/regression-test/suites/insert_p0/insert_group_commit_into.groovy
index 1b9b31db1d3..ff8aaeeefc7 100644
--- a/regression-test/suites/insert_p0/insert_group_commit_into.groovy
+++ b/regression-test/suites/insert_p0/insert_group_commit_into.groovy
@@ -479,6 +479,40 @@ suite("insert_group_commit_into") {
             exception """null value for not null column"""
         }
         getRowCount(2)
+
+        // test invalid group_commit_interval_ms and group_commit_data_bytes
+        test {
+            sql """ ALTER TABLE ${table} SET ("group_commit_interval_ms" = 
"0"); """
+            exception """group_commit_interval_ms must be greater than 0"""
+        }
+        test {
+            sql """ ALTER TABLE ${table} SET ("group_commit_data_bytes" = 
"0"); """
+            exception """group_commit_data_bytes must be greater than 0"""
+        }
+        test {
+            sql """ drop table if exists ${table}_invalid; """
+            sql """ CREATE TABLE IF NOT EXISTS ${table}_invalid ( k1 INT not 
null )
+                    DUPLICATE KEY(`k1`)
+                    DISTRIBUTED BY HASH(`k1`) 
+                    BUCKETS 1 PROPERTIES (
+                        "replication_allocation" = "tag.location.default: 1",
+                        "group_commit_interval_ms" = "0",
+                        "group_commit_data_bytes" = "100"
+                    ); 
+                """
+            exception """group_commit_interval_ms must be greater than 0"""
+        }
+        test {
+            sql """ CREATE TABLE IF NOT EXISTS ${table}_invalid ( k1 INT not 
null )
+                    DUPLICATE KEY(`k1`)
+                    DISTRIBUTED BY HASH(`k1`) 
+                    BUCKETS 1 PROPERTIES (
+                        "replication_allocation" = "tag.location.default: 1",
+                        "group_commit_data_bytes" = "0"
+                    ); 
+                """
+            exception """group_commit_data_bytes must be greater than 0"""
+        }
     } finally {
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to