HADOOP-15629. Missing trimming in readlink in case of protocol. Contrbuted by Giovanni Matteo Fumarola
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java
index bf3feb5..ab3d913 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java
@@ -30,7 +30,10 @@
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
+import java.net.MalformedURLException;
import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.nio.file.AccessDeniedException;
@@ -203,18 +206,26 @@
return "";
}
- if (Files.isSymbolicLink(f.toPath())) {
+ // This will make sure we remove the protocol as file://
+ java.nio.file.Path pathFile;
+ try {
+ pathFile = Paths.get(new URL(f.toString()).toURI());
+ } catch (MalformedURLException | URISyntaxException e) {
+ pathFile = f.toPath();
+ }
+
+ if (Files.isSymbolicLink(pathFile)) {
java.nio.file.Path p = null;
try {
- p = Files.readSymbolicLink(f.toPath());
+ p = Files.readSymbolicLink(pathFile);
} catch (Exception e) {
- LOG.warn("Exception while reading the symbolic link "
- + f.getAbsolutePath() + ". Exception= " + e.getMessage());
+ LOG.warn("Exception while reading the symbolic link {}. Exception= {}",
+ f, e.getMessage());
return "";
}
return p.toAbsolutePath().toString();
}
- LOG.warn("The file " + f.getAbsolutePath() + " is not a symbolic link.");
+ LOG.warn("The file {} is not a symbolic link.", f);
return "";
}