mirror of https://github.com/apache/kafka.git
KAFKA-19451: fix flaky test RemoteIndexCacheTest.testCacheEntryIsDeletedOnRemoval() (#20085)
**Problem Description** In the `RemoteIndexCache.cleanup()` method, the asynchronous invocation of `index.deleteIfExists()` may cause a conflict. When the `getIndexFileFromRemoteCacheDir()` method is executed, it utilizes `Files.walk()` to traverse all files in the directory path. If `index.deleteIfExists()` is triggered during this traversal, a `NoSuchFileException` will be thrown. **Solution** To resolve this issue, ensure that `index.deleteIfExists()` has been fully executed before invoking `getIndexFileFromRemoteCacheDir()`. Reviewers: Jun Rao <junrao@gmail.com>
This commit is contained in:
parent
a61a37f7dd
commit
6437135bc0
|
@ -331,6 +331,18 @@ public class RemoteIndexCacheTest {
|
||||||
verify(cacheEntry.offsetIndex()).renameTo(any(File.class));
|
verify(cacheEntry.offsetIndex()).renameTo(any(File.class));
|
||||||
verify(cacheEntry.txnIndex()).renameTo(any(File.class));
|
verify(cacheEntry.txnIndex()).renameTo(any(File.class));
|
||||||
|
|
||||||
|
// wait until the delete method is invoked
|
||||||
|
TestUtils.waitForCondition(() -> {
|
||||||
|
try {
|
||||||
|
verify(cacheEntry.timeIndex()).deleteIfExists();
|
||||||
|
verify(cacheEntry.offsetIndex()).deleteIfExists();
|
||||||
|
verify(cacheEntry.txnIndex()).deleteIfExists();
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}, "Failed to delete index file");
|
||||||
|
|
||||||
// verify no index files on disk
|
// verify no index files on disk
|
||||||
assertFalse(getIndexFileFromRemoteCacheDir(cache, LogFileUtils.INDEX_FILE_SUFFIX).isPresent(),
|
assertFalse(getIndexFileFromRemoteCacheDir(cache, LogFileUtils.INDEX_FILE_SUFFIX).isPresent(),
|
||||||
"Offset index file should not be present on disk at " + tpDir.toPath());
|
"Offset index file should not be present on disk at " + tpDir.toPath());
|
||||||
|
|
Loading…
Reference in New Issue