diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java index 56e72d3..9a8c75a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java @@ -511,17 +511,20 @@ protected Resource resourceDeficit(FSLeafQueue sched, long curTime) { Resource resDueToMinShare = Resources.none(); Resource resDueToFairShare = Resources.none(); ResourceCalculator calc = sched.getPolicy().getResourceCalculator(); + Resource resourceUsage = sched.getResourceUsage(); if (curTime - sched.getLastTimeAtMinShare() > minShareTimeout) { + Resource minShare = sched.getMinShare(); Resource target = Resources.componentwiseMin( - sched.getMinShare(), sched.getDemand()); + minShare, sched.getDemand()); resDueToMinShare = Resources.max(calc, clusterResource, - Resources.none(), Resources.subtract(target, sched.getResourceUsage())); + Resources.none(), Resources.subtract(target, resourceUsage)); } if (curTime - sched.getLastTimeAtFairShareThreshold() > fairShareTimeout) { + Resource fairShare = sched.getFairShare(); Resource target = Resources.componentwiseMin( - sched.getFairShare(), sched.getDemand()); + fairShare, sched.getDemand()); resDueToFairShare = Resources.max(calc, clusterResource, - Resources.none(), Resources.subtract(target, sched.getResourceUsage())); + Resources.none(), Resources.subtract(target, resourceUsage)); } Resource deficit = Resources.max(calc, clusterResource, resDueToMinShare, resDueToFairShare); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/policies/FairSharePolicy.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/policies/FairSharePolicy.java index 3b9f07f..0164bdd 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/policies/FairSharePolicy.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/policies/FairSharePolicy.java @@ -135,14 +135,17 @@ public Resource getHeadroom(Resource queueFairShare, @Override public void computeShares(Collection schedulables, Resource totalResources) { - ComputeFairShares.computeShares(schedulables, totalResources, ResourceType.MEMORY); + for (ResourceType type : ResourceType.values()) { + ComputeFairShares.computeShares(schedulables, totalResources, type); + } } @Override public void computeSteadyShares(Collection queues, Resource totalResources) { - ComputeFairShares.computeSteadyShares(queues, totalResources, - ResourceType.MEMORY); + for (ResourceType type : ResourceType.values()) { + ComputeFairShares.computeSteadyShares(queues, totalResources, type); + } } @Override 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/fair/TestFairScheduler.java b/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 index 6248e09..e7adaa6 100644 --- a/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 +++ b/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 @@ -1947,28 +1947,33 @@ public void testPreemptionDecisionWithDRF() throws Exception { out.println(""); out.println(""); out.println(""); - out.println("0mb,0vcores"); + out.println(" 0mb,0vcores"); + out.println(" drf"); out.println(""); out.println(""); - out.println(".25"); - out.println("1024mb,1vcores"); + out.println(" .25"); + out.println(" 1024mb,1vcores"); + out.println(" drf"); out.println(""); out.println(""); - out.println(".25"); - out.println("1024mb,2vcores"); + out.println(" .25"); + out.println(" 1024mb,2vcores"); + out.println(" drf"); out.println(""); out.println(""); - out.println(".25"); - out.println("1024mb,3vcores"); + out.println(" .25"); + out.println(" 1024mb,3vcores"); + out.println(" drf"); out.println(""); out.println(""); - out.println(".25"); - out.println("1024mb,2vcores"); + out.println(" .25"); + out.println(" 1024mb,2vcores"); + out.println(" drf"); out.println(""); out.println("5"); out.println("10"); out.println(".5"); - out.println("drf"); + out.println("fair"); out.println(""); out.close();