This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 967981118e78484dcdc92196f72b7783ae77840c Merge: 69d5504 4ae6e5f Author: Michael Blow <[email protected]> AuthorDate: Tue Feb 1 19:25:44 2022 -0500 Merge branch 'gerrit/stabilization-02ea049d7a' Change-Id: I92fc9437db11351d904644bfed9b56b825d72e48 .../PersistentLocalResourceRepository.java | 48 ++++------------------ .../java/org/apache/hyracks/api/util/IoUtil.java | 37 +++++++++++++++++ 2 files changed, 46 insertions(+), 39 deletions(-) diff --cc hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/IoUtil.java index 6ad53ab,825fdd6..2887721 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/IoUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/IoUtil.java @@@ -19,13 -19,16 +19,18 @@@ package org.apache.hyracks.api.util; import java.io.File; + import java.io.FileFilter; import java.io.FileNotFoundException; + import java.io.FilenameFilter; import java.io.IOException; +import java.nio.channels.FileChannel; import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; + import java.util.ArrayList; + import java.util.Collection; + import java.util.Objects; import org.apache.commons.io.FileUtils; import org.apache.hyracks.api.exceptions.ErrorCode; @@@ -134,22 -137,35 +139,54 @@@ public class IoUtil return files; } + /** + * Gets a collection of files matching {@code filter} by searching {@code root} directory and + * all of its subdirectories + * + * @param root + * @param filter + * @return a collection of matching files + */ + public static Collection<File> getMatchingFiles(Path root, FilenameFilter filter) { + if (!Files.isDirectory(root)) { + throw new IllegalArgumentException("Parameter 'root' is not a directory: " + root); + } + Objects.requireNonNull(filter); + Collection<File> files = new ArrayList<>(); + FileFilter dirOrMatchingFileFilter = file -> file.isDirectory() || filter.accept(file, file.getName()); + collectDirFiles(root.toFile(), dirOrMatchingFileFilter, files); + return files; + } + + private static void collectDirFiles(File dir, FileFilter filter, Collection<File> files) { + File[] matchingFiles = dir.listFiles(filter); + if (matchingFiles != null) { + for (File file : matchingFiles) { + if (file.isDirectory()) { + collectDirFiles(file, filter, files); + } else { + files.add(file); + } + } + } + } ++ + public static void flushDirectory(File directory) throws IOException { + flushDirectory(directory.toPath()); + } + + public static void flushDirectory(Path path) throws IOException { + if (!Files.isDirectory(path)) { + throw new IOException("Not a directory: " + path); + } + if (Files.getFileStore(path).supportsFileAttributeView("posix")) { + try (FileChannel ch = FileChannel.open(path, StandardOpenOption.READ)) { + ch.force(true); + } + } else { + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Unable to flush directory " + path); + } + } + } }
