浏览代码

MAPREDUCE-7114. Make FrameworkUploader symlink ignore improvement. Contributed by Gergo Repas.

Miklos Szegedi 6 年之前
父节点
当前提交
ae055622ed

+ 1 - 1
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-uploader/src/main/java/org/apache/hadoop/mapred/uploader/FrameworkUploader.java

@@ -409,7 +409,7 @@ public class FrameworkUploader implements Runnable {
             linkPath == null ? null : linkPath.getParent();
         java.nio.file.Path normalizedLinkPath =
             linkPathParent == null ? null : linkPathParent.normalize();
-        if (normalizedLinkPath != null && jarParent.equals(
+        if (normalizedLinkPath != null && jarParent.normalize().equals(
             normalizedLinkPath)) {
           LOG.info(String.format("Ignoring same directory link %s to %s",
               jarPath.toString(), link.toString()));

+ 13 - 0
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-uploader/src/test/java/org/apache/hadoop/mapred/uploader/TestFrameworkUploader.java

@@ -440,6 +440,19 @@ public class TestFrameworkUploader {
       }
       Assert.assertTrue(uploader.checkSymlink(symlinkToTarget));
 
+      // Create a symlink to the target with /./ in the path
+      symlinkToTarget = new File(parent.getAbsolutePath() +
+            "/./symlinkToTarget2.txt");
+      try {
+        Files.createSymbolicLink(
+            Paths.get(symlinkToTarget.getAbsolutePath()),
+            Paths.get(targetFile.getAbsolutePath()));
+      } catch (UnsupportedOperationException e) {
+        // Symlinks are not supported, so ignore the test
+        Assume.assumeTrue(false);
+      }
+      Assert.assertTrue(uploader.checkSymlink(symlinkToTarget));
+
       // Create a symlink outside the current directory
       File symlinkOutside = new File(parent, "symlinkToParent.txt");
       try {