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