commit ac2cf1a687f47e3b4230a489238f939d73776185 Author: Wangda Tan Date: Wed Mar 30 14:46:33 2016 -0700 sls YARN-4899 diff --git a/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/scheduler/SLSCapacityScheduler.java b/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/scheduler/SLSCapacityScheduler.java index 3626027..ed20539 100644 --- a/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/scheduler/SLSCapacityScheduler.java +++ b/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/scheduler/SLSCapacityScheduler.java @@ -57,7 +57,9 @@ import org.apache.hadoop.yarn.server.resourcemanager.scheduler.Allocation; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerAppReport; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerApplication; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.LeafQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.AppAttemptAddedSchedulerEvent; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.AppAttemptRemovedSchedulerEvent; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.NodeUpdateSchedulerEvent; @@ -747,6 +749,47 @@ private void updateQueueMetrics(String queue, } } + private void initQueueMetrics(CSQueue queue) { + if (queue instanceof LeafQueue) { + SortedMap counterMap = metrics.getCounters(); + String queueName = queue.getQueueName(); + String names[] = new String[]{ + "counter.queue." + queueName + ".pending.memory", + "counter.queue." + queueName + ".pending.cores", + "counter.queue." + queueName + ".allocated.memory", + "counter.queue." + queueName + ".allocated.cores" }; + + for (int i = names.length - 1; i >= 0; i --) { + if (! counterMap.containsKey(names[i])) { + metrics.counter(names[i]); + counterMap = metrics.getCounters(); + } + } + + queueLock.lock(); + try { + if (! schedulerMetrics.isTracked(queueName)) { + schedulerMetrics.trackQueue(queueName); + } + } finally { + queueLock.unlock(); + } + + return; + } + + for (CSQueue child : queue.getChildQueues()) { + initQueueMetrics(child); + } + } + + @Override + public void serviceInit(Configuration conf) throws Exception { + super.serviceInit(conf); + + initQueueMetrics(getRootQueue()); + } + public void setQueueSet(Set queues) { this.queueSet = queues; }