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.
---