YARN-11016. Queue weight is incorrectly reset to zero. Contributed by Andras Gyori

This commit is contained in:
Szilard Nemeth 2021-12-07 15:55:16 +01:00
parent 7284d23476
commit 126079612c
2 changed files with 47 additions and 1 deletions

View File

@ -312,7 +312,7 @@ public class QueueCapacities {
_set(label, CapacityType.MAX_CAP, 0); _set(label, CapacityType.MAX_CAP, 0);
_set(label, CapacityType.ABS_CAP, 0); _set(label, CapacityType.ABS_CAP, 0);
_set(label, CapacityType.ABS_MAX_CAP, 0); _set(label, CapacityType.ABS_MAX_CAP, 0);
_set(label, CapacityType.WEIGHT, 0); _set(label, CapacityType.WEIGHT, -1);
} }
} finally { } finally {
writeLock.unlock(); writeLock.unlock();

View File

@ -26,6 +26,7 @@ import org.apache.hadoop.util.Sets;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.api.records.NodeId; import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.server.resourcemanager.MockAM; import org.apache.hadoop.yarn.server.resourcemanager.MockAM;
import org.apache.hadoop.yarn.server.resourcemanager.MockNM; import org.apache.hadoop.yarn.server.resourcemanager.MockNM;
@ -38,6 +39,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsMana
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer; import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer;
import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerState; import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerState;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceLimits;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerAppReport; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerAppReport;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler;
@ -74,6 +76,28 @@ public class TestCapacitySchedulerWeightMode {
return set; return set;
} }
public static CapacitySchedulerConfiguration getConfigWithInheritedAccessibleNodeLabel(
Configuration config) {
CapacitySchedulerConfiguration conf = new CapacitySchedulerConfiguration(
config);
// Define top-level queues
conf.setQueues(CapacitySchedulerConfiguration.ROOT,
new String[] { "a"});
conf.setCapacityByLabel(A, RMNodeLabelsManager.NO_LABEL, 100f);
conf.setCapacityByLabel(A, "newLabel", 100f);
conf.setAccessibleNodeLabels(A, toSet("newLabel"));
conf.setAllowZeroCapacitySum(A, true);
// Define 2nd-level queues
conf.setQueues(A, new String[] { "a1" });
conf.setCapacityByLabel(A1, RMNodeLabelsManager.NO_LABEL, 100f);
return conf;
}
/* /*
* Queue structure: * Queue structure:
* root (*) * root (*)
@ -368,6 +392,28 @@ public class TestCapacitySchedulerWeightMode {
rm.close(); rm.close();
} }
/**
* Tests whether weight is correctly reset to -1. See YARN-11016 for further details.
* @throws IOException if reinitialization fails
*/
@Test()
public void testAccessibleNodeLabelsInheritanceNoWeightMode() throws IOException {
CapacitySchedulerConfiguration newConf = getConfigWithInheritedAccessibleNodeLabel(conf);
MockRM rm = new MockRM(newConf);
CapacityScheduler cs =
(CapacityScheduler) rm.getRMContext().getScheduler();
Resource clusterResource = Resource.newInstance(1024, 2);
cs.getRootQueue().updateClusterResource(clusterResource, new ResourceLimits(clusterResource));
try {
cs.reinitialize(newConf, rm.getRMContext());
} catch (Exception e) {
Assert.fail("Reinitialization failed with " + e);
}
}
@Test @Test
public void testQueueInfoWeight() throws Exception { public void testQueueInfoWeight() throws Exception {
MockRM rm = new MockRM(conf); MockRM rm = new MockRM(conf);