Details
Description
When TestStore#init() was called twice in TestStore#testDeleteExpiredStoreFiles, it did not use different base directory for each call (other tests in the same test suite do). If the first call did not release the handle of WAL files fast enough, the second init() call would fail.
This is constantly seen in Windows environment:
java.io.IOException: Target WAL already exists within directory file:/C:/hbase/hbase-server/target/test-data/f39ecdde-1d04-4332-93c7-4c8df1e08e67/TestStoretestDeleteExpiredStoreFiles/WALs/testDeleteExpiredStoreFiles at org.apache.hadoop.hbase.regionserver.wal.FSHLog.<init>(FSHLog.java:525) at org.apache.hadoop.hbase.wal.DefaultWALProvider.init(DefaultWALProvider.java:97) at org.apache.hadoop.hbase.wal.WALFactory.getProvider(WALFactory.java:147) at org.apache.hadoop.hbase.wal.WALFactory.<init>(WALFactory.java:179) at org.apache.hadoop.hbase.regionserver.TestStore.init(TestStore.java:185) at org.apache.hadoop.hbase.regionserver.TestStore.init(TestStore.java:162) at org.apache.hadoop.hbase.regionserver.TestStore.testDeleteExpiredStoreFiles(TestStore.java:307) at org.apache.hadoop.hbase.regionserver.TestStore.testDeleteExpiredStoreFiles(TestStore.java:286)
The fix is trivial: just like other tests in the same test suite, use different base directory for multiple init() calls in the same test.