YARN-2559. Fixed NPE in SystemMetricsPublisher when retrieving FinalApplicationStatus. Contributed by Zhijie Shen
(cherry picked from commit ee21b13cbd
)
This commit is contained in:
parent
008e2f68f1
commit
d61cdd66db
|
@ -350,6 +350,9 @@ Release 2.6.0 - UNRELEASED
|
||||||
YARN-2558. Updated ContainerTokenIdentifier#read/write to use
|
YARN-2558. Updated ContainerTokenIdentifier#read/write to use
|
||||||
ContainerId#getContainerId. (Tsuyoshi OZAWA via jianhe)
|
ContainerId#getContainerId. (Tsuyoshi OZAWA via jianhe)
|
||||||
|
|
||||||
|
YARN-2559. Fixed NPE in SystemMetricsPublisher when retrieving
|
||||||
|
FinalApplicationStatus. (Zhijie Shen via jianhe)
|
||||||
|
|
||||||
Release 2.5.1 - 2014-09-05
|
Release 2.5.1 - 2014-09-05
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -160,7 +160,7 @@ public class SystemMetricsPublisher extends CompositeService {
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void appAttemptFinished(RMAppAttempt appAttempt,
|
public void appAttemptFinished(RMAppAttempt appAttempt,
|
||||||
RMAppAttemptState state, long finishedTime) {
|
RMAppAttemptState appAttemtpState, RMApp app, long finishedTime) {
|
||||||
if (publishSystemMetrics) {
|
if (publishSystemMetrics) {
|
||||||
dispatcher.getEventHandler().handle(
|
dispatcher.getEventHandler().handle(
|
||||||
new AppAttemptFinishedEvent(
|
new AppAttemptFinishedEvent(
|
||||||
|
@ -168,8 +168,10 @@ public class SystemMetricsPublisher extends CompositeService {
|
||||||
appAttempt.getTrackingUrl(),
|
appAttempt.getTrackingUrl(),
|
||||||
appAttempt.getOriginalTrackingUrl(),
|
appAttempt.getOriginalTrackingUrl(),
|
||||||
appAttempt.getDiagnostics(),
|
appAttempt.getDiagnostics(),
|
||||||
appAttempt.getFinalApplicationStatus(),
|
// app will get the final status from app attempt, or create one
|
||||||
RMServerUtils.createApplicationAttemptState(state),
|
// based on app state if it doesn't exist
|
||||||
|
app.getFinalApplicationStatus(),
|
||||||
|
RMServerUtils.createApplicationAttemptState(appAttemtpState),
|
||||||
finishedTime));
|
finishedTime));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1159,8 +1159,10 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable {
|
||||||
appAttempt.rmContext.getRMApplicationHistoryWriter()
|
appAttempt.rmContext.getRMApplicationHistoryWriter()
|
||||||
.applicationAttemptFinished(appAttempt, finalAttemptState);
|
.applicationAttemptFinished(appAttempt, finalAttemptState);
|
||||||
appAttempt.rmContext.getSystemMetricsPublisher()
|
appAttempt.rmContext.getSystemMetricsPublisher()
|
||||||
.appAttemptFinished(
|
.appAttemptFinished(appAttempt, finalAttemptState,
|
||||||
appAttempt, finalAttemptState, System.currentTimeMillis());
|
appAttempt.rmContext.getRMApps().get(
|
||||||
|
appAttempt.applicationAttemptId.getApplicationId()),
|
||||||
|
System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,9 @@ public class TestSystemMetricsPublisher {
|
||||||
ApplicationAttemptId.newInstance(ApplicationId.newInstance(0, 1), 1);
|
ApplicationAttemptId.newInstance(ApplicationId.newInstance(0, 1), 1);
|
||||||
RMAppAttempt appAttempt = createRMAppAttempt(appAttemptId);
|
RMAppAttempt appAttempt = createRMAppAttempt(appAttemptId);
|
||||||
metricsPublisher.appAttemptRegistered(appAttempt, Integer.MAX_VALUE + 1L);
|
metricsPublisher.appAttemptRegistered(appAttempt, Integer.MAX_VALUE + 1L);
|
||||||
metricsPublisher.appAttemptFinished(appAttempt, RMAppAttemptState.FINISHED,
|
RMApp app = mock(RMApp.class);
|
||||||
|
when(app.getFinalApplicationStatus()).thenReturn(FinalApplicationStatus.UNDEFINED);
|
||||||
|
metricsPublisher.appAttemptFinished(appAttempt, RMAppAttemptState.FINISHED, app,
|
||||||
Integer.MAX_VALUE + 2L);
|
Integer.MAX_VALUE + 2L);
|
||||||
TimelineEntity entity = null;
|
TimelineEntity entity = null;
|
||||||
do {
|
do {
|
||||||
|
@ -222,7 +224,7 @@ public class TestSystemMetricsPublisher {
|
||||||
event.getEventInfo().get(
|
event.getEventInfo().get(
|
||||||
AppAttemptMetricsConstants.ORIGINAL_TRACKING_URL_EVENT_INFO));
|
AppAttemptMetricsConstants.ORIGINAL_TRACKING_URL_EVENT_INFO));
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
appAttempt.getFinalApplicationStatus().toString(),
|
FinalApplicationStatus.UNDEFINED.toString(),
|
||||||
event.getEventInfo().get(
|
event.getEventInfo().get(
|
||||||
AppAttemptMetricsConstants.FINAL_STATUS_EVENT_INFO));
|
AppAttemptMetricsConstants.FINAL_STATUS_EVENT_INFO));
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
|
@ -340,8 +342,6 @@ public class TestSystemMetricsPublisher {
|
||||||
when(appAttempt.getTrackingUrl()).thenReturn("test tracking url");
|
when(appAttempt.getTrackingUrl()).thenReturn("test tracking url");
|
||||||
when(appAttempt.getOriginalTrackingUrl()).thenReturn(
|
when(appAttempt.getOriginalTrackingUrl()).thenReturn(
|
||||||
"test original tracking url");
|
"test original tracking url");
|
||||||
when(appAttempt.getFinalApplicationStatus()).thenReturn(
|
|
||||||
FinalApplicationStatus.UNDEFINED);
|
|
||||||
return appAttempt;
|
return appAttempt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.amlauncher.ApplicationMaste
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.metrics.SystemMetricsPublisher;
|
import org.apache.hadoop.yarn.server.resourcemanager.metrics.SystemMetricsPublisher;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore;
|
import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore.ApplicationAttemptState;
|
import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore.ApplicationAttemptState;
|
||||||
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEvent;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEvent;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEventType;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEventType;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppFailedAttemptEvent;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppFailedAttemptEvent;
|
||||||
|
@ -92,7 +93,6 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerImpl;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerImpl;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.Allocation;
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.Allocation;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerAppReport;
|
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils;
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler;
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.AppAttemptAddedSchedulerEvent;
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.AppAttemptAddedSchedulerEvent;
|
||||||
|
@ -289,7 +289,6 @@ public class TestRMAppAttemptTransitions {
|
||||||
Mockito.doReturn(resourceScheduler).when(spyRMContext).getScheduler();
|
Mockito.doReturn(resourceScheduler).when(spyRMContext).getScheduler();
|
||||||
|
|
||||||
|
|
||||||
final String user = MockApps.newUserName();
|
|
||||||
final String queue = MockApps.newQueue();
|
final String queue = MockApps.newQueue();
|
||||||
submissionContext = mock(ApplicationSubmissionContext.class);
|
submissionContext = mock(ApplicationSubmissionContext.class);
|
||||||
when(submissionContext.getQueue()).thenReturn(queue);
|
when(submissionContext.getQueue()).thenReturn(queue);
|
||||||
|
@ -1385,7 +1384,7 @@ public class TestRMAppAttemptTransitions {
|
||||||
finalState =
|
finalState =
|
||||||
ArgumentCaptor.forClass(RMAppAttemptState.class);
|
ArgumentCaptor.forClass(RMAppAttemptState.class);
|
||||||
verify(publisher).appAttemptFinished(any(RMAppAttempt.class), finalState.capture(),
|
verify(publisher).appAttemptFinished(any(RMAppAttempt.class), finalState.capture(),
|
||||||
anyLong());
|
any(RMApp.class), anyLong());
|
||||||
Assert.assertEquals(state, finalState.getValue());
|
Assert.assertEquals(state, finalState.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue