From 0140b47ac3c1b545fb17a99052c0abf4efa03d97 Mon Sep 17 00:00:00 2001 From: camby Date: Tue, 14 May 2024 10:18:06 +0800 Subject: [PATCH] fix backup and restore failed between force_replication_allocation setted and not setted clusters (#34624) --- .../src/main/java/org/apache/doris/analysis/RestoreStmt.java | 5 +++++ .../src/main/java/org/apache/doris/backup/BackupJobInfo.java | 4 ++++ .../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 b2932c8397dea2..5329cd5a9ec869 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 @@ 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; @@ -164,6 +165,10 @@ public void analyzeProperties() throws AnalysisException { 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 85f801c8680021..b918cddef56691 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.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 tabletBeMap = Maps.newHashMap(); @@ -597,6 +600,7 @@ public static BackupJobInfo fromCatalog(long backupTime, String label, String db 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(); jobInfo.tableCommitSeqMap = tableCommitSeqMap; Collection tbls = backupMeta.getTables().values(); 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 e7e527a7612352..563a3dbe2f6d90 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 RestoreJob(String label, String backupTs, long dbId, String dbName, Backu 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));