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/webapp/ApiServer.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/webapp/ApiServer.java index 46c9abe6d0e..578273c6492 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/webapp/ApiServer.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/webapp/ApiServer.java @@ -641,20 +641,24 @@ public String run() throws YarnException, IOException { private Response startService(String appName, final UserGroupInformation ugi) throws IOException, InterruptedException { - ugi.doAs(new PrivilegedExceptionAction() { - @Override - public Void run() throws YarnException, IOException { - ServiceClient sc = getServiceClient(); - sc.init(YARN_CONFIG); - sc.start(); - sc.actionStart(appName); - sc.close(); - return null; - } - }); + ApplicationId appId = + ugi.doAs(new PrivilegedExceptionAction() { + @Override public ApplicationId run() + throws YarnException, IOException { + ServiceClient sc = getServiceClient(); + sc.init(YARN_CONFIG); + sc.start(); + sc.actionStart(appName); + ApplicationId appId = sc.getAppId(appName); + sc.close(); + return appId; + } + }); LOG.info("Successfully started service " + appName); ServiceStatus status = new ServiceStatus(); - status.setDiagnostics("Service " + appName + " is successfully started."); + status.setDiagnostics( + "Service " + appName + " is successfully started with ApplicationId: " + + appId); status.setState(ServiceState.ACCEPTED); return formatResponse(Status.OK, status); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java index 0ab332280f2..e86ecbc61aa 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java @@ -978,6 +978,8 @@ public int actionStart(String serviceName) throws YarnException, IOException { // see if it is actually running and bail out; verifyNoLiveAppInRM(serviceName, "start"); ApplicationId appId = submitApp(service); + cachedAppInfo.put(serviceName, new AppInfo(appId, service + .getKerberosPrincipal().getPrincipalName())); service.setId(appId.toString()); // write app definition on to hdfs Path appJson = ServiceApiUtil.writeAppDefinition(fs, appDir, service);