|
@@ -66,6 +66,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.MockAM;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockNM;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockNM;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockNodes;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockNodes;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
|
|
|
|
+import org.apache.hadoop.yarn.server.resourcemanager.NodeManager;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.RMContextImpl;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.RMContextImpl;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
|
|
@@ -137,14 +138,11 @@ public class TestFifoScheduler {
|
|
resourceManager.stop();
|
|
resourceManager.stop();
|
|
}
|
|
}
|
|
|
|
|
|
- private org.apache.hadoop.yarn.server.resourcemanager.NodeManager
|
|
|
|
- registerNode(String hostName, int containerManagerPort, int nmHttpPort,
|
|
|
|
- String rackName, Resource capability) throws IOException,
|
|
|
|
- YarnException {
|
|
|
|
- org.apache.hadoop.yarn.server.resourcemanager.NodeManager nm =
|
|
|
|
- new org.apache.hadoop.yarn.server.resourcemanager.NodeManager(hostName,
|
|
|
|
- containerManagerPort, nmHttpPort, rackName, capability,
|
|
|
|
- resourceManager);
|
|
|
|
|
|
+ private NodeManager registerNode(String hostName, int containerManagerPort,
|
|
|
|
+ int nmHttpPort, String rackName, Resource capability)
|
|
|
|
+ throws IOException, YarnException {
|
|
|
|
+ NodeManager nm = new NodeManager(hostName, containerManagerPort, nmHttpPort,
|
|
|
|
+ rackName, capability, resourceManager);
|
|
NodeAddedSchedulerEvent nodeAddEvent1 =
|
|
NodeAddedSchedulerEvent nodeAddEvent1 =
|
|
new NodeAddedSchedulerEvent(resourceManager.getRMContext().getRMNodes()
|
|
new NodeAddedSchedulerEvent(resourceManager.getRMContext().getRMNodes()
|
|
.get(nm.getNodeId()));
|
|
.get(nm.getNodeId()));
|
|
@@ -402,16 +400,14 @@ public class TestFifoScheduler {
|
|
|
|
|
|
// Register node1
|
|
// Register node1
|
|
String host_0 = "host_0";
|
|
String host_0 = "host_0";
|
|
- org.apache.hadoop.yarn.server.resourcemanager.NodeManager nm_0 =
|
|
|
|
- registerNode(host_0, 1234, 2345, NetworkTopology.DEFAULT_RACK,
|
|
|
|
- Resources.createResource(4 * GB, 1));
|
|
|
|
|
|
+ NodeManager nm_0 = registerNode(host_0, 1234, 2345,
|
|
|
|
+ NetworkTopology.DEFAULT_RACK, Resources.createResource(4 * GB, 1));
|
|
nm_0.heartbeat();
|
|
nm_0.heartbeat();
|
|
|
|
|
|
// Register node2
|
|
// Register node2
|
|
String host_1 = "host_1";
|
|
String host_1 = "host_1";
|
|
- org.apache.hadoop.yarn.server.resourcemanager.NodeManager nm_1 =
|
|
|
|
- registerNode(host_1, 1234, 2345, NetworkTopology.DEFAULT_RACK,
|
|
|
|
- Resources.createResource(2 * GB, 1));
|
|
|
|
|
|
+ NodeManager nm_1 = registerNode(host_1, 1234, 2345,
|
|
|
|
+ NetworkTopology.DEFAULT_RACK, Resources.createResource(2 * GB, 1));
|
|
nm_1.heartbeat();
|
|
nm_1.heartbeat();
|
|
|
|
|
|
// ResourceRequest priorities
|
|
// ResourceRequest priorities
|
|
@@ -1190,6 +1186,30 @@ public class TestFifoScheduler {
|
|
rm.stop();
|
|
rm.stop();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
+ public void testRemovedNodeDecomissioningNode() throws Exception {
|
|
|
|
+ // Register nodemanager
|
|
|
|
+ NodeManager nm = registerNode("host_decom", 1234, 2345,
|
|
|
|
+ NetworkTopology.DEFAULT_RACK, Resources.createResource(8 * GB, 4));
|
|
|
|
+
|
|
|
|
+ RMNode node =
|
|
|
|
+ resourceManager.getRMContext().getRMNodes().get(nm.getNodeId());
|
|
|
|
+ // Send a heartbeat to kick the tires on the Scheduler
|
|
|
|
+ NodeUpdateSchedulerEvent nodeUpdate = new NodeUpdateSchedulerEvent(node);
|
|
|
|
+ resourceManager.getResourceScheduler().handle(nodeUpdate);
|
|
|
|
+
|
|
|
|
+ // Force remove the node to simulate race condition
|
|
|
|
+ ((FifoScheduler) resourceManager.getResourceScheduler())
|
|
|
|
+ .getNodeTracker().removeNode(nm.getNodeId());
|
|
|
|
+ // Kick off another heartbeat with the node state mocked to decommissioning
|
|
|
|
+ RMNode spyNode =
|
|
|
|
+ Mockito.spy(resourceManager.getRMContext().getRMNodes()
|
|
|
|
+ .get(nm.getNodeId()));
|
|
|
|
+ when(spyNode.getState()).thenReturn(NodeState.DECOMMISSIONING);
|
|
|
|
+ resourceManager.getResourceScheduler().handle(
|
|
|
|
+ new NodeUpdateSchedulerEvent(spyNode));
|
|
|
|
+ }
|
|
|
|
+
|
|
@Test
|
|
@Test
|
|
public void testResourceUpdateDecommissioningNode() throws Exception {
|
|
public void testResourceUpdateDecommissioningNode() throws Exception {
|
|
// Mock the RMNodeResourceUpdate event handler to update SchedulerNode
|
|
// Mock the RMNodeResourceUpdate event handler to update SchedulerNode
|
|
@@ -1215,9 +1235,8 @@ public class TestFifoScheduler {
|
|
((AsyncDispatcher) mockDispatcher).start();
|
|
((AsyncDispatcher) mockDispatcher).start();
|
|
// Register node
|
|
// Register node
|
|
String host_0 = "host_0";
|
|
String host_0 = "host_0";
|
|
- org.apache.hadoop.yarn.server.resourcemanager.NodeManager nm_0 =
|
|
|
|
- registerNode(host_0, 1234, 2345, NetworkTopology.DEFAULT_RACK,
|
|
|
|
- Resources.createResource(8 * GB, 4));
|
|
|
|
|
|
+ NodeManager nm_0 = registerNode(host_0, 1234, 2345,
|
|
|
|
+ NetworkTopology.DEFAULT_RACK, Resources.createResource(8 * GB, 4));
|
|
// ResourceRequest priorities
|
|
// ResourceRequest priorities
|
|
Priority priority_0 = Priority.newInstance(0);
|
|
Priority priority_0 = Priority.newInstance(0);
|
|
|
|
|
|
@@ -1283,7 +1302,7 @@ public class TestFifoScheduler {
|
|
}
|
|
}
|
|
|
|
|
|
private void checkNodeResourceUsage(int expected,
|
|
private void checkNodeResourceUsage(int expected,
|
|
- org.apache.hadoop.yarn.server.resourcemanager.NodeManager node) {
|
|
|
|
|
|
+ NodeManager node) {
|
|
Assert.assertEquals(expected, node.getUsed().getMemorySize());
|
|
Assert.assertEquals(expected, node.getUsed().getMemorySize());
|
|
node.checkResourceUsage();
|
|
node.checkResourceUsage();
|
|
}
|
|
}
|