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 @@ private static void prepareTimelineStore(TimelineStore store, int scale)
} else if (i == 3) {
entities.addEntity(createApplicationTimelineEntity(
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 {
entities.addEntity(createApplicationTimelineEntity(
appId, false, false, false, false, YarnApplicationState.FINISHED));
@ -497,13 +501,14 @@ private static TimelineEntity createApplicationTimelineEntity(
boolean wrongAppId, boolean enableUpdateEvent,
YarnApplicationState state) {
return createApplicationTimelineEntity(appId, emptyACLs, noAttemptId,
wrongAppId, enableUpdateEvent, state, false);
wrongAppId, enableUpdateEvent, state, false, false);
}
private static TimelineEntity createApplicationTimelineEntity(
ApplicationId appId, boolean emptyACLs, boolean noAttemptId,
boolean wrongAppId, boolean enableUpdateEvent,
YarnApplicationState state, boolean missingPreemptMetrics) {
YarnApplicationState state, boolean missingPreemptMetrics,
boolean missingQueue) {
TimelineEntity entity = new TimelineEntity();
entity.setEntityType(ApplicationMetricsConstants.ENTITY_TYPE);
if (wrongAppId) {
@ -519,7 +524,10 @@ private static TimelineEntity createApplicationTimelineEntity(
entityInfo.put(ApplicationMetricsConstants.TYPE_ENTITY_INFO,
"test app type");
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(
ApplicationMetricsConstants.UNMANAGED_APPLICATION_ENTITY_INFO, "false");
entityInfo.put(ApplicationMetricsConstants.APPLICATION_PRIORITY_INFO,

View File

@ -100,7 +100,7 @@ public class TestAHSWebServices extends JerseyTestBase {
private static ApplicationHistoryClientService historyClientService;
private static AHSWebServices ahsWebservice;
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 FileSystem fs;
private static final String remoteLogRootDir = "target/logs/";
@ -364,7 +364,27 @@ public void testAppsQuery() throws Exception {
JSONObject apps = json.getJSONObject("apps");
assertEquals("incorrect number of elements", 1, apps.length());
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
@ -414,7 +434,7 @@ public void testMultipleAttempts() throws Exception {
JSONObject appAttempts = json.getJSONObject("appAttempts");
assertEquals("incorrect number of elements", 1, appAttempts.length());
JSONArray array = appAttempts.getJSONArray("appAttempt");
assertEquals("incorrect number of elements", 5, array.length());
assertEquals("incorrect number of elements", MAX_APPS, array.length());
}
@Test
@ -471,7 +491,7 @@ public void testMultipleContainers() throws Exception {
JSONObject containers = json.getJSONObject("containers");
assertEquals("incorrect number of elements", 1, containers.length());
JSONArray array = containers.getJSONArray("container");
assertEquals("incorrect number of elements", 5, array.length());
assertEquals("incorrect number of elements", MAX_APPS, array.length());
}
@Test

View File

@ -192,7 +192,8 @@ public Collection<ApplicationReport> run() throws Exception {
}
}
if (queueQuery != null && !queueQuery.isEmpty()) {
if (!appReport.getQueue().equals(queueQuery)) {
if (appReport.getQueue() == null || !appReport.getQueue()
.equals(queueQuery)) {
continue;
}
}