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 80e569d5a9e6cf..9f73f96bece001 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 @@ -513,13 +513,17 @@ public int hashCode() { } /** - * Convert long to int for a resource value safely. This method assumes - * resource value is positive. + * Convert long to int for a resource value safely. Negative values are + * clamped to 0; values exceeding Integer.MAX_VALUE are clamped to + * Integer.MAX_VALUE. * * @param value long resource value * @return int resource value */ protected static int castToIntSafely(long value) { + if (value < 0) { + return 0; + } if (value > Integer.MAX_VALUE) { return Integer.MAX_VALUE; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/test/java/org/apache/hadoop/yarn/api/records/TestResource.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/test/java/org/apache/hadoop/yarn/api/records/TestResource.java index 060ca39c697386..1d8f6ad8c32969 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/test/java/org/apache/hadoop/yarn/api/records/TestResource.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/test/java/org/apache/hadoop/yarn/api/records/TestResource.java @@ -43,6 +43,11 @@ void testCastToIntSafely() { Resource.castToIntSafely(Long.MAX_VALUE), "Cast to Integer.MAX_VALUE if the long is greater than " + "Integer.MAX_VALUE"); + + assertEquals(0, Resource.castToIntSafely(-1), + "Cast to 0 if the long is negative"); + assertEquals(0, Resource.castToIntSafely(Long.MIN_VALUE), + "Cast to 0 if the long is negative"); } @Test