Просмотр исходного кода

YARN-10587. Fix AutoCreateLeafQueueCreation cap related caculation when in absolute mode. (Qi Zhu via wangda)

Change-Id: I8889c393a9f08b633c72a2e873c6f45ca12cc82b
Wangda Tan 4 лет назад
Родитель
Сommit
4f008153ef

+ 6 - 3
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/queuemanagement/GuaranteedOrZeroCapacityOverTimePolicy.java

@@ -19,6 +19,7 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity
     .queuemanagement;
 
 import org.apache.hadoop.thirdparty.com.google.common.annotations.VisibleForTesting;
+import org.apache.hadoop.yarn.api.records.Resource;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueueUtils;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity
     .QueueManagementDynamicEditPolicy;
@@ -624,7 +625,7 @@ public class GuaranteedOrZeroCapacityOverTimePolicy
 
           QueueCapacities capacities = leafQueueEntitlements.get(
               leafQueue.getQueuePath());
-          updateToZeroCapacity(capacities, nodeLabel);
+          updateToZeroCapacity(capacities, nodeLabel, (LeafQueue)childQueue);
           deactivatedQueues.put(leafQueue.getQueuePath(),
               leafQueueTemplateCapacities);
         }
@@ -822,7 +823,7 @@ public class GuaranteedOrZeroCapacityOverTimePolicy
           updateCapacityFromTemplate(capacities, nodeLabel);
           activate(leafQueue, nodeLabel);
         } else{
-          updateToZeroCapacity(capacities, nodeLabel);
+          updateToZeroCapacity(capacities, nodeLabel, leafQueue);
         }
       }
 
@@ -834,10 +835,12 @@ public class GuaranteedOrZeroCapacityOverTimePolicy
   }
 
   private void updateToZeroCapacity(QueueCapacities capacities,
-      String nodeLabel) {
+      String nodeLabel, LeafQueue leafQueue) {
     capacities.setCapacity(nodeLabel, 0.0f);
     capacities.setMaximumCapacity(nodeLabel,
         leafQueueTemplateCapacities.getMaximumCapacity(nodeLabel));
+    leafQueue.getQueueResourceQuotas().
+        setConfiguredMinResource(nodeLabel, Resource.newInstance(0, 0));
   }
 
   private void updateCapacityFromTemplate(QueueCapacities capacities,

+ 7 - 5
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestAbsoluteResourceConfiguration.java

@@ -231,8 +231,10 @@ public class TestAbsoluteResourceConfiguration {
         d1.queueResourceQuotas.getEffectiveMaxResource());
 
     /**
-     * After adding child queue d2, adjustment happens and both d1 and d2 shares
-     * resource of Managed Parent Queue
+     * After adding child queue d2, d1 + d2 > resource
+     * of Managed Parent queue, d2 will change to 0.
+     * d1 will occupy all entire resource
+     * of Managed Parent queue.
      */
     AutoCreatedLeafQueue d2 = new AutoCreatedLeafQueue(cs, "d2", parentQueue);
     cs.addQueue(d2);
@@ -240,9 +242,9 @@ public class TestAbsoluteResourceConfiguration {
     cs.getRootQueue().updateClusterResource(cs.getClusterResource(),
         new ResourceLimits(cs.getClusterResource()));
 
-    Assert.assertEquals(QUEUE_D_TEMPL_MINRES,
+    Assert.assertEquals(Resource.newInstance(0, 0),
         d2.queueResourceQuotas.getConfiguredMinResource());
-    Assert.assertEquals(Resource.newInstance(12800, 2),
+    Assert.assertEquals(Resource.newInstance(0, 0),
         d2.queueResourceQuotas.getEffectiveMinResource());
     Assert.assertEquals(QUEUE_D_TEMPL_MAXRES,
         d2.queueResourceQuotas.getConfiguredMaxResource());
@@ -251,7 +253,7 @@ public class TestAbsoluteResourceConfiguration {
 
     Assert.assertEquals(QUEUE_D_TEMPL_MINRES,
         d1.queueResourceQuotas.getConfiguredMinResource());
-    Assert.assertEquals(Resource.newInstance(12800, 2),
+    Assert.assertEquals(QUEUE_D_TEMPL_MINRES,
         d1.queueResourceQuotas.getEffectiveMinResource());
     Assert.assertEquals(QUEUE_D_TEMPL_MAXRES,
         d1.queueResourceQuotas.getConfiguredMaxResource());

+ 6 - 6
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestAbsoluteResourceWithAutoQueue.java

@@ -235,12 +235,12 @@ public class TestAbsoluteResourceWithAutoQueue
           3, 1);
 
       final CSQueue autoCreatedLeafQueue2 = cs.getQueue(TEST_GROUPUSER2);
-      validateCapacities((AutoCreatedLeafQueue) autoCreatedLeafQueue2,
-          0.33332032f,
-          0.03333203f, 1f, 0.6f);
-      validateCapacities((AutoCreatedLeafQueue) autoCreatedLeafQueue1,
-          0.33332032f,
-          0.03333203f, 1f, 0.6f);
+      validateCapacities((AutoCreatedLeafQueue) autoCreatedLeafQueue2, 0.0f,
+          0.0f, 1f, 0.6f);
+      validateCapacities((AutoCreatedLeafQueue) autoCreatedLeafQueue1, 0.4f,
+          0.04f, 1f, 0.6f);
+      validateCapacities((AutoCreatedLeafQueue) autoCreatedLeafQueue, 0.4f,
+          0.04f, 1f, 0.6f);
 
       GuaranteedOrZeroCapacityOverTimePolicy autoCreatedQueueManagementPolicy =
           (GuaranteedOrZeroCapacityOverTimePolicy) ((ManagedParentQueue) parentQueue)