From 3cde59576e727ced29ffdc4154c8f2693d6d0bc7 Mon Sep 17 00:00:00 2001 From: Sunil G Date: Mon, 30 Oct 2017 23:20:51 +0530 Subject: [PATCH] YARN-6909 --- .../yarn/api/records/impl/pb/ResourcePBImpl.java | 55 +++++++++++----------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java index 4ae64c2582a..f0e5ea924db 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java @@ -35,7 +35,6 @@ import java.util.Map; - @Private @Unstable public class ResourcePBImpl extends Resource { @@ -50,7 +49,7 @@ static ResourceProto getProto(Resource r) { final ResourcePBImpl pb; if (r instanceof ResourcePBImpl) { - pb = (ResourcePBImpl)r; + pb = (ResourcePBImpl) r; } else { pb = new ResourcePBImpl(); pb.setMemorySize(r.getMemorySize()); @@ -111,7 +110,7 @@ public void setMemory(int memory) { @Override public void setMemorySize(long memory) { maybeInitBuilder(); - getResourceInformation(ResourceInformation.MEMORY_URI).setValue(memory); + resources[MEMORY_INDEX].setValue(memory); } @Override @@ -123,7 +122,7 @@ public int getVirtualCores() { @Override public void setVirtualCores(int vCores) { maybeInitBuilder(); - getResourceInformation(ResourceInformation.VCORES_URI).setValue(vCores); + resources[VCORES_INDEX].setValue(vCores); } private void initResources() { @@ -131,31 +130,33 @@ private void initResources() { return; } ResourceProtoOrBuilder p = viaProto ? proto : builder; - initResourcesMap(); + ResourceInformation[] types = ResourceUtils.getResourceTypesArray(); Map indexMap = ResourceUtils.getResourceTypeIndex(); + resources = new ResourceInformation[types.length]; + for (ResourceInformationProto entry : p.getResourceValueMapList()) { - ResourceTypes type = - entry.hasType() ? ProtoUtils.convertFromProtoFormat(entry.getType()) : - ResourceTypes.COUNTABLE; - - // When unit not specified in proto, use the default unit. - String units = - entry.hasUnits() ? entry.getUnits() : ResourceUtils.getDefaultUnit( - entry.getKey()); - long value = entry.hasValue() ? entry.getValue() : 0L; - ResourceInformation ri = ResourceInformation - .newInstance(entry.getKey(), units, value, type, 0L, Long.MAX_VALUE); Integer index = indexMap.get(entry.getKey()); if (index == null) { - LOG.warn("Got unknown resource type: " + ri.getName() + "; skipping"); + LOG.warn("Got unknown resource type: " + entry.getKey() + "; skipping"); } else { - resources[index].setResourceType(ri.getResourceType()); - resources[index].setUnits(ri.getUnits()); - resources[index].setValue(value); + resources[index] = newDefaultInformation(types[index], entry); } } - this.setMemorySize(p.getMemory()); - this.setVirtualCores(p.getVirtualCores()); + } + + private static ResourceInformation newDefaultInformation( + ResourceInformation resourceInformation, ResourceInformationProto entry) { + ResourceInformation ri = new ResourceInformation(); + ri.setName(resourceInformation.getName()); + ri.setMinimumAllocation(resourceInformation.getMinimumAllocation()); + ri.setMaximumAllocation(resourceInformation.getMaximumAllocation()); + ri.setResourceType(entry.hasType() + ? ProtoUtils.convertFromProtoFormat(entry.getType()) + : ResourceTypes.COUNTABLE); + ri.setUnits( + entry.hasUnits() ? entry.getUnits() : resourceInformation.getUnits()); + ri.setValue(entry.hasValue() ? entry.getValue() : 0L); + return ri; } @Override @@ -166,10 +167,8 @@ public void setResourceInformation(String resource, throw new IllegalArgumentException( "resource and/or resourceInformation cannot be null"); } - if (!resource.equals(resourceInformation.getName())) { - resourceInformation.setName(resource); - } - ResourceInformation storedResourceInfo = getResourceInformation(resource); + ResourceInformation storedResourceInfo = super.getResourceInformation( + resource); ResourceInformation.copy(resourceInformation, storedResourceInfo); } @@ -213,7 +212,7 @@ private void initResourcesMap() { synchronized private void mergeLocalToBuilder() { builder.clearResourceValueMap(); - if(resources != null && resources.length != 0) { + if (resources != null && resources.length != 0) { for (ResourceInformation resInfo : resources) { ResourceInformationProto.Builder e = ResourceInformationProto .newBuilder(); @@ -236,4 +235,4 @@ private void mergeLocalToProto() { proto = builder.build(); viaProto = true; } -} +} -- 2.13.5 (Apple Git-94)