YARN-6933. [YARN-3926] ResourceUtils.DISALLOWED_NAMES check is duplicated. Contributed by Manikandan R.

This commit is contained in:
Sunil G 2017-09-06 18:51:14 +05:30 committed by Wangda Tan
parent 53df3eac50
commit 805095496d
3 changed files with 23 additions and 21 deletions

View File

@ -42,10 +42,8 @@
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<String> 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<String, Integer> RESOURCE_NAME_TO_INDEX =
new ConcurrentHashMap<String, Integer>();
@ -85,9 +76,21 @@ public class ResourceUtils {
private ResourceUtils() {
}
private static void checkMandatatoryResources(
private static void checkMandatoryResources(
Map<String, ResourceInformation> 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 @@ private static void checkMandatatoryResources(
}
}
private static void addManadtoryResources(
private static void addMandatoryResources(
Map<String, ResourceInformation> res) {
ResourceInformation ri;
if (!res.containsKey(MEMORY)) {
@ -229,11 +232,6 @@ static void initializeResourcesMap(Configuration conf) {
"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 @@ static void initializeResourcesMap(Configuration conf) {
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 static Map<String, ResourceInformation> getNodeResourceInformation(
if (!initializedNodeResources) {
Map<String, ResourceInformation> nodeResources = initializeNodeResourceInformation(
conf);
addManadtoryResources(nodeResources);
checkMandatatoryResources(nodeResources);
addMandatoryResources(nodeResources);
checkMandatoryResources(nodeResources);
setMinimumAllocationForMandatoryResources(nodeResources, conf);
setMaximumAllocationForMandatoryResources(nodeResources, conf);
readOnlyNodeResources = Collections.unmodifiableMap(nodeResources);

View File

@ -26,4 +26,8 @@ limitations under the License. See accompanying LICENSE file.
<value>G</value>
</property>
<property>
<name>yarn.resource-types.vcores.units</name>
<value>Az</value>
</property>
</configuration>

View File

@ -18,7 +18,7 @@ limitations under the License. See accompanying LICENSE file.
<property>
<name>yarn.resource-types</name>
<value>vcores,resource1</value>
<value>resource1,resource1</value>
</property>
<property>