Github user tillrohrmann commented on a diff in the pull request: https://github.com/apache/flink/pull/6178#discussion_r197049400 --- Diff: flink-runtime/src/main/java/org/apache/flink/runtime/rest/handler/FileUploads.java --- @@ -45,27 +45,26 @@ @SuppressWarnings("resource") public static final FileUploads EMPTY = new FileUploads(); + public static FileUploads forDirectory(Path directory) throws IOException { + final Collection<Path> files = new ArrayList<>(4); + Preconditions.checkArgument(directory.isAbsolute(), "Path must be absolute."); + Preconditions.checkArgument(Files.isDirectory(directory), "Path must be a directory."); + + FileAdderVisitor visitor = new FileAdderVisitor(); + Files.walkFileTree(directory, visitor); + files.addAll(visitor.getContainedFiles()); + + return new FileUploads(Collections.singleton(directory), files); + } + private FileUploads() { this.directoriesToClean = Collections.emptyList(); this.uploadedFiles = Collections.emptyList(); } - public FileUploads(Collection<Path> uploadedFilesOrDirectory) throws IOException { - final Collection<Path> files = new ArrayList<>(4); - final Collection<Path> directories = new ArrayList<>(1); - for (Path fileOrDirectory : uploadedFilesOrDirectory) { - Preconditions.checkArgument(fileOrDirectory.isAbsolute(), "Path must be absolute."); - if (Files.isDirectory(fileOrDirectory)) { - directories.add(fileOrDirectory); - FileAdderVisitor visitor = new FileAdderVisitor(); - Files.walkFileTree(fileOrDirectory, visitor); - files.addAll(visitor.getContainedFiles()); - } else { - files.add(fileOrDirectory); - } - } - directoriesToClean = Collections.unmodifiableCollection(directories); - uploadedFiles = Collections.unmodifiableCollection(files); + public FileUploads(Collection<Path> directoriesToClean, Collection<Path> uploadedFiles) { + this.directoriesToClean = Preconditions.checkNotNull(directoriesToClean); + this.uploadedFiles = Preconditions.checkNotNull(uploadedFiles); --- End diff -- I know it's really nitpicking what I'm doing here, but I think it would be slightly better to let `FileUploads` only represent the upload directories and add a method `FileUploads#getFiles` which returns a `Collection<File>` which are all files being found in the upload directory. The difference is that we don't initialize `FileUploads` with it. That would effectively enforce that all files reside in the given upload directories. What we could do now is to initialize this class with directories `/web/upload/a, /web/upload/b` and files `/web/different/path/file` where the files are somewhere else located. Due to this, we not only need to delete the directories but also all files.
---