YARN-5100. The YarnApplicationState is always running in ATS even application is finished. Contributed by Xuan Gong.

(cherry picked from commit 141873ca7d)
(cherry picked from commit 416274b53e)
This commit is contained in:
Junping Du 2016-05-19 09:13:29 -07:00
parent 7a001ae19b
commit c8843cac03
2 changed files with 25 additions and 2 deletions

View File

@ -358,6 +358,9 @@ private static ApplicationReportExt convertToApplicationReport(
createdTime = event.getTimestamp();
} else if (event.getEventType().equals(
ApplicationMetricsConstants.UPDATED_EVENT_TYPE)) {
// TODO: YARN-5101. This type of events are parsed in
// time-stamp descending order which means the previous event
// could override the information from the later same type of event.
Map<String, Object> eventInfo = event.getEventInfo();
if (eventInfo == null) {
continue;
@ -376,8 +379,10 @@ private static ApplicationReportExt convertToApplicationReport(
}
if (eventInfo.containsKey(
ApplicationMetricsConstants.STATE_EVENT_INFO)) {
state = YarnApplicationState.valueOf(eventInfo.get(
ApplicationMetricsConstants.STATE_EVENT_INFO).toString());
if (!isFinalState(state)) {
state = YarnApplicationState.valueOf(eventInfo.get(
ApplicationMetricsConstants.STATE_EVENT_INFO).toString());
}
}
} else if (event.getEventType().equals(
ApplicationMetricsConstants.FINISHED_EVENT_TYPE)) {
@ -429,6 +434,12 @@ private static ApplicationReportExt convertToApplicationReport(
amNodeLabelExpression), appViewACLs);
}
private static boolean isFinalState(YarnApplicationState state) {
return state == YarnApplicationState.FINISHED
|| state == YarnApplicationState.FAILED
|| state == YarnApplicationState.KILLED;
}
private static ApplicationAttemptReport convertToApplicationAttemptReport(
TimelineEntity entity) {
String host = null;

View File

@ -537,6 +537,18 @@ private static TimelineEntity createApplicationTimelineEntity(
}
tEvent.setEventInfo(eventInfo);
entity.addEvent(tEvent);
// send a YARN_APPLICATION_STATE_UPDATED event
// after YARN_APPLICATION_FINISHED
// The final YarnApplicationState should not be changed
tEvent = new TimelineEvent();
tEvent.setEventType(
ApplicationMetricsConstants.STATE_UPDATED_EVENT_TYPE);
tEvent.setTimestamp(Integer.MAX_VALUE + 4L + appId.getId());
eventInfo = new HashMap<String, Object>();
eventInfo.put(ApplicationMetricsConstants.STATE_EVENT_INFO,
YarnApplicationState.KILLED);
tEvent.setEventInfo(eventInfo);
entity.addEvent(tEvent);
if (enableUpdateEvent) {
tEvent = new TimelineEvent();
createAppModifiedEvent(appId, tEvent, "changed queue", 5);