diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/resourcetracker/TestNMReconnect.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/resourcetracker/TestNMReconnect.java index dce3d06..5958900 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/resourcetracker/TestNMReconnect.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/resourcetracker/TestNMReconnect.java @@ -26,6 +26,8 @@ import org.apache.hadoop.yarn.server.resourcemanager.MockNM; import org.apache.hadoop.yarn.server.resourcemanager.MockRM; import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.QueueMetrics; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler; import org.junit.Assert; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.api.records.NodeId; @@ -115,6 +117,7 @@ public void setUp() { @After public void tearDown() { + QueueMetrics.clearQueueMetrics(); resourceTrackerService.stop(); } @@ -147,7 +150,55 @@ public void testReconnect() throws Exception { } @Test - public void testCompareRMNodeAfterReconnect() throws Exception { + public void testCompareRMNodeAfterReconnectWithFairScheduler() throws Exception { + Configuration yarnConf = new YarnConfiguration(); + FairScheduler scheduler = new FairScheduler(); + ConfigurationProvider configurationProvider = + ConfigurationProviderFactory.getConfigurationProvider(yarnConf); + configurationProvider.init(yarnConf); + context.setConfigurationProvider(configurationProvider); + RMNodeLabelsManager nlm = new RMNodeLabelsManager(); + nlm.init(yarnConf); + nlm.start(); + context.setNodeLabelManager(nlm); + scheduler.setRMContext(context); + scheduler.init(yarnConf); + scheduler.start(); + dispatcher.register(SchedulerEventType.class, scheduler); + + String hostname1 = "localhost1"; + Resource capability = BuilderUtils.newResource(4096, 4); + + RegisterNodeManagerRequest request1 = recordFactory + .newRecordInstance(RegisterNodeManagerRequest.class); + NodeId nodeId1 = NodeId.newInstance(hostname1, 0); + request1.setNodeId(nodeId1); + request1.setHttpPort(0); + request1.setResource(capability); + resourceTrackerService.registerNodeManager(request1); + Assert.assertNotNull(context.getRMNodes().get(nodeId1)); + // verify Scheduler and RMContext use same RMNode reference. + Assert.assertTrue(scheduler.getSchedulerNode(nodeId1).getRMNode() == + context.getRMNodes().get(nodeId1)); + Assert.assertEquals(context.getRMNodes().get(nodeId1). + getTotalCapability(), capability); + Resource capability1 = BuilderUtils.newResource(2048, 2); + request1.setResource(capability1); + resourceTrackerService.registerNodeManager(request1); + Assert.assertNotNull(context.getRMNodes().get(nodeId1)); + // verify Scheduler and RMContext use same RMNode reference + // after reconnect. + Assert.assertTrue(scheduler.getSchedulerNode(nodeId1).getRMNode() == + context.getRMNodes().get(nodeId1)); + // verify RMNode's capability is changed. + Assert.assertEquals(context.getRMNodes().get(nodeId1). + getTotalCapability(), capability1); + nlm.stop(); + scheduler.stop(); + } + + @Test + public void testCompareRMNodeAfterReconnectWithCapacityScheduler() throws Exception { Configuration yarnConf = new YarnConfiguration(); CapacityScheduler scheduler = new CapacityScheduler(); scheduler.setConf(yarnConf); @@ -197,6 +248,19 @@ public void testCompareRMNodeAfterReconnect() throws Exception { @Test(timeout = 10000) public void testRMNodeStatusAfterReconnect() throws Exception { + // Setup queue initially to avoid contradiction with metrics system + Configuration yarnConf = new YarnConfiguration(); + CapacityScheduler scheduler = new CapacityScheduler(); + scheduler.setConf(yarnConf); + ConfigurationProvider configurationProvider = + ConfigurationProviderFactory.getConfigurationProvider(yarnConf); + configurationProvider.init(yarnConf); + context.setConfigurationProvider(configurationProvider); + RMNodeLabelsManager nlm = new RMNodeLabelsManager(); + nlm.init(yarnConf); + context.setNodeLabelManager(nlm); + scheduler.setRMContext(context); + scheduler.init(yarnConf); // The node(127.0.0.1:1234) reconnected with RM. When it registered with // RM, RM set its lastNodeHeartbeatResponse's id to 0 asynchronously. But // the node's heartbeat come before RM succeeded setting the id to 0.