From 7adf724745df6f4fc65b742f2809cb10c4c2e40d Mon Sep 17 00:00:00 2001 From: Sunil G Date: Wed, 28 Aug 2019 14:01:07 +0530 Subject: [PATCH] bibin patch --- .../util/resource/DominantResourceCalculator.java | 26 +++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) 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 ca7360a7fae..6e658151ac3 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 @@ -106,7 +106,7 @@ public int compare(Resource clusterResource, Resource lhs, Resource rhs, return 0; } - if (isInvalidDivisor(clusterResource)) { + if (isAllInvalidDivisor(clusterResource)) { return this.compare(lhs, rhs); } @@ -283,6 +283,11 @@ private void calculateShares(ResourceInformation[] clusterRes, Resource first, firstShares[i] = calculateShare(clusterRes[i], firstRes[i]); secondShares[i] = calculateShare(clusterRes[i], secondRes[i]); + if (firstShares[i] == Float.POSITIVE_INFINITY || + secondShares[i] == Float.POSITIVE_INFINITY) { + continue; + } + if (firstShares[i] > max[0]) { max[0] = firstShares[i]; } @@ -301,6 +306,9 @@ private void calculateShares(ResourceInformation[] clusterRes, Resource first, */ private double calculateShare(ResourceInformation clusterRes, ResourceInformation res) { + if(clusterRes.getValue() == 0) { + return Float.POSITIVE_INFINITY; + } return (double) res.getValue() / clusterRes.getValue(); } @@ -320,6 +328,10 @@ private double compareShares(double[] lhsShares, double[] rhsShares) { // lhsShares and rhsShares must necessarily have the same length, because // everyone uses the same master resource list. for (int i = lhsShares.length - 1; i >= 0; i--) { + if (lhsShares[i] == Float.POSITIVE_INFINITY || + rhsShares[i] == Float.POSITIVE_INFINITY) { + continue; + } diff = lhsShares[i] - rhsShares[i]; if (diff != 0.0) { @@ -376,6 +388,18 @@ public boolean isInvalidDivisor(Resource r) { return false; } + public boolean isAllInvalidDivisor(Resource r) { + boolean flag = true; + for (ResourceInformation res : r.getResources()) { + if (flag == true && res.getValue() == 0L) { + flag = true; + continue; + } + flag = false; + } + return flag; + } + @Override public float ratio(Resource a, Resource b) { float ratio = 0.0f; -- 2.15.0