Skip to content

Commit

Permalink
Fix IndexShardTests.testRestoreShardFromRemoteStore on Windows.
Browse files Browse the repository at this point in the history
Signed-off-by: Marc Handalian <[email protected]>
  • Loading branch information
mch2 committed Nov 29, 2022
1 parent 487a7c1 commit fb403b6
Showing 1 changed file with 13 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2764,8 +2764,21 @@ public void testRestoreShardFromRemoteStore() throws IOException {

// Delete files in store directory to restore from remote directory
Directory storeDirectory = target.store().directory();

for (String file : storeDirectory.listAll()) {
storeDirectory.deleteFile(file);
// Windows has buggy File delete logic where AccessDeniedExceptions
// are thrown when there is an open file handle on a particular file. FSDirectory attempts to resolve this with hacks by
// swallowing the exceptions and moving the file to a pending delete state
// to retry in the future while being filtered from listAll invocations.
// However, this logic is also buggy and after the first delete attempt we are left in a state where the file is still on disk
// and not pending delete.
// A second attempt to delete the file will properly move it to pending deletion, and be filtered from listAll.
if (Arrays.asList(storeDirectory.listAll()).contains(file) && storeDirectory.getPendingDeletions().contains(file) == false) {
logger.info("File {} was not deleted and is not pending delete, attempting delete again...", file);
storeDirectory.deleteFile(file);
assertTrue(storeDirectory.getPendingDeletions().contains(file));
}
}

assertEquals(0, storeDirectory.listAll().length);
Expand Down

0 comments on commit fb403b6

Please sign in to comment.