in src/main/java/com/netflix/bdp/s3mper/listing/ConsistentListingAspect.java [620:676]
public Object metastoreDelete(final ProceedingJoinPoint pjp) throws Throwable {
if(disabled) {
return pjp.proceed();
}
Configuration conf = ((FileSystem) pjp.getTarget()).getConf();
updateConfig(conf);
Path deletePath = (Path) pjp.getArgs()[0];
boolean recursive = false;
if(pjp.getArgs().length > 1) {
recursive = (Boolean) pjp.getArgs()[1];
}
try {
FileSystem s3fs = (FileSystem) pjp.getTarget();
Set<Path> filesToDelete = new HashSet<Path>();
filesToDelete.add(deletePath);
List<FileInfo> metastoreFiles = metastore.list(Collections.singletonList(deletePath));
for(FileInfo f : metastoreFiles) {
filesToDelete.add(f.getPath());
}
try {
if(s3fs.getFileStatus(deletePath).isDir() && recursive) {
filesToDelete.addAll(recursiveList(s3fs, deletePath));
}
} catch (Exception e) {
log.info("A problem occurred deleting path: " + deletePath +" "+ e.getMessage());
}
for(Path path : filesToDelete) {
metastore.delete(path);
}
} catch (TimeoutException t) {
log.error("Timeout occurred deleting metastore path: " + deletePath, t);
alertDispatcher.timeout("metastoreDelete", Collections.singletonList(deletePath));
if(failOnTimeout) {
throw t;
}
} catch (Exception e) {
log.error("Error deleting paths from metastore: " + deletePath, e);
if(shouldFail(conf)) {
throw e;
}
}
return pjp.proceed();
}