From b726ae08768084c1e77a9d62d23fa62606d1e787 Mon Sep 17 00:00:00 2001 From: Eric Payne Date: Thu, 21 Apr 2016 21:15:12 +0000 Subject: [PATCH] YARN-4556. TestFifoScheduler.testResourceOverCommit fails. Contributed by Akihiro Suda (cherry picked from commit 3dce486d88895dcdf443f4d0064d1fb6e9116045) --- .../capacity/TestCapacityScheduler.java | 16 +++++++++++++--- .../scheduler/fifo/TestFifoScheduler.java | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java index 42267771a0b..af0d6c9249e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java @@ -813,6 +813,7 @@ public void testAllocateReorder() throws Exception { @Test public void testResourceOverCommit() throws Exception { + int waitCount; Configuration conf = new Configuration(); conf.setClass(YarnConfiguration.RM_SCHEDULER, CapacityScheduler.class, ResourceScheduler.class); @@ -867,9 +868,18 @@ public void testResourceOverCommit() throws Exception { UpdateNodeResourceRequest.newInstance(nodeResourceMap); AdminService as = ((MockRM)rm).getAdminService(); as.updateNodeResource(request); - + + waitCount = 0; + while (waitCount++ != 20) { + report_nm1 = rm.getResourceScheduler().getNodeReport(nm1.getNodeId()); + if (report_nm1.getAvailableResource().getMemory() != 0) { + break; + } + LOG.info("Waiting for RMNodeResourceUpdateEvent to be handled... Tried " + + waitCount + " times already.."); + Thread.sleep(1000); + } // Now, the used resource is still 4 GB, and available resource is minus value. - report_nm1 = rm.getResourceScheduler().getNodeReport(nm1.getNodeId()); Assert.assertEquals(4 * GB, report_nm1.getUsedResource().getMemory()); Assert.assertEquals(-2 * GB, report_nm1.getAvailableResource().getMemory()); @@ -877,7 +887,7 @@ public void testResourceOverCommit() throws Exception { ContainerStatus containerStatus = BuilderUtils.newContainerStatus( c1.getId(), ContainerState.COMPLETE, "", 0, c1.getResource()); nm1.containerStatus(containerStatus); - int waitCount = 0; + waitCount = 0; while (attempt1.getJustFinishedContainers().size() < 1 && waitCount++ != 20) { LOG.info("Waiting for containers to be finished for app 1... Tried " diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/TestFifoScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/TestFifoScheduler.java index 86a017e2709..bbcc800febb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/TestFifoScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/TestFifoScheduler.java @@ -1095,6 +1095,7 @@ public void testHeadroom() throws Exception { @Test(timeout = 60000) public void testResourceOverCommit() throws Exception { + int waitCount; MockRM rm = new MockRM(conf); rm.start(); @@ -1147,9 +1148,18 @@ public void testResourceOverCommit() throws Exception { UpdateNodeResourceRequest.newInstance(nodeResourceMap); rm.getAdminService().updateNodeResource(request); + waitCount = 0; + while (waitCount++ != 20) { + report_nm1 = rm.getResourceScheduler().getNodeReport(nm1.getNodeId()); + if (report_nm1.getAvailableResource().getMemory() != 0) { + break; + } + LOG.info("Waiting for RMNodeResourceUpdateEvent to be handled... Tried " + + waitCount + " times already.."); + Thread.sleep(1000); + } // Now, the used resource is still 4 GB, and available resource is minus // value. - report_nm1 = rm.getResourceScheduler().getNodeReport(nm1.getNodeId()); Assert.assertEquals(4 * GB, report_nm1.getUsedResource().getMemory()); Assert.assertEquals(-2 * GB, report_nm1.getAvailableResource().getMemory()); @@ -1159,7 +1169,7 @@ public void testResourceOverCommit() throws Exception { BuilderUtils.newContainerStatus(c1.getId(), ContainerState.COMPLETE, "", 0, c1.getResource()); nm1.containerStatus(containerStatus); - int waitCount = 0; + waitCount = 0; while (attempt1.getJustFinishedContainers().size() < 1 && waitCount++ != 20) { LOG.info("Waiting for containers to be finished for app 1... Tried " + waitCount + " times already..");