diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 0a0fdf4..61a5395 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -2613,26 +2613,27 @@ public class HMaster extends HRegionServer implements MasterServices { } @Override - public Pair backupTables(final BackupType type, + public Pair backupTables(BackupType type, List tableList, final String targetRootDir, final int workers, final long bandwidth) throws IOException { long procId; String backupId = BackupRestoreConstants.BACKUPID_PREFIX + EnvironmentEdgeManager.currentTime(); + Set incrTableSet = null; if (type == BackupType.INCREMENTAL) { - Set incrTableSet = null; try (BackupSystemTable table = new BackupSystemTable(getConnection())) { incrTableSet = table.getIncrementalBackupTableSet(targetRootDir); } - if (incrTableSet.isEmpty()) { - LOG.warn("Incremental backup table set contains no table.\n" - + "Use 'backup create full' or 'backup stop' to \n " - + "change the tables covered by incremental backup."); - throw new DoNotRetryIOException("No table covered by incremental backup."); + tableList.removeAll(incrTableSet); + if (!tableList.isEmpty()) { + LOG.warn("Some tables (" + tableList.get(0) + ") hasn't gone through full backup"); + LOG.warn("Changing backup type to Full for " + targetRootDir); + type = BackupType.FULL; + incrTableSet.addAll(tableList); + } else { + LOG.info("Incremental backup for the following table set: " + incrTableSet); } - - LOG.info("Incremental backup for the following table set: " + incrTableSet); tableList = Lists.newArrayList(incrTableSet); } if (tableList != null && !tableList.isEmpty()) { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestIncrementalBackup.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestIncrementalBackup.java index 0f35026..40348ed 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestIncrementalBackup.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestIncrementalBackup.java @@ -55,7 +55,7 @@ public class TestIncrementalBackup extends TestBackupBase { admin = (HBaseAdmin) conn.getAdmin(); BackupRequest request = new BackupRequest(); - request.setBackupType(BackupType.FULL).setTableList(tables).setTargetRootDir(BACKUP_ROOT_DIR); + request.setBackupType(BackupType.INCREMENTAL).setTableList(tables).setTargetRootDir(BACKUP_ROOT_DIR); String backupIdFull = admin.getBackupAdmin().backupTables(request); assertTrue(checkSucceeded(backupIdFull));