diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/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/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java index 008f49792de..94f03c347ed 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/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/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java @@ -151,7 +151,7 @@ public class ApiServiceClient extends AppAdminClient { * @return URI to API Service * @throws IOException */ - private String getServicePath(String appName) throws IOException { + protected String getServicePath(String appName) throws IOException { String url = getRMWebAddress(); StringBuilder api = new StringBuilder(); api.append(url) @@ -203,12 +203,15 @@ public class ApiServiceClient extends AppAdminClient { return api.toString(); } - private void appendUserNameIfRequired(StringBuilder builder) { + private void appendUserNameIfRequired(StringBuilder builder) + throws IOException { Configuration conf = getConfig(); - if (conf.get("hadoop.http.authentication.type").equalsIgnoreCase( - "simple")) { + if (conf.get("hadoop.http.authentication.type") + .equalsIgnoreCase("simple")) { + String username = UserGroupInformation.getCurrentUser() + .getShortUserName(); builder.append("?user.name=").append(UrlEncoded - .encodeString(System.getProperty("user.name"))); + .encodeString(username)); } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/test/java/org/apache/hadoop/yarn/service/client/TestApiServiceClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/test/java/org/apache/hadoop/yarn/service/client/TestApiServiceClient.java index 6cf08807c15..0ffeb456c85 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/test/java/org/apache/hadoop/yarn/service/client/TestApiServiceClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/test/java/org/apache/hadoop/yarn/service/client/TestApiServiceClient.java @@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.common.collect.Lists; + import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.exceptions.YarnException; import org.eclipse.jetty.server.Server; @@ -310,5 +311,13 @@ public class TestApiServiceClient { } } + @Test + public void testNoneSecureApiClient() throws IOException { + String url = asc.getServicePath("/foobar"); + assertTrue("User.name flag is missing in service path.", + url.contains("user.name")); + assertTrue("User.name flag is not matching JVM user.", + url.contains(System.getProperty("user.name"))); + } }