diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java index e9583c2..5c90bb6 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java @@ -130,6 +130,16 @@ public synchronized void init(Configuration conf) { YarnConfiguration.DEFAULT_NM_VCORES_PCORES_RATIO); int virtualCores = (int)Math.ceil(cpuCores * vCoresToPCores); + if (memoryMb <= 0 || cpuCores <= 0 + || vCoresToPCores <= 0) { + throw new RuntimeException("Nodemanager setup with invalid resource" + + " configuration, resource values should be greater than 0" + + ", " + YarnConfiguration.NM_PMEM_MB + "=" + memoryMb + + ", " + YarnConfiguration.NM_VCORES + "=" + cpuCores + + ", " + YarnConfiguration.NM_VCORES_PCORES_RATIO + + "=" + vCoresToPCores); + } + this.totalResource = recordFactory.newRecordInstance(Resource.class); this.totalResource.setMemory(memoryMb); this.totalResource.setVirtualCores(virtualCores); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java index 29d6a4c..016044a 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java @@ -18,6 +18,7 @@ package org.apache.hadoop.yarn.server.nodemanager; +import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -1069,4 +1070,50 @@ protected NodeStatusUpdater createNodeStatusUpdater(Context context, } }; } + + @Test + public void testInvalidNMConfigForResource() { + YarnConfiguration conf = createNMConfig(); + + conf.setInt(YarnConfiguration.NM_PMEM_MB, -100); + + NodeManager nm = new MyNodeManager(); + try { + nm.init(conf); + fail("Initialization should have failed for invalid memory setting"); + } catch (RuntimeException e) { + // Expected + } + + conf.setInt(YarnConfiguration.NM_PMEM_MB, 100); + conf.setInt(YarnConfiguration.NM_VCORES, 1); + conf.setInt(YarnConfiguration.NM_VCORES_PCORES_RATIO, -1); + + try { + nm = new MyNodeManager(); + nm.init(conf); + fail("Initialization should have failed for invalid memory setting"); + } catch (RuntimeException e) { + // Expected + } + + conf.setInt(YarnConfiguration.NM_PMEM_MB, 100); + conf.setInt(YarnConfiguration.NM_VCORES, -1); + conf.setInt(YarnConfiguration.NM_VCORES_PCORES_RATIO, -1); + + try { + nm = new MyNodeManager(); + nm.init(conf); + fail("Initialization should have failed for invalid memory setting"); + } catch (RuntimeException e) { + // Expected + } + + conf.setInt(YarnConfiguration.NM_PMEM_MB, 100); + conf.setInt(YarnConfiguration.NM_VCORES, 1); + conf.setInt(YarnConfiguration.NM_VCORES_PCORES_RATIO, 1); + nm = new MyNodeManager(); + nm.init(conf); + } + }