You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by ka...@apache.org on 2012/11/14 21:10:49 UTC

svn commit: r1409356 - in /oozie/branches/branch-3.3: core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java release-log.txt

Author: kamrul
Date: Wed Nov 14 20:10:48 2012
New Revision: 1409356

URL: http://svn.apache.org/viewvc?rev=1409356&view=rev
Log:
OOZIE-1058 ACL modify-job should not be hardcoded to group name(mona via mohammad)

Modified:
    oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java
    oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java
    oozie/branches/branch-3.3/release-log.txt

Modified: oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java
URL: http://svn.apache.org/viewvc/oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java?rev=1409356&r1=1409355&r2=1409356&view=diff
==============================================================================
--- oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java (original)
+++ oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java Wed Nov 14 20:10:48 2012
@@ -657,10 +657,14 @@ public class JavaActionExecutor extends 
             actionConf.set("mapred.job.name", jobName);
             injectActionCallback(context, actionConf);
 
-            if (context.getWorkflow().getAcl() != null) {
-                // setting the group owning the Oozie job to allow anybody in that
-                // group to kill the jobs.
-                actionConf.set("mapreduce.job.acl-modify-job", context.getWorkflow().getAcl());
+            if(actionConf.get(ACL_MODIFY_JOB) == null || actionConf.get(ACL_MODIFY_JOB).trim().equals("")) {
+                // ONLY in the case where user has not given the
+                // modify-job ACL specifically
+                if (context.getWorkflow().getAcl() != null) {
+                    // setting the group owning the Oozie job to allow anybody in that
+                    // group to modify the jobs.
+                    actionConf.set(ACL_MODIFY_JOB, context.getWorkflow().getAcl());
+                }
             }
 
             // Setting the credential properties in launcher conf

Modified: oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java
URL: http://svn.apache.org/viewvc/oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java?rev=1409356&r1=1409355&r2=1409356&view=diff
==============================================================================
--- oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java (original)
+++ oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java Wed Nov 14 20:10:48 2012
@@ -301,7 +301,7 @@ public class TestJavaActionExecutor exte
 
     }
 
-    protected Context createContext(String actionXml) throws Exception {
+    protected Context createContext(String actionXml, String group) throws Exception {
         JavaActionExecutor ae = new JavaActionExecutor();
 
         Path appJarPath = new Path("lib/test.jar");
@@ -319,6 +319,9 @@ public class TestJavaActionExecutor exte
 
 
         WorkflowJobBean wf = createBaseWorkflow(protoConf, "action");
+        if(group != null) {
+            wf.setGroup(group);
+        }
         WorkflowActionBean action = (WorkflowActionBean) wf.getActions().get(0);
         action.setType(ae.getType());
         action.setConf(actionXml);
@@ -357,7 +360,7 @@ public class TestJavaActionExecutor exte
                 "<name-node>" + getNameNodeUri() + "</name-node>" +
                 "<main-class>" + LauncherMainTester.class.getName() + "</main-class>" +
                 "</java>";
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         waitFor(60 * 1000, new Predicate() {
             @Override
@@ -383,7 +386,7 @@ public class TestJavaActionExecutor exte
                 "<arg>out</arg>" +
                 "<capture-output/>" +
                 "</java>";
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         waitFor(60 * 1000, new Predicate() {
             @Override
@@ -414,7 +417,7 @@ public class TestJavaActionExecutor exte
                 "<arg>id</arg>" +
                 "<capture-output/>" +
                 "</java>";
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         waitFor(60 * 1000, new Predicate() {
             @Override
@@ -449,7 +452,7 @@ public class TestJavaActionExecutor exte
                 "<file>" + appJarPath.toString() + "</file>" +
                 "</java>";
 
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         ActionExecutor ae = new JavaActionExecutor();
         assertFalse(ae.isCompleted(context.getAction().getExternalStatus()));
@@ -476,7 +479,7 @@ public class TestJavaActionExecutor exte
                 "<arg>exit0</arg>" +
                 "</java>";
 
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         waitFor(60 * 1000, new Predicate() {
             @Override
@@ -503,7 +506,7 @@ public class TestJavaActionExecutor exte
                 "<arg>exit1</arg>" +
                 "</java>";
 
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         waitFor(60 * 1000, new Predicate() {
             @Override
@@ -532,7 +535,7 @@ public class TestJavaActionExecutor exte
                 "<arg>ex</arg>" +
                 "</java>";
 
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         waitFor(60 * 1000, new Predicate() {
             @Override
@@ -558,7 +561,7 @@ public class TestJavaActionExecutor exte
                 "<name-node>" + getNameNodeUri() + "</name-node>" +
                 "<main-class>" + LauncherMainTester.class.getName() + "</main-class>" +
                 "</java>";
-        final Context context = createContext(actionXml);
+        final Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         assertFalse(runningJob.isComplete());
         ActionExecutor ae = new JavaActionExecutor();
@@ -583,7 +586,7 @@ public class TestJavaActionExecutor exte
                 "<name-node>" + getNameNodeUri() + "</name-node>" +
                 "<main-class>" + LauncherMainTester.class.getName() + "</main-class>" +
                 "</java>";
-        final Context context = createContext(actionXml);
+        final Context context = createContext(actionXml, null);
         RunningJob runningJob = submitAction(context);
         String launcherId = context.getAction().getExternalId();
 
@@ -663,7 +666,7 @@ public class TestJavaActionExecutor exte
 
         Element eActionXml = XmlUtils.parseXml(actionXml);
 
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
 
         Path appPath = getAppPath();
 
@@ -721,7 +724,7 @@ public class TestJavaActionExecutor exte
                 "</prepare>" +
                 "<main-class>" + LauncherMainTester.class.getName() + "</main-class>" +
                 "</java>";
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         final RunningJob runningJob = submitAction(context);
         waitFor(60 * 1000, new Predicate() {
             @Override
@@ -941,7 +944,7 @@ public class TestJavaActionExecutor exte
                 "</configuration>" + "<main-class>MAIN-CLASS</main-class>" +
                 "</java>";
         Element eActionXml = XmlUtils.parseXml(actionXml);
-        Context context = createContext(actionXml);
+        Context context = createContext(actionXml, null);
         
         JavaActionExecutor ae = new JavaActionExecutor();
 
@@ -965,7 +968,7 @@ public class TestJavaActionExecutor exte
                 "</configuration>" + "<main-class>MAIN-CLASS</main-class>" +
                 "</java>";
         eActionXml = XmlUtils.parseXml(actionXml);
-        context = createContext(actionXml);
+        context = createContext(actionXml, null);
         
         ae = new JavaActionExecutor();
 
@@ -986,7 +989,7 @@ public class TestJavaActionExecutor exte
                 "</configuration>" + "<main-class>MAIN-CLASS</main-class>" +
                 "</java>";
         eActionXml = XmlUtils.parseXml(actionXml);
-        context = createContext(actionXml);
+        context = createContext(actionXml, null);
         
         ae = new JavaActionExecutor();
 
@@ -1007,7 +1010,7 @@ public class TestJavaActionExecutor exte
                     + getNameNodeUri() + "</name-node>" + "<main-class>" + LauncherMainTester.class.getName()
                     + "</main-class>" + "</java>";
             Element eActionXml = XmlUtils.parseXml(actionXml);
-            Context context = createContext(actionXml);
+            Context context = createContext(actionXml, null);
             Path appPath = new Path("localfs://namenode:port/mydir");
             JavaActionExecutor ae = new JavaActionExecutor();
             JobConf conf = ae.createBaseHadoopConf(context, eActionXml);
@@ -1099,7 +1102,41 @@ public class TestJavaActionExecutor exte
         assertNotSame(conf.get(JavaActionExecutor.ACL_VIEW_JOB), actionConf.get(JavaActionExecutor.ACL_VIEW_JOB));
         assertNotSame(conf.get(JavaActionExecutor.ACL_MODIFY_JOB), actionConf.get(JavaActionExecutor.ACL_MODIFY_JOB));
     }
-    
+
+    public void testACLModifyJob() throws Exception {
+        // CASE 1: If user has provided modify-acl value
+        // then it should NOT be overridden by group name
+        String actionXml = "<java>" + "<job-tracker>" + getJobTrackerUri() + "</job-tracker>" +
+                "<name-node>" + getNameNodeUri() + "</name-node> <configuration>" +
+                "<property><name>mapreduce.job.acl-modify-job</name><value>MODIFIER</value></property>" +
+                "</configuration>" + "<main-class>MAIN-CLASS</main-class>" +
+                "</java>";
+
+        Context context = createContext(actionXml, "USERS");
+        RunningJob job = submitAction(context);
+        FileSystem fs = context.getAppFileSystem();
+        Configuration jobXmlConf = new XConfiguration(fs.open(new Path(job.getJobFile())));
+
+        String userModifyAcl = jobXmlConf.get(JavaActionExecutor.ACL_MODIFY_JOB); // 'MODIFIER'
+        String userGroup = context.getWorkflow().getAcl(); // 'USERS'
+        assertFalse(userGroup.equals(userModifyAcl));
+
+        // CASE 2: If user has not provided modify-acl value
+        // then it equals group name
+        actionXml = "<java>" + "<job-tracker>" + getJobTrackerUri() + "</job-tracker>" +
+                "<name-node>" + getNameNodeUri() + "</name-node> <configuration>" +
+                "</configuration>" + "<main-class>MAIN-CLASS</main-class>" +
+                "</java>";
+        context = createContext(actionXml, "USERS");
+        job = submitAction(context);
+        fs = context.getAppFileSystem();
+        jobXmlConf = new XConfiguration(fs.open(new Path(job.getJobFile())));
+
+        userModifyAcl = jobXmlConf.get(JavaActionExecutor.ACL_MODIFY_JOB);
+        userGroup = context.getWorkflow().getAcl();
+        assertTrue(userGroup.equals(userModifyAcl));
+    }
+
     public void testParseJobXmlAndConfiguration() throws Exception {
         String str = "<java>"
                 + "<job-xml>job1.xml</job-xml>"
@@ -1129,7 +1166,7 @@ public class TestJavaActionExecutor exte
         
         Configuration conf = new XConfiguration();
         assertEquals(0, conf.size());
-        JavaActionExecutor.parseJobXmlAndConfiguration(createContext("<java/>"), xml, appPath, conf);
+        JavaActionExecutor.parseJobXmlAndConfiguration(createContext("<java/>", null), xml, appPath, conf);
         assertEquals(4, conf.size());
         assertEquals("v1a", conf.get("p1"));
         assertEquals("v2", conf.get("p2"));

Modified: oozie/branches/branch-3.3/release-log.txt
URL: http://svn.apache.org/viewvc/oozie/branches/branch-3.3/release-log.txt?rev=1409356&r1=1409355&r2=1409356&view=diff
==============================================================================
--- oozie/branches/branch-3.3/release-log.txt (original)
+++ oozie/branches/branch-3.3/release-log.txt Wed Nov 14 20:10:48 2012
@@ -1,5 +1,6 @@
 -- Oozie 3.3.0 release (unreleased)
 
+OOZIE-1058 ACL modify-job should not be hardcoded to group name(mona via mohammad)
 OOZIE-1052 HadoopAccessorService.createFileSystem throws exception in map-reduce action, failing workflow.(ryota via mohammad).
 OOZIE-1060 bump hadoop 2.X version to 2.0.2-alpha (rvs via tucu)
 OOZIE-959  Use API from OOZIE-906 in console (Ashish via Mohammad)