浏览代码

YARN-11533. CapacityScheduler CapacityConfigType changed in legacy queue allocation mode (#5852)

Co-authored-by: Benjamin Teke <bteke@cloudera.com>
Benjamin Teke 1 年之前
父节点
当前提交
193ff1c24e

+ 19 - 13
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java

@@ -518,21 +518,27 @@ public abstract class AbstractCSQueue implements CSQueue {
 
       CapacityConfigType localType = CapacityConfigType.NONE;
 
-      // TODO: revisit this later
-      //  AbstractCSQueue.CapacityConfigType has only None, Percentage and Absolute mode
-      final Set<QueueCapacityVector.ResourceUnitCapacityType> definedCapacityTypes =
-          getConfiguredCapacityVector(label).getDefinedCapacityTypes();
-      if (definedCapacityTypes.size() == 1) {
-        QueueCapacityVector.ResourceUnitCapacityType next = definedCapacityTypes.iterator().next();
-        if (Objects.requireNonNull(next) == PERCENTAGE) {
-          localType = CapacityConfigType.PERCENTAGE;
-        } else if (next == QueueCapacityVector.ResourceUnitCapacityType.ABSOLUTE) {
-          localType = CapacityConfigType.ABSOLUTE_RESOURCE;
-        } else if (next == WEIGHT) {
+      if (queueContext.getConfiguration().isLegacyQueueMode()) {
+        localType = checkConfigTypeIsAbsoluteResource(
+                getQueuePath(), label) ? CapacityConfigType.ABSOLUTE_RESOURCE
+                : CapacityConfigType.PERCENTAGE;
+      } else {
+        // TODO: revisit this later
+        //  AbstractCSQueue.CapacityConfigType has only None, Percentage and Absolute mode
+        final Set<QueueCapacityVector.ResourceUnitCapacityType> definedCapacityTypes =
+                getConfiguredCapacityVector(label).getDefinedCapacityTypes();
+        if (definedCapacityTypes.size() == 1) {
+          QueueCapacityVector.ResourceUnitCapacityType next = definedCapacityTypes.iterator().next();
+          if (Objects.requireNonNull(next) == PERCENTAGE) {
+            localType = CapacityConfigType.PERCENTAGE;
+          } else if (next == QueueCapacityVector.ResourceUnitCapacityType.ABSOLUTE) {
+            localType = CapacityConfigType.ABSOLUTE_RESOURCE;
+          } else if (next == WEIGHT) {
+            localType = CapacityConfigType.PERCENTAGE;
+          }
+        } else { // Mixed type
           localType = CapacityConfigType.PERCENTAGE;
         }
-      } else { // Mixed type
-        localType = CapacityConfigType.PERCENTAGE;
       }
 
       if (this.capacityConfigType.equals(CapacityConfigType.NONE)) {

+ 27 - 11
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/helper/CapacitySchedulerInfoHelper.java

@@ -70,19 +70,35 @@ public class CapacitySchedulerInfoHelper {
   private CapacitySchedulerInfoHelper() {}
 
   public static String getMode(CSQueue queue) {
-    final Set<QueueCapacityVector.ResourceUnitCapacityType> definedCapacityTypes =
-        queue.getConfiguredCapacityVector(NO_LABEL).getDefinedCapacityTypes();
-    if (definedCapacityTypes.size() == 1) {
-      QueueCapacityVector.ResourceUnitCapacityType next = definedCapacityTypes.iterator().next();
-      if (Objects.requireNonNull(next) == PERCENTAGE) {
-        return "percentage";
-      } else if (next == QueueCapacityVector.ResourceUnitCapacityType.ABSOLUTE) {
+    if (((AbstractCSQueue) queue).getQueueContext().getConfiguration().isLegacyQueueMode()) {
+      if (queue.getCapacityConfigType() ==
+              AbstractCSQueue.CapacityConfigType.ABSOLUTE_RESOURCE) {
         return "absolute";
-      } else if (next == QueueCapacityVector.ResourceUnitCapacityType.WEIGHT) {
-        return "weight";
+      } else if (queue.getCapacityConfigType() ==
+              AbstractCSQueue.CapacityConfigType.PERCENTAGE) {
+        float weight = queue.getQueueCapacities().getWeight();
+        if (weight == -1) {
+          //-1 indicates we are not in weight mode
+          return "percentage";
+        } else {
+          return "weight";
+        }
+      }
+    } else {
+      final Set<QueueCapacityVector.ResourceUnitCapacityType> definedCapacityTypes =
+              queue.getConfiguredCapacityVector(NO_LABEL).getDefinedCapacityTypes();
+      if (definedCapacityTypes.size() == 1) {
+        QueueCapacityVector.ResourceUnitCapacityType next = definedCapacityTypes.iterator().next();
+        if (Objects.requireNonNull(next) == PERCENTAGE) {
+          return "percentage";
+        } else if (next == QueueCapacityVector.ResourceUnitCapacityType.ABSOLUTE) {
+          return "absolute";
+        } else if (next == QueueCapacityVector.ResourceUnitCapacityType.WEIGHT) {
+          return "weight";
+        }
+      } else if (definedCapacityTypes.size() > 1) {
+        return "mixed";
       }
-    } else if (definedCapacityTypes.size() > 1) {
-      return "mixed";
     }
 
     return "unknown";