Procházet zdrojové kódy

YARN-9685: NPE when rendering the info table of leaf queue in non-accessible partitions. Contributed by Tao Yang.

(cherry picked from commit 3b38f2019e4f8d056580f3ed67ecef591011d7a6)
Eric E Payne před 5 roky
rodič
revize
e47c483d9f

+ 16 - 8
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/CapacitySchedulerPage.java

@@ -157,10 +157,12 @@ class CapacitySchedulerPage extends RmView {
           : resourceUsages.getAmUsed();
       ri.
           __("Used Capacity:",
-              appendPercent(resourceUsages.getUsed().toString(),
+              appendPercent(resourceUsages.getUsed(),
                   capacities.getUsedCapacity() / 100))
           .__("Configured Capacity:",
-              capacities.getConfiguredMinResource().toString())
+              capacities.getConfiguredMinResource() == null ?
+                  Resources.none().toString() :
+                  capacities.getConfiguredMinResource().toString())
           .__("Configured Max Capacity:",
               (capacities.getConfiguredMaxResource() == null
                   || capacities.getConfiguredMaxResource().getResource()
@@ -168,10 +170,10 @@ class CapacitySchedulerPage extends RmView {
                           ? "unlimited"
                           : capacities.getConfiguredMaxResource().toString())
           .__("Effective Capacity:",
-              appendPercent(capacities.getEffectiveMinResource().toString(),
+              appendPercent(capacities.getEffectiveMinResource(),
                   capacities.getCapacity() / 100))
           .__("Effective Max Capacity:",
-              appendPercent(capacities.getEffectiveMaxResource().toString(),
+              appendPercent(capacities.getEffectiveMaxResource(),
                   capacities.getMaxCapacity() / 100))
           .__("Absolute Used Capacity:",
               percent(capacities.getAbsoluteUsedCapacity() / 100))
@@ -320,6 +322,8 @@ class CapacitySchedulerPage extends RmView {
         boolean isAutoCreatedLeafQueue = info.isLeafQueue() ?
             ((CapacitySchedulerLeafQueueInfo) info).isAutoCreatedLeafQueue()
             : false;
+        float capPercent = absMaxCap == 0 ? 0 : absCap/absMaxCap;
+        float usedCapPercent = absMaxCap == 0 ? 0 : absUsedCap/absMaxCap;
 
         String Q_WIDTH = width(absMaxCap * Q_MAX_WIDTH);
         LI<UL<Hamlet>> li = ul.
@@ -328,9 +332,9 @@ class CapacitySchedulerPage extends RmView {
             Q_WIDTH)
             :  Q_WIDTH).
               $title(join("Absolute Capacity:", percent(absCap))).
-              span().$style(join(Q_GIVEN, ";font-size:1px;", width(absCap/absMaxCap))).
+              span().$style(join(Q_GIVEN, ";font-size:1px;", width(capPercent))).
             __('.').__().
-              span().$style(join(width(absUsedCap/absMaxCap),
+              span().$style(join(width(usedCapPercent),
                 ";font-size:1px;left:0%;", absUsedCap > absCap ? Q_OVER : Q_UNDER)).
             __('.').__().
               span(".q", "Queue: "+info.getQueuePath().substring(5)).__().
@@ -658,8 +662,12 @@ class CapacitySchedulerPage extends RmView {
     return QueuesBlock.class;
   }
 
-  static String appendPercent(String message, float f) {
-    return message + " (" + StringUtils.formatPercent(f, 1) + ")";
+  static String appendPercent(ResourceInfo resourceInfo, float f) {
+    if (resourceInfo == null) {
+      return "";
+    }
+    return resourceInfo.toString() + " ("
+        + StringUtils.formatPercent(f, 1) + ")";
   }
 
   static String percent(float f) {

+ 2 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/PartitionQueueCapacitiesInfo.java

@@ -136,7 +136,8 @@ public class PartitionQueueCapacitiesInfo {
   }
 
   public ResourceInfo getConfiguredMaxResource() {
-    if (configuredMaxResource.getResource().equals(Resources.none())) {
+    if (configuredMaxResource == null
+        || configuredMaxResource.getResource().equals(Resources.none())) {
       return null;
     }
     return configuredMaxResource;