diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java index 8c4932bfe67..e9df8111592 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java @@ -34,7 +34,6 @@ import org.apache.hadoop.yarn.api.records.ResourceInformation; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.ResourceNotFoundException; -import org.apache.hadoop.yarn.server.utils.BuilderUtils; import org.apache.hadoop.yarn.util.UnitsConversionUtil; import org.apache.hadoop.yarn.util.resource.ResourceUtils; import org.apache.hadoop.yarn.util.resource.Resources; @@ -472,7 +471,7 @@ public static ConfigurableResource parseResourceConfigValue(String value, } else if (value.contains("%")) { configurableResource = parseOldStyleResourceAsPercentage(value); } else { - configurableResource = parseOldStyleResource(value); + configurableResource = parseOldStyleResource(value, missing); } } catch (RuntimeException ex) { throw new AllocationConfigurationException( @@ -540,14 +539,15 @@ private static ConfigurableResource parseOldStyleResourceAsPercentage( getResourcePercentage(StringUtils.toLowerCase(value))); } - private static ConfigurableResource parseOldStyleResource(String value) + private static ConfigurableResource parseOldStyleResource(String value, long missing) throws AllocationConfigurationException { final String lCaseValue = StringUtils.toLowerCase(value); int memory = findResource(lCaseValue, "mb"); int vcores = findResource(lCaseValue, "vcores"); - - return new ConfigurableResource( - BuilderUtils.newResource(memory, vcores)); + Resource resource = Resources.createResourceWithSameValue(missing); + resource.setMemorySize(memory); + resource.setVirtualCores(vcores); + return new ConfigurableResource(resource); } private static double[] getResourcePercentage( @@ -565,6 +565,9 @@ private static ConfigurableResource parseOldStyleResource(String value) } else { resourcePercentage[0] = findPercentage(val, "memory"); resourcePercentage[1] = findPercentage(val, "cpu"); + for (int i = 2; i < numberOfKnownResourceTypes; i++) { + resourcePercentage[i] = 1.0; + } } return resourcePercentage; diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerConfiguration.java index 69d3ab9ada0..df9a0d5b1aa 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerConfiguration.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerConfiguration.java @@ -165,6 +165,54 @@ public void testParseResourceConfigValue() throws Exception { conf.set(YarnConfiguration.RESOURCE_TYPES, "test1"); ResourceUtils.resetResourceTypes(conf); + clusterResource = BuilderUtils.newResource(10*1024, 4); + clusterResource.setResourceValue("test1", 8L); + expected = BuilderUtils.newResource(5*1024,2); + expected.setResourceValue("test1",Long.MAX_VALUE); + + assertEquals(expected, + parseResourceConfigValue("2 vcores, 5120 mb").getResource()); + assertEquals(expected, + parseResourceConfigValue("5120 mb, 2 vcores").getResource()); + assertEquals(expected, + parseResourceConfigValue("2vcores,5120mb").getResource()); + assertEquals(expected, + parseResourceConfigValue("5120mb,2vcores").getResource()); + assertEquals(expected, + parseResourceConfigValue("5120mb mb, 2 vcores").getResource()); + assertEquals(expected, + parseResourceConfigValue("5120 Mb, 2 vCores").getResource()); + assertEquals(expected, + parseResourceConfigValue(" 5120 mb, 2 vcores ").getResource()); + assertEquals(expected, + parseResourceConfigValue(" 5120.3 mb, 2.35 vcores ").getResource()); + assertEquals(expected, + parseResourceConfigValue(" 5120. mb, 2. vcores ").getResource()); + + expected.setResourceValue("test1",8); + assertEquals(expected, + parseResourceConfigValue("50% memory, 50% cpu"). + getResource(clusterResource)); + assertEquals(expected, + parseResourceConfigValue("50% Memory, 50% CpU"). + getResource(clusterResource)); + assertEquals(expected, + parseResourceConfigValue("50 % memory, 50 % cpu"). + getResource(clusterResource)); + assertEquals(expected, + parseResourceConfigValue("50%memory,50%cpu"). + getResource(clusterResource)); + assertEquals(expected, + parseResourceConfigValue(" 50 % memory, 50 % cpu "). + getResource(clusterResource)); + assertEquals(expected, + parseResourceConfigValue("50.% memory, 50.% cpu"). + getResource(clusterResource)); + + expected.setResourceValue("test1",4); + assertEquals(expected, + parseResourceConfigValue("50%").getResource(clusterResource)); + clusterResource = BuilderUtils.newResource(10 * 1024, 4); expected = BuilderUtils.newResource(5 * 1024, 2); expected.setResourceValue("test1", Long.MAX_VALUE); @@ -194,8 +242,6 @@ public void testParseResourceConfigValue() throws Exception { expected.setResourceValue("test1", 4L); assertEquals(expected, - parseResourceConfigValue("50%").getResource(clusterResource)); - assertEquals(expected, parseResourceConfigValue("vcores=2, memory-mb=5120, " + "test1=4").getResource()); assertEquals(expected,