fix backup and restore failed between force_replication_allocation setted and not setted clusters (#34608)

This commit is contained in:
camby
2024-05-14 10:13:28 +08:00
committed by yiguolei
parent 6c515e0c76
commit f7801948ad
3 changed files with 13 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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));