YARN-4235. FairScheduler PrimaryGroup does not handle empty groups returned for a user. (Anubhav Dhoot via rohithsharmaks)

(cherry picked from commit 8f195387a4)
This commit is contained in:
Rohith Sharma K S 2015-10-09 10:09:26 +05:30
parent 2c6c9e315c
commit 21609e8e9a
3 changed files with 26 additions and 1 deletions

View File

@ -860,6 +860,9 @@ Release 2.8.0 - UNRELEASED
YARN-4228. FileSystemRMStateStore use IOUtils#close instead of fs#close. (Bibin A Chundatt via rohithsharmaks)
YARN-4235. FairScheduler PrimaryGroup does not handle empty groups returned
for a user. (Anubhav Dhoot via rohithsharmaks)
Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -146,7 +146,11 @@ public abstract class QueuePlacementRule {
protected String getQueueForApp(String requestedQueue, String user,
Groups groups, Map<FSQueueType, Set<String>> configuredQueues)
throws IOException {
return "root." + cleanName(groups.getGroups(user).get(0));
final List<String> groupList = groups.getGroups(user);
if (groupList.isEmpty()) {
throw new IOException("No groups returned for user " + user);
}
return "root." + cleanName(groupList.get(0));
}
@Override

View File

@ -19,8 +19,11 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -393,6 +396,21 @@ public class TestQueuePlacementPolicy {
SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
}
@Test(expected=IOException.class)
public void testEmptyGroupsPrimaryGroupRule() throws Exception {
StringBuffer sb = new StringBuffer();
sb.append("<queuePlacementPolicy>");
sb.append(" <rule name='primaryGroup' create=\"false\" />");
sb.append(" <rule name='default' />");
sb.append("</queuePlacementPolicy>");
// Add a static mapping that returns empty groups for users
conf.setStrings(CommonConfigurationKeys
.HADOOP_USER_GROUP_STATIC_OVERRIDES, "emptygroupuser=");
QueuePlacementPolicy policy = parse(sb.toString());
policy.assignAppToQueue(null, "emptygroupuser");
}
private QueuePlacementPolicy parse(String str) throws Exception {
// Read and parse the allocations file.
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory