diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e0dcd25..9266ca0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,10 +4,10 @@ build_job: script: - mvn clean install -Pdist,native -Dtar -Drequire.snappy -Dbundle.snappy -Dsnappy.lib=/usr/local/lib -DskipTests - mkdir target&&cp -rf hadoop-dist/target/* target/ - - scm 2.6.0-EDH-0u2 + - scm 2.7.1-EDH-0u1 stage: build only: - - branch-2.6.0-EDH-0u2 + - branch-2.7.1-EDH-0u1 tags: - java - dataocean 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/fair/QueuePlacementPolicy.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueuePlacementPolicy.java index 30ea213..7218a89 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueuePlacementPolicy.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueuePlacementPolicy.java @@ -166,7 +166,13 @@ public String assignAppToQueue(String requestedQueue, String user) for (QueuePlacementRule rule : rules) { String queue = rule.assignAppToQueue(requestedQueue, user, groups, configuredQueues); - if (queue == null || !queue.isEmpty()) { + // Reject + if (queue == null) { + return queue; + } + // Queue must be leaf queue + if (!queue.isEmpty() + && !configuredQueues.get(FSQueueType.PARENT).contains(queue)) { return queue; } } 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/fair/TestQueuePlacementPolicy.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestQueuePlacementPolicy.java index 32dba5c..bf54d41 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestQueuePlacementPolicy.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestQueuePlacementPolicy.java @@ -392,6 +392,48 @@ public void testGroupContainsPeriod() throws Exception { conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING, SimpleGroupsMapping.class, GroupMappingServiceProvider.class); } + + @Test + public void testUserPolicyWithParentQueue() throws Exception { + StringBuffer sb = new StringBuffer(); + sb.append(""); + sb.append(" "); + sb.append(" "); + sb.append(""); + QueuePlacementPolicy policy = parse(sb.toString()); + configuredQueues.get(FSQueueType.PARENT).add("root.user1"); + policy = parse(sb.toString()); + assertEquals("root.default", + policy.assignAppToQueue("root.user1", "user1")); + } + + @Test + public void testPrimaryGroupPolicyWithParentQueue() throws Exception { + StringBuffer sb = new StringBuffer(); + sb.append(""); + sb.append(" "); + sb.append(" "); + sb.append(""); + QueuePlacementPolicy policy = parse(sb.toString()); + configuredQueues.get(FSQueueType.PARENT).add("root.user1group"); + policy = parse(sb.toString()); + assertEquals("root.default", + policy.assignAppToQueue("root.user1group", "user1")); + } + + @Test + public void testSecondaryGroupPolicyWithParentQueue() throws Exception { + StringBuffer sb = new StringBuffer(); + sb.append(""); + sb.append(" "); + sb.append(" "); + sb.append(""); + QueuePlacementPolicy policy = parse(sb.toString()); + configuredQueues.get(FSQueueType.PARENT).add("root.user1subgroup1"); + policy = parse(sb.toString()); + assertEquals("root.default", + policy.assignAppToQueue("root.user1subgroup1", "user1")); + } private QueuePlacementPolicy parse(String str) throws Exception { // Read and parse the allocations file.