From 29c77de2974f7189ddf71cd8875db94a5bd05f8d Mon Sep 17 00:00:00 2001 From: "Arun C. Murthy" Date: Thu, 5 Feb 2015 23:48:39 -0800 Subject: [PATCH] YARN-1904. Ensure exceptions thrown in ClientRMService & ApplicationHistoryClientService are uniform when application-attempt is not found. Contributed by Zhijie Shen. --- hadoop-yarn-project/CHANGES.txt | 4 +++ .../ApplicationHistoryClientService.java | 27 ++++++++++++++----- .../resourcemanager/ClientRMService.java | 19 +++++++------ 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index f657afe177c..c01796099e8 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/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 diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryClientService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryClientService.java index 4c04c5c84f9..8da1ea1aea6 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryClientService.java +++ b/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); } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java index 23c163a71cb..fe9fe02c40e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java +++ b/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 rmContainers = Collections.emptyList(); SchedulerAppReport schedulerAppReport =