Procházet zdrojové kódy

YARN-1904. Ensure exceptions thrown in ClientRMService & ApplicationHistoryClientService are uniform when application-attempt is not found. Contributed by Zhijie Shen.

Arun C. Murthy před 10 roky
rodič
revize
29c77de297

+ 4 - 0
hadoop-yarn-project/CHANGES.txt

@@ -214,6 +214,10 @@ Release 2.7.0 - UNRELEASED
     YARN-1582. Capacity Scheduler: add a maximum-allocation-mb setting per
     queue (Thomas Graves via jlowe)
 
+    YARN-1904. Ensure exceptions thrown in ClientRMService &
+    ApplicationHistoryClientService are uniform when application-attempt is
+    not found. (zjshen via acmurthy)
+
   OPTIMIZATIONS
 
   BUG FIXES

+ 20 - 7
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryClientService.java

@@ -49,9 +49,11 @@ import org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenRequest;
 import org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenResponse;
 import org.apache.hadoop.yarn.api.protocolrecords.RenewDelegationTokenRequest;
 import org.apache.hadoop.yarn.api.protocolrecords.RenewDelegationTokenResponse;
+import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
 import org.apache.hadoop.yarn.api.records.ApplicationAttemptReport;
 import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.api.records.ApplicationReport;
+import org.apache.hadoop.yarn.api.records.ContainerId;
 import org.apache.hadoop.yarn.api.records.ContainerReport;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.exceptions.ApplicationAttemptNotFoundException;
@@ -153,13 +155,17 @@ public class ApplicationHistoryClientService extends AbstractService {
     public GetApplicationAttemptReportResponse getApplicationAttemptReport(
         GetApplicationAttemptReportRequest request) throws YarnException,
         IOException {
+      ApplicationAttemptId appAttemptId = request.getApplicationAttemptId();
       try {
         GetApplicationAttemptReportResponse response =
             GetApplicationAttemptReportResponse.newInstance(history
-              .getApplicationAttempt(request.getApplicationAttemptId()));
+              .getApplicationAttempt(appAttemptId));
         return response;
       } catch (IOException e) {
-        throw new ApplicationAttemptNotFoundException(e.getMessage());
+        String msg = "ApplicationAttempt with id '" + appAttemptId +
+            "' doesn't exist in the history store.";
+        LOG.error(msg, e);
+        throw new ApplicationAttemptNotFoundException(msg);
       }
     }
 
@@ -177,14 +183,17 @@ public class ApplicationHistoryClientService extends AbstractService {
     @Override
     public GetApplicationReportResponse getApplicationReport(
         GetApplicationReportRequest request) throws YarnException, IOException {
+      ApplicationId applicationId = request.getApplicationId();
       try {
-        ApplicationId applicationId = request.getApplicationId();
         GetApplicationReportResponse response =
             GetApplicationReportResponse.newInstance(history
               .getApplication(applicationId));
         return response;
       } catch (IOException e) {
-        throw new ApplicationNotFoundException(e.getMessage());
+        String msg = "Application with id '" + applicationId +
+            "' doesn't exist in the history store.";
+        LOG.error(msg, e);
+        throw new ApplicationNotFoundException(msg);
       }
     }
 
@@ -200,13 +209,17 @@ public class ApplicationHistoryClientService extends AbstractService {
     @Override
     public GetContainerReportResponse getContainerReport(
         GetContainerReportRequest request) throws YarnException, IOException {
+      ContainerId containerId = request.getContainerId();
       try {
         GetContainerReportResponse response =
-            GetContainerReportResponse.newInstance(history.getContainer(request
-              .getContainerId()));
+            GetContainerReportResponse.newInstance(
+                history.getContainer(containerId));
         return response;
       } catch (IOException e) {
-        throw new ContainerNotFoundException(e.getMessage());
+        String msg = "Container with id '" + containerId +
+            "' doesn't exist in the history store.";
+        LOG.error(msg, e);
+        throw new ContainerNotFoundException(msg);
       }
     }
 

+ 11 - 8
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java

@@ -365,8 +365,9 @@ public class ClientRMService extends AbstractService implements
     if (allowAccess) {
       RMAppAttempt appAttempt = application.getAppAttempts().get(appAttemptId);
       if (appAttempt == null) {
-        throw new ApplicationAttemptNotFoundException("ApplicationAttempt "
-            + appAttemptId + " Not Found in RM");
+        throw new ApplicationAttemptNotFoundException(
+            "ApplicationAttempt with id '" + appAttemptId +
+            "' doesn't exist in RM.");
       }
       ApplicationAttemptReport attemptReport = appAttempt
           .createApplicationAttemptReport();
@@ -450,14 +451,15 @@ public class ClientRMService extends AbstractService implements
     if (allowAccess) {
       RMAppAttempt appAttempt = application.getAppAttempts().get(appAttemptId);
       if (appAttempt == null) {
-        throw new ApplicationAttemptNotFoundException("ApplicationAttempt "
-            + appAttemptId + " Not Found in RM");
+        throw new ApplicationAttemptNotFoundException(
+            "ApplicationAttempt with id '" + appAttemptId +
+            "' doesn't exist in RM.");
       }
       RMContainer rmConatiner = this.rmContext.getScheduler().getRMContainer(
           containerId);
       if (rmConatiner == null) {
-        throw new ContainerNotFoundException("Container with id " + containerId
-            + " not found");
+        throw new ContainerNotFoundException("Container with id '" + containerId
+            + "' doesn't exist in RM.");
       }
       response = GetContainerReportResponse.newInstance(rmConatiner
           .createContainerReport());
@@ -499,8 +501,9 @@ public class ClientRMService extends AbstractService implements
     if (allowAccess) {
       RMAppAttempt appAttempt = application.getAppAttempts().get(appAttemptId);
       if (appAttempt == null) {
-        throw new ApplicationAttemptNotFoundException("ApplicationAttempt "
-            + appAttemptId + " Not Found in RM");
+        throw new ApplicationAttemptNotFoundException(
+            "ApplicationAttempt with id '" + appAttemptId +
+            "' doesn't exist in RM.");
       }
       Collection<RMContainer> rmContainers = Collections.emptyList();
       SchedulerAppReport schedulerAppReport =