diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java index 7740354c70b..74aeee52a7f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java @@ -35,6 +35,7 @@ import org.apache.hadoop.yarn.api.protocolrecords.ResourceTypes; import org.apache.hadoop.yarn.api.records.impl.LightWeightResource; import org.apache.hadoop.yarn.exceptions.ResourceNotFoundException; +import org.apache.hadoop.yarn.util.UnitsConversionUtil; import org.apache.hadoop.yarn.util.resource.ResourceUtils; /** @@ -313,13 +314,19 @@ public long getResourceValue(String resource) { @InterfaceStability.Unstable public void setResourceInformation(String resource, ResourceInformation resourceInformation) { - if (resource.equals(ResourceInformation.MEMORY_URI)) { - this.setMemorySize(resourceInformation.getValue()); - return; - } - if (resource.equals(ResourceInformation.VCORES_URI)) { - this.setVirtualCores((int) resourceInformation.getValue()); - return; + if (resource.equals(ResourceInformation.MEMORY_URI) || + resource.equals(ResourceInformation.VCORES_URI)) { + long value = UnitsConversionUtil.convert( + resourceInformation.getUnits(), + ResourceUtils.getDefaultUnit(resource), + resourceInformation.getValue()); + if (resource.equals(ResourceInformation.MEMORY_URI)) { + this.setMemorySize(value); + return; + } else if (resource.equals(ResourceInformation.VCORES_URI)) { + this.setVirtualCores((int) value); + return; + } } ResourceInformation storedResourceInfo = getResourceInformation(resource); ResourceInformation.copy(resourceInformation, storedResourceInfo); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRMAdminCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRMAdminCLI.java index 1f4b493f457..203e36e5945 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRMAdminCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRMAdminCLI.java @@ -325,7 +325,7 @@ public void testUpdateNodeResourceWithInvalidValue() throws Exception { public void testUpdateNodeResourceTypes() throws Exception { String nodeIdStr = "0.0.0.0:0"; String resourceTypes = - "memory-mb=1024Mi,vcores=1,resource1=3Gi,resource2=2m"; + "memory-mb=1Gi,vcores=1,resource1=3Gi,resource2=2m"; String[] args = {"-updateNodeResource", nodeIdStr, resourceTypes}; assertEquals(0, rmAdminCLI.run(args)); ArgumentCaptor argument =