Skip to content

Commit 47cae59

Browse files
authored
branch-1.2: [improve](backup) Add config ignore_backup_tmp_partitions (#54121)
pick #45240
1 parent e55d22e commit 47cae59

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

fe/fe-common/src/main/java/org/apache/doris/common/Config.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,6 +1527,12 @@ public class Config extends ConfigBase {
15271527
@ConfField(mutable = true, masterOnly = true)
15281528
public static int max_backup_restore_job_num_per_db = 10;
15291529

1530+
/**
1531+
* whether to ignore temp partitions when backup, and not report exception.
1532+
*/
1533+
@ConfField(mutable = true, masterOnly = true)
1534+
public static boolean ignore_backup_tmp_partitions = false;
1535+
15301536
/**
15311537
* Control the default max num of the instance for a user.
15321538
*/

fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,14 +328,14 @@ private void backup(Repository repository, Database db, BackupStmt stmt) throws
328328
OlapTable olapTbl = (OlapTable) tbl;
329329
tbl.readLock();
330330
try {
331-
if (olapTbl.existTempPartitions()) {
331+
if (!Config.ignore_backup_tmp_partitions && olapTbl.existTempPartitions()) {
332332
ErrorReport.reportDdlException(ErrorCode.ERR_COMMON_ERROR,
333333
"Do not support backup table with temp partitions");
334334
}
335335

336336
PartitionNames partitionNames = tblRef.getPartitionNames();
337337
if (partitionNames != null) {
338-
if (partitionNames.isTemp()) {
338+
if (!Config.ignore_backup_tmp_partitions && partitionNames.isTemp()) {
339339
ErrorReport.reportDdlException(ErrorCode.ERR_COMMON_ERROR,
340340
"Do not support backup temp partitions");
341341
}

fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -448,10 +448,15 @@ private void prepareSnapshotTaskForOlapTableWithoutLock(OlapTable olapTable,
448448
// check backup table again
449449
if (backupTableRef.getPartitionNames() != null) {
450450
for (String partName : backupTableRef.getPartitionNames().getPartitionNames()) {
451-
Partition partition = olapTable.getPartition(partName);
451+
Partition partition = olapTable.getPartition(partName, false); // exclude tmp partitions
452452
if (partition == null) {
453-
status = new Status(ErrCode.NOT_FOUND, "partition " + partName
454-
+ " does not exist in table" + backupTableRef.getName().getTbl());
453+
if (olapTable.getPartition(partName, true) != null) {
454+
status = new Status(ErrCode.NOT_FOUND, "backup tmp partition " + partName
455+
+ " in table " + backupTableRef.getName().getTbl() + " is not supported");
456+
} else {
457+
status = new Status(ErrCode.NOT_FOUND, "partition " + partName
458+
+ " does not exist in table " + backupTableRef.getName().getTbl());
459+
}
455460
return;
456461
}
457462
}
@@ -460,10 +465,10 @@ private void prepareSnapshotTaskForOlapTableWithoutLock(OlapTable olapTable,
460465
// create snapshot tasks
461466
List<Partition> partitions = Lists.newArrayList();
462467
if (backupTableRef.getPartitionNames() == null) {
463-
partitions.addAll(olapTable.getPartitions());
468+
partitions.addAll(olapTable.getPartitions()); // no temp partitions in OlapTable.getPartitions()
464469
} else {
465470
for (String partName : backupTableRef.getPartitionNames().getPartitionNames()) {
466-
Partition partition = olapTable.getPartition(partName);
471+
Partition partition = olapTable.getPartition(partName, false); // exclude tmp partitions
467472
partitions.add(partition);
468473
}
469474
}

fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,6 +1346,14 @@ public OlapTable selectiveCopy(Collection<String> reservedPartitions, IndexExtSt
13461346
}
13471347
}
13481348

1349+
if (isForBackup) {
1350+
// drop all tmp partitions in copied table
1351+
for (Partition partition : copied.tempPartitions.getAllPartitions()) {
1352+
copied.partitionInfo.dropPartition(partition.getId());
1353+
}
1354+
copied.tempPartitions = new TempPartitions();
1355+
}
1356+
13491357
if (reservedPartitions == null || reservedPartitions.isEmpty()) {
13501358
// reserve all
13511359
return copied;

0 commit comments

Comments
 (0)