Repository: hadoop
Updated Branches:
  refs/heads/trunk a196ee936 -> 87429affc


YARN-7889. Missing kerberos token when check for RM REST API availability. 
Contributed by Eric Yang


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

Branch: refs/heads/trunk
Commit: 87429affcea2de61791c1b048b6db8c8275de051
Parents: a196ee9
Author: Jian He <jia...@apache.org>
Authored: Mon Feb 5 22:55:56 2018 -0800
Committer: Jian He <jia...@apache.org>
Committed: Mon Feb 5 22:56:25 2018 -0800

----------------------------------------------------------------------
 .../yarn/service/client/ApiServiceClient.java   | 41 ++++++++++++++------
 1 file changed, 29 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/87429aff/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java
----------------------------------------------------------------------
diff --git 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java
 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java
index cb91946..49702e3 100644
--- 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java
+++ 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java
@@ -87,21 +87,38 @@ public class ApiServiceClient extends AppAdminClient {
       rmAddress = conf
           .get("yarn.resourcemanager.webapp.https.address");
     }
-
+    boolean useKerberos = UserGroupInformation.isSecurityEnabled();
     List<String> rmServers = RMHAUtils
         .getRMHAWebappAddresses(new YarnConfiguration(conf));
     for (String host : rmServers) {
-      StringBuilder sb = new StringBuilder();
-      sb.append(scheme);
-      sb.append(host);
-      sb.append(path);
-      Client client = Client.create();
-      WebResource webResource = client
-          .resource(sb.toString());
-      String test = webResource.get(String.class);
-      if (test.contains("hadoop_version")) {
-        rmAddress = host;
-        break;
+      try {
+        Client client = Client.create();
+        StringBuilder sb = new StringBuilder();
+        sb.append(scheme);
+        sb.append(host);
+        sb.append(path);
+        if (!useKerberos) {
+          try {
+            String username = 
UserGroupInformation.getCurrentUser().getShortUserName();
+            sb.append("?user.name=");
+            sb.append(username);
+          } catch (IOException e) {
+            LOG.debug("Fail to resolve username: {}", e);
+          }
+        }
+        WebResource webResource = client
+            .resource(sb.toString());
+        if (useKerberos) {
+          AuthenticatedURL.Token token = new AuthenticatedURL.Token();
+          webResource.header("WWW-Authenticate", token);
+        }
+        ClientResponse test = webResource.get(ClientResponse.class);
+        if (test.getStatus() == 200) {
+          rmAddress = host;
+          break;
+        }
+      } catch (Exception e) {
+        LOG.debug("Fail to connect to: "+host, e);
       }
     }
     return scheme+rmAddress;


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to