Index: hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml
===================================================================
--- hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml (revision 1496721)
+++ hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml (working copy)
@@ -151,6 +151,7 @@
+
Index: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java
===================================================================
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java (revision 1496721)
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java (working copy)
@@ -170,9 +170,8 @@
maxApplicationsPerUser =
(int)(maxApplications * (userLimit / 100.0f) * userLimitFactor);
- this.maxAMResourcePerQueuePercent =
- cs.getConfiguration().
- getMaximumApplicationMasterResourcePerQueuePercent(getQueuePath());
+ float maxAMResourcePerQueuePercent = cs.getConfiguration()
+ .getMaximumApplicationMasterResourcePerQueuePercent(getQueuePath());
int maxActiveApplications =
CSQueueUtils.computeMaxActiveApplications(
resourceCalculator,
@@ -201,9 +200,9 @@
capacity, absoluteCapacity,
maximumCapacity, absoluteMaxCapacity,
userLimit, userLimitFactor,
- maxApplications, maxApplicationsPerUser,
- maxActiveApplications, maxActiveApplicationsPerUser,
- state, acls, cs.getConfiguration().getNodeLocalityDelay());
+ maxApplications, maxAMResourcePerQueuePercent, maxApplicationsPerUser,
+ maxActiveApplications, maxActiveApplicationsPerUser, state, acls, cs
+ .getConfiguration().getNodeLocalityDelay());
if(LOG.isDebugEnabled()) {
LOG.debug("LeafQueue:" + " name=" + queueName
@@ -222,10 +221,10 @@
float capacity, float absoluteCapacity,
float maximumCapacity, float absoluteMaxCapacity,
int userLimit, float userLimitFactor,
- int maxApplications, int maxApplicationsPerUser,
- int maxActiveApplications, int maxActiveApplicationsPerUser,
- QueueState state, Map acls,
- int nodeLocalityDelay)
+ int maxApplications, float maxAMResourcePerQueuePercent,
+ int maxApplicationsPerUser, int maxActiveApplications,
+ int maxActiveApplicationsPerUser, QueueState state,
+ Map acls, int nodeLocalityDelay)
{
// Sanity check
CSQueueUtils.checkMaxCapacity(getQueueName(), capacity, maximumCapacity);
@@ -242,6 +241,7 @@
this.userLimitFactor = userLimitFactor;
this.maxApplications = maxApplications;
+ this.maxAMResourcePerQueuePercent = maxAMResourcePerQueuePercent;
this.maxApplicationsPerUser = maxApplicationsPerUser;
this.maxActiveApplications = maxActiveApplications;
@@ -603,6 +603,7 @@
newlyParsedLeafQueue.absoluteMaxCapacity,
newlyParsedLeafQueue.userLimit, newlyParsedLeafQueue.userLimitFactor,
newlyParsedLeafQueue.maxApplications,
+ newlyParsedLeafQueue.maxAMResourcePerQueuePercent,
newlyParsedLeafQueue.getMaxApplicationsPerUser(),
newlyParsedLeafQueue.getMaximumActiveApplications(),
newlyParsedLeafQueue.getMaximumActiveApplicationsPerUser(),
Index: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestLeafQueue.java
===================================================================
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestLeafQueue.java (revision 1496721)
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestLeafQueue.java (working copy)
@@ -43,7 +43,6 @@
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
-import org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest;
import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.api.records.ContainerStatus;
@@ -1956,7 +1955,51 @@
assertEquals(0, app_0.getTotalRequiredResources(priority));
}
+
+ @Test
+ public void testmaxAMResourcePerQueuePercentAfterQueueRefresh()
+ throws Exception {
+ CapacitySchedulerConfiguration csConf = new CapacitySchedulerConfiguration();
+ Resource clusterResource = Resources
+ .createResource(100 * 16 * GB, 100 * 32);
+ CapacitySchedulerContext csContext = mockCSContext(csConf, clusterResource);
+ csConf.setFloat(CapacitySchedulerConfiguration.
+ MAXIMUM_APPLICATION_MASTERS_RESOURCE_PERCENT, 0.1f);
+ ParentQueue root = new ParentQueue(csContext,
+ CapacitySchedulerConfiguration.ROOT, null, null);
+ csConf.setCapacity(CapacitySchedulerConfiguration.ROOT + "." + A, 80);
+ LeafQueue a = new LeafQueue(csContext, A, root, null);
+ // 100 * 16 * 0.1 = 160
+ assertEquals(160, a.getMaximumActiveApplications());
+
+ csConf.setFloat(CapacitySchedulerConfiguration.
+ MAXIMUM_APPLICATION_MASTERS_RESOURCE_PERCENT, 0.2f);
+ LeafQueue newA = new LeafQueue(csContext, A, root, null);
+ a.reinitialize(newA, clusterResource);
+ // 100 * 16 * 0.2 = 320
+ assertEquals(320, a.getMaximumActiveApplications());
+ Resource newClusterResource = Resources.createResource(100 * 20 * GB,
+ 100 * 32);
+ a.updateClusterResource(newClusterResource);
+ // 100 * 20 * 0.2 = 400
+ assertEquals(400, a.getMaximumActiveApplications());
+ }
+
+ private CapacitySchedulerContext mockCSContext(
+ CapacitySchedulerConfiguration csConf, Resource clusterResource) {
+ CapacitySchedulerContext csContext = mock(CapacitySchedulerContext.class);
+ when(csContext.getConfiguration()).thenReturn(csConf);
+ when(csContext.getConf()).thenReturn(new YarnConfiguration());
+ when(csContext.getResourceCalculator()).thenReturn(resourceCalculator);
+ when(csContext.getClusterResources()).thenReturn(clusterResource);
+ when(csContext.getMinimumResourceCapability()).thenReturn(
+ Resources.createResource(GB, 1));
+ when(csContext.getMaximumResourceCapability()).thenReturn(
+ Resources.createResource(2 * GB, 2));
+ return csContext;
+ }
+
@After
public void tearDown() throws Exception {
}