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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 2b084295777 branch-2.1: [fix](meta) do not check replica allocation 
when replay #49569 (#49604)
2b084295777 is described below

commit 2b0842957770e5616f8f4008e8fe6c04d580d2f0
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Apr 3 09:50:24 2025 +0800

    branch-2.1: [fix](meta) do not check replica allocation when replay #49569 
(#49604)
    
    Cherry-picked from #49569
    
    Co-authored-by: Mingyu Chen (Rayner) <morning...@163.com>
---
 .../org/apache/doris/catalog/ColocateTableIndex.java  |  8 ++++----
 .../src/main/java/org/apache/doris/catalog/Env.java   |  2 +-
 .../doris/common/util/DynamicPartitionUtil.java       | 19 +++++++++++--------
 3 files changed, 16 insertions(+), 13 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/ColocateTableIndex.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/ColocateTableIndex.java
index 46a96bd39ea..ba7755365b2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/ColocateTableIndex.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/ColocateTableIndex.java
@@ -878,7 +878,7 @@ public class ColocateTableIndex implements Writable {
     }
 
     private void modifyColocateGroupReplicaAllocation(GroupId groupId, 
ReplicaAllocation replicaAlloc,
-            Map<Tag, List<List<Long>>> backendsPerBucketSeq, boolean 
needEditLog) throws UserException {
+            Map<Tag, List<List<Long>>> backendsPerBucketSeq, boolean isReplay) 
throws UserException {
         ColocateGroupSchema groupSchema = getGroupSchema(groupId);
         if (groupSchema == null) {
             LOG.warn("not found group {}", groupId);
@@ -912,7 +912,7 @@ public class ColocateTableIndex implements Writable {
                     
origDynamicProperties.put(DynamicPartitionProperty.REPLICATION_ALLOCATION,
                             replicaAlloc.toCreateStmt());
                     Map<String, String> analyzedDynamicPartition = 
DynamicPartitionUtil.analyzeDynamicPartition(
-                            origDynamicProperties, table, db);
+                            origDynamicProperties, table, db, isReplay);
                     
tableProperty.modifyTableProperties(analyzedDynamicPartition);
                     tableProperty.buildDynamicProperty();
                 }
@@ -932,11 +932,11 @@ public class ColocateTableIndex implements Writable {
         groupSchema.setReplicaAlloc(replicaAlloc);
         setBackendsPerBucketSeq(groupId, backendsPerBucketSeq);
 
-        if (needEditLog) {
+        if (!isReplay) {
             ColocatePersistInfo info = 
ColocatePersistInfo.createForModifyReplicaAlloc(groupId,
                     replicaAlloc, backendsPerBucketSeq);
             
Env.getCurrentEnv().getEditLog().logColocateModifyRepliaAlloc(info);
         }
-        LOG.info("modify group {} replication allocation to {}, is replay {}", 
groupId, replicaAlloc, !needEditLog);
+        LOG.info("modify group {} replication allocation to {}, is replay {}", 
groupId, replicaAlloc, isReplay);
     }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index 2e595406867..80a6d942bd9 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -5064,7 +5064,7 @@ public class Env {
             Map<String, String> origDynamicProperties = 
tableProperty.getOriginDynamicPartitionProperty();
             origDynamicProperties.putAll(properties);
             Map<String, String> analyzedDynamicPartition = 
DynamicPartitionUtil.analyzeDynamicPartition(
-                    origDynamicProperties, table, db);
+                    origDynamicProperties, table, db, false);
             tableProperty.modifyTableProperties(analyzedDynamicPartition);
             tableProperty.buildDynamicProperty();
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
index 59a38348f8d..278109f104d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
@@ -238,8 +238,8 @@ public class DynamicPartitionUtil {
                 null, false, true);
     }
 
-    private static void checkReplicaAllocation(ReplicaAllocation replicaAlloc, 
int hotPartitionNum,
-            Database db) throws DdlException {
+    private static void checkReplicaAllocation(ReplicaAllocation replicaAlloc, 
int hotPartitionNum)
+            throws DdlException {
         if (replicaAlloc.getTotalReplicaNum() <= 0) {
             
ErrorReport.reportDdlException(ErrorCode.ERROR_DYNAMIC_PARTITION_REPLICATION_NUM_ZERO);
         }
@@ -528,8 +528,9 @@ public class DynamicPartitionUtil {
     }
 
     // Analyze all properties to check their validation
+    // ATTN, should not throw any exception when isReplay is true.
     public static Map<String, String> analyzeDynamicPartition(Map<String, 
String> properties,
-            OlapTable olapTable, Database db) throws UserException {
+            OlapTable olapTable, Database db, boolean isReplay) throws 
UserException {
         // properties should not be empty, check properties before call this 
function
         Map<String, String> analyzedProperties = new HashMap<>();
         if (properties.containsKey(DynamicPartitionProperty.TIME_UNIT)) {
@@ -605,7 +606,6 @@ public class DynamicPartitionUtil {
         // If create_history_partition is false, history partition is not 
considered.
         // If create_history_partition is true, will pre-create history 
partition according the valid value from
         // start and history_partition_num.
-        //
         long expectCreatePartitionNum = 0;
         if (!createHistoryPartition) {
             start = 0;
@@ -621,7 +621,7 @@ public class DynamicPartitionUtil {
         }
         expectCreatePartitionNum = (long) end - start;
 
-        if (hasEnd && (expectCreatePartitionNum > 
Config.max_dynamic_partition_num)
+        if (!isReplay && hasEnd && (expectCreatePartitionNum > 
Config.max_dynamic_partition_num)
                 && 
Boolean.parseBoolean(analyzedProperties.getOrDefault(DynamicPartitionProperty.ENABLE,
 "true"))) {
             throw new DdlException("Too many dynamic partitions: "
                     + expectCreatePartitionNum + ". Limit: " + 
Config.max_dynamic_partition_num);
@@ -674,11 +674,14 @@ public class DynamicPartitionUtil {
         } else {
             replicaAlloc = olapTable.getDefaultReplicaAllocation();
         }
-        if (olapTable.getMinLoadReplicaNum() > 
replicaAlloc.getTotalReplicaNum()) {
+        if (!isReplay && olapTable.getMinLoadReplicaNum() > 
replicaAlloc.getTotalReplicaNum()) {
             throw new DdlException("Failed to check min load replica num [" + 
olapTable.getMinLoadReplicaNum()
                     + "]  <= dynamic partition replica num [" + 
replicaAlloc.getTotalReplicaNum() + "]");
         }
-        checkReplicaAllocation(replicaAlloc, hotPartitionNum, db);
+
+        if (!isReplay) {
+            checkReplicaAllocation(replicaAlloc, hotPartitionNum);
+        }
 
         if 
(properties.containsKey(DynamicPartitionProperty.RESERVED_HISTORY_PERIODS)) {
             String reservedHistoryPeriods = 
properties.get(DynamicPartitionProperty.RESERVED_HISTORY_PERIODS);
@@ -748,7 +751,7 @@ public class DynamicPartitionUtil {
             Database db) throws UserException {
         if 
(DynamicPartitionUtil.checkInputDynamicPartitionProperties(properties, 
olapTable)) {
             Map<String, String> dynamicPartitionProperties =
-                    DynamicPartitionUtil.analyzeDynamicPartition(properties, 
olapTable, db);
+                    DynamicPartitionUtil.analyzeDynamicPartition(properties, 
olapTable, db, false);
             TableProperty tableProperty = olapTable.getTableProperty();
             if (tableProperty != null) {
                 
tableProperty.modifyTableProperties(dynamicPartitionProperties);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to