diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java index 94c2e97e9f0..e3e25d18b6a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java @@ -42,10 +42,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** @@ -63,13 +61,6 @@ public class ResourceUtils { private static final String MEMORY = ResourceInformation.MEMORY_MB.getName(); private static final String VCORES = ResourceInformation.VCORES.getName(); - private static final Set DISALLOWED_NAMES = new HashSet<>(); - static { - DISALLOWED_NAMES.add("memory"); - DISALLOWED_NAMES.add(MEMORY); - DISALLOWED_NAMES.add(VCORES); - } - private static volatile boolean initializedResources = false; private static final Map RESOURCE_NAME_TO_INDEX = new ConcurrentHashMap(); @@ -85,9 +76,21 @@ public class ResourceUtils { private ResourceUtils() { } - private static void checkMandatatoryResources( + private static void checkMandatoryResources( Map resourceInformationMap) throws YarnRuntimeException { + /* + * Supporting 'memory' also as invalid resource name, in addition to + * 'MEMORY' for historical reasons + */ + String key = "memory"; + if (resourceInformationMap.containsKey(key)) { + LOG.warn("Attempt to define resource '" + key + + "', but it is not allowed."); + throw new YarnRuntimeException("Attempt to re-define mandatory resource '" + + key + "'."); + } + if (resourceInformationMap.containsKey(MEMORY)) { ResourceInformation memInfo = resourceInformationMap.get(MEMORY); String memUnits = ResourceInformation.MEMORY_MB.getUnits(); @@ -113,7 +116,7 @@ public class ResourceUtils { } } - private static void addManadtoryResources( + private static void addMandatoryResources( Map res) { ResourceInformation ri; if (!res.containsKey(MEMORY)) { @@ -229,11 +232,6 @@ public class ResourceUtils { "Incomplete configuration for resource type '" + resourceName + "'. One of name, units or type is configured incorrectly."); } - if (DISALLOWED_NAMES.contains(resourceName)) { - throw new YarnRuntimeException( - "Resource type cannot be named '" + resourceName - + "'. That name is disallowed."); - } ResourceTypes resourceType = ResourceTypes.valueOf(resourceTypeName); LOG.info("Adding resource type - name = " + resourceName + ", units = " + resourceUnits + ", type = " + resourceTypeName); @@ -246,8 +244,8 @@ public class ResourceUtils { minimumAllocation, maximumAllocation)); } } - checkMandatatoryResources(resourceInformationMap); - addManadtoryResources(resourceInformationMap); + checkMandatoryResources(resourceInformationMap); + addMandatoryResources(resourceInformationMap); setMinimumAllocationForMandatoryResources(resourceInformationMap, conf); setMaximumAllocationForMandatoryResources(resourceInformationMap, conf); resourceTypes = Collections.unmodifiableMap(resourceInformationMap); @@ -454,8 +452,8 @@ public class ResourceUtils { if (!initializedNodeResources) { Map nodeResources = initializeNodeResourceInformation( conf); - addManadtoryResources(nodeResources); - checkMandatatoryResources(nodeResources); + addMandatoryResources(nodeResources); + checkMandatoryResources(nodeResources); setMinimumAllocationForMandatoryResources(nodeResources, conf); setMaximumAllocationForMandatoryResources(nodeResources, conf); readOnlyNodeResources = Collections.unmodifiableMap(nodeResources); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/resources/resource-types/resource-types-error-2.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/resources/resource-types/resource-types-error-2.xml index ca428ebfb32..fa43b6c14ef 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/resources/resource-types/resource-types-error-2.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/resources/resource-types/resource-types-error-2.xml @@ -26,4 +26,8 @@ limitations under the License. See accompanying LICENSE file. G + + yarn.resource-types.vcores.units + Az + diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/resources/resource-types/resource-types-error-3.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/resources/resource-types/resource-types-error-3.xml index 08b8a6dc0e9..539d657692e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/resources/resource-types/resource-types-error-3.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/resources/resource-types/resource-types-error-3.xml @@ -18,7 +18,7 @@ limitations under the License. See accompanying LICENSE file. yarn.resource-types - vcores,resource1 + resource1,resource1