YARN-10409. Improve MockQueueHierarchyBuilder to detect queue ambiguity. Contributed by Gergely Pollak
This commit is contained in:
parent
44542863f4
commit
a888d580d8
|
@ -19,11 +19,13 @@
|
|||
package org.apache.hadoop.yarn.server.resourcemanager.placement;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@ -33,6 +35,8 @@ class MockQueueHierarchyBuilder {
|
|||
private static final String QUEUE_SEP = ".";
|
||||
private List<String> queuePaths = Lists.newArrayList();
|
||||
private List<String> managedParentQueues = Lists.newArrayList();
|
||||
private Set<String> ambiguous = Sets.newHashSet();
|
||||
private Map<String, String> shortNameMapping = Maps.newHashMap();
|
||||
private CapacitySchedulerQueueManager queueManager;
|
||||
|
||||
public static MockQueueHierarchyBuilder create() {
|
||||
|
@ -75,6 +79,14 @@ class MockQueueHierarchyBuilder {
|
|||
for (String queuePath : queuePaths) {
|
||||
addQueues(queues, queuePath);
|
||||
}
|
||||
|
||||
ambiguous.forEach(queue -> {
|
||||
if (queue.equals("root")) {
|
||||
return;
|
||||
}
|
||||
when(queueManager.isAmbiguous(queue)).thenReturn(true);
|
||||
when(queueManager.getQueue(queue)).thenReturn(null);
|
||||
});
|
||||
}
|
||||
|
||||
private void addQueues(Map<String, AbstractCSQueue> queues,
|
||||
|
@ -89,6 +101,12 @@ class MockQueueHierarchyBuilder {
|
|||
currentQueuePath += currentQueuePath.equals("") ?
|
||||
queueName : QUEUE_SEP + queueName;
|
||||
|
||||
if (shortNameMapping.containsKey(queueName) &&
|
||||
!shortNameMapping.get(queueName).equals(currentQueuePath)) {
|
||||
ambiguous.add(queueName);
|
||||
}
|
||||
shortNameMapping.put(queueName, currentQueuePath);
|
||||
|
||||
if (managedParentQueues.contains(parentPath) && !isLeaf) {
|
||||
throw new IllegalStateException("Cannot add a queue under " +
|
||||
"managed parent");
|
||||
|
|
|
@ -84,7 +84,6 @@ public class TestUserGroupMappingPlacementRule {
|
|||
.build();
|
||||
|
||||
when(queueManager.getQueue(isNull())).thenReturn(null);
|
||||
when(queueManager.isAmbiguous("primarygrouponly")).thenReturn(true);
|
||||
rule.setQueueManager(queueManager);
|
||||
ApplicationSubmissionContext asc = Records.newRecord(
|
||||
ApplicationSubmissionContext.class);
|
||||
|
@ -349,7 +348,7 @@ public class TestUserGroupMappingPlacementRule {
|
|||
.build());
|
||||
}
|
||||
|
||||
@Test(expected = YarnException.class)
|
||||
@Test
|
||||
public void testUserMappingToNestedUserPrimaryGroupWithAmbiguousQueues()
|
||||
throws YarnException {
|
||||
// u:%user:%user, submitter nosecondarygroupuser, queue is ambiguous
|
||||
|
@ -362,6 +361,7 @@ public class TestUserGroupMappingPlacementRule {
|
|||
.parentQueue("%primary_group")
|
||||
.build())
|
||||
.inputUser("nosecondarygroupuser")
|
||||
.expectedQueue("default")
|
||||
.build());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue