Prechádzať zdrojové kódy

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

Rohith Sharma K S 9 rokov pred
rodič
commit
8f195387a4

+ 3 - 0
hadoop-yarn-project/CHANGES.txt

@@ -912,6 +912,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

+ 5 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueuePlacementRule.java

@@ -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

+ 18 - 0
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

@@ -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