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

commit f7801948ad81d968f77d7be9835d64d8fedc5cca
Author: camby <camby...@tencent.com>
AuthorDate: Tue May 14 10:13:28 2024 +0800

    fix backup and restore failed between force_replication_allocation setted 
and not setted clusters (#34608)
---
 fe/fe-core/src/main/java/org/apache/doris/analysis/RestoreStmt.java | 5 +++++
 fe/fe-core/src/main/java/org/apache/doris/backup/BackupJobInfo.java | 4 ++++
 fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java    | 4 ++++
 3 files changed, 13 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/RestoreStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/RestoreStmt.java
index 9f5f6ee7253..21e417631dd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/RestoreStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/RestoreStmt.java
@@ -20,6 +20,7 @@ package org.apache.doris.analysis;
 import org.apache.doris.backup.Repository;
 import org.apache.doris.catalog.ReplicaAllocation;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.Config;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.UserException;
@@ -168,6 +169,10 @@ public class RestoreStmt extends AbstractBackupStmt {
                 ErrorReport.reportAnalysisException(ErrorCode.ERR_COMMON_ERROR,
                         "Invalid reserve_replica value: " + 
copiedProperties.get(PROP_RESERVE_REPLICA));
             }
+            // force set reserveReplica to false, do not keep the origin 
allocation
+            if (reserveReplica && 
!Config.force_olap_table_replication_allocation.isEmpty()) {
+                reserveReplica = false;
+            }
             copiedProperties.remove(PROP_RESERVE_REPLICA);
         }
         // reserve dynamic partition enable
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJobInfo.java 
b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJobInfo.java
index 7108315cee7..aa127961e3d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJobInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJobInfo.java
@@ -32,6 +32,7 @@ import org.apache.doris.catalog.Table;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.catalog.Tablet;
 import org.apache.doris.catalog.View;
+import org.apache.doris.common.Config;
 import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.Version;
 import org.apache.doris.common.io.Text;
@@ -99,6 +100,8 @@ public class BackupJobInfo implements Writable {
     public int minorVersion;
     @SerializedName("patch_version")
     public int patchVersion;
+    @SerializedName("is_force_replication_allocation")
+    public boolean isForceReplicationAllocation;
 
     @SerializedName("tablet_be_map")
     public Map<Long, Long> tabletBeMap = Maps.newHashMap();
@@ -607,6 +610,7 @@ public class BackupJobInfo implements Writable {
         jobInfo.majorVersion = Version.DORIS_BUILD_VERSION_MAJOR;
         jobInfo.minorVersion = Version.DORIS_BUILD_VERSION_MINOR;
         jobInfo.patchVersion = Version.DORIS_BUILD_VERSION_PATCH;
+        jobInfo.isForceReplicationAllocation = 
!Config.force_olap_table_replication_allocation.isEmpty();
 
         Collection<Table> tbls = backupMeta.getTables().values();
         // tbls
diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java 
b/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
index 5eb4950466f..2af0242db33 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
@@ -189,6 +189,10 @@ public class RestoreJob extends AbstractJob {
         this.state = RestoreJobState.PENDING;
         this.metaVersion = metaVersion;
         this.reserveReplica = reserveReplica;
+        // if backup snapshot is come from a cluster with force replication 
allocation, ignore the origin allocation
+        if (jobInfo.isForceReplicationAllocation) {
+            this.reserveReplica = false;
+        }
         this.reserveDynamicPartitionEnable = reserveDynamicPartitionEnable;
         this.isBeingSynced = isBeingSynced;
         properties.put(PROP_RESERVE_REPLICA, String.valueOf(reserveReplica));


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

Reply via email to