|
@@ -76,6 +76,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.MockAM;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockNM;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockNodes;
|
|
|
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.RMContextImpl;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.recovery.MemoryRMStateStore;
|
|
@@ -4967,6 +4968,30 @@ public class TestFairScheduler extends FairSchedulerTestBase {
|
|
|
.get(attId3.getApplicationId()).getQueue());
|
|
|
}
|
|
|
|
|
|
+ @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
|
|
|
+ ((FairScheduler) 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
|
|
|
public void testResourceUpdateDecommissioningNode() throws Exception {
|
|
|
// Mock the RMNodeResourceUpdate event handler to update SchedulerNode
|
|
@@ -4992,9 +5017,8 @@ public class TestFairScheduler extends FairSchedulerTestBase {
|
|
|
((AsyncDispatcher) mockDispatcher).start();
|
|
|
// Register node
|
|
|
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));
|
|
|
|
|
|
RMNode node =
|
|
|
resourceManager.getRMContext().getRMNodes().get(nm_0.getNodeId());
|
|
@@ -5032,13 +5056,12 @@ public class TestFairScheduler extends FairSchedulerTestBase {
|
|
|
Assert.assertEquals(availableResource.getVirtualCores(), 0);
|
|
|
}
|
|
|
|
|
|
- private org.apache.hadoop.yarn.server.resourcemanager.NodeManager registerNode(
|
|
|
- String hostName, int containerManagerPort, int httpPort, 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, httpPort, rackName, capability,
|
|
|
- resourceManager);
|
|
|
+ private NodeManager registerNode(String hostName, int containerManagerPort,
|
|
|
+ int httpPort, String rackName,
|
|
|
+ Resource capability)
|
|
|
+ throws IOException, YarnException {
|
|
|
+ NodeManager nm = new NodeManager(hostName, containerManagerPort, httpPort,
|
|
|
+ rackName, capability, resourceManager);
|
|
|
|
|
|
// after YARN-5375, scheduler event is processed in rm main dispatcher,
|
|
|
// wait it processed, or may lead dead lock
|