Browse Source

YARN-4033. In FairScheduler, parent queues should also display queue status. (Siqi Li via kasha)

Karthik Kambatla 8 years ago
parent
commit
79448d4ab1

+ 28 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerPage.java

@@ -90,6 +90,33 @@ public class FairSchedulerPage extends RmView {
     }
     }
   }
   }
   
   
+  static class ParentQueueBlock extends HtmlBlock {
+	    final FairSchedulerQueueInfo qinfo;
+
+    @Inject ParentQueueBlock(ViewContext ctx, FSQInfo info) {
+      super(ctx);
+      qinfo = (FairSchedulerQueueInfo)info.qinfo;
+    }
+
+    @Override
+    protected void render(Block html) {
+      ResponseInfo ri = info("\'" + qinfo.getQueueName() + "\' Queue Status").
+          _("Used Resources:", qinfo.getUsedResources().toString()).
+          _("Min Resources:", qinfo.getMinResources().toString()).
+          _("Max Resources:", qinfo.getMaxResources().toString());
+      int maxApps = qinfo.getMaxApplications();
+      if (maxApps < Integer.MAX_VALUE) {
+          ri._("Max Running Applications:", qinfo.getMaxApplications());
+      }
+      ri._(STEADY_FAIR_SHARE + ":", qinfo.getSteadyFairShare().toString());
+      ri._(INSTANTANEOUS_FAIR_SHARE + ":", qinfo.getFairShare().toString());
+      html._(InfoBlock.class);
+
+      // clear the info contents so this queue's info doesn't accumulate into another queue's info
+      ri.clear();
+    }
+  }
+
   static class QueueBlock extends HtmlBlock {
   static class QueueBlock extends HtmlBlock {
     final FSQInfo fsqinfo;
     final FSQInfo fsqinfo;
 
 
@@ -127,6 +154,7 @@ public class FairSchedulerPage extends RmView {
         if (info instanceof FairSchedulerLeafQueueInfo) {
         if (info instanceof FairSchedulerLeafQueueInfo) {
           li.ul("#lq").li()._(LeafQueueBlock.class)._()._();
           li.ul("#lq").li()._(LeafQueueBlock.class)._()._();
         } else {
         } else {
+          li.ul("#lq").li()._(ParentQueueBlock.class)._()._();
           li._(QueueBlock.class);
           li._(QueueBlock.class);
         }
         }
         li._();
         li._();