You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by jh...@apache.org on 2019/03/19 23:02:12 UTC

[hadoop] 17/47: YARN-6892. [YARN-3926] Improve API implementation in Resources and DominantResourceCalculator class. Contributed by Sunil G.

This is an automated email from the ASF dual-hosted git repository.

jhung pushed a commit to branch YARN-8200
in repository https://gitbox.apache.org/repos/asf/hadoop.git

commit 1d713153c26acbd3222f4f95b09c4b8538b11849
Author: Sunil G <su...@apache.org>
AuthorDate: Wed Aug 16 15:25:36 2017 +0530

    YARN-6892. [YARN-3926] Improve API implementation in Resources and DominantResourceCalculator class. Contributed by Sunil G.
    
    (cherry picked from commit 2b51b262aba0191b80dc93799574c0b959cb4f4e)
---
 .../apache/hadoop/yarn/api/records/Resource.java   |  70 ++++-
 .../util/resource/DominantResourceCalculator.java  | 317 +++++++++------------
 .../hadoop/yarn/util/resource/Resources.java       |  98 ++++---
 3 files changed, 254 insertions(+), 231 deletions(-)

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 54f0b18..6c0bed5 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
@@ -164,7 +164,6 @@ public abstract class Resource implements Comparable<Resource> {
         "This method is implemented by ResourcePBImpl");
   }
 
-
   /**
    * Get <em>number of virtual cpu cores</em> of the resource.
    * 
@@ -179,7 +178,7 @@ public abstract class Resource implements Comparable<Resource> {
   @Public
   @Evolving
   public abstract int getVirtualCores();
-  
+
   /**
    * Set <em>number of virtual cpu cores</em> of the resource.
    * 
@@ -225,6 +224,27 @@ public abstract class Resource implements Comparable<Resource> {
   }
 
   /**
+   * Get ResourceInformation for a specified resource from a given index.
+   *
+   * @param index
+   *          of the resource
+   * @return the ResourceInformation object for the resource
+   * @throws ResourceNotFoundException
+   *           if the resource can't be found
+   */
+  @Public
+  @Evolving
+  public ResourceInformation getResourceInformation(int index)
+      throws ResourceNotFoundException {
+    ResourceInformation[] resources = getResources();
+    if (index < 0 || index >= resources.length) {
+      throw new ResourceNotFoundException("Unknown resource at index '" + index
+          + "'. Vaid resources are: " + Arrays.toString(resources));
+    }
+    return resources[index];
+  }
+
+  /**
    * Get the value for a specified resource. No information about the units is
    * returned.
    *
@@ -264,6 +284,29 @@ public abstract class Resource implements Comparable<Resource> {
   }
 
   /**
+   * Set the ResourceInformation object for a particular resource.
+   *
+   * @param index
+   *          the resource index for which the ResourceInformation is provided
+   * @param resourceInformation
+   *          ResourceInformation object
+   * @throws ResourceNotFoundException
+   *           if the resource is not found
+   */
+  @Public
+  @Evolving
+  public void setResourceInformation(int index,
+      ResourceInformation resourceInformation)
+      throws ResourceNotFoundException {
+    ResourceInformation[] resources = getResources();
+    if (index < 0 || index >= resources.length) {
+      throw new ResourceNotFoundException("Unknown resource at index '" + index
+          + "'. Valid resources are " + Arrays.toString(resources));
+    }
+    ResourceInformation.copy(resourceInformation, resources[index]);
+  }
+
+  /**
    * Set the value of a resource in the ResourceInformation object. The unit of
    * the value is assumed to be the one in the ResourceInformation object.
    *
@@ -288,6 +331,29 @@ public abstract class Resource implements Comparable<Resource> {
     storedResourceInfo.setValue(value);
   }
 
+  /**
+   * Set the value of a resource in the ResourceInformation object. The unit of
+   * the value is assumed to be the one in the ResourceInformation object.
+   *
+   * @param index
+   *          the resource index for which the value is provided.
+   * @param value
+   *          the value to set
+   * @throws ResourceNotFoundException
+   *           if the resource is not found
+   */
+  @Public
+  @Evolving
+  public void setResourceValue(int index, long value)
+      throws ResourceNotFoundException {
+    ResourceInformation[] resources = getResources();
+    if (index < 0 || index >= resources.length) {
+      throw new ResourceNotFoundException("Unknown resource at index '" + index
+          + "'. Valid resources are " + Arrays.toString(resources));
+    }
+    resources[index].setValue(value);
+  }
+
   @Override
   public int hashCode() {
     final int prime = 263167;
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 ea5c8a8..5992ba3 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
@@ -17,13 +17,10 @@
 */
 package org.apache.hadoop.yarn.util.resource;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.classification.InterfaceAudience.Private;
 import org.apache.hadoop.classification.InterfaceStability.Unstable;
 import org.apache.hadoop.yarn.api.records.Resource;
 import org.apache.hadoop.yarn.api.records.ResourceInformation;
-import org.apache.hadoop.yarn.exceptions.ResourceNotFoundException;
 import org.apache.hadoop.yarn.util.UnitsConversionUtil;
 
 
@@ -51,14 +48,8 @@ import org.apache.hadoop.yarn.util.UnitsConversionUtil;
 @Private
 @Unstable
 public class DominantResourceCalculator extends ResourceCalculator {
-  private static final Log LOG =
-      LogFactory.getLog(DominantResourceCalculator.class);
-
-
-  private String[] resourceNames;
 
   public DominantResourceCalculator() {
-    resourceNames = ResourceUtils.getResourceNamesArray();
   }
 
   /**
@@ -75,21 +66,17 @@ public class DominantResourceCalculator extends ResourceCalculator {
     boolean rhsGreater = false;
     int ret = 0;
 
-    for (String rName : resourceNames) {
-      try {
-        ResourceInformation lhsResourceInformation =
-            lhs.getResourceInformation(rName);
-        ResourceInformation rhsResourceInformation =
-            rhs.getResourceInformation(rName);
-        int diff = lhsResourceInformation.compareTo(rhsResourceInformation);
-        if (diff >= 1) {
-          lhsGreater = true;
-        } else if (diff <= -1) {
-          rhsGreater = true;
-        }
-      } catch (ResourceNotFoundException ye) {
-        throw new IllegalArgumentException(
-            "Error getting resource information for " + rName, ye);
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation lhsResourceInformation = lhs
+          .getResourceInformation(i);
+      ResourceInformation rhsResourceInformation = rhs
+          .getResourceInformation(i);
+      int diff = lhsResourceInformation.compareTo(rhsResourceInformation);
+      if (diff >= 1) {
+        lhsGreater = true;
+      } else if (diff <= -1) {
+        rhsGreater = true;
       }
     }
     if (lhsGreater && rhsGreater) {
@@ -147,50 +134,40 @@ public class DominantResourceCalculator extends ResourceCalculator {
 
     float min = Float.MAX_VALUE;
     float max = 0.0f;
-    for (String rName : resourceNames) {
-      try {
-        ResourceInformation clusterResourceResourceInformation =
-            clusterResource.getResourceInformation(rName);
-        ResourceInformation resourceInformation =
-            resource.getResourceInformation(rName);
-        long resourceValue = UnitsConversionUtil
-            .convert(resourceInformation.getUnits(),
-                clusterResourceResourceInformation.getUnits(),
-                resourceInformation.getValue());
-        float tmp =
-            (float) resourceValue / (float) clusterResourceResourceInformation
-                .getValue();
-        min = min < tmp ? min : tmp;
-        max = max > tmp ? max : tmp;
-      } catch (ResourceNotFoundException ye) {
-        throw new IllegalArgumentException(
-            "Error getting resource information for " + resource, ye);
-      }
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation clusterResourceResourceInformation = clusterResource
+          .getResourceInformation(i);
+      ResourceInformation resourceInformation = resource
+          .getResourceInformation(i);
+      long resourceValue = UnitsConversionUtil.convert(
+          resourceInformation.getUnits(),
+          clusterResourceResourceInformation.getUnits(),
+          resourceInformation.getValue());
+      float tmp = (float) resourceValue
+          / (float) clusterResourceResourceInformation.getValue();
+      min = min < tmp ? min : tmp;
+      max = max > tmp ? max : tmp;
     }
     return (dominant) ? max : min;
   }
 
   @Override
-  public long computeAvailableContainers(Resource available, Resource required) {
+  public long computeAvailableContainers(Resource available,
+      Resource required) {
     long min = Long.MAX_VALUE;
-    for (String resource : resourceNames) {
-      try {
-        ResourceInformation availableResource =
-            available.getResourceInformation(resource);
-        ResourceInformation requiredResource =
-            required.getResourceInformation(resource);
-        long requiredResourceValue = UnitsConversionUtil
-            .convert(requiredResource.getUnits(), availableResource.getUnits(),
-                requiredResource.getValue());
-        if (requiredResourceValue != 0) {
-          long tmp = availableResource.getValue() / requiredResourceValue;
-          min = min < tmp ? min : tmp;
-        }
-      } catch (ResourceNotFoundException ye) {
-        throw new IllegalArgumentException(
-            "Error getting resource information for " + resource, ye);
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation availableResource = available
+          .getResourceInformation(i);
+      ResourceInformation requiredResource = required.getResourceInformation(i);
+      long requiredResourceValue = UnitsConversionUtil.convert(
+          requiredResource.getUnits(), availableResource.getUnits(),
+          requiredResource.getValue());
+      if (requiredResourceValue != 0) {
+        long tmp = availableResource.getValue() / requiredResourceValue;
+        min = min < tmp ? min : tmp;
       }
-
     }
     return min > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) min;
   }
@@ -216,23 +193,16 @@ public class DominantResourceCalculator extends ResourceCalculator {
   @Override
   public float ratio(Resource a, Resource b) {
     float ratio = 0.0f;
-    for (String resource : resourceNames) {
-      try {
-        ResourceInformation aResourceInformation =
-            a.getResourceInformation(resource);
-        ResourceInformation bResourceInformation =
-            b.getResourceInformation(resource);
-        long bResourceValue = UnitsConversionUtil
-            .convert(bResourceInformation.getUnits(),
-                aResourceInformation.getUnits(),
-                bResourceInformation.getValue());
-        float tmp =
-            (float) aResourceInformation.getValue() / (float) bResourceValue;
-        ratio = ratio > tmp ? ratio : tmp;
-      } catch (ResourceNotFoundException ye) {
-        throw new IllegalArgumentException(
-            "Error getting resource information for " + resource, ye);
-      }
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation aResourceInformation = a.getResourceInformation(i);
+      ResourceInformation bResourceInformation = b.getResourceInformation(i);
+      long bResourceValue = UnitsConversionUtil.convert(
+          bResourceInformation.getUnits(), aResourceInformation.getUnits(),
+          bResourceInformation.getValue());
+      float tmp = (float) aResourceInformation.getValue()
+          / (float) bResourceValue;
+      ratio = ratio > tmp ? ratio : tmp;
     }
     return ratio;
   }
@@ -244,16 +214,11 @@ public class DominantResourceCalculator extends ResourceCalculator {
 
   public Resource divideAndCeil(Resource numerator, long denominator) {
     Resource ret = Resource.newInstance(numerator);
-    for (String resource : resourceNames) {
-      try {
-        ResourceInformation resourceInformation =
-            ret.getResourceInformation(resource);
-        resourceInformation.setValue(
-            divideAndCeil(resourceInformation.getValue(), denominator));
-      } catch (ResourceNotFoundException ye) {
-        throw new IllegalArgumentException(
-            "Error getting resource information for " + resource, ye);
-      }
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation resourceInformation = ret.getResourceInformation(i);
+      resourceInformation
+          .setValue(divideAndCeil(resourceInformation.getValue(), denominator));
     }
     return ret;
   }
@@ -270,41 +235,36 @@ public class DominantResourceCalculator extends ResourceCalculator {
   public Resource normalize(Resource r, Resource minimumResource,
       Resource maximumResource, Resource stepFactor) {
     Resource ret = Resource.newInstance(r);
-    for (String resource : resourceNames) {
-      try {
-        ResourceInformation rResourceInformation =
-            r.getResourceInformation(resource);
-        ResourceInformation minimumResourceInformation =
-            minimumResource.getResourceInformation(resource);
-        ResourceInformation maximumResourceInformation =
-            maximumResource.getResourceInformation(resource);
-        ResourceInformation stepFactorResourceInformation =
-            stepFactor.getResourceInformation(resource);
-        ResourceInformation tmp = ret.getResourceInformation(resource);
-
-        long rValue = rResourceInformation.getValue();
-        long minimumValue = UnitsConversionUtil
-            .convert(minimumResourceInformation.getUnits(),
-                rResourceInformation.getUnits(),
-                minimumResourceInformation.getValue());
-        long maximumValue = UnitsConversionUtil
-            .convert(maximumResourceInformation.getUnits(),
-                rResourceInformation.getUnits(),
-                maximumResourceInformation.getValue());
-        long stepFactorValue = UnitsConversionUtil
-            .convert(stepFactorResourceInformation.getUnits(),
-                rResourceInformation.getUnits(),
-                stepFactorResourceInformation.getValue());
-        long value = Math.max(rValue, minimumValue);
-        if (stepFactorValue != 0) {
-          value = roundUp(value, stepFactorValue);
-        }
-        tmp.setValue(Math.min(value, maximumValue));
-        ret.setResourceInformation(resource, tmp);
-      } catch (ResourceNotFoundException ye) {
-        throw new IllegalArgumentException(
-            "Error getting resource information for " + resource, ye);
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation rResourceInformation = r.getResourceInformation(i);
+      ResourceInformation minimumResourceInformation = minimumResource
+          .getResourceInformation(i);
+      ResourceInformation maximumResourceInformation = maximumResource
+          .getResourceInformation(i);
+      ResourceInformation stepFactorResourceInformation = stepFactor
+          .getResourceInformation(i);
+      ResourceInformation tmp = ret.getResourceInformation(i);
+
+      long rValue = rResourceInformation.getValue();
+      long minimumValue = UnitsConversionUtil.convert(
+          minimumResourceInformation.getUnits(),
+          rResourceInformation.getUnits(),
+          minimumResourceInformation.getValue());
+      long maximumValue = UnitsConversionUtil.convert(
+          maximumResourceInformation.getUnits(),
+          rResourceInformation.getUnits(),
+          maximumResourceInformation.getValue());
+      long stepFactorValue = UnitsConversionUtil.convert(
+          stepFactorResourceInformation.getUnits(),
+          rResourceInformation.getUnits(),
+          stepFactorResourceInformation.getValue());
+      long value = Math.max(rValue, minimumValue);
+      if (stepFactorValue != 0) {
+        value = roundUp(value, stepFactorValue);
       }
+      tmp.setValue(Math.min(value, maximumValue));
+      ret.setResourceInformation(i, tmp);
     }
     return ret;
   }
@@ -321,30 +281,26 @@ public class DominantResourceCalculator extends ResourceCalculator {
 
   private Resource rounding(Resource r, Resource stepFactor, boolean roundUp) {
     Resource ret = Resource.newInstance(r);
-    for (String resource : resourceNames) {
-      try {
-        ResourceInformation rResourceInformation =
-            r.getResourceInformation(resource);
-        ResourceInformation stepFactorResourceInformation =
-            stepFactor.getResourceInformation(resource);
-
-        long rValue = rResourceInformation.getValue();
-        long stepFactorValue = UnitsConversionUtil
-            .convert(stepFactorResourceInformation.getUnits(),
-                rResourceInformation.getUnits(),
-                stepFactorResourceInformation.getValue());
-        long value = rValue;
-        if (stepFactorValue != 0) {
-          value = roundUp ? roundUp(rValue, stepFactorValue) :
-              roundDown(rValue, stepFactorValue);
-        }
-        ResourceInformation
-            .copy(rResourceInformation, ret.getResourceInformation(resource));
-        ret.getResourceInformation(resource).setValue(value);
-      } catch (ResourceNotFoundException ye) {
-        throw new IllegalArgumentException(
-            "Error getting resource information for " + resource, ye);
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation rResourceInformation = r.getResourceInformation(i);
+      ResourceInformation stepFactorResourceInformation = stepFactor
+          .getResourceInformation(i);
+
+      long rValue = rResourceInformation.getValue();
+      long stepFactorValue = UnitsConversionUtil.convert(
+          stepFactorResourceInformation.getUnits(),
+          rResourceInformation.getUnits(),
+          stepFactorResourceInformation.getValue());
+      long value = rValue;
+      if (stepFactorValue != 0) {
+        value = roundUp
+            ? roundUp(rValue, stepFactorValue)
+            : roundDown(rValue, stepFactorValue);
       }
+      ResourceInformation.copy(rResourceInformation,
+          ret.getResourceInformation(i));
+      ret.getResourceInformation(i).setValue(value);
     }
     return ret;
   }
@@ -364,54 +320,43 @@ public class DominantResourceCalculator extends ResourceCalculator {
   private Resource multiplyAndNormalize(Resource r, double by,
       Resource stepFactor, boolean roundUp) {
     Resource ret = Resource.newInstance(r);
-    for (String resource : resourceNames) {
-      try {
-        ResourceInformation rResourceInformation = r
-            .getResourceInformation(resource);
-        ResourceInformation stepFactorResourceInformation = stepFactor
-            .getResourceInformation(resource);
-        ResourceInformation tmp = ret.getResourceInformation(resource);
-
-        long rValue = rResourceInformation.getValue();
-        long stepFactorValue = UnitsConversionUtil.convert(
-            stepFactorResourceInformation.getUnits(),
-            rResourceInformation.getUnits(),
-            stepFactorResourceInformation.getValue());
-        long value;
-        if (stepFactorValue != 0) {
-          value = roundUp
-              ? roundUp((long) Math.ceil(rValue * by), stepFactorValue)
-              : roundDown((long) (rValue * by), stepFactorValue);
-        } else {
-          value = roundUp
-              ? (long) Math.ceil(rValue * by)
-              : (long) (rValue * by);
-        }
-        tmp.setValue(value);
-      } catch (ResourceNotFoundException ye) {
-        throw new IllegalArgumentException(
-            "Error getting resource information for " + resource, ye);
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation rResourceInformation = r.getResourceInformation(i);
+      ResourceInformation stepFactorResourceInformation = stepFactor
+          .getResourceInformation(i);
+      ResourceInformation tmp = ret.getResourceInformation(i);
+
+      long rValue = rResourceInformation.getValue();
+      long stepFactorValue = UnitsConversionUtil.convert(
+          stepFactorResourceInformation.getUnits(),
+          rResourceInformation.getUnits(),
+          stepFactorResourceInformation.getValue());
+      long value;
+      if (stepFactorValue != 0) {
+        value = roundUp
+            ? roundUp((long) Math.ceil(rValue * by), stepFactorValue)
+            : roundDown((long) (rValue * by), stepFactorValue);
+      } else {
+        value = roundUp ? (long) Math.ceil(rValue * by) : (long) (rValue * by);
       }
+      tmp.setValue(value);
     }
     return ret;
   }
 
   @Override
   public boolean fitsIn(Resource cluster, Resource smaller, Resource bigger) {
-    for (String resource : resourceNames) {
-      try {
-        ResourceInformation sResourceInformation =
-            smaller.getResourceInformation(resource);
-        ResourceInformation bResourceInformation =
-            bigger.getResourceInformation(resource);
-        long sResourceValue = UnitsConversionUtil
-            .convert(sResourceInformation.getUnits(),
-                bResourceInformation.getUnits(),
-                sResourceInformation.getValue());
-        if(sResourceValue > bResourceInformation.getValue()) {
-          return false;
-        }
-      } catch (ResourceNotFoundException ye) {
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      ResourceInformation sResourceInformation = smaller
+          .getResourceInformation(i);
+      ResourceInformation bResourceInformation = bigger
+          .getResourceInformation(i);
+      long sResourceValue = UnitsConversionUtil.convert(
+          sResourceInformation.getUnits(), bResourceInformation.getUnits(),
+          sResourceInformation.getValue());
+      if (sResourceValue > bResourceInformation.getValue()) {
         return false;
       }
     }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
index 3cf78ed..702c1c8 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
@@ -173,17 +173,17 @@ public class Resources {
   }
 
   public static Resource addTo(Resource lhs, Resource rhs) {
-    for (ResourceInformation entry : lhs.getResources()) {
-      String name = entry.getName();
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
       try {
-        ResourceInformation rhsValue = rhs.getResourceInformation(name);
-        ResourceInformation lhsValue = entry;
+        ResourceInformation rhsValue = rhs.getResourceInformation(i);
+        ResourceInformation lhsValue = lhs.getResourceInformation(i);
 
         long convertedRhs = (rhsValue.getUnits().equals(lhsValue.getUnits()))
             ? rhsValue.getValue()
             : UnitsConversionUtil.convert(rhsValue.getUnits(),
                 lhsValue.getUnits(), rhsValue.getValue());
-        lhs.setResourceValue(name, lhsValue.getValue() + convertedRhs);
+        lhs.setResourceValue(i, lhsValue.getValue() + convertedRhs);
       } catch (ResourceNotFoundException ye) {
         LOG.warn("Resource is missing:" + ye.getMessage());
         continue;
@@ -197,17 +197,17 @@ public class Resources {
   }
 
   public static Resource subtractFrom(Resource lhs, Resource rhs) {
-    for (ResourceInformation entry : lhs.getResources()) {
-      String name = entry.getName();
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
       try {
-        ResourceInformation rhsValue = rhs.getResourceInformation(name);
-        ResourceInformation lhsValue = entry;
+        ResourceInformation rhsValue = rhs.getResourceInformation(i);
+        ResourceInformation lhsValue = lhs.getResourceInformation(i);
 
         long convertedRhs = (rhsValue.getUnits().equals(lhsValue.getUnits()))
             ? rhsValue.getValue()
             : UnitsConversionUtil.convert(rhsValue.getUnits(),
                 lhsValue.getUnits(), rhsValue.getValue());
-        lhs.setResourceValue(name, lhsValue.getValue() - convertedRhs);
+        lhs.setResourceValue(i, lhsValue.getValue() - convertedRhs);
       } catch (ResourceNotFoundException ye) {
         LOG.warn("Resource is missing:" + ye.getMessage());
         continue;
@@ -243,10 +243,15 @@ public class Resources {
   }
 
   public static Resource multiplyTo(Resource lhs, double by) {
-    for (ResourceInformation entry : lhs.getResources()) {
-      String name = entry.getName();
-      ResourceInformation lhsValue = entry;
-      lhs.setResourceValue(name, (long) (lhsValue.getValue() * by));
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      try {
+        ResourceInformation lhsValue = lhs.getResourceInformation(i);
+        lhs.setResourceValue(i, (long) (lhsValue.getValue() * by));
+      } catch (ResourceNotFoundException ye) {
+        LOG.warn("Resource is missing:" + ye.getMessage());
+        continue;
+      }
     }
     return lhs;
   }
@@ -261,11 +266,11 @@ public class Resources {
    */
   public static Resource multiplyAndAddTo(
       Resource lhs, Resource rhs, double by) {
-    for (ResourceInformation entry : lhs.getResources()) {
-      String name = entry.getName();
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
       try {
-        ResourceInformation rhsValue = rhs.getResourceInformation(name);
-        ResourceInformation lhsValue = entry;
+        ResourceInformation rhsValue = rhs.getResourceInformation(i);
+        ResourceInformation lhsValue = lhs.getResourceInformation(i);
 
         long convertedRhs = (long) (((rhsValue.getUnits()
             .equals(lhsValue.getUnits()))
@@ -273,7 +278,7 @@ public class Resources {
                 : UnitsConversionUtil.convert(rhsValue.getUnits(),
                     lhsValue.getUnits(), rhsValue.getValue()))
             * by);
-        lhs.setResourceValue(name, lhsValue.getValue() + convertedRhs);
+        lhs.setResourceValue(i, lhsValue.getValue() + convertedRhs);
       } catch (ResourceNotFoundException ye) {
         LOG.warn("Resource is missing:" + ye.getMessage());
         continue;
@@ -294,10 +299,15 @@ public class Resources {
   
   public static Resource multiplyAndRoundDown(Resource lhs, double by) {
     Resource out = clone(lhs);
-    for (ResourceInformation entry : out.getResources()) {
-      String name = entry.getName();
-      ResourceInformation lhsValue = entry;
-      out.setResourceValue(name, (long) (lhsValue.getValue() * by));
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
+      try {
+        ResourceInformation lhsValue = lhs.getResourceInformation(i);
+        out.setResourceValue(i, (long) (lhsValue.getValue() * by));
+      } catch (ResourceNotFoundException ye) {
+        LOG.warn("Resource is missing:" + ye.getMessage());
+        continue;
+      }
     }
     return out;
   }
@@ -398,22 +408,22 @@ public class Resources {
   }
   
   public static boolean fitsIn(Resource smaller, Resource bigger) {
-    for (ResourceInformation entry : smaller.getResources()) {
-      String name = entry.getName();
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
       try {
-        ResourceInformation rhsValue = bigger.getResourceInformation(name);
-        ResourceInformation lhsValue = entry;
+        ResourceInformation rhsValue = bigger.getResourceInformation(i);
+        ResourceInformation lhsValue = smaller.getResourceInformation(i);
 
         long convertedRhs = (rhsValue.getUnits().equals(lhsValue.getUnits()))
             ? rhsValue.getValue()
             : UnitsConversionUtil.convert(rhsValue.getUnits(),
                 lhsValue.getUnits(), rhsValue.getValue());
-        if(lhsValue.getValue() > convertedRhs) {
+        if (lhsValue.getValue() > convertedRhs) {
           return false;
         }
       } catch (ResourceNotFoundException ye) {
         LOG.warn("Resource is missing:" + ye.getMessage());
-        return false;
+        continue;
       }
     }
     return true;
@@ -426,19 +436,20 @@ public class Resources {
   
   public static Resource componentwiseMin(Resource lhs, Resource rhs) {
     Resource ret = createResource(0);
-    for (ResourceInformation entry : lhs.getResources()) {
-      String name = entry.getName();
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
       try {
-        ResourceInformation rhsValue = rhs.getResourceInformation(name);
-        ResourceInformation lhsValue = entry;
+        ResourceInformation rhsValue = rhs.getResourceInformation(i);
+        ResourceInformation lhsValue = lhs.getResourceInformation(i);
 
         long convertedRhs = (rhsValue.getUnits().equals(lhsValue.getUnits()))
             ? rhsValue.getValue()
             : UnitsConversionUtil.convert(rhsValue.getUnits(),
                 lhsValue.getUnits(), rhsValue.getValue());
-        ResourceInformation outInfo =
-            lhsValue.getValue() < convertedRhs ? lhsValue : rhsValue;
-        ret.setResourceInformation(name, outInfo);
+        ResourceInformation outInfo = lhsValue.getValue() < convertedRhs
+            ? lhsValue
+            : rhsValue;
+        ret.setResourceInformation(i, outInfo);
       } catch (ResourceNotFoundException ye) {
         LOG.warn("Resource is missing:" + ye.getMessage());
         continue;
@@ -449,19 +460,20 @@ public class Resources {
   
   public static Resource componentwiseMax(Resource lhs, Resource rhs) {
     Resource ret = createResource(0);
-    for (ResourceInformation entry : lhs.getResources()) {
-      String name = entry.getName();
+    int maxLength = ResourceUtils.getResourceTypesArray().length;
+    for (int i = 0; i < maxLength; i++) {
       try {
-        ResourceInformation rhsValue = rhs.getResourceInformation(name);
-        ResourceInformation lhsValue = entry;
+        ResourceInformation rhsValue = rhs.getResourceInformation(i);
+        ResourceInformation lhsValue = lhs.getResourceInformation(i);
 
         long convertedRhs = (rhsValue.getUnits().equals(lhsValue.getUnits()))
             ? rhsValue.getValue()
             : UnitsConversionUtil.convert(rhsValue.getUnits(),
                 lhsValue.getUnits(), rhsValue.getValue());
-        ResourceInformation outInfo =
-            lhsValue.getValue() > convertedRhs ? lhsValue : rhsValue;
-        ret.setResourceInformation(name, outInfo);
+        ResourceInformation outInfo = lhsValue.getValue() > convertedRhs
+            ? lhsValue
+            : rhsValue;
+        ret.setResourceInformation(i, outInfo);
       } catch (ResourceNotFoundException ye) {
         LOG.warn("Resource is missing:" + ye.getMessage());
         continue;


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org