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:
Lan Ding 2025-07-15 03:01:50 +08:00 committed by GitHub
parent a61a37f7dd
commit 6437135bc0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 12 additions and 0 deletions

View File

@ -331,6 +331,18 @@ public class RemoteIndexCacheTest {
verify(cacheEntry.offsetIndex()).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
assertFalse(getIndexFileFromRemoteCacheDir(cache, LogFileUtils.INDEX_FILE_SUFFIX).isPresent(),
"Offset index file should not be present on disk at " + tpDir.toPath());