YARN-9124. Resolve contradiction in ResourceUtils: addMandatoryResources / checkMandatoryResources work differently (#1121)
This commit is contained in:
parent
95fc38f2e9
commit
cbcada804d
@ -59,7 +59,11 @@ public class ResourceInformation implements Comparable<ResourceInformation> {
|
||||
public static final ResourceInformation FPGAS =
|
||||
ResourceInformation.newInstance(FPGA_URI);
|
||||
|
||||
public static final Map<String, ResourceInformation> MANDATORY_RESOURCES =
|
||||
/**
|
||||
* Special resources that should be treated separately
|
||||
* from arbitrary resource types.
|
||||
*/
|
||||
public static final Map<String, ResourceInformation> SPECIAL_RESOURCES =
|
||||
ImmutableMap.of(MEMORY_URI, MEMORY_MB, VCORES_URI, VCORES, GPU_URI, GPUS, FPGA_URI, FPGAS);
|
||||
|
||||
/**
|
||||
|
@ -93,14 +93,28 @@ public class ResourceUtils {
|
||||
private ResourceUtils() {
|
||||
}
|
||||
|
||||
private static void checkMandatoryResources(
|
||||
/**
|
||||
* Ensures that historical resource types (like {@link
|
||||
* ResourceInformation#MEMORY_URI}, {@link ResourceInformation#VCORES_URI})
|
||||
* are not getting overridden in the resourceInformationMap.
|
||||
*
|
||||
* Also checks whether {@link ResourceInformation#SPECIAL_RESOURCES} are not
|
||||
* configured poorly: having their proper units and types.
|
||||
*
|
||||
* @param resourceInformationMap Map object having keys as resources names
|
||||
* and {@link ResourceInformation} objects as
|
||||
* values
|
||||
* @throws YarnRuntimeException if either of the two above
|
||||
* conditions do not hold
|
||||
*/
|
||||
private static void checkSpecialResources(
|
||||
Map<String, ResourceInformation> resourceInformationMap)
|
||||
throws YarnRuntimeException {
|
||||
/*
|
||||
* Supporting 'memory', 'memory-mb', 'vcores' also as invalid resource names, in addition to
|
||||
* 'MEMORY' for historical reasons
|
||||
* Supporting 'memory', 'memory-mb', 'vcores' also as invalid resource
|
||||
* names, in addition to 'MEMORY' for historical reasons
|
||||
*/
|
||||
String keys[] = { "memory", ResourceInformation.MEMORY_URI,
|
||||
String[] keys = { "memory", ResourceInformation.MEMORY_URI,
|
||||
ResourceInformation.VCORES_URI };
|
||||
for(String key : keys) {
|
||||
if (resourceInformationMap.containsKey(key)) {
|
||||
@ -111,7 +125,7 @@ private static void checkMandatoryResources(
|
||||
}
|
||||
|
||||
for (Map.Entry<String, ResourceInformation> mandatoryResourceEntry :
|
||||
ResourceInformation.MANDATORY_RESOURCES.entrySet()) {
|
||||
ResourceInformation.SPECIAL_RESOURCES.entrySet()) {
|
||||
String key = mandatoryResourceEntry.getKey();
|
||||
ResourceInformation mandatoryRI = mandatoryResourceEntry.getValue();
|
||||
|
||||
@ -134,6 +148,13 @@ private static void checkMandatoryResources(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that {@link ResourceUtils#MEMORY} and {@link ResourceUtils#VCORES}
|
||||
* resources are contained in the map received as parameter.
|
||||
*
|
||||
* @param res Map object having keys as resources names
|
||||
* and {@link ResourceInformation} objects as values
|
||||
*/
|
||||
private static void addMandatoryResources(
|
||||
Map<String, ResourceInformation> res) {
|
||||
ResourceInformation ri;
|
||||
@ -272,7 +293,7 @@ private static Map<String, ResourceInformation> getResourceInformationMapFromCon
|
||||
validateNameOfResourceNameAndThrowException(name);
|
||||
}
|
||||
|
||||
checkMandatoryResources(resourceInformationMap);
|
||||
checkSpecialResources(resourceInformationMap);
|
||||
addMandatoryResources(resourceInformationMap);
|
||||
|
||||
setAllocationForMandatoryResources(resourceInformationMap, conf);
|
||||
@ -522,7 +543,7 @@ public static Map<String, ResourceInformation> getNodeResourceInformation(
|
||||
if (!initializedNodeResources) {
|
||||
Map<String, ResourceInformation> nodeResources = initializeNodeResourceInformation(
|
||||
conf);
|
||||
checkMandatoryResources(nodeResources);
|
||||
checkSpecialResources(nodeResources);
|
||||
addMandatoryResources(nodeResources);
|
||||
setAllocationForMandatoryResources(nodeResources, conf);
|
||||
readOnlyNodeResources = Collections.unmodifiableMap(nodeResources);
|
||||
|
Loading…
Reference in New Issue
Block a user