diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java index 2c9f9a37255..4287a7a8b1f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java @@ -363,8 +363,7 @@ protected void setupQueueConfigs(Resource clusterResource, this.maximumAllocation = configuration.getMaximumAllocationPerQueue( - getQueuePath()); - + getQueuePath(), csContext.getConf()); // initialized the queue state based on previous state, configured state // and its parent state. QueueState previous = getState(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java index 618ee20cfe0..db0aba0fa2a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java @@ -341,6 +341,7 @@ void initScheduler(Configuration configuration) throws } this.csConfProvider.init(configuration); this.conf = this.csConfProvider.loadConfiguration(configuration); + this.yarnConf = configuration; validateConf(this.conf); this.minimumAllocation = super.getMinimumAllocation(); initMaximumResourceCapability(super.getMaximumAllocation()); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java index 08380f5cead..0ff96de5cfc 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java @@ -878,7 +878,8 @@ public void setQueuePriority(String queue, int priority) { * name of the queue * @return setting specified per queue else falls back to the cluster setting */ - public Resource getMaximumAllocationPerQueue(String queue) { + public Resource getMaximumAllocationPerQueue(String queue, + Configuration yarnConf) { // Only support to specify memory and vcores maximum allocation per queue // for now. String queuePrefix = getQueuePrefix(queue); @@ -892,7 +893,7 @@ public Resource getMaximumAllocationPerQueue(String queue) { LOG.debug("max alloc vcores per queue for " + queue + " is " + maxAllocationVcoresPerQueue); } - Resource clusterMax = ResourceUtils.fetchMaximumAllocationFromConfig(this); + Resource clusterMax = ResourceUtils.fetchMaximumAllocationFromConfig(yarnConf); if (maxAllocationMbPerQueue == (int)UNDEFINED) { LOG.info("max alloc mb per queue for " + queue + " is undefined"); maxAllocationMbPerQueue = clusterMax.getMemorySize(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java index 72e343a9e28..1656f93e868 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java @@ -2956,7 +2956,7 @@ public void testRefreshQueuesMaxAllocationRefresh() throws Exception { cs.getMaximumResourceCapability().getMemorySize()); assertEquals("max allocation for A1", YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB, - conf.getMaximumAllocationPerQueue(A1).getMemorySize()); + conf.getMaximumAllocationPerQueue(A1, cs.getConf()).getMemorySize()); assertEquals("max allocation", YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB, ResourceUtils.fetchMaximumAllocationFromConfig(conf).getMemorySize()); @@ -3054,10 +3054,10 @@ public void testRefreshQueuesMaxAllocationRefreshLarger() throws Exception { cs.getMaximumResourceCapability().getVirtualCores()); assertEquals("max allocation MB A1", 4096, - conf.getMaximumAllocationPerQueue(A1).getMemorySize()); + conf.getMaximumAllocationPerQueue(A1, cs.getConf()).getMemorySize()); assertEquals("max allocation vcores A1", 2, - conf.getMaximumAllocationPerQueue(A1).getVirtualCores()); + conf.getMaximumAllocationPerQueue(A1, cs.getConf()).getVirtualCores()); assertEquals("cluster max allocation MB", YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB, ResourceUtils.fetchMaximumAllocationFromConfig(conf).getMemorySize()); @@ -3077,9 +3077,9 @@ public void testRefreshQueuesMaxAllocationRefreshLarger() throws Exception { // conf will have changed but we shouldn't be able to change max allocation // for the actual queue assertEquals("max allocation MB A1", 6144, - conf.getMaximumAllocationPerQueue(A1).getMemorySize()); + conf.getMaximumAllocationPerQueue(A1, cs.getConf()).getMemorySize()); assertEquals("max allocation vcores A1", 3, - conf.getMaximumAllocationPerQueue(A1).getVirtualCores()); + conf.getMaximumAllocationPerQueue(A1, cs.getConf()).getVirtualCores()); assertEquals("max allocation MB cluster", YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB, ResourceUtils.fetchMaximumAllocationFromConfig(conf).getMemorySize());