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();
 

Reply via email to