[
https://issues.apache.org/jira/browse/FLINK-15244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gary Yao closed FLINK-15244.
----------------------------
Resolution: Fixed
1.10: 337f1cc534aac7f2806465687eeefb4d4984e3f3
master: 3c8a3ac0e7c5784a125d2bce3d2058fd5d1066a8
> FileUtils#deleteDirectoryQuietly will delete files in the symbolic link which
> point to a directory
> --------------------------------------------------------------------------------------------------
>
> Key: FLINK-15244
> URL: https://issues.apache.org/jira/browse/FLINK-15244
> Project: Flink
> Issue Type: Bug
> Components: FileSystems
> Affects Versions: 1.10.0
> Reporter: Wei Zhong
> Assignee: Wei Zhong
> Priority: Blocker
> Labels: pull-request-available
> Fix For: 1.10.0
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> _FileUtils.deleteDirectoryQuietly_ will delete files in symbolic link which
> point to a directory. Currently the PyFlink uses this method to delete
> temporary folders generated during the job submission and python UDF
> execution, which contains the symbolic links which may point to users'
> libraries and directories in distributed cache.
> To resolve this problem we need to check if the directory is symbolic link in
> _FileUtils.deleteDirectoryInternal:_
> {code:java}
> private static void deleteDirectoryInternal(File directory) throws
> IOException {
> // **We should check if the directory is symbolic link.**
> if (directory.isDirectory()) {
> // directory exists and is a directory
> // empty the directory first
> try {
> cleanDirectoryInternal(directory);
> }
> catch (FileNotFoundException ignored) {
> // someone concurrently deleted the directory, nothing to do for us
> return;
> }
> // delete the directory. this fails if the directory is not empty,
> meaning
> // if new files got concurrently created. we want to fail then.
> // if someone else deleted the empty directory concurrently, we don't
> mind
> // the result is the same for us, after all
> Files.deleteIfExists(directory.toPath());
> }
> else if (directory.exists()) {
> // exists but is file, not directory
> // either an error from the caller, or concurrently a file got created
> throw new IOException(directory + " is not a directory");
> }
> // else: does not exist, which is okay (as if deleted)
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)