You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by an...@apache.org on 2019/01/03 20:23:15 UTC

[oozie] branch master updated: OOZIE-3194 [tools] Oozie should set proper permissions to sharelib after upload (dionusos via andras.piros)

This is an automated email from the ASF dual-hosted git repository.

andras pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/oozie.git


The following commit(s) were added to refs/heads/master by this push:
     new 7e329cb  OOZIE-3194 [tools] Oozie should set proper permissions to sharelib after upload (dionusos via andras.piros)
7e329cb is described below

commit 7e329cb11782634c1bd6f8ec32a21f4746af3bd3
Author: Andras Piros <an...@cloudera.com>
AuthorDate: Thu Jan 3 21:22:57 2019 +0100

    OOZIE-3194 [tools] Oozie should set proper permissions to sharelib after upload (dionusos via andras.piros)
---
 release-log.txt                                    |  1 +
 .../org/apache/oozie/tools/OozieSharelibCLI.java   | 29 ++++++++++++++++++++++
 .../tools/IntegrationTestOozieSharelibCLI.java     | 16 +++++++++++-
 3 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/release-log.txt b/release-log.txt
index d5fac27..68f21bc 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 5.2.0 release (trunk - unreleased)
 
+OOZIE-3194 [tools] Oozie should set proper permissions to sharelib after upload (dionusos via andras.piros)
 OOZIE-3341 [docs] Fix difference between command line help and documentation (asalamon74 via andras.piros)
 OOZIE-3400 [core] Fix PurgeService sub-sub-workflow checking (asalamon74 via andras.piros)
 OOZIE-3410 [build] Deploy fluent-job and oozie-sharelib-git artifacts (andras.piros via gezapeti)
diff --git a/tools/src/main/java/org/apache/oozie/tools/OozieSharelibCLI.java b/tools/src/main/java/org/apache/oozie/tools/OozieSharelibCLI.java
index 312770c..6c1195c 100644
--- a/tools/src/main/java/org/apache/oozie/tools/OozieSharelibCLI.java
+++ b/tools/src/main/java/org/apache/oozie/tools/OozieSharelibCLI.java
@@ -49,9 +49,11 @@ import org.apache.commons.io.filefilter.WildcardFileFilter;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
 import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.FileUtil;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.hdfs.DFSConfigKeys;
 import org.apache.oozie.cli.CLIParser;
 import org.apache.oozie.service.HadoopAccessorService;
@@ -91,6 +93,9 @@ public class OozieSharelibCLI {
     public static final String EXTRALIBS_PATH_SEPARATOR = ",";
     public static final String EXTRALIBS_SHARELIB_KEY_VALUE_SEPARATOR = "=";
 
+    public static final String DIRECTORY_PERMISSION = "755";
+    public static final String FILE_PERMISSION = "544";
+
     private boolean used;
 
     public static void main(String[] args) throws Exception{
@@ -219,6 +224,10 @@ public class OozieSharelibCLI {
             copyToSharelib(threadPoolSize, srcFile, srcPath, dstPath, fs);
             copyExtraLibs(threadPoolSize, extraLibs, dstPath, fs);
 
+            if (sharelibAction.equals(CREATE_CMD) || sharelibAction.equals(UPGRADE_CMD)) {
+                applySharelibPermission(fs, dstPath);
+            }
+
             services.destroy();
             FileUtils.deleteDirectory(temp);
 
@@ -418,6 +427,26 @@ public class OozieSharelibCLI {
         }
     }
 
+    private void applySharelibPermission(FileSystem fs, Path dstPath) throws IOException {
+        for(FileStatus stat: fs.listStatus(dstPath)) {
+            if(stat.isDirectory()) {
+                applyDirectoryPermission(fs, stat);
+                applySharelibPermission(fs, stat.getPath());
+            } else {
+                applyFilePermission(fs, stat);
+            }
+        }
+    }
+
+    private void applyDirectoryPermission(FileSystem fs, FileStatus stat) throws IOException {
+        fs.setPermission(stat.getPath(), new FsPermission(DIRECTORY_PERMISSION));
+    }
+
+
+    private void applyFilePermission(FileSystem fs, FileStatus stat) throws IOException {
+        fs.setPermission(stat.getPath(), new FsPermission(FILE_PERMISSION));
+    }
+
     @VisibleForTesting
     static final class ConcurrentCopyFromLocal {
 
diff --git a/tools/src/test/java/org/apache/oozie/tools/IntegrationTestOozieSharelibCLI.java b/tools/src/test/java/org/apache/oozie/tools/IntegrationTestOozieSharelibCLI.java
index 12cb665..f9b2555 100644
--- a/tools/src/test/java/org/apache/oozie/tools/IntegrationTestOozieSharelibCLI.java
+++ b/tools/src/test/java/org/apache/oozie/tools/IntegrationTestOozieSharelibCLI.java
@@ -22,6 +22,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.oozie.action.hadoop.security.LauncherSecurityManager;
 import org.apache.oozie.service.ConfigurationService;
 import org.apache.oozie.service.HadoopAccessorService;
@@ -40,7 +41,6 @@ import java.util.List;
 
 import static org.apache.oozie.tools.OozieSharelibCLI.EXTRALIBS_SHARELIB_KEY_VALUE_SEPARATOR;
 
-
 public class IntegrationTestOozieSharelibCLI extends XTestCase {
 
     private final TemporaryFolder tmpFolder = new TemporaryFolder();
@@ -147,9 +147,23 @@ public class IntegrationTestOozieSharelibCLI extends XTestCase {
                  InputStream copiedFileStream = fileSystem.open(new Path(libPath, f.getName()))) {
                 assertTrue("The content of the files must be equal", IOUtils.contentEquals(originalFileStream, copiedFileStream));
             }
+            checkFilePermission(libPath, f);
+        }
+    }
+
+    private void checkFilePermission(Path libPath, File file) throws Exception {
+        if (file.isDirectory()) {
+            checkPermission(libPath, file, new FsPermission(OozieSharelibCLI.DIRECTORY_PERMISSION));
+        } else {
+            checkPermission(libPath, file, new FsPermission(OozieSharelibCLI.FILE_PERMISSION));
         }
     }
 
+    private void checkPermission(Path libPath, File file, FsPermission expectedPermission) throws Exception {
+        FsPermission actualFilePermission = getTargetFileSysyem().getFileStatus(new Path(libPath, file.getName())).getPermission();
+        assertEquals("File/Directory permission shall match with the expected one.", expectedPermission, actualFilePermission);
+    }
+
     private FileSystem getTargetFileSysyem() throws Exception {
         if (fs == null) {
             HadoopAccessorService has = getServices().get(HadoopAccessorService.class);