diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java index 1d730db184..a91c2e12a5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java +++ b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java @@ -376,17 +376,29 @@ public class BackupJob extends AbstractJob { switch (tbl.getType()) { case OLAP: OlapTable olapTable = (OlapTable) tbl; - checkOlapTable(olapTable, tableRef); - if (getContent() == BackupContent.ALL) { - prepareSnapshotTaskForOlapTableWithoutLock(db, (OlapTable) tbl, tableRef, batchTask); + if (!checkOlapTable(olapTable, tableRef).ok()) { + return; + } + if (getContent() == BackupContent.ALL) { + if (!prepareSnapshotTaskForOlapTableWithoutLock( + db, (OlapTable) tbl, tableRef, batchTask).ok()) { + return; + } + } + if (!prepareBackupMetaForOlapTableWithoutLock(tableRef, olapTable, copiedTables).ok()) { + return; } - prepareBackupMetaForOlapTableWithoutLock(tableRef, olapTable, copiedTables); break; case VIEW: - prepareBackupMetaForViewWithoutLock((View) tbl, copiedTables); + if (!prepareBackupMetaForViewWithoutLock((View) tbl, copiedTables).ok()) { + return; + } break; case ODBC: - prepareBackupMetaForOdbcTableWithoutLock((OdbcTable) tbl, copiedTables, copiedResources); + if (!prepareBackupMetaForOdbcTableWithoutLock( + (OdbcTable) tbl, copiedTables, copiedResources).ok()) { + return; + } break; default: status = new Status(ErrCode.COMMON_ERROR, @@ -413,7 +425,7 @@ public class BackupJob extends AbstractJob { LOG.info("finished to send snapshot tasks to backend. {}", this); } - private void checkOlapTable(OlapTable olapTable, TableRef backupTableRef) { + private Status checkOlapTable(OlapTable olapTable, TableRef backupTableRef) { olapTable.readLock(); try { // check backup table again @@ -423,16 +435,17 @@ public class BackupJob extends AbstractJob { if (partition == null) { status = new Status(ErrCode.NOT_FOUND, "partition " + partName + " does not exist in table" + backupTableRef.getName().getTbl()); - return; + return status; } } } } finally { olapTable.readUnlock(); } + return Status.OK; } - private void prepareSnapshotTaskForOlapTableWithoutLock(Database db, OlapTable olapTable, + private Status prepareSnapshotTaskForOlapTableWithoutLock(Database db, OlapTable olapTable, TableRef backupTableRef, AgentBatchTask batchTask) { // Add barrier editolog for barrier commit seq long dbId = db.getId(); @@ -452,7 +465,7 @@ public class BackupJob extends AbstractJob { if (partition == null) { status = new Status(ErrCode.NOT_FOUND, "partition " + partName + " does not exist in table" + backupTableRef.getName().getTbl()); - return; + return status; } } } @@ -481,7 +494,7 @@ public class BackupJob extends AbstractJob { status = new Status(ErrCode.COMMON_ERROR, "failed to choose replica to make snapshot for tablet " + tablet.getId() + ". visible version: " + visibleVersion); - return; + return status; } SnapshotTask task = new SnapshotTask(null, replica.getBackendId(), tablet.getId(), jobId, dbId, olapTable.getId(), partition.getId(), @@ -496,6 +509,7 @@ public class BackupJob extends AbstractJob { LOG.info("snapshot for partition {}, version: {}", partition.getId(), visibleVersion); } + return Status.OK; } private void checkResourceForOdbcTable(OdbcTable odbcTable) { @@ -511,7 +525,7 @@ public class BackupJob extends AbstractJob { } } - private void prepareBackupMetaForOlapTableWithoutLock(TableRef tableRef, OlapTable olapTable, + private Status prepareBackupMetaForOlapTableWithoutLock(TableRef tableRef, OlapTable olapTable, List