diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java index 6b284e3..a07f381 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java @@ -390,9 +390,11 @@ public float ratio(Resource a, Resource b) { long bResourceValue = UnitsConversionUtil.convert( bResourceInformation.getUnits(), aResourceInformation.getUnits(), bResourceInformation.getValue()); - float tmp = (float) aResourceInformation.getValue() - / (float) bResourceValue; - ratio = ratio > tmp ? ratio : tmp; + if (bResourceValue != 0) { + float tmp = (float) aResourceInformation.getValue() + / (float) bResourceValue; + ratio = ratio > tmp ? ratio : tmp; + } } return ratio; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceCalculator.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceCalculator.java index 5f3ed19..d4bfb71 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceCalculator.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceCalculator.java @@ -392,4 +392,16 @@ public void testNormalize() { assertEquals(2, result.getVirtualCores()); } } + + @Test + public void testRatioWithResourceValuesContainZero() { + if (resourceCalculator instanceof DominantResourceCalculator) { + // Test with 3 resources + setupExtraResource(); + Resource left = Resource.newInstance(6, 2); + Resource right = Resource.newInstance(10, 10); + float ratio = resourceCalculator.ratio(left, right); + Assert.assertEquals(0.6f, ratio, 0.00001); + } + } } \ No newline at end of file