Index: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java (revision 258991dc5a3b13640834d1c8803f2eb840f8afea) +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java (revision 86b72edebd2e37fcadcac5faab2ef00017c515e4) @@ -550,11 +550,12 @@ } private void untrackContainerForPreemption(RMContainer container) { - synchronized (preemptedResources) { - Resources.subtractFrom(preemptedResources, - container.getAllocatedResource()); + if (containersToPreempt.remove(container)) { + synchronized (preemptedResources) { + Resources.subtractFrom(preemptedResources, + container.getAllocatedResource()); + } } - containersToPreempt.remove(container); } Set getPreemptionContainers() { Index: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java (revision 258991dc5a3b13640834d1c8803f2eb840f8afea) +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java (revision 86b72edebd2e37fcadcac5faab2ef00017c515e4) @@ -3649,6 +3649,7 @@ scheduler.handle(updateEvent); assertEquals("Application1's AM should be finished", 0, app1.getLiveContainers().size()); + assertTrue(app1.getResourceUsage().equals(Resource.newInstance(0, 0))); assertEquals("Application3's AM should be running", 1, app3.getLiveContainers().size()); assertEquals("Application3's AM requests 1024 MB memory", @@ -3667,6 +3668,7 @@ 0, app4.getAMResource().getMemorySize()); assertEquals("Application4's AM should not be running", 0, app4.getLiveContainers().size()); + assertTrue(app4.getResourceUsage().equals(Resource.newInstance(0, 0))); assertEquals("Queue1's AM resource usage should be 2048 MB memory", 2048, queue1.getAmResourceUsage().getMemorySize()); @@ -3681,6 +3683,7 @@ 0, app5.getAMResource().getMemorySize()); assertEquals("Application5's AM should not be running", 0, app5.getLiveContainers().size()); + assertTrue(app5.getResourceUsage().equals(Resource.newInstance(0, 0))); assertEquals("Queue1's AM resource usage should be 2048 MB memory", 2048, queue1.getAmResourceUsage().getMemorySize()); @@ -3692,6 +3695,7 @@ scheduler.handle(updateEvent); assertEquals("Application5's AM should not be running", 0, app5.getLiveContainers().size()); + assertTrue(app5.getResourceUsage().equals(Resource.newInstance(0, 0))); assertEquals("Queue1's AM resource usage should be 2048 MB memory", 2048, queue1.getAmResourceUsage().getMemorySize()); @@ -3706,8 +3710,10 @@ scheduler.handle(updateEvent); assertEquals("Application2's AM should be finished", 0, app2.getLiveContainers().size()); + assertTrue(app2.getResourceUsage().equals(Resource.newInstance(0, 0))); assertEquals("Application3's AM should be finished", 0, app3.getLiveContainers().size()); + assertTrue(app3.getResourceUsage().equals(Resource.newInstance(0, 0))); assertEquals("Application5's AM should be running", 1, app5.getLiveContainers().size()); assertEquals("Application5's AM requests 2048 MB memory", @@ -3727,6 +3733,7 @@ scheduler.handle(containerExpired); assertEquals("Application5's AM should have 0 container", 0, app5.getLiveContainers().size()); + assertTrue(app5.getResourceUsage().equals(Resource.newInstance(0, 0))); assertEquals("Queue1's AM resource usage should be 2048 MB memory", 2048, queue1.getAmResourceUsage().getMemorySize()); scheduler.update(); @@ -3749,6 +3756,7 @@ scheduler.handle(updateEvent); assertEquals("Application6's AM should not be running", 0, app6.getLiveContainers().size()); + assertTrue(app6.getResourceUsage().equals(Resource.newInstance(0, 0))); assertEquals("Application6's AM resource shouldn't be updated", 0, app6.getAMResource().getMemorySize()); assertEquals("Queue1's AM resource usage should be 2048 MB memory",