You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by zj...@apache.org on 2015/06/03 01:48:15 UTC
[43/50] [abbrv] hadoop git commit: YARN-2900. Application (Attempt
and Container) Not Found in AHS results in Internal Server Error (500).
Contributed by Zhijie Shen and Mit Desai
YARN-2900. Application (Attempt and Container) Not Found in AHS results
in Internal Server Error (500). Contributed by Zhijie Shen and Mit Desai
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/a977bed5
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/a977bed5
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/a977bed5
Branch: refs/heads/YARN-2928
Commit: a977bed50936c7054f270f93569fa0f53002fe0b
Parents: 8bc36be
Author: Xuan <xg...@apache.org>
Authored: Sun May 31 15:37:05 2015 -0700
Committer: Zhijie Shen <zj...@apache.org>
Committed: Tue Jun 2 16:13:00 2015 -0700
----------------------------------------------------------------------
hadoop-yarn-project/CHANGES.txt | 3 +
.../TestApplicationHistoryClientService.java | 70 +++++++++++++++++++-
.../webapp/TestAHSWebServices.java | 63 +++++++++++++++++-
.../hadoop/yarn/server/webapp/WebServices.java | 27 +++++---
4 files changed, 151 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/a977bed5/hadoop-yarn-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index 6f5faa9..e770a5b 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -694,6 +694,9 @@ Release 2.7.1 - UNRELEASED
YARN-3686. CapacityScheduler should trim default_node_label_expression.
(Sunil G via wangda)
+ YARN-2900. Application (Attempt and Container) Not Found in AHS results
+ in Internal Server Error (500). (Zhijie Shen and Mit Desai via xgong)
+
Release 2.7.0 - 2015-04-20
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/a977bed5/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java
index 764ecb9..d04903c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java
@@ -41,6 +41,9 @@ 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;
+import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
+import org.apache.hadoop.yarn.exceptions.ContainerNotFoundException;
import org.apache.hadoop.yarn.exceptions.YarnException;
import org.apache.hadoop.yarn.server.security.ApplicationACLsManager;
import org.apache.hadoop.yarn.server.timeline.TimelineDataManager;
@@ -54,12 +57,13 @@ public class TestApplicationHistoryClientService {
private static ApplicationHistoryClientService clientService;
private static TimelineDataManager dataManager;
+ private final static int MAX_APPS = 2;
@BeforeClass
public static void setup() throws Exception {
Configuration conf = new YarnConfiguration();
TimelineStore store =
- TestApplicationHistoryManagerOnTimelineStore.createStore(2);
+ TestApplicationHistoryManagerOnTimelineStore.createStore(MAX_APPS);
TimelineACLsManager aclsManager = new TimelineACLsManager(conf);
dataManager =
new TimelineDataManager(store, aclsManager);
@@ -72,6 +76,70 @@ public class TestApplicationHistoryClientService {
}
@Test
+ public void testApplicationNotFound() throws IOException, YarnException {
+ ApplicationId appId = null;
+ appId = ApplicationId.newInstance(0, MAX_APPS + 1);
+ GetApplicationReportRequest request =
+ GetApplicationReportRequest.newInstance(appId);
+ try {
+ @SuppressWarnings("unused")
+ GetApplicationReportResponse response =
+ clientService.getApplicationReport(request);
+ Assert.fail("Exception should have been thrown before we reach here.");
+ } catch (ApplicationNotFoundException e) {
+ //This exception is expected.
+ Assert.assertTrue(e.getMessage().contains(
+ "doesn't exist in the timeline store"));
+ } catch (Exception e) {
+ Assert.fail("Undesired exception caught");
+ }
+ }
+
+ @Test
+ public void testApplicationAttemptNotFound() throws IOException, YarnException {
+ ApplicationId appId = ApplicationId.newInstance(0, 1);
+ ApplicationAttemptId appAttemptId =
+ ApplicationAttemptId.newInstance(appId, MAX_APPS + 1);
+ GetApplicationAttemptReportRequest request =
+ GetApplicationAttemptReportRequest.newInstance(appAttemptId);
+ try {
+ @SuppressWarnings("unused")
+ GetApplicationAttemptReportResponse response =
+ clientService.getApplicationAttemptReport(request);
+ Assert.fail("Exception should have been thrown before we reach here.");
+ } catch (ApplicationAttemptNotFoundException e) {
+ //This Exception is expected
+ System.out.println(e.getMessage());
+ Assert.assertTrue(e.getMessage().contains(
+ "doesn't exist in the timeline store"));
+ } catch (Exception e) {
+ Assert.fail("Undesired exception caught");
+ }
+ }
+
+ @Test
+ public void testContainerNotFound() throws IOException, YarnException {
+ ApplicationId appId = ApplicationId.newInstance(0, 1);
+ ApplicationAttemptId appAttemptId =
+ ApplicationAttemptId.newInstance(appId, 1);
+ ContainerId containerId = ContainerId.newContainerId(appAttemptId,
+ MAX_APPS + 1);
+ GetContainerReportRequest request =
+ GetContainerReportRequest.newInstance(containerId);
+ try {
+ @SuppressWarnings("unused")
+ GetContainerReportResponse response =
+ clientService.getContainerReport(request);
+ } catch (ContainerNotFoundException e) {
+ //This exception is expected
+ Assert.assertTrue(e.getMessage().contains(
+ "doesn't exist in the timeline store"));
+ } catch (Exception e) {
+ Assert.fail("Undesired exception caught");
+ }
+ }
+
+ @Test
public void testApplicationReport() throws IOException, YarnException {
ApplicationId appId = null;
appId = ApplicationId.newInstance(0, 1);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/a977bed5/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebServices.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebServices.java
index 613df72..b5ff6a4 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebServices.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebServices.java
@@ -82,12 +82,13 @@ public class TestAHSWebServices extends JerseyTestBase {
private static ApplicationHistoryClientService historyClientService;
private static final String[] USERS = new String[] { "foo" , "bar" };
+ private static final int MAX_APPS = 5;
@BeforeClass
public static void setupClass() throws Exception {
Configuration conf = new YarnConfiguration();
TimelineStore store =
- TestApplicationHistoryManagerOnTimelineStore.createStore(5);
+ TestApplicationHistoryManagerOnTimelineStore.createStore(MAX_APPS);
TimelineACLsManager aclsManager = new TimelineACLsManager(conf);
TimelineDataManager dataManager =
new TimelineDataManager(store, aclsManager);
@@ -165,6 +166,66 @@ public class TestAHSWebServices extends JerseyTestBase {
}
@Test
+ public void testInvalidApp() {
+ ApplicationId appId = ApplicationId.newInstance(0, MAX_APPS + 1);
+ WebResource r = resource();
+ ClientResponse response =
+ r.path("ws").path("v1").path("applicationhistory").path("apps")
+ .path(appId.toString())
+ .queryParam("user.name", USERS[round])
+ .accept(MediaType.APPLICATION_JSON)
+ .get(ClientResponse.class);
+ assertEquals("404 not found expected", Status.NOT_FOUND,
+ response.getClientResponseStatus());
+ }
+
+ @Test
+ public void testInvalidAttempt() {
+ ApplicationId appId = ApplicationId.newInstance(0, 1);
+ ApplicationAttemptId appAttemptId =
+ ApplicationAttemptId.newInstance(appId, MAX_APPS + 1);
+ WebResource r = resource();
+ ClientResponse response =
+ r.path("ws").path("v1").path("applicationhistory").path("apps")
+ .path(appId.toString()).path("appattempts")
+ .path(appAttemptId.toString())
+ .queryParam("user.name", USERS[round])
+ .accept(MediaType.APPLICATION_JSON)
+ .get(ClientResponse.class);
+ if (round == 1) {
+ assertEquals(Status.FORBIDDEN, response.getClientResponseStatus());
+ return;
+ }
+ assertEquals("404 not found expected", Status.NOT_FOUND,
+ response.getClientResponseStatus());
+ }
+
+ @Test
+ public void testInvalidContainer() throws Exception {
+ ApplicationId appId = ApplicationId.newInstance(0, 1);
+ ApplicationAttemptId appAttemptId =
+ ApplicationAttemptId.newInstance(appId, 1);
+ ContainerId containerId = ContainerId.newContainerId(appAttemptId,
+ MAX_APPS + 1);
+ WebResource r = resource();
+ ClientResponse response =
+ r.path("ws").path("v1").path("applicationhistory").path("apps")
+ .path(appId.toString()).path("appattempts")
+ .path(appAttemptId.toString()).path("containers")
+ .path(containerId.toString())
+ .queryParam("user.name", USERS[round])
+ .accept(MediaType.APPLICATION_JSON)
+ .get(ClientResponse.class);
+ if (round == 1) {
+ assertEquals(
+ Status.FORBIDDEN, response.getClientResponseStatus());
+ return;
+ }
+ assertEquals("404 not found expected", Status.NOT_FOUND,
+ response.getClientResponseStatus());
+ }
+
+ @Test
public void testInvalidUri() throws JSONException, Exception {
WebResource r = resource();
String responseStr = "";
http://git-wip-us.apache.org/repos/asf/hadoop/blob/a977bed5/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebServices.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebServices.java
index 8404719..3064145 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebServices.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebServices.java
@@ -47,6 +47,9 @@ import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest;
import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest;
import org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest;
import org.apache.hadoop.yarn.api.protocolrecords.GetContainersRequest;
+import org.apache.hadoop.yarn.exceptions.ApplicationAttemptNotFoundException;
+import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
+import org.apache.hadoop.yarn.exceptions.ContainerNotFoundException;
import org.apache.hadoop.yarn.server.webapp.dao.AppAttemptInfo;
import org.apache.hadoop.yarn.server.webapp.dao.AppAttemptsInfo;
import org.apache.hadoop.yarn.server.webapp.dao.AppInfo;
@@ -477,17 +480,21 @@ public class WebServices {
private static void rewrapAndThrowException(Exception e) {
if (e instanceof UndeclaredThrowableException) {
- if (e.getCause() instanceof AuthorizationException) {
- throw new ForbiddenException(e.getCause());
- } else {
- throw new WebApplicationException(e.getCause());
- }
+ rewrapAndThrowThrowable(e.getCause());
} else {
- if (e instanceof AuthorizationException) {
- throw new ForbiddenException(e);
- } else {
- throw new WebApplicationException(e);
- }
+ rewrapAndThrowThrowable(e);
+ }
+ }
+
+ private static void rewrapAndThrowThrowable(Throwable t) {
+ if (t instanceof AuthorizationException) {
+ throw new ForbiddenException(t);
+ } else if (t instanceof ApplicationNotFoundException ||
+ t instanceof ApplicationAttemptNotFoundException ||
+ t instanceof ContainerNotFoundException) {
+ throw new NotFoundException(t);
+ } else {
+ throw new WebApplicationException(t);
}
}