HBASE-26861 Fix flaky TestSnapshotFromMaster.testSnapshotHFileArchiving (#4242)

Signed-off-by: Xiaolin Ha <haxiaolin@apache.org>
(cherry picked from commit 520ad638d9)
This commit is contained in:
Duo Zhang 2022-03-18 23:28:30 +08:00
parent 2b2308afc7
commit 7acfbc0bea
1 changed files with 21 additions and 7 deletions

View File

@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.Waiter;
import org.apache.hadoop.hbase.Waiter.ExplainingPredicate;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Put;
@ -488,14 +489,27 @@ public class TestSnapshotFromMaster {
}
}
// run the cleaner again
LOG.debug("Running hfile cleaners");
ensureHFileCleanersRun();
LOG.info("After delete snapshot cleaners run File-System state");
CommonFSUtils.logFileSystemState(fs, rootDir, LOG);
// In SnapshotFileCache, we use lock.tryLock to avoid being blocked by snapshot operation, if we
// fail to get the lock, we will not archive any files. This is not a big deal in real world, so
// here we will try to run the cleaner multiple times to make the test more stable.
// See HBASE-26861
UTIL.waitFor(60000, 1000, new ExplainingPredicate<Exception>() {
archives = getHFiles(archiveDir, fs, TABLE_NAME);
assertEquals("Still have some hfiles in the archive, when their snapshot has been deleted.", 0,
archives.size());
@Override
public boolean evaluate() throws Exception {
LOG.debug("Running hfile cleaners");
ensureHFileCleanersRun();
LOG.info("After delete snapshot cleaners run File-System state");
CommonFSUtils.logFileSystemState(fs, rootDir, LOG);
return getHFiles(archiveDir, fs, TABLE_NAME).isEmpty();
}
@Override
public String explainFailure() throws Exception {
return "Still have some hfiles in the archive, when their snapshot has been deleted: "
+ getHFiles(archiveDir, fs, TABLE_NAME);
}
});
}
/**