YARN-4452. NPE when submit Unmanaged application. Contributed by Naganarasimha G R.

(cherry picked from commit 50bd067e1d)

Conflicts:

	hadoop-yarn-project/CHANGES.txt
This commit is contained in:
Jason Lowe 2016-01-25 16:11:59 +00:00
parent a025b7b7ea
commit 435b6ae82b
3 changed files with 51 additions and 14 deletions

View File

@ -1100,6 +1100,9 @@ Release 2.8.0 - UNRELEASED
YARN-4402. TestNodeManagerShutdown And TestNodeManagerResync fails with YARN-4402. TestNodeManagerShutdown And TestNodeManagerResync fails with
bind exception. (Brahma Reddy Battula via jianhe) bind exception. (Brahma Reddy Battula via jianhe)
YARN-4452. NPE when submit Unmanaged application. (Naganarasimha G R
via junping_du)
YARN-4392. ApplicationCreatedEvent event time resets after RM restart/failover. YARN-4392. ApplicationCreatedEvent event time resets after RM restart/failover.
(Naganarasimha G R and Xuan Gong via xgong) (Naganarasimha G R and Xuan Gong via xgong)
@ -1211,6 +1214,9 @@ Release 2.7.3 - UNRELEASED
YARN-4439. Clarify NMContainerStatus#toString method. (Jian He via xgong) YARN-4439. Clarify NMContainerStatus#toString method. (Jian He via xgong)
YARN-4452. NPE when submit Unmanaged application. (Naganarasimha G R via
junping_du)
YARN-4398. Remove unnecessary synchronization in RMStateStore. (Ning Ding via jianhe) YARN-4398. Remove unnecessary synchronization in RMStateStore. (Ning Ding via jianhe)
YARN-4422. Generic AHS sometimes doesn't show started, node, or logs on App page YARN-4422. Generic AHS sometimes doesn't show started, node, or logs on App page
@ -2092,6 +2098,9 @@ Release 2.6.4 - UNRELEASED
BUG FIXES BUG FIXES
YARN-4452. NPE when submit Unmanaged application. (Naganarasimha G R
via junping_du)
YARN-4546. ResourceManager crash due to scheduling opportunity overflow. YARN-4546. ResourceManager crash due to scheduling opportunity overflow.
(Jason Lowe via junping_du) (Jason Lowe via junping_du)

View File

@ -161,6 +161,8 @@ public class SystemMetricsPublisher extends CompositeService {
public void appAttemptRegistered(RMAppAttempt appAttempt, public void appAttemptRegistered(RMAppAttempt appAttempt,
long registeredTime) { long registeredTime) {
if (publishSystemMetrics) { if (publishSystemMetrics) {
ContainerId container = (appAttempt.getMasterContainer() == null) ? null
: appAttempt.getMasterContainer().getId();
dispatcher.getEventHandler().handle( dispatcher.getEventHandler().handle(
new AppAttemptRegisteredEvent( new AppAttemptRegisteredEvent(
appAttempt.getAppAttemptId(), appAttempt.getAppAttemptId(),
@ -168,7 +170,7 @@ public class SystemMetricsPublisher extends CompositeService {
appAttempt.getRpcPort(), appAttempt.getRpcPort(),
appAttempt.getTrackingUrl(), appAttempt.getTrackingUrl(),
appAttempt.getOriginalTrackingUrl(), appAttempt.getOriginalTrackingUrl(),
appAttempt.getMasterContainer().getId(), container,
registeredTime)); registeredTime));
} }
} }
@ -177,6 +179,8 @@ public class SystemMetricsPublisher extends CompositeService {
public void appAttemptFinished(RMAppAttempt appAttempt, public void appAttemptFinished(RMAppAttempt appAttempt,
RMAppAttemptState appAttemtpState, RMApp app, long finishedTime) { RMAppAttemptState appAttemtpState, RMApp app, long finishedTime) {
if (publishSystemMetrics) { if (publishSystemMetrics) {
ContainerId container = (appAttempt.getMasterContainer() == null) ? null
: appAttempt.getMasterContainer().getId();
dispatcher.getEventHandler().handle( dispatcher.getEventHandler().handle(
new AppAttemptFinishedEvent( new AppAttemptFinishedEvent(
appAttempt.getAppAttemptId(), appAttempt.getAppAttemptId(),
@ -188,7 +192,7 @@ public class SystemMetricsPublisher extends CompositeService {
app.getFinalApplicationStatus(), app.getFinalApplicationStatus(),
RMServerUtils.createApplicationAttemptState(appAttemtpState), RMServerUtils.createApplicationAttemptState(appAttemtpState),
finishedTime, finishedTime,
appAttempt.getMasterContainer().getId())); container));
} }
} }
@ -391,9 +395,10 @@ public class SystemMetricsPublisher extends CompositeService {
event.getHost()); event.getHost());
eventInfo.put(AppAttemptMetricsConstants.RPC_PORT_EVENT_INFO, eventInfo.put(AppAttemptMetricsConstants.RPC_PORT_EVENT_INFO,
event.getRpcPort()); event.getRpcPort());
eventInfo.put( if (event.getMasterContainerId() != null) {
AppAttemptMetricsConstants.MASTER_CONTAINER_EVENT_INFO, eventInfo.put(AppAttemptMetricsConstants.MASTER_CONTAINER_EVENT_INFO,
event.getMasterContainerId().toString()); event.getMasterContainerId().toString());
}
tEvent.setEventInfo(eventInfo); tEvent.setEventInfo(eventInfo);
entity.addEvent(tEvent); entity.addEvent(tEvent);
putEntity(entity); putEntity(entity);
@ -418,9 +423,10 @@ public class SystemMetricsPublisher extends CompositeService {
event.getFinalApplicationStatus().toString()); event.getFinalApplicationStatus().toString());
eventInfo.put(AppAttemptMetricsConstants.STATE_EVENT_INFO, eventInfo.put(AppAttemptMetricsConstants.STATE_EVENT_INFO,
event.getYarnApplicationAttemptState().toString()); event.getYarnApplicationAttemptState().toString());
eventInfo.put( if (event.getMasterContainerId() != null) {
AppAttemptMetricsConstants.MASTER_CONTAINER_EVENT_INFO, eventInfo.put(AppAttemptMetricsConstants.MASTER_CONTAINER_EVENT_INFO,
event.getMasterContainerId().toString()); event.getMasterContainerId().toString());
}
tEvent.setEventInfo(eventInfo); tEvent.setEventInfo(eventInfo);
entity.addEvent(tEvent); entity.addEvent(tEvent);
putEntity(entity); putEntity(entity);

View File

@ -256,11 +256,31 @@ public class TestSystemMetricsPublisher {
} }
} }
@Test(timeout = 10000)
public void testPublishAppAttemptMetricsForUnmanagedAM() throws Exception {
ApplicationAttemptId appAttemptId =
ApplicationAttemptId.newInstance(ApplicationId.newInstance(0, 1), 1);
RMAppAttempt appAttempt = createRMAppAttempt(appAttemptId,true);
metricsPublisher.appAttemptRegistered(appAttempt, Integer.MAX_VALUE + 1L);
RMApp app = mock(RMApp.class);
when(app.getFinalApplicationStatus()).thenReturn(FinalApplicationStatus.UNDEFINED);
metricsPublisher.appAttemptFinished(appAttempt, RMAppAttemptState.FINISHED, app,
Integer.MAX_VALUE + 2L);
TimelineEntity entity = null;
do {
entity =
store.getEntity(appAttemptId.toString(),
AppAttemptMetricsConstants.ENTITY_TYPE,
EnumSet.allOf(Field.class));
// ensure two events are both published before leaving the loop
} while (entity == null || entity.getEvents().size() < 2);
}
@Test(timeout = 10000) @Test(timeout = 10000)
public void testPublishAppAttemptMetrics() throws Exception { public void testPublishAppAttemptMetrics() throws Exception {
ApplicationAttemptId appAttemptId = ApplicationAttemptId appAttemptId =
ApplicationAttemptId.newInstance(ApplicationId.newInstance(0, 1), 1); ApplicationAttemptId.newInstance(ApplicationId.newInstance(0, 1), 1);
RMAppAttempt appAttempt = createRMAppAttempt(appAttemptId); RMAppAttempt appAttempt = createRMAppAttempt(appAttemptId, false);
metricsPublisher.appAttemptRegistered(appAttempt, Integer.MAX_VALUE + 1L); metricsPublisher.appAttemptRegistered(appAttempt, Integer.MAX_VALUE + 1L);
RMApp app = mock(RMApp.class); RMApp app = mock(RMApp.class);
when(app.getFinalApplicationStatus()).thenReturn(FinalApplicationStatus.UNDEFINED); when(app.getFinalApplicationStatus()).thenReturn(FinalApplicationStatus.UNDEFINED);
@ -435,15 +455,17 @@ public class TestSystemMetricsPublisher {
} }
private static RMAppAttempt createRMAppAttempt( private static RMAppAttempt createRMAppAttempt(
ApplicationAttemptId appAttemptId) { ApplicationAttemptId appAttemptId, boolean unmanagedAMAttempt) {
RMAppAttempt appAttempt = mock(RMAppAttempt.class); RMAppAttempt appAttempt = mock(RMAppAttempt.class);
when(appAttempt.getAppAttemptId()).thenReturn(appAttemptId); when(appAttempt.getAppAttemptId()).thenReturn(appAttemptId);
when(appAttempt.getHost()).thenReturn("test host"); when(appAttempt.getHost()).thenReturn("test host");
when(appAttempt.getRpcPort()).thenReturn(-100); when(appAttempt.getRpcPort()).thenReturn(-100);
Container container = mock(Container.class); if (!unmanagedAMAttempt) {
when(container.getId()) Container container = mock(Container.class);
.thenReturn(ContainerId.newContainerId(appAttemptId, 1)); when(container.getId())
when(appAttempt.getMasterContainer()).thenReturn(container); .thenReturn(ContainerId.newContainerId(appAttemptId, 1));
when(appAttempt.getMasterContainer()).thenReturn(container);
}
when(appAttempt.getDiagnostics()).thenReturn("test diagnostics info"); when(appAttempt.getDiagnostics()).thenReturn("test diagnostics info");
when(appAttempt.getTrackingUrl()).thenReturn("test tracking url"); when(appAttempt.getTrackingUrl()).thenReturn("test tracking url");
when(appAttempt.getOriginalTrackingUrl()).thenReturn( when(appAttempt.getOriginalTrackingUrl()).thenReturn(