YARN-9810. Add queue capacity/maxcapacity percentage metrics. Contributed by Shubham Gupta
(cherry picked from commit 0ccf4b0fe1
)
This commit is contained in:
parent
66627749d0
commit
79ca399a30
|
@ -55,6 +55,14 @@ public class CSQueueMetrics extends QueueMetrics {
|
||||||
MutableGaugeLong maxCapacityMB;
|
MutableGaugeLong maxCapacityMB;
|
||||||
@Metric("Maximum CPU in virtual cores")
|
@Metric("Maximum CPU in virtual cores")
|
||||||
MutableGaugeInt maxCapacityVCores;
|
MutableGaugeInt maxCapacityVCores;
|
||||||
|
@Metric("Guaranteed capacity in percentage relative to parent")
|
||||||
|
private MutableGaugeFloat guaranteedCapacity;
|
||||||
|
@Metric("Guaranteed capacity in percentage relative to total partition")
|
||||||
|
private MutableGaugeFloat guaranteedAbsoluteCapacity;
|
||||||
|
@Metric("Maximum capacity in percentage relative to parent")
|
||||||
|
private MutableGaugeFloat maxCapacity;
|
||||||
|
@Metric("Maximum capacity in percentage relative to total partition")
|
||||||
|
private MutableGaugeFloat maxAbsoluteCapacity;
|
||||||
|
|
||||||
CSQueueMetrics(MetricsSystem ms, String queueName, Queue parent,
|
CSQueueMetrics(MetricsSystem ms, String queueName, Queue parent,
|
||||||
boolean enableUserMetrics, Configuration conf) {
|
boolean enableUserMetrics, Configuration conf) {
|
||||||
|
@ -204,4 +212,35 @@ public class CSQueueMetrics extends QueueMetrics {
|
||||||
return metrics;
|
return metrics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getGuaranteedCapacity() {
|
||||||
|
return guaranteedCapacity.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getGuaranteedAbsoluteCapacity() {
|
||||||
|
return guaranteedAbsoluteCapacity.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGuaranteedCapacities(String partition, float capacity,
|
||||||
|
float absoluteCapacity) {
|
||||||
|
if (partition == null || partition.equals(RMNodeLabelsManager.NO_LABEL)) {
|
||||||
|
guaranteedCapacity.set(capacity);
|
||||||
|
guaranteedAbsoluteCapacity.set(absoluteCapacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getMaxCapacity() {
|
||||||
|
return maxCapacity.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getMaxAbsoluteCapacity() {
|
||||||
|
return maxAbsoluteCapacity.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxCapacities(String partition, float capacity,
|
||||||
|
float absoluteCapacity) {
|
||||||
|
if (partition == null || partition.equals(RMNodeLabelsManager.NO_LABEL)) {
|
||||||
|
maxCapacity.set(capacity);
|
||||||
|
maxAbsoluteCapacity.set(absoluteCapacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -336,5 +336,11 @@ public class CSQueueUtils {
|
||||||
queue.getMetrics().setMaxCapacityResources(partition, rc.multiplyAndNormalizeDown(
|
queue.getMetrics().setMaxCapacityResources(partition, rc.multiplyAndNormalizeDown(
|
||||||
partitionResource, queue.getQueueCapacities().getAbsoluteMaximumCapacity(partition),
|
partitionResource, queue.getQueueCapacities().getAbsoluteMaximumCapacity(partition),
|
||||||
queue.getMinimumAllocation()));
|
queue.getMinimumAllocation()));
|
||||||
|
queue.getMetrics().setGuaranteedCapacities(partition,
|
||||||
|
queue.getQueueCapacities().getCapacity(partition),
|
||||||
|
queue.getQueueCapacities().getAbsoluteCapacity(partition));
|
||||||
|
queue.getMetrics().setMaxCapacities(partition,
|
||||||
|
queue.getQueueCapacities().getMaximumCapacity(partition),
|
||||||
|
queue.getQueueCapacities().getAbsoluteMaximumCapacity(partition));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,6 +184,8 @@ public class TestCapacityScheduler extends CapacitySchedulerTestBase {
|
||||||
private ResourceManager resourceManager = null;
|
private ResourceManager resourceManager = null;
|
||||||
private RMContext mockContext;
|
private RMContext mockContext;
|
||||||
|
|
||||||
|
private static final double DELTA = 0.000001;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
resourceManager = new ResourceManager() {
|
resourceManager = new ResourceManager() {
|
||||||
|
@ -5196,6 +5198,22 @@ public class TestCapacityScheduler extends CapacitySchedulerTestBase {
|
||||||
assertEquals(35840, ((CSQueueMetrics)cs.getQueue("b1").getMetrics()).getGuaranteedMB());
|
assertEquals(35840, ((CSQueueMetrics)cs.getQueue("b1").getMetrics()).getGuaranteedMB());
|
||||||
assertEquals(51200, ((CSQueueMetrics)cs.getQueue("a").getMetrics()).getMaxCapacityMB());
|
assertEquals(51200, ((CSQueueMetrics)cs.getQueue("a").getMetrics()).getMaxCapacityMB());
|
||||||
assertEquals(51200, ((CSQueueMetrics)cs.getQueue("b1").getMetrics()).getMaxCapacityMB());
|
assertEquals(51200, ((CSQueueMetrics)cs.getQueue("b1").getMetrics()).getMaxCapacityMB());
|
||||||
|
assertEquals(A_CAPACITY / 100, ((CSQueueMetrics)cs.getQueue("a")
|
||||||
|
.getMetrics()).getGuaranteedCapacity(), DELTA);
|
||||||
|
assertEquals(A_CAPACITY / 100, ((CSQueueMetrics)cs.getQueue("a")
|
||||||
|
.getMetrics()).getGuaranteedAbsoluteCapacity(), DELTA);
|
||||||
|
assertEquals(B1_CAPACITY / 100, ((CSQueueMetrics)cs.getQueue("b1")
|
||||||
|
.getMetrics()).getGuaranteedCapacity(), DELTA);
|
||||||
|
assertEquals((B_CAPACITY / 100) * (B1_CAPACITY / 100), ((CSQueueMetrics)cs
|
||||||
|
.getQueue("b1").getMetrics()).getGuaranteedAbsoluteCapacity(), DELTA);
|
||||||
|
assertEquals(1, ((CSQueueMetrics)cs.getQueue("a").getMetrics())
|
||||||
|
.getMaxCapacity(), DELTA);
|
||||||
|
assertEquals(1, ((CSQueueMetrics)cs.getQueue("a").getMetrics())
|
||||||
|
.getMaxAbsoluteCapacity(), DELTA);
|
||||||
|
assertEquals(1, ((CSQueueMetrics)cs.getQueue("b1").getMetrics())
|
||||||
|
.getMaxCapacity(), DELTA);
|
||||||
|
assertEquals(1, ((CSQueueMetrics)cs.getQueue("b1").getMetrics())
|
||||||
|
.getMaxAbsoluteCapacity(), DELTA);
|
||||||
|
|
||||||
// Add child queue to a, and reinitialize. Metrics should be updated
|
// Add child queue to a, and reinitialize. Metrics should be updated
|
||||||
conf.setQueues(CapacitySchedulerConfiguration.ROOT + ".a", new String[] {"a1", "a2", "a3"} );
|
conf.setQueues(CapacitySchedulerConfiguration.ROOT + ".a", new String[] {"a1", "a2", "a3"} );
|
||||||
|
|
Loading…
Reference in New Issue