Author: virag
Date: Tue Jan  8 00:09:15 2013
New Revision: 1430099

URL: http://svn.apache.org/viewvc?rev=1430099&view=rev
Log:
OOZIE-1159 Set the RM token renewer as the full service principal instead of 
short name (rohini via virag)

Modified:
    
oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java
    
oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java
    oozie/trunk/release-log.txt

Modified: 
oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java
URL: 
http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java?rev=1430099&r1=1430098&r2=1430099&view=diff
==============================================================================
--- 
oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java
 (original)
+++ 
oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java
 Tue Jan  8 00:09:15 2013
@@ -24,6 +24,8 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.conf.Configuration;
 import 
org.apache.hadoop.mapreduce.security.token.delegation.DelegationTokenIdentifier;
+import org.apache.hadoop.net.NetUtils;
+import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.filecache.DistributedCache;
 import org.apache.hadoop.security.token.Token;
@@ -72,6 +74,9 @@ public class HadoopAccessorService imple
     private static final String JT_PRINCIPAL = 
"mapreduce.jobtracker.kerberos.principal";
     /** The Kerberos principal for the resource manager.*/
     private static final String RM_PRINCIPAL = 
"yarn.resourcemanager.principal";
+    private static final String HADOOP_JOB_TRACKER = "mapred.job.tracker";
+    private static final String HADOOP_JOB_TRACKER_2 = 
"mapreduce.jobtracker.address";
+    private static final String HADOOP_YARN_RM = 
"yarn.resourcemanager.address";
     private static final Map<String, Text> mrTokenRenewers = new 
HashMap<String, Text>();
 
     private Set<String> jobTrackerWhitelist = new HashSet<String>();
@@ -456,7 +461,17 @@ public class HadoopAccessorService imple
         }
     }
 
-    public static Text getMRDelegationTokenRenewer(JobConf jobConf) {
+    public static Text getMRDelegationTokenRenewer(JobConf jobConf) throws 
IOException {
+        if (UserGroupInformation.isSecurityEnabled()) { // secure cluster
+            return getMRTokenRenewerInternal(jobConf);
+        }
+        else {
+            return MR_TOKEN_ALIAS; //Doesn't matter what we pass as renewer
+        }
+    }
+
+    // Package private for unit test purposes
+    static Text getMRTokenRenewerInternal(JobConf jobConf) throws IOException {
         // Getting renewer correctly for JT principal also though JT in hadoop 
1.x does not have
         // support for renewing/cancelling tokens
         String servicePrincipal = jobConf.get(RM_PRINCIPAL, 
jobConf.get(JT_PRINCIPAL));
@@ -464,9 +479,15 @@ public class HadoopAccessorService imple
         if (servicePrincipal != null) { // secure cluster
             renewer = mrTokenRenewers.get(servicePrincipal);
             if (renewer == null) {
-                // Remove host and domain
-                renewer = new Text(servicePrincipal.split("[/@]")[0]);
-                LOG.info("Delegation Token Renewer for " + servicePrincipal + 
" is " + renewer);
+                // Mimic org.apache.hadoop.mapred.Master.getMasterPrincipal()
+                String target = jobConf.get(HADOOP_YARN_RM, 
jobConf.get(HADOOP_JOB_TRACKER_2));
+                if (target == null) {
+                    target = jobConf.get(HADOOP_JOB_TRACKER);
+                }
+                String addr = NetUtils.createSocketAddr(target).getHostName();
+                renewer = new 
Text(SecurityUtil.getServerPrincipal(servicePrincipal, addr));
+                LOG.info("Delegation Token Renewer details: Principal=" + 
servicePrincipal + ",Target=" + target
+                        + ",Renewer=" + renewer);
                 mrTokenRenewers.put(servicePrincipal, renewer);
             }
         }

Modified: 
oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java
URL: 
http://svn.apache.org/viewvc/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java?rev=1430099&r1=1430098&r2=1430099&view=diff
==============================================================================
--- 
oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java
 (original)
+++ 
oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java
 Tue Jan  8 00:09:15 2013
@@ -116,12 +116,21 @@ public class TestHadoopAccessorService e
 
     public void testGetMRDelegationTokenRenewer() throws Exception {
         JobConf jobConf = new JobConf();
-        assertEquals(new Text("oozie mr token"), 
HadoopAccessorService.getMRDelegationTokenRenewer(jobConf));
-        jobConf.set("mapreduce.jobtracker.kerberos.principal", 
"mapred/[email protected]");
-        assertEquals(new Text("mapred"), 
HadoopAccessorService.getMRDelegationTokenRenewer(jobConf));
+        assertEquals(new Text("oozie mr token"), 
HadoopAccessorService.getMRTokenRenewerInternal(jobConf));
+        jobConf.set("mapred.job.tracker", "localhost:50300");
+        jobConf.set("mapreduce.jobtracker.kerberos.principal", 
"mapred/[email protected]");
+        assertEquals(new Text("mapred/[email protected]"),
+                HadoopAccessorService.getMRTokenRenewerInternal(jobConf));
         jobConf = new JobConf();
-        jobConf.set("yarn.resourcemanager.principal", 
"rm/[email protected]");
-        assertEquals(new Text("rm"), 
HadoopAccessorService.getMRDelegationTokenRenewer(jobConf));
+        jobConf.set("mapreduce.jobtracker.address", "127.0.0.1:50300");
+        jobConf.set("mapreduce.jobtracker.kerberos.principal", 
"mapred/[email protected]");
+        assertEquals(new Text("mapred/[email protected]"),
+                HadoopAccessorService.getMRTokenRenewerInternal(jobConf));
+        jobConf = new JobConf();
+        jobConf.set("yarn.resourcemanager.address", "localhost:8032");
+        jobConf.set("yarn.resourcemanager.principal", 
"rm/[email protected]");
+        assertEquals(new Text("rm/[email protected]"),
+                HadoopAccessorService.getMRTokenRenewerInternal(jobConf));
     }
 
 }

Modified: oozie/trunk/release-log.txt
URL: 
http://svn.apache.org/viewvc/oozie/trunk/release-log.txt?rev=1430099&r1=1430098&r2=1430099&view=diff
==============================================================================
--- oozie/trunk/release-log.txt (original)
+++ oozie/trunk/release-log.txt Tue Jan  8 00:09:15 2013
@@ -69,6 +69,7 @@ OOZIE-944 Implement Workflow Generator U
 
 -- Oozie 3.3.1 (unreleased)
 
+OOZIE-1159 Set the RM token renewer as the full service principal instead of 
short name (rohini via virag)
 OOZIE-1151 HbaseCredentials doesn't use properties from the credentials module 
(virag)
 OOZIE-1148 Set the renewer correctly for JT/RM delegation tokens (rohini via 
virag)
 OOZIE-1147 HCatCredentialHelper uses the wrong API for getDelegationToken 
(rohini via virag)


Reply via email to