You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by sn...@apache.org on 2020/06/02 16:32:29 UTC
[hadoop] branch branch-3.3 updated: YARN-10254. CapacityScheduler
incorrect User Group Mapping after leaf queue change. Contributed by
Gergely Pollak
This is an automated email from the ASF dual-hosted git repository.
snemeth pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.3 by this push:
new f65f64e YARN-10254. CapacityScheduler incorrect User Group Mapping after leaf queue change. Contributed by Gergely Pollak
f65f64e is described below
commit f65f64e8aedfb0b4e5db6bd424c777ed7ff5eb52
Author: Szilard Nemeth <sn...@apache.org>
AuthorDate: Tue Jun 2 18:32:06 2020 +0200
YARN-10254. CapacityScheduler incorrect User Group Mapping after leaf queue change. Contributed by Gergely Pollak
---
.../placement/UserGroupMappingPlacementRule.java | 217 +++++++++++++++------
.../TestUserGroupMappingPlacementRule.java | 81 +++++---
.../TestCapacitySchedulerQueueMappingFactory.java | 20 +-
3 files changed, 213 insertions(+), 105 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/UserGroupMappingPlacementRule.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/UserGroupMappingPlacementRule.java
index 391fb34..6281e52 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/UserGroupMappingPlacementRule.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/UserGroupMappingPlacementRule.java
@@ -105,35 +105,76 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
if (mapping.getParentQueue() != null
&& mapping.getParentQueue().equals(PRIMARY_GROUP_MAPPING)
&& mapping.getQueue().equals(CURRENT_USER_MAPPING)) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "primary group current user mapping", user);
+ }
return getContextForGroupParent(user, mapping,
getPrimaryGroup(user));
} else if (mapping.getParentQueue() != null
&& mapping.getParentQueue().equals(SECONDARY_GROUP_MAPPING)
&& mapping.getQueue().equals(CURRENT_USER_MAPPING)) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "secondary group current user mapping", user);
+ }
return getContextForGroupParent(user, mapping,
getSecondaryGroup(user));
} else if (mapping.getQueue().equals(CURRENT_USER_MAPPING)) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "current user mapping", user);
+ }
return getPlacementContext(mapping, user);
} else if (mapping.getQueue().equals(PRIMARY_GROUP_MAPPING)) {
- return getContextForPrimaryGroup(user, mapping);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "primary group mapping", user);
+ }
+ return getPlacementContext(mapping, getPrimaryGroup(user));
} else if (mapping.getQueue().equals(SECONDARY_GROUP_MAPPING)) {
- return getContextForSecondaryGroup(user, mapping);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "secondary group mapping", user);
+ }
+ return getPlacementContext(mapping, getSecondaryGroup(user));
} else {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "static user static mapping", user);
+ }
return getPlacementContext(mapping);
}
}
if (user.equals(mapping.getSource())) {
if (mapping.getQueue().equals(PRIMARY_GROUP_MAPPING)) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "static user primary group mapping", user);
+ }
return getPlacementContext(mapping, getPrimaryGroup(user));
} else if (mapping.getQueue().equals(SECONDARY_GROUP_MAPPING)) {
String secondaryGroup = getSecondaryGroup(user);
if (secondaryGroup != null) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "static user secondary group mapping", user);
+ }
return getPlacementContext(mapping, secondaryGroup);
} else {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Wanted to create placement context for user {}" +
+ " using static user secondary group mapping," +
+ " but user has no secondary group!", user);
+ }
return null;
}
} else {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "static user static mapping", user);
+ }
return getPlacementContext(mapping);
}
}
@@ -142,8 +183,16 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
for (String userGroups : groups.getGroups(user)) {
if (userGroups.equals(mapping.getSource())) {
if (mapping.getQueue().equals(CURRENT_USER_MAPPING)) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "static group current user mapping", user);
+ }
return getPlacementContext(mapping, user);
}
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating placement context for user {} using " +
+ "static group static mapping", user);
+ }
return getPlacementContext(mapping);
}
}
@@ -152,49 +201,23 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
return null;
}
- // invoked for mappings:
- // u:%user:[parent].%primary_group
- // u:%user:%primary_group
- private ApplicationPlacementContext getContextForPrimaryGroup(
- String user,
- QueueMapping mapping) throws IOException {
- String group =
- CapacitySchedulerConfiguration.ROOT + "." + getPrimaryGroup(user);
-
- String parent = mapping.getParentQueue();
- CSQueue groupQueue = queueManager.getQueue(group);
-
- if (parent != null) {
- CSQueue parentQueue = queueManager.getQueue(parent);
-
- if (parentQueue instanceof ManagedParentQueue) {
- return getPlacementContext(mapping, group);
- } else {
- return groupQueue == null ? null : getPlacementContext(mapping, group);
- }
- } else {
- return groupQueue == null ? null : getPlacementContext(mapping, group);
- }
- }
-
- // invoked for mappings
- // u:%user:%secondary_group
- // u:%user:[parent].%secondary_group
- private ApplicationPlacementContext getContextForSecondaryGroup(
- String user,
- QueueMapping mapping) throws IOException {
- String secondaryGroup = getSecondaryGroup(user);
-
- if (secondaryGroup != null) {
- CSQueue queue = this.queueManager.getQueue(secondaryGroup);
- if ( queue != null) {
- return getPlacementContext(mapping, queue.getQueuePath());
- } else {
- return null;
- }
- } else {
- return null;
- }
+ /**
+ * This convenience method allows to change the parent path or a leafName in
+ * a mapping object, by creating a new one, using the builder and copying the
+ * rest of the parameters.
+ * @param mapping The mapping to be changed
+ * @param parentPath The new parentPath of the mapping
+ * @param leafName The new leafQueueName of the mapping
+ * @return The updated NEW mapping
+ */
+ private QueueMapping alterMapping(
+ QueueMapping mapping, String parentPath, String leafName) {
+ return QueueMappingBuilder.create()
+ .type(mapping.getType())
+ .source(mapping.getSource())
+ .queue(leafName)
+ .parentQueue(parentPath)
+ .build();
}
// invoked for mappings:
@@ -205,20 +228,24 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
QueueMapping mapping,
String group) throws IOException {
- if (this.queueManager.getQueue(group) != null) {
+ CSQueue groupQueue = this.queueManager.getQueue(group);
+ if (groupQueue != null) {
// replace the group string
- QueueMapping resolvedGroupMapping =
- QueueMappingBuilder.create()
- .type(mapping.getType())
- .source(mapping.getSource())
- .queue(user)
- .parentQueue(
- CapacitySchedulerConfiguration.ROOT + "." +
- group)
- .build();
+ QueueMapping resolvedGroupMapping = alterMapping(
+ mapping,
+ groupQueue.getQueuePath(),
+ user);
validateQueueMapping(resolvedGroupMapping);
return getPlacementContext(resolvedGroupMapping, user);
} else {
+
+ if (queueManager.isAmbiguous(group)) {
+ LOG.info("Queue mapping rule expect group queue to exist with name {}" +
+ " but the reference is ambiguous!", group);
+ } else {
+ LOG.info("Queue mapping rule expect group queue to exist with name {}" +
+ " but it does not exist!", group);
+ }
return null;
}
}
@@ -247,7 +274,7 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
} catch (IOException ioex) {
String message = "Failed to submit application " + applicationId +
" submitted by user " + user + " reason: " + ioex.getMessage();
- throw new YarnException(message);
+ throw new YarnException(message, ioex);
}
}
return null;
@@ -260,7 +287,6 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
private ApplicationPlacementContext getPlacementContext(QueueMapping mapping,
String leafQueueName) throws IOException {
-
//leafQueue name no longer identifies a queue uniquely checking ambiguity
if (!mapping.hasParentQueue() && queueManager.isAmbiguous(leafQueueName)) {
throw new IOException("mapping contains ambiguous leaf queue reference " +
@@ -268,13 +294,72 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
}
if (!StringUtils.isEmpty(mapping.getParentQueue())) {
- return new ApplicationPlacementContext(leafQueueName,
- mapping.getParentQueue());
- } else{
- return new ApplicationPlacementContext(leafQueueName);
+ return getPlacementContextWithParent(mapping, leafQueueName);
+ } else {
+ return getPlacementContextNoParent(leafQueueName);
}
}
+ private ApplicationPlacementContext getPlacementContextWithParent(
+ QueueMapping mapping,
+ String leafQueueName) {
+ CSQueue parent = queueManager.getQueue(mapping.getParentQueue());
+ //we don't find the specified parent, so the placement rule is invalid
+ //for this case
+ if (parent == null) {
+ if (queueManager.isAmbiguous(mapping.getParentQueue())) {
+ LOG.warn("Placement rule specified a parent queue {}, but it is" +
+ "ambiguous.", mapping.getParentQueue());
+ } else {
+ LOG.warn("Placement rule specified a parent queue {}, but it does" +
+ "not exist.", mapping.getParentQueue());
+ }
+ return null;
+ }
+
+ String parentPath = parent.getQueuePath();
+
+ //if we have a parent which is not a managed parent, we check if the leaf
+ //queue exists under this parent
+ if (!(parent instanceof ManagedParentQueue)) {
+ CSQueue queue = queueManager.getQueue(
+ parentPath + "." + leafQueueName);
+ //if the queue doesn't exit we return null
+ if (queue == null) {
+ LOG.warn("Placement rule specified a parent queue {}, but it is" +
+ " not a managed parent queue, and no queue exists with name {} " +
+ "under it.", mapping.getParentQueue(), leafQueueName);
+ return null;
+ }
+ }
+ //at this point we either have a managed parent or the queue actually
+ //exists so we have a placement context, returning it
+ return new ApplicationPlacementContext(leafQueueName, parentPath);
+ }
+
+ private ApplicationPlacementContext getPlacementContextNoParent(
+ String leafQueueName) {
+ //in this case we don't have a parent specified so we expect the queue to
+ //exist, otherwise the mapping will not be valid for this case
+ CSQueue queue = queueManager.getQueue(leafQueueName);
+ if (queue == null) {
+ if (queueManager.isAmbiguous(leafQueueName)) {
+ LOG.warn("Queue {} specified in placement rule is ambiguous",
+ leafQueueName);
+ } else {
+ LOG.warn("Queue {} specified in placement rule does not exist",
+ leafQueueName);
+ }
+ return null;
+ }
+
+ //getting parent path to make sure if the leaf name would become ambiguous
+ //the placement context stays valid.
+ CSQueue parent = queueManager.getQueue(leafQueueName).getParent();
+ return new ApplicationPlacementContext(
+ leafQueueName, parent.getQueuePath());
+ }
+
@VisibleForTesting
@Override
public boolean initialize(ResourceScheduler scheduler)
@@ -449,10 +534,12 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
//as mapping.getQueue()
if (leafQueue == null && queueManager.isAmbiguous(leafQueueFullName)) {
throw new IOException("mapping contains ambiguous leaf queue name: "
- + leafQueueFullName);
- } else {
- throw new IOException("mapping contains invalid or non-leaf queue : "
- + leafQueueFullName);
+ + leafQueueFullName);
+ } else if (parentQueue == null ||
+ (!(parentQueue instanceof ManagedParentQueue))) {
+ throw new IOException("mapping contains invalid or non-leaf queue " +
+ " and no managed parent is found: "
+ + leafQueueFullName);
}
} else if (parentQueue == null || (!(parentQueue instanceof ParentQueue))) {
throw new IOException(
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/placement/TestUserGroupMappingPlacementRule.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/placement/TestUserGroupMappingPlacementRule.java
index 1d7b6b7..9cd7ae0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/placement/TestUserGroupMappingPlacementRule.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/placement/TestUserGroupMappingPlacementRule.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.yarn.server.resourcemanager.placement;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.isNull;
import java.util.Arrays;
@@ -70,13 +71,18 @@ public class TestUserGroupMappingPlacementRule {
CapacitySchedulerQueueManager queueManager =
mock(CapacitySchedulerQueueManager.class);
+ ParentQueue root = mock(ParentQueue.class);
+ when(root.getQueuePath()).thenReturn("root");
+
ParentQueue agroup = mock(ParentQueue.class);
when(agroup.getQueuePath()).thenReturn("root.agroup");
ParentQueue bsubgroup2 = mock(ParentQueue.class);
when(bsubgroup2.getQueuePath()).thenReturn("root.bsubgroup2");
+ when(bsubgroup2.getParent()).thenReturn(root);
ManagedParentQueue managedParent = mock(ManagedParentQueue.class);
- when(managedParent.getQueueName()).thenReturn("root.managedParent");
+ when(managedParent.getQueueName()).thenReturn("managedParent");
+ when(managedParent.getQueuePath()).thenReturn("root.managedParent");
LeafQueue a = mock(LeafQueue.class);
when(a.getQueuePath()).thenReturn("root.agroup.a");
@@ -86,15 +92,23 @@ public class TestUserGroupMappingPlacementRule {
when(b.getParent()).thenReturn(bsubgroup2);
LeafQueue asubgroup2 = mock(LeafQueue.class);
when(asubgroup2.getQueuePath()).thenReturn("root.asubgroup2");
+ when(asubgroup2.getParent()).thenReturn(root);
+ when(queueManager.getQueue(isNull())).thenReturn(null);
when(queueManager.getQueue("a")).thenReturn(a);
+ when(a.getParent()).thenReturn(agroup);
when(queueManager.getQueue("b")).thenReturn(b);
+ when(b.getParent()).thenReturn(bsubgroup2);
when(queueManager.getQueue("agroup")).thenReturn(agroup);
+ when(agroup.getParent()).thenReturn(root);
when(queueManager.getQueue("bsubgroup2")).thenReturn(bsubgroup2);
+ when(bsubgroup2.getParent()).thenReturn(root);
when(queueManager.getQueue("asubgroup2")).thenReturn(asubgroup2);
+ when(asubgroup2.getParent()).thenReturn(root);
when(queueManager.getQueue("managedParent")).thenReturn(managedParent);
- when(queueManager.getQueue(null)).thenThrow(new NullPointerException());
+ when(managedParent.getParent()).thenReturn(root);
+ when(queueManager.getQueue("root")).thenReturn(root);
when(queueManager.getQueue("root.agroup")).thenReturn(agroup);
when(queueManager.getQueue("root.bsubgroup2")).thenReturn(bsubgroup2);
when(queueManager.getQueue("root.asubgroup2")).thenReturn(asubgroup2);
@@ -135,7 +149,8 @@ public class TestUserGroupMappingPlacementRule {
.source("%user")
.queue("%secondary_group").build())
.inputUser("a")
- .expectedQueue("root.asubgroup2")
+ .expectedQueue("asubgroup2")
+ .expectedParentQueue("root")
.build());
// PrimaryGroupMapping.class returns only primary group, no secondary groups
@@ -176,35 +191,37 @@ public class TestUserGroupMappingPlacementRule {
@Test
public void testMapping() throws YarnException {
+ //if a mapping rule definies no parent, we cannot expect auto creation,
+ // so we must provide already existing queues
verifyQueueMapping(
QueueMappingTestDataBuilder.create()
.queueMapping(QueueMappingBuilder.create()
.type(MappingType.USER)
.source("a")
- .queue("q1")
+ .queue("a")
.build())
.inputUser("a")
- .expectedQueue("q1")
+ .expectedQueue("a")
.build());
verifyQueueMapping(
QueueMappingTestDataBuilder.create()
.queueMapping(QueueMappingBuilder.create()
.type(MappingType.GROUP)
.source("agroup")
- .queue("q1")
+ .queue("a")
.build())
.inputUser("a")
- .expectedQueue("q1")
+ .expectedQueue("a")
.build());
verifyQueueMapping(
QueueMappingTestDataBuilder.create()
.queueMapping(QueueMappingBuilder.create()
.type(MappingType.USER)
.source("%user")
- .queue("q2")
+ .queue("b")
.build())
.inputUser("a")
- .expectedQueue("q2")
+ .expectedQueue("b")
.build());
verifyQueueMapping(
QueueMappingTestDataBuilder.create()
@@ -224,7 +241,8 @@ public class TestUserGroupMappingPlacementRule {
.queue("%primary_group")
.build())
.inputUser("a")
- .expectedQueue("root.agroup")
+ .expectedQueue("agroup")
+ .expectedParentQueue("root")
.build());
verifyQueueMapping(
QueueMappingTestDataBuilder.create()
@@ -255,10 +273,10 @@ public class TestUserGroupMappingPlacementRule {
.queueMapping(QueueMappingBuilder.create()
.type(MappingType.GROUP)
.source("asubgroup1")
- .queue("q1")
+ .queue("a")
.build())
.inputUser("a")
- .expectedQueue("q1")
+ .expectedQueue("a")
.build());
// "agroup" queue exists
@@ -268,10 +286,11 @@ public class TestUserGroupMappingPlacementRule {
.type(MappingType.USER)
.source("%user")
.queue("%primary_group")
- .parentQueue("bsubgroup2")
+ .parentQueue("root")
.build())
.inputUser("a")
- .expectedQueue("root.agroup")
+ .expectedQueue("agroup")
+ .expectedParentQueue("root")
.build());
// "abcgroup" queue doesn't exist, %primary_group queue, not managed parent
@@ -297,7 +316,8 @@ public class TestUserGroupMappingPlacementRule {
.parentQueue("managedParent")
.build())
.inputUser("abc")
- .expectedQueue("root.abcgroup")
+ .expectedQueue("abcgroup")
+ .expectedParentQueue("root.managedParent")
.build());
// "abcgroup" queue doesn't exist, %secondary_group queue
@@ -320,10 +340,11 @@ public class TestUserGroupMappingPlacementRule {
.type(MappingType.USER)
.source("%user")
.queue("%secondary_group")
- .parentQueue("bsubgroup2")
+ .parentQueue("root")
.build())
.inputUser("a")
- .expectedQueue("root.asubgroup2")
+ .expectedQueue("asubgroup2")
+ .expectedParentQueue("root")
.build());
// specify overwritten, and see if user specified a queue, and it will be
@@ -333,11 +354,11 @@ public class TestUserGroupMappingPlacementRule {
.queueMapping(QueueMappingBuilder.create()
.type(MappingType.USER)
.source("user")
- .queue("q1")
+ .queue("a")
.build())
.inputUser("user")
- .inputQueue("q2")
- .expectedQueue("q1")
+ .inputQueue("b")
+ .expectedQueue("a")
.overwrite(true)
.build());
@@ -347,11 +368,11 @@ public class TestUserGroupMappingPlacementRule {
.queueMapping(QueueMappingBuilder.create()
.type(MappingType.USER)
.source("user")
- .queue("q1")
+ .queue("a")
.build())
.inputUser("user")
- .inputQueue("q2")
- .expectedQueue("q2")
+ .inputQueue("b")
+ .expectedQueue("b")
.build());
// if overwritten not specified, it should be which user specified
@@ -364,8 +385,8 @@ public class TestUserGroupMappingPlacementRule {
.parentQueue("usergroup")
.build())
.inputUser("user")
- .inputQueue("default")
- .expectedQueue("user")
+ .inputQueue("a")
+ .expectedQueue("a")
.build());
// if overwritten not specified, it should be which user specified
@@ -374,12 +395,12 @@ public class TestUserGroupMappingPlacementRule {
.queueMapping(QueueMappingBuilder.create()
.type(MappingType.GROUP)
.source("usergroup")
- .queue("%user")
- .parentQueue("usergroup")
+ .queue("b")
+ .parentQueue("root.bsubgroup2")
.build())
.inputUser("user")
- .inputQueue("agroup")
- .expectedQueue("user")
+ .inputQueue("a")
+ .expectedQueue("b")
.overwrite(true)
.build());
@@ -391,7 +412,7 @@ public class TestUserGroupMappingPlacementRule {
.type(MappingType.GROUP)
.source("agroup")
.queue("%user")
- .parentQueue("parent1")
+ .parentQueue("root.agroup")
.build())
.inputUser("a")
.expectedQueue("a")
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/TestCapacitySchedulerQueueMappingFactory.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/TestCapacitySchedulerQueueMappingFactory.java
index adad396..eedc6ae 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/TestCapacitySchedulerQueueMappingFactory.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/TestCapacitySchedulerQueueMappingFactory.java
@@ -206,7 +206,7 @@ public class TestCapacitySchedulerQueueMappingFactory {
ApplicationPlacementContext ctx2 = r.getPlacementForApp(asc, "user2");
assertEquals("Queue", "user2", ctx2.getQueue());
- assertEquals("Queue", "c", ctx2.getParentQueue());
+ assertEquals("Queue", "root.c", ctx2.getParentQueue());
} finally {
if(mockRM != null) {
mockRM.close();
@@ -398,7 +398,7 @@ public class TestCapacitySchedulerQueueMappingFactory {
// u:user2:%primary_group
QueueMapping userQueueMapping2 = QueueMappingBuilder.create()
.type(QueueMapping.MappingType.USER)
- .source("user2")
+ .source("a1")
.queue("%primary_group")
.build();
@@ -430,8 +430,8 @@ public class TestCapacitySchedulerQueueMappingFactory {
ApplicationPlacementContext ctx = r.getPlacementForApp(asc, "user1");
assertEquals("Queue", "b1", ctx.getQueue());
- ApplicationPlacementContext ctx1 = r.getPlacementForApp(asc, "user2");
- assertEquals("Queue", "user2group", ctx1.getQueue());
+ ApplicationPlacementContext ctx1 = r.getPlacementForApp(asc, "a1");
+ assertEquals("Queue", "a1group", ctx1.getQueue());
} finally {
if (mockRM != null) {
mockRM.close();
@@ -467,14 +467,14 @@ public class TestCapacitySchedulerQueueMappingFactory {
// u:user2:%primary_group
QueueMapping userQueueMapping2 = QueueMappingBuilder.create()
.type(QueueMapping.MappingType.USER)
- .source("user2")
+ .source("a1")
.queue("%primary_group")
.build();
// u:b4:%secondary_group
QueueMapping userQueueMapping3 = QueueMappingBuilder.create()
.type(QueueMapping.MappingType.USER)
- .source("b4")
+ .source("e")
.queue("%secondary_group")
.build();
@@ -507,11 +507,11 @@ public class TestCapacitySchedulerQueueMappingFactory {
ApplicationPlacementContext ctx = r.getPlacementForApp(asc, "user1");
assertEquals("Queue", "b1", ctx.getQueue());
- ApplicationPlacementContext ctx1 = r.getPlacementForApp(asc, "user2");
- assertEquals("Queue", "user2group", ctx1.getQueue());
+ ApplicationPlacementContext ctx1 = r.getPlacementForApp(asc, "a1");
+ assertEquals("Queue", "a1group", ctx1.getQueue());
- ApplicationPlacementContext ctx2 = r.getPlacementForApp(asc, "b4");
- assertEquals("Queue", "b4subgroup1", ctx2.getQueue());
+ ApplicationPlacementContext ctx2 = r.getPlacementForApp(asc, "e");
+ assertEquals("Queue", "esubgroup1", ctx2.getQueue());
} finally {
if (mockRM != null) {
mockRM.close();
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org