Index: hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java (revision 1521175) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java (working copy) @@ -35,24 +35,24 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; -import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.LargeTests; +import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.TableNotFoundException; -import org.apache.hadoop.hbase.protobuf.ProtobufUtil; -import org.apache.hadoop.hbase.ipc.RpcClient; -import org.apache.hadoop.hbase.ipc.RpcServer; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.ScannerCallable; +import org.apache.hadoop.hbase.ipc.RpcClient; +import org.apache.hadoop.hbase.ipc.RpcServer; import org.apache.hadoop.hbase.master.HMaster; import org.apache.hadoop.hbase.master.snapshot.SnapshotManager; import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription; import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy; import org.apache.hadoop.hbase.regionserver.HRegionFileSystem; +import org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.FSTableDescriptors; import org.apache.hadoop.hbase.util.FSUtils; @@ -315,7 +315,8 @@ // Take a snapshot String snapshotName = "snapshotAfterMerge"; - admin.snapshot(snapshotName, STRING_TABLE_NAME, SnapshotDescription.Type.FLUSH); + SnapshotTestingUtils.snapshot(admin, snapshotName, STRING_TABLE_NAME, + SnapshotDescription.Type.FLUSH, 3); // Clone the table String cloneName = "cloneMerge"; Index: hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java (revision 1521175) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java (working copy) @@ -246,6 +246,27 @@ } } + /* + * Take snapshot with maximum of numTries attempts, ignoring CorruptedSnapshotException + * except for the last CorruptedSnapshotException + */ + public static void snapshot(HBaseAdmin admin, + final String snapshotName, final String tableName, + SnapshotDescription.Type type, int numTries) throws IOException { + int tries = 0; + CorruptedSnapshotException lastEx = null; + while (tries++ < numTries) { + try { + admin.snapshot(snapshotName, tableName, type); + return; + } catch (CorruptedSnapshotException cse) { + LOG.warn("Got CorruptedSnapshotException", cse); + lastEx = cse; + } + } + throw lastEx; + } + public static void cleanupSnapshot(HBaseAdmin admin, byte[] tableName) throws IOException { SnapshotTestingUtils.cleanupSnapshot(admin, Bytes.toString(tableName));