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:
parent
a025b7b7ea
commit
435b6ae82b
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in New Issue