blob: 9a3e4392eb44f15a940a2e896715ce1b7e2b7f57 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.yarn.server.resourcemanager.webapp.dao;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueueCapacities;
/**
* DAO which wraps PartitionQueueCapacitiesInfo applicable for a queue
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class QueueCapacitiesInfo {
protected List<PartitionQueueCapacitiesInfo> queueCapacitiesByPartition =
new ArrayList<>();
public QueueCapacitiesInfo() {
}
public QueueCapacitiesInfo(QueueCapacities capacities,
boolean considerAMUsage) {
if (capacities == null) {
return;
}
float capacity;
float usedCapacity;
float maxCapacity;
float absCapacity;
float absUsedCapacity;
float absMaxCapacity;
float maxAMLimitPercentage;
for (String partitionName : capacities.getExistingNodeLabels()) {
usedCapacity = capacities.getUsedCapacity(partitionName) * 100;
capacity = capacities.getCapacity(partitionName) * 100;
maxCapacity = capacities.getMaximumCapacity(partitionName);
absCapacity = CapacitySchedulerQueueInfo
.cap(capacities.getAbsoluteCapacity(partitionName), 0f, 1f) * 100;
absUsedCapacity = CapacitySchedulerQueueInfo
.cap(capacities.getAbsoluteUsedCapacity(partitionName), 0f, 1f) * 100;
absMaxCapacity = CapacitySchedulerQueueInfo.cap(
capacities.getAbsoluteMaximumCapacity(partitionName), 0f, 1f) * 100;
maxAMLimitPercentage = capacities
.getMaxAMResourcePercentage(partitionName) * 100;
if (maxCapacity < CapacitySchedulerQueueInfo.EPSILON || maxCapacity > 1f)
maxCapacity = 1f;
maxCapacity = maxCapacity * 100;
queueCapacitiesByPartition.add(new PartitionQueueCapacitiesInfo(
partitionName, capacity, usedCapacity, maxCapacity, absCapacity,
absUsedCapacity, absMaxCapacity,
considerAMUsage ? maxAMLimitPercentage : 0f));
}
}
public QueueCapacitiesInfo(QueueCapacities capacities) {
this(capacities, true);
}
public void add(PartitionQueueCapacitiesInfo partitionQueueCapacitiesInfo) {
queueCapacitiesByPartition.add(partitionQueueCapacitiesInfo);
}
public List<PartitionQueueCapacitiesInfo> getQueueCapacitiesByPartition() {
return queueCapacitiesByPartition;
}
public void setQueueCapacitiesByPartition(
List<PartitionQueueCapacitiesInfo> capacities) {
this.queueCapacitiesByPartition = capacities;
}
public PartitionQueueCapacitiesInfo getPartitionQueueCapacitiesInfo(
String partitionName) {
for (PartitionQueueCapacitiesInfo partitionQueueCapacitiesInfo : queueCapacitiesByPartition) {
if (partitionQueueCapacitiesInfo.getPartitionName()
.equals(partitionName)) {
return partitionQueueCapacitiesInfo;
}
}
return new PartitionQueueCapacitiesInfo();
}
}