This is an automated email from the ASF dual-hosted git repository. zhijiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push: new 858de06 [FLINK-18612][fs] Fix the relative path issue in LocalFileSystem 858de06 is described below commit 858de0640aef525e7eeb2bbd80f3f489a77a0ac4 Author: Yun Gao <gaoyunhen...@gmail.com> AuthorDate: Mon Jul 20 20:27:09 2020 +0800 [FLINK-18612][fs] Fix the relative path issue in LocalFileSystem This closes #12918 --- .../apache/flink/core/fs/local/LocalFileSystem.java | 17 +++++++++++++++-- .../flink/core/fs/local/LocalFileSystemTest.java | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java b/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java index 1a748f6..32ae50b 100644 --- a/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java +++ b/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java @@ -52,6 +52,7 @@ import java.nio.file.NoSuchFileException; import java.nio.file.StandardCopyOption; import static org.apache.flink.util.Preconditions.checkNotNull; +import static org.apache.flink.util.Preconditions.checkState; /** * The class {@code LocalFileSystem} is an implementation of the {@link FileSystem} interface @@ -307,10 +308,22 @@ public class LocalFileSystem extends FileSystem { // ------------------------------------------------------------------------ /** - * Converts the given Path to a File for this file system. + * Converts the given Path to a File for this file system. If the path is empty, + * we will return <tt>new File(".")</tt> instead of <tt>new File("")</tt>, since + * the latter returns <tt>false</tt> for <tt>isDirectory</tt> judgement (See issue + * https://issues.apache.org/jira/browse/FLINK-18612). */ public File pathToFile(Path path) { - return new File(path.getPath()); + String localPath = path.getPath(); + checkState( + localPath != null, + "Cannot convert a null path to File"); + + if (localPath.length() == 0) { + return new File("."); + } + + return new File(localPath); } // ------------------------------------------------------------------------ diff --git a/flink-core/src/test/java/org/apache/flink/core/fs/local/LocalFileSystemTest.java b/flink-core/src/test/java/org/apache/flink/core/fs/local/LocalFileSystemTest.java index 12f1476..5dc6ee4 100644 --- a/flink-core/src/test/java/org/apache/flink/core/fs/local/LocalFileSystemTest.java +++ b/flink-core/src/test/java/org/apache/flink/core/fs/local/LocalFileSystemTest.java @@ -29,6 +29,7 @@ import org.apache.flink.util.ExecutorUtils; import org.apache.flink.util.FileUtils; import org.apache.flink.util.TestLogger; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.Assume; import org.junit.Rule; import org.junit.Test; @@ -370,6 +371,23 @@ public class LocalFileSystemTest extends TestLogger { } } + /** + * This test verifies the issue https://issues.apache.org/jira/browse/FLINK-18612. + */ + @Test + public void testCreatingFileInCurrentDirectoryWithRelativePath() throws IOException { + FileSystem fs = FileSystem.getLocalFileSystem(); + + Path filePath = new Path("local_fs_test_" + RandomStringUtils.randomAlphanumeric(16)); + try (FSDataOutputStream outputStream = fs.create(filePath, WriteMode.OVERWRITE)) { + // Do nothing. + } finally { + for (int i = 0; i < 10 && fs.exists(filePath); ++i) { + fs.delete(filePath, true); + } + } + } + private Collection<File> createTargetDirectories(File root, int directoryDepth, int numberDirectories) { final StringBuilder stringBuilder = new StringBuilder();