diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java index acd0e60..9a5bc79 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java @@ -466,4 +466,18 @@ public int hashCode() { } return (int) result; } + + /** + * Convert long to int for a resource value safely. This method assumes + * resource value is positive. + * + * @param value long resource value + * @return int resource value + */ + protected static int castToIntSafely(long value) { + if (value > Integer.MAX_VALUE) { + return Integer.MAX_VALUE; + } + return Long.valueOf(value).intValue(); + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/LightWeightResource.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/LightWeightResource.java index b80e133..a64d242 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/LightWeightResource.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/LightWeightResource.java @@ -92,7 +92,7 @@ private static ResourceInformation newDefaultInformation(String name, @Override @SuppressWarnings("deprecation") public int getMemory() { - return (int) memoryResInfo.getValue(); + return castToIntSafely(memoryResInfo.getValue()); } @Override @@ -113,7 +113,7 @@ public void setMemorySize(long memory) { @Override public int getVirtualCores() { - return (int) vcoresResInfo.getValue(); + return castToIntSafely(vcoresResInfo.getValue()); } @Override diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java index 92beec7..4ae64c2 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java @@ -87,7 +87,7 @@ private void maybeInitBuilder() { @Override @SuppressWarnings("deprecation") public int getMemory() { - return (int) this.getMemorySize(); + return castToIntSafely(this.getMemorySize()); } @Override @@ -117,7 +117,7 @@ public void setMemorySize(long memory) { @Override public int getVirtualCores() { // vcores should always be present - return (int) resources[VCORES_INDEX].getValue(); + return castToIntSafely(resources[VCORES_INDEX].getValue()); } @Override diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java index 793aebf..3690946 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java @@ -60,17 +60,10 @@ initResourceMap(); } - private int resourceValueToInt() { - if(this.resourceValue > Integer.MAX_VALUE) { - return Integer.MAX_VALUE; - } - return Long.valueOf(this.resourceValue).intValue(); - } - @Override @SuppressWarnings("deprecation") public int getMemory() { - return resourceValueToInt(); + return castToIntSafely(resourceValue); } @Override @@ -91,7 +84,7 @@ public void setMemorySize(long memory) { @Override public int getVirtualCores() { - return resourceValueToInt(); + return castToIntSafely(resourceValue); } @Override diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestResourcePBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestResourcePBImpl.java index 569a7b7..78515ef 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestResourcePBImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestResourcePBImpl.java @@ -25,6 +25,8 @@ import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertEquals; + /** * Test class to handle various proto related tests for resources. */ @@ -58,4 +60,28 @@ public void testResourcePBInitFromOldPB() throws Exception { res.getResourceInformation(ResourceInformation.VCORES.getName()) .getUnits()); } + + @Test + public void testGetMemory() { + Resource res = new ResourcePBImpl(); + long memorySize = Integer.MAX_VALUE + 1L; + res.setMemorySize(memorySize); + + assertEquals("No need to cast if both are long", memorySize, + res.getMemorySize()); + assertEquals("Cast to Integer.MAX_VALUE if the long is greater than" + + "Integer.MAX_VALUE", Integer.MAX_VALUE, res.getMemory()); + } + + @Test + public void testGetVirtualCores() { + Resource res = new ResourcePBImpl(); + long vcores = Integer.MAX_VALUE + 1L; + res.getResourceInformation("vcores").setValue(vcores); + + assertEquals("No need to cast if both are long", vcores, + res.getResourceInformation("vcores").getValue()); + assertEquals("Cast to Integer.MAX_VALUE if the long is greater than" + + "Integer.MAX_VALUE", Integer.MAX_VALUE, res.getVirtualCores()); + } }