YARN-7118. AHS REST API can return NullPointerException. Contributed by Billie Rinaldi.

This commit is contained in:
Junping Du 2017-09-22 13:58:09 -07:00
parent b133dc5700
commit 4002bf0a9e
3 changed files with 38 additions and 9 deletions

View File

@ -146,7 +146,11 @@ public class TestApplicationHistoryManagerOnTimelineStore {
} else if (i == 3) { } else if (i == 3) {
entities.addEntity(createApplicationTimelineEntity( entities.addEntity(createApplicationTimelineEntity(
appId, false, false, false, false, YarnApplicationState.FINISHED, appId, false, false, false, false, YarnApplicationState.FINISHED,
true)); true, false));
} else if (i == SCALE + 1) {
entities.addEntity(createApplicationTimelineEntity(
appId, false, false, false, false, YarnApplicationState.FINISHED,
false, true));
} else { } else {
entities.addEntity(createApplicationTimelineEntity( entities.addEntity(createApplicationTimelineEntity(
appId, false, false, false, false, YarnApplicationState.FINISHED)); appId, false, false, false, false, YarnApplicationState.FINISHED));
@ -497,13 +501,14 @@ public class TestApplicationHistoryManagerOnTimelineStore {
boolean wrongAppId, boolean enableUpdateEvent, boolean wrongAppId, boolean enableUpdateEvent,
YarnApplicationState state) { YarnApplicationState state) {
return createApplicationTimelineEntity(appId, emptyACLs, noAttemptId, return createApplicationTimelineEntity(appId, emptyACLs, noAttemptId,
wrongAppId, enableUpdateEvent, state, false); wrongAppId, enableUpdateEvent, state, false, false);
} }
private static TimelineEntity createApplicationTimelineEntity( private static TimelineEntity createApplicationTimelineEntity(
ApplicationId appId, boolean emptyACLs, boolean noAttemptId, ApplicationId appId, boolean emptyACLs, boolean noAttemptId,
boolean wrongAppId, boolean enableUpdateEvent, boolean wrongAppId, boolean enableUpdateEvent,
YarnApplicationState state, boolean missingPreemptMetrics) { YarnApplicationState state, boolean missingPreemptMetrics,
boolean missingQueue) {
TimelineEntity entity = new TimelineEntity(); TimelineEntity entity = new TimelineEntity();
entity.setEntityType(ApplicationMetricsConstants.ENTITY_TYPE); entity.setEntityType(ApplicationMetricsConstants.ENTITY_TYPE);
if (wrongAppId) { if (wrongAppId) {
@ -519,7 +524,10 @@ public class TestApplicationHistoryManagerOnTimelineStore {
entityInfo.put(ApplicationMetricsConstants.TYPE_ENTITY_INFO, entityInfo.put(ApplicationMetricsConstants.TYPE_ENTITY_INFO,
"test app type"); "test app type");
entityInfo.put(ApplicationMetricsConstants.USER_ENTITY_INFO, "user1"); entityInfo.put(ApplicationMetricsConstants.USER_ENTITY_INFO, "user1");
entityInfo.put(ApplicationMetricsConstants.QUEUE_ENTITY_INFO, "test queue"); if (!missingQueue) {
entityInfo.put(ApplicationMetricsConstants.QUEUE_ENTITY_INFO,
"test queue");
}
entityInfo.put( entityInfo.put(
ApplicationMetricsConstants.UNMANAGED_APPLICATION_ENTITY_INFO, "false"); ApplicationMetricsConstants.UNMANAGED_APPLICATION_ENTITY_INFO, "false");
entityInfo.put(ApplicationMetricsConstants.APPLICATION_PRIORITY_INFO, entityInfo.put(ApplicationMetricsConstants.APPLICATION_PRIORITY_INFO,

View File

@ -100,7 +100,7 @@ public class TestAHSWebServices extends JerseyTestBase {
private static ApplicationHistoryClientService historyClientService; private static ApplicationHistoryClientService historyClientService;
private static AHSWebServices ahsWebservice; private static AHSWebServices ahsWebservice;
private static final String[] USERS = new String[] { "foo" , "bar" }; private static final String[] USERS = new String[] { "foo" , "bar" };
private static final int MAX_APPS = 5; private static final int MAX_APPS = 6;
private static Configuration conf; private static Configuration conf;
private static FileSystem fs; private static FileSystem fs;
private static final String remoteLogRootDir = "target/logs/"; private static final String remoteLogRootDir = "target/logs/";
@ -364,7 +364,27 @@ public class TestAHSWebServices extends JerseyTestBase {
JSONObject apps = json.getJSONObject("apps"); JSONObject apps = json.getJSONObject("apps");
assertEquals("incorrect number of elements", 1, apps.length()); assertEquals("incorrect number of elements", 1, apps.length());
JSONArray array = apps.getJSONArray("app"); JSONArray array = apps.getJSONArray("app");
assertEquals("incorrect number of elements", 5, array.length()); assertEquals("incorrect number of elements", MAX_APPS, array.length());
}
@Test
public void testQueueQuery() throws Exception {
WebResource r = resource();
ClientResponse response =
r.path("ws").path("v1").path("applicationhistory").path("apps")
.queryParam("queue", "test queue")
.queryParam("user.name", USERS[round])
.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
assertResponseStatusCode(Status.OK, response.getStatusInfo());
assertEquals(MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8,
response.getType().toString());
JSONObject json = response.getEntity(JSONObject.class);
assertEquals("incorrect number of elements", 1, json.length());
JSONObject apps = json.getJSONObject("apps");
assertEquals("incorrect number of elements", 1, apps.length());
JSONArray array = apps.getJSONArray("app");
assertEquals("incorrect number of elements", MAX_APPS - 1,
array.length());
} }
@Test @Test
@ -414,7 +434,7 @@ public class TestAHSWebServices extends JerseyTestBase {
JSONObject appAttempts = json.getJSONObject("appAttempts"); JSONObject appAttempts = json.getJSONObject("appAttempts");
assertEquals("incorrect number of elements", 1, appAttempts.length()); assertEquals("incorrect number of elements", 1, appAttempts.length());
JSONArray array = appAttempts.getJSONArray("appAttempt"); JSONArray array = appAttempts.getJSONArray("appAttempt");
assertEquals("incorrect number of elements", 5, array.length()); assertEquals("incorrect number of elements", MAX_APPS, array.length());
} }
@Test @Test
@ -471,7 +491,7 @@ public class TestAHSWebServices extends JerseyTestBase {
JSONObject containers = json.getJSONObject("containers"); JSONObject containers = json.getJSONObject("containers");
assertEquals("incorrect number of elements", 1, containers.length()); assertEquals("incorrect number of elements", 1, containers.length());
JSONArray array = containers.getJSONArray("container"); JSONArray array = containers.getJSONArray("container");
assertEquals("incorrect number of elements", 5, array.length()); assertEquals("incorrect number of elements", MAX_APPS, array.length());
} }
@Test @Test

View File

@ -192,7 +192,8 @@ public class WebServices {
} }
} }
if (queueQuery != null && !queueQuery.isEmpty()) { if (queueQuery != null && !queueQuery.isEmpty()) {
if (!appReport.getQueue().equals(queueQuery)) { if (appReport.getQueue() == null || !appReport.getQueue()
.equals(queueQuery)) {
continue; continue;
} }
} }