diff --git a/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.java b/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.java index afee46126758..b0bf245f3a19 100644 --- a/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.java +++ b/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.java @@ -306,6 +306,9 @@ private void removeTableFromBackupImage(BackupInfo info, TableName tn, BackupSys private List getAffectedBackupSessions(BackupInfo backupInfo, TableName tn, BackupSystemTable table) throws IOException { LOG.debug("GetAffectedBackupInfos for: " + backupInfo.getBackupId() + " table=" + tn); + if (backupInfo.getState() != BackupState.COMPLETE) { + return Collections.emptyList(); + } long ts = backupInfo.getStartTs(); List list = new ArrayList<>(); List history = table.getBackupHistory(withRoot(backupInfo.getBackupRootDir())); diff --git a/hbase-backup/src/test/java/org/apache/hadoop/hbase/backup/TestIncrementalBackupWithFailures.java b/hbase-backup/src/test/java/org/apache/hadoop/hbase/backup/TestIncrementalBackupWithFailures.java index b1dec43fef54..ffb9798ddcc8 100644 --- a/hbase-backup/src/test/java/org/apache/hadoop/hbase/backup/TestIncrementalBackupWithFailures.java +++ b/hbase-backup/src/test/java/org/apache/hadoop/hbase/backup/TestIncrementalBackupWithFailures.java @@ -19,9 +19,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; +import java.util.Set; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.backup.BackupInfo.BackupState; import org.apache.hadoop.hbase.backup.impl.BackupAdminImpl; @@ -104,6 +106,25 @@ public void testIncBackupRestore() throws Exception { // #3 - incremental backup for multiple tables incrementalBackupWithFailures(); + String failedBackupId; + try (BackupSystemTable table = new BackupSystemTable(conn)) { + failedBackupId = + table.getBackupHistory(BackupInfo.withState(BackupState.FAILED)).get(0).getBackupId(); + } + + conf1.unset(TableBackupClient.BACKUP_CLIENT_IMPL_CLASS); + String backupIdIncremental = client.backupTables(createBackupRequest(BackupType.INCREMENTAL, + Lists.newArrayList(table1, table2), BACKUP_ROOT_DIR)); + assertTrue(checkSucceeded(backupIdIncremental)); + + assertEquals(1, client.deleteBackups(new String[] { failedBackupId })); + assertTrue(checkSucceeded(backupIdIncremental)); + try (BackupSystemTable table = new BackupSystemTable(conn)) { + assertNull(table.readBackupInfo(failedBackupId)); + assertEquals(Set.of(table1, table2), + Set.copyOf(table.readBackupInfo(backupIdIncremental).getTableNames())); + } + admin.close(); conn.close();