diff --git a/server/src/main/java/org/opensearch/index/store/CompositeDirectory.java b/server/src/main/java/org/opensearch/index/store/CompositeDirectory.java index cb95c31941a0e..6da50e1e0ed86 100644 --- a/server/src/main/java/org/opensearch/index/store/CompositeDirectory.java +++ b/server/src/main/java/org/opensearch/index/store/CompositeDirectory.java @@ -32,6 +32,7 @@ import java.io.FileNotFoundException; import java.io.IOException; +import java.nio.file.AccessDeniedException; import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; @@ -188,7 +189,18 @@ not present in remote as well (due to metadata refresh). In such scenarios listA logger.debug("The file [{}] exists in local but not part of FileCache, deleting it from local", blockFile); localDirectory.deleteFile(blockFile); } else { - fileCache.remove(getFilePath(blockFile)); + // here the file is to be deleted both from FileCache and the local directory. + Path blockFilePath = getFilePath(blockFile); + try { + fileCache.remove(blockFilePath); + }catch(Exception e){ + if (e.getCause() instanceof AccessDeniedException) { + localDirectory.deleteFile(blockFile); + } else { + logger.error("Exception while removing file [{}] from FileCache. Exception:", blockFilePath, e); + throw e; + } + } } } }