|
@@ -35,6 +35,7 @@ import org.apache.hadoop.yarn.api.records.ContainerId;
|
|
|
import org.apache.hadoop.yarn.api.records.ContainerStatus;
|
|
|
import org.apache.hadoop.yarn.api.records.NodeId;
|
|
|
import org.apache.hadoop.yarn.api.records.NodeState;
|
|
|
+import org.apache.hadoop.yarn.api.records.Resource;
|
|
|
import org.apache.hadoop.yarn.event.EventHandler;
|
|
|
import org.apache.hadoop.yarn.event.InlineDispatcher;
|
|
|
import org.apache.hadoop.yarn.server.api.protocolrecords.NodeHeartbeatResponse;
|
|
@@ -44,6 +45,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeCleanContainer
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEvent;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEventType;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeImpl;
|
|
|
+import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeReconnectEvent;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeStatusEvent;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.UpdatedContainerInfo;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler;
|
|
@@ -79,6 +81,18 @@ public class TestRMNodeTransitions {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private NodesListManagerEvent nodesListManagerEvent = null;
|
|
|
+
|
|
|
+ private class TestNodeListManagerEventDispatcher implements
|
|
|
+ EventHandler<NodesListManagerEvent> {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void handle(NodesListManagerEvent event) {
|
|
|
+ nodesListManagerEvent = event;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
@Before
|
|
|
public void setUp() throws Exception {
|
|
|
InlineDispatcher rmDispatcher = new InlineDispatcher();
|
|
@@ -109,8 +123,12 @@ public class TestRMNodeTransitions {
|
|
|
rmDispatcher.register(SchedulerEventType.class,
|
|
|
new TestSchedulerEventDispatcher());
|
|
|
|
|
|
+ rmDispatcher.register(NodesListManagerEventType.class,
|
|
|
+ new TestNodeListManagerEventDispatcher());
|
|
|
+
|
|
|
NodeId nodeId = BuilderUtils.newNodeId("localhost", 0);
|
|
|
node = new RMNodeImpl(nodeId, rmContext, null, 0, 0, null, null);
|
|
|
+ nodesListManagerEvent = null;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -389,8 +407,9 @@ public class TestRMNodeTransitions {
|
|
|
|
|
|
private RMNodeImpl getRunningNode() {
|
|
|
NodeId nodeId = BuilderUtils.newNodeId("localhost", 0);
|
|
|
+ Resource capability = Resource.newInstance(4096, 4);
|
|
|
RMNodeImpl node = new RMNodeImpl(nodeId, rmContext,null, 0, 0,
|
|
|
- null, null);
|
|
|
+ null, capability);
|
|
|
node.handle(new RMNodeEvent(node.getNodeID(), RMNodeEventType.STARTED));
|
|
|
Assert.assertEquals(NodeState.RUNNING, node.getState());
|
|
|
return node;
|
|
@@ -405,4 +424,60 @@ public class TestRMNodeTransitions {
|
|
|
Assert.assertEquals(NodeState.UNHEALTHY, node.getState());
|
|
|
return node;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ private RMNodeImpl getNewNode() {
|
|
|
+ NodeId nodeId = BuilderUtils.newNodeId("localhost", 0);
|
|
|
+ RMNodeImpl node = new RMNodeImpl(nodeId, rmContext, null, 0, 0, null, null);
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAdd() {
|
|
|
+ RMNodeImpl node = getNewNode();
|
|
|
+ ClusterMetrics cm = ClusterMetrics.getMetrics();
|
|
|
+ int initialActive = cm.getNumActiveNMs();
|
|
|
+ int initialLost = cm.getNumLostNMs();
|
|
|
+ int initialUnhealthy = cm.getUnhealthyNMs();
|
|
|
+ int initialDecommissioned = cm.getNumDecommisionedNMs();
|
|
|
+ int initialRebooted = cm.getNumRebootedNMs();
|
|
|
+ node.handle(new RMNodeEvent(node.getNodeID(), RMNodeEventType.STARTED));
|
|
|
+ Assert.assertEquals("Active Nodes", initialActive + 1, cm.getNumActiveNMs());
|
|
|
+ Assert.assertEquals("Lost Nodes", initialLost, cm.getNumLostNMs());
|
|
|
+ Assert.assertEquals("Unhealthy Nodes",
|
|
|
+ initialUnhealthy, cm.getUnhealthyNMs());
|
|
|
+ Assert.assertEquals("Decommissioned Nodes",
|
|
|
+ initialDecommissioned, cm.getNumDecommisionedNMs());
|
|
|
+ Assert.assertEquals("Rebooted Nodes",
|
|
|
+ initialRebooted, cm.getNumRebootedNMs());
|
|
|
+ Assert.assertEquals(NodeState.RUNNING, node.getState());
|
|
|
+ Assert.assertNotNull(nodesListManagerEvent);
|
|
|
+ Assert.assertEquals(NodesListManagerEventType.NODE_USABLE,
|
|
|
+ nodesListManagerEvent.getType());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testReconnect() {
|
|
|
+ RMNodeImpl node = getRunningNode();
|
|
|
+ ClusterMetrics cm = ClusterMetrics.getMetrics();
|
|
|
+ int initialActive = cm.getNumActiveNMs();
|
|
|
+ int initialLost = cm.getNumLostNMs();
|
|
|
+ int initialUnhealthy = cm.getUnhealthyNMs();
|
|
|
+ int initialDecommissioned = cm.getNumDecommisionedNMs();
|
|
|
+ int initialRebooted = cm.getNumRebootedNMs();
|
|
|
+ node.handle(new RMNodeReconnectEvent(node.getNodeID(), node));
|
|
|
+ Assert.assertEquals("Active Nodes", initialActive, cm.getNumActiveNMs());
|
|
|
+ Assert.assertEquals("Lost Nodes", initialLost, cm.getNumLostNMs());
|
|
|
+ Assert.assertEquals("Unhealthy Nodes",
|
|
|
+ initialUnhealthy, cm.getUnhealthyNMs());
|
|
|
+ Assert.assertEquals("Decommissioned Nodes",
|
|
|
+ initialDecommissioned, cm.getNumDecommisionedNMs());
|
|
|
+ Assert.assertEquals("Rebooted Nodes",
|
|
|
+ initialRebooted, cm.getNumRebootedNMs());
|
|
|
+ Assert.assertEquals(NodeState.RUNNING, node.getState());
|
|
|
+ Assert.assertNotNull(nodesListManagerEvent);
|
|
|
+ Assert.assertEquals(NodesListManagerEventType.NODE_USABLE,
|
|
|
+ nodesListManagerEvent.getType());
|
|
|
+ }
|
|
|
+
|
|
|
}
|