You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by vi...@apache.org on 2014/11/12 04:47:31 UTC

[09/25] hadoop git commit: Fix broken download of directories

Fix broken download of directories

(cherry picked from commit 745c9a01243b8eefc72d89d1164d7d010b80983b)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/b31b4bf0
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/b31b4bf0
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/b31b4bf0

Branch: refs/heads/HDFS-EC
Commit: b31b4bf029acdceaf6723e40ee29224bb5d38895
Parents: e76faeb
Author: Karthik Kambatla <ka...@apache.org>
Authored: Wed Nov 5 10:12:56 2014 -0800
Committer: Arun C. Murthy <ac...@apache.org>
Committed: Sun Nov 9 19:03:49 2014 -0800

----------------------------------------------------------------------
 .../org/apache/hadoop/yarn/util/FSDownload.java    | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/b31b4bf0/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/FSDownload.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/FSDownload.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/FSDownload.java
index fb37701..2737cce 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/FSDownload.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/FSDownload.java
@@ -1,4 +1,4 @@
-/**
+ /**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
@@ -28,6 +28,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.regex.Pattern;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate;
@@ -389,17 +390,22 @@ public class FSDownload implements Callable<Path> {
    */
   private void changePermissions(FileSystem fs, final Path path)
       throws IOException, InterruptedException {
-    FileStatus fStatus = fs.getFileStatus(path);
+    File f = new File(path.toUri());
+    if (FileUtils.isSymlink(f)) {
+      // avoid following symlinks when changing permissions
+      return;
+    }
+    boolean isDir = f.isDirectory();
     FsPermission perm = cachePerms;
     // set public perms as 755 or 555 based on dir or file
     if (resource.getVisibility() == LocalResourceVisibility.PUBLIC) {
-      perm = fStatus.isDirectory() ? PUBLIC_DIR_PERMS : PUBLIC_FILE_PERMS;
+      perm = isDir ? PUBLIC_DIR_PERMS : PUBLIC_FILE_PERMS;
     }
     // set private perms as 700 or 500
     else {
       // PRIVATE:
       // APPLICATION:
-      perm = fStatus.isDirectory() ? PRIVATE_DIR_PERMS : PRIVATE_FILE_PERMS;
+      perm = isDir ? PRIVATE_DIR_PERMS : PRIVATE_FILE_PERMS;
     }
     LOG.debug("Changing permissions for path " + path
         + " to perm " + perm);
@@ -415,8 +421,7 @@ public class FSDownload implements Callable<Path> {
         }
       });
     }
-    if (fStatus.isDirectory()
-        && !fStatus.isSymlink()) {
+    if (isDir) {
       FileStatus[] statuses = fs.listStatus(path);
       for (FileStatus status : statuses) {
         changePermissions(fs, status.getPath());