diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java index 9eff3a9213e..db3aaca11fb 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java @@ -381,6 +381,7 @@ protected ContainerExecutor createContainerExecutor(Configuration conf) { @Override protected void serviceInit(Configuration conf) throws Exception { + UserGroupInformation.setConfiguration(conf); rmWorkPreservingRestartEnabled = conf.getBoolean(YarnConfiguration .RM_WORK_PRESERVING_RECOVERY_ENABLED, YarnConfiguration.DEFAULT_RM_WORK_PRESERVING_RECOVERY_ENABLED); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeManager.java index b2c2f6ee9a9..cf87490b951 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeManager.java @@ -23,6 +23,7 @@ import java.io.IOException; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerEvent; @@ -30,7 +31,9 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerState; import org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeLabelsProvider; import org.junit.Assert; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; public class TestNodeManager { @@ -42,6 +45,9 @@ public void init(Context nmContext) throws IOException { } } + @Rule + public ExpectedException thrown = ExpectedException.none(); + @Test public void testContainerExecutorInitCall() { NodeManager nm = new NodeManager(); @@ -170,4 +176,26 @@ public void testCreationOfNodeLabelsProviderService() e.printStackTrace(); } } + + /** + * Test whether NodeManager passes user-provided conf to + * UserGroupInformation class. If it reads this (incorrect) + * AuthenticationMethod enum an exception is thrown. + */ + @Test + public void testUserProvidedUGIConf() throws Exception { + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage("Invalid attribute value for " + + CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION + + " of DUMMYAUTH"); + Configuration dummyConf = new YarnConfiguration(); + dummyConf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION, + "DUMMYAUTH"); + NodeManager dummyNodeManager = new NodeManager(); + try { + dummyNodeManager.init(dummyConf); + } finally { + dummyNodeManager.stop(); + } + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java index 6244b77ed5e..d97604324f7 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java @@ -263,6 +263,7 @@ protected ResourceProfilesManager createResourceProfileManager() { @Override protected void serviceInit(Configuration conf) throws Exception { this.conf = conf; + UserGroupInformation.setConfiguration(conf); this.rmContext = new RMContextImpl(); rmContext.setResourceManager(this); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestResourceManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestResourceManager.java index 6282af497bc..f2073aeb55b 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestResourceManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestResourceManager.java @@ -25,6 +25,7 @@ import java.util.Collection; import java.util.concurrent.TimeoutException; +import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.conf.Configuration; @@ -51,14 +52,19 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; public class TestResourceManager { private static final Logger LOG = LoggerFactory.getLogger(TestResourceManager.class); private ResourceManager resourceManager = null; - + + @Rule + public ExpectedException thrown = ExpectedException.none(); + @Before public void setUp() throws Exception { Configuration conf = new YarnConfiguration(); @@ -329,4 +335,26 @@ protected void doSecureLogin() throws IOException { } } + /** + * Test whether ResourceManager passes user-provided conf to + * UserGroupInformation class. If it reads this (incorrect) + * AuthenticationMethod enum an exception is thrown. + */ + @Test + public void testUserProvidedUGIConf() throws Exception { + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage("Invalid attribute value for " + + CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION + + " of DUMMYAUTH"); + Configuration dummyConf = new YarnConfiguration(); + dummyConf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION, + "DUMMYAUTH"); + ResourceManager dummyResourceManager = new ResourceManager(); + try { + dummyResourceManager.init(dummyConf); + } finally { + dummyResourceManager.stop(); + } + } + }