YARN-6761. Fix build for YARN-3926 branch. Contributed by Varun Vasudev. (cherry picked from commit ca2808d8bbe49766029e5dba88ff863f6c993287)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/5fa0dc35 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/5fa0dc35 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/5fa0dc35 Branch: refs/heads/branch-3.0 Commit: 5fa0dc35c380b19af46b37ec890431004f6efe78 Parents: 48ddb8f Author: Sunil G <sun...@apache.org> Authored: Mon Jul 10 09:21:26 2017 +0530 Committer: Daniel Templeton <templ...@apache.org> Committed: Tue Oct 31 15:06:16 2017 -0700 ---------------------------------------------------------------------- .../hadoop/yarn/api/records/Resource.java | 112 +++++++++++++++---- .../resource/DominantResourceCalculator.java | 1 + 2 files changed, 90 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/5fa0dc35/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java ---------------------------------------------------------------------- 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 c51357c..fb31745 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 @@ -29,6 +29,8 @@ import org.apache.hadoop.yarn.exceptions.ResourceNotFoundException; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.util.Records; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; /** @@ -58,12 +60,17 @@ import java.util.Map; @Stable public abstract class Resource implements Comparable<Resource> { + private static Resource tmpResource = Records.newRecord(Resource.class); + private static class SimpleResource extends Resource { private long memory; private long vcores; + private Map<String, ResourceInformation> resourceInformationMap; + SimpleResource(long memory, long vcores) { this.memory = memory; this.vcores = vcores; + } @Override public int getMemory() { @@ -89,17 +96,44 @@ public abstract class Resource implements Comparable<Resource> { public void setVirtualCores(int vcores) { this.vcores = vcores; } + @Override + public Map<String, ResourceInformation> getResources() { + if (resourceInformationMap == null) { + resourceInformationMap = new HashMap<>(); + resourceInformationMap.put(ResourceInformation.MEMORY_MB.getName(), + ResourceInformation.newInstance(ResourceInformation.MEMORY_MB)); + resourceInformationMap.put(ResourceInformation.VCORES.getName(), + ResourceInformation.newInstance(ResourceInformation.VCORES)); + } + resourceInformationMap.get(ResourceInformation.MEMORY_MB.getName()) + .setValue(this.memory); + resourceInformationMap.get(ResourceInformation.VCORES.getName()) + .setValue(this.vcores); + return Collections.unmodifiableMap(resourceInformationMap); + } } @Public @Stable public static Resource newInstance(int memory, int vCores) { + if (tmpResource.getResources().size() > 2) { + Resource ret = Records.newRecord(Resource.class); + ret.setMemorySize(memory); + ret.setVirtualCores(vCores); + return ret; + } return new SimpleResource(memory, vCores); } @Public @Stable public static Resource newInstance(long memory, int vCores) { + if (tmpResource.getResources().size() > 2) { + Resource ret = Records.newRecord(Resource.class); + ret.setMemorySize(memory); + ret.setVirtualCores(vCores); + return ret; + } return new SimpleResource(memory, vCores); } @@ -116,13 +150,7 @@ public abstract class Resource implements Comparable<Resource> { public static void copy(Resource source, Resource dest) { for (Map.Entry<String, ResourceInformation> entry : source.getResources() .entrySet()) { - try { - ResourceInformation.copy(entry.getValue(), - dest.getResourceInformation(entry.getKey())); - } catch (YarnException ye) { - dest.setResourceInformation(entry.getKey(), - ResourceInformation.newInstance(entry.getValue())); - } + dest.setResourceInformation(entry.getKey(), entry.getValue()); } } @@ -234,8 +262,15 @@ public abstract class Resource implements Comparable<Resource> { */ @Public @Evolving - public abstract ResourceInformation getResourceInformation(String resource) - throws YarnException; + public ResourceInformation getResourceInformation(String resource) + throws YarnException { + if (getResources().containsKey(resource)) { + return getResources().get(resource); + } + throw new YarnException( + "Unknown resource '" + resource + "'. Known resources are " + + getResources().keySet()); + } /** * Get the value for a specified resource. No information about the units is @@ -247,7 +282,14 @@ public abstract class Resource implements Comparable<Resource> { */ @Public @Evolving - public abstract Long getResourceValue(String resource) throws YarnException; + public Long getResourceValue(String resource) throws YarnException { + if (getResources().containsKey(resource)) { + return getResources().get(resource).getValue(); + } + throw new YarnException( + "Unknown resource '" + resource + "'. Known resources are " + + getResources().keySet()); + } /** * Set the ResourceInformation object for a particular resource. @@ -258,8 +300,25 @@ public abstract class Resource implements Comparable<Resource> { */ @Public @Evolving - public abstract void setResourceInformation(String resource, - ResourceInformation resourceInformation) throws ResourceNotFoundException; + public void setResourceInformation(String resource, + ResourceInformation resourceInformation) throws ResourceNotFoundException { + if (resource.equals(ResourceInformation.MEMORY_MB.getName())) { + this.setMemorySize(resourceInformation.getValue()); + return; + } + if (resource.equals(ResourceInformation.VCORES.getName())) { + this.setVirtualCores((int) resourceInformation.getValue()); + return; + } + if (getResources().containsKey(resource)) { + ResourceInformation + .copy(resourceInformation, getResources().get(resource)); + return; + } + throw new ResourceNotFoundException( + "Unknown resource '" + resource + "'. Known resources are " + + getResources().keySet()); + } /** * Set the value of a resource in the ResourceInformation object. The unit of @@ -271,8 +330,24 @@ public abstract class Resource implements Comparable<Resource> { */ @Public @Evolving - public abstract void setResourceValue(String resource, Long value) - throws ResourceNotFoundException; + public void setResourceValue(String resource, Long value) + throws ResourceNotFoundException { + if (resource.equals(ResourceInformation.MEMORY_MB.getName())) { + this.setMemorySize(value); + return; + } + if (resource.equals(ResourceInformation.VCORES.getName())) { + this.setVirtualCores(value.intValue()); + return; + } + if (getResources().containsKey(resource)) { + getResources().get(resource).setValue(value); + return; + } + throw new ResourceNotFoundException( + "Unknown resource '" + resource + "'. Known resources are " + + getResources().keySet()); + } @Override public int hashCode() { @@ -312,15 +387,6 @@ public abstract class Resource implements Comparable<Resource> { } @Override - public int compareTo(Resource other) { - long diff = this.getMemorySize() - other.getMemorySize(); - if (diff == 0) { - diff = this.getVirtualCores() - other.getVirtualCores(); - } - return diff == 0 ? 0 : (diff > 0 ? 1 : -1); - } - - @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("<memory:").append(getMemorySize()).append(", vCores:") http://git-wip-us.apache.org/repos/asf/hadoop/blob/5fa0dc35/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java ---------------------------------------------------------------------- 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 76bc364..79bb03d 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 @@ -306,6 +306,7 @@ public class DominantResourceCalculator extends ResourceCalculator { value = roundUp(value, stepFactorValue); } tmp.setValue(Math.min(value, maximumValue)); + ret.setResourceInformation(resource, tmp); } catch (YarnException ye) { throw new IllegalArgumentException( "Error getting resource information for " + resource, ye); --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org