YARN-4723. NodesListManager$UnknownNodeId ClassCastException. Contributed by Kuhu Shukla

This commit is contained in:
Jason Lowe 2016-02-26 20:28:29 +00:00
parent 3bcca662bc
commit f68e1401b8
4 changed files with 24 additions and 11 deletions

View File

@ -98,6 +98,9 @@ Release 2.7.3 - UNRELEASED
YARN-2046. Out of band heartbeats are sent only on container kill and
possibly too early (Ming Ma via jlowe)
YARN-4723. NodesListManager$UnknownNodeId ClassCastException (Kuhu Shukla
via jlowe)
Release 2.7.2 - 2016-01-25
INCOMPATIBLE CHANGES

View File

@ -143,17 +143,8 @@ public class NodesListManager extends AbstractService implements
UnknownNodeId nodeId = new UnknownNodeId(host);
RMNodeImpl rmNode = new RMNodeImpl(nodeId,
rmContext, host, -1, -1, new UnknownNode(host), null, null);
RMNode prevRMNode =
rmContext.getRMNodes().putIfAbsent(nodeId, rmNode);
if (prevRMNode != null) {
this.rmContext.getDispatcher().getEventHandler().handle(
new RMNodeEvent(prevRMNode.getNodeID(),
RMNodeEventType.DECOMMISSION));
} else {
this.rmContext.getDispatcher().getEventHandler().handle(
new RMNodeEvent(nodeId, RMNodeEventType.DECOMMISSION));
}
rmContext.getInactiveRMNodes().put(nodeId.getHost(), rmNode);
rmNode.handle(new RMNodeEvent(nodeId, RMNodeEventType.DECOMMISSION));
}
}

View File

@ -743,6 +743,11 @@ public class RMNodeImpl implements RMNode, EventHandler<RMNodeEvent> {
@Override
public void transition(RMNodeImpl rmNode, RMNodeEvent event) {
//check for UnknownNodeId
if (rmNode.getNodeID().getPort() == -1) {
rmNode.updateMetricsForDeactivatedNode(rmNode.getState(), finalState);
return;
}
// Inform the scheduler
rmNode.nodeUpdateQueue.clear();
// If the current state is NodeState.UNHEALTHY

View File

@ -457,6 +457,20 @@ public class TestRMNodeTransitions {
Assert.assertEquals(finishedAppId, hbrsp.getApplicationsToCleanup().get(0));
}
@Test
public void testUnknownNodeId() {
NodesListManager.UnknownNodeId nodeId =
new NodesListManager.UnknownNodeId("host1");
RMNodeImpl node =
new RMNodeImpl(nodeId, rmContext, null, 0, 0, null, null, null);
rmContext.getInactiveRMNodes().putIfAbsent(nodeId.getHost(),node);
node.handle(
new RMNodeEvent(node.getNodeID(), RMNodeEventType.DECOMMISSION));
Assert.assertNull(
"Must be null as there is no NODE_UNUSABLE update",
nodesListManagerEvent);
}
private RMNodeImpl getRunningNode() {
return getRunningNode(null);
}