diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java index 760b0ea..6e51756 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java @@ -303,6 +303,11 @@ public static boolean fitsIn(Resource smaller, Resource bigger) { smaller.getVirtualCores() <= bigger.getVirtualCores(); } + public static boolean lessThan(Resource smaller, Resource bigger) { + return smaller.getMemorySize() < bigger.getMemorySize() + || smaller.getVirtualCores() < bigger.getVirtualCores(); + } + public static boolean fitsIn(ResourceCalculator rc, Resource cluster, Resource smaller, Resource bigger) { return rc.fitsIn(cluster, smaller, bigger); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java index 7fcabab..1f4396d 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java @@ -288,14 +288,8 @@ public static void validateBlacklistRequest( private static boolean validateIncreaseDecreaseRequest(RMContext rmContext, UpdateContainerRequest request, Resource maximumAllocation, boolean increase) { - if (request.getCapability().getMemorySize() < 0 - || request.getCapability().getMemorySize() > maximumAllocation - .getMemorySize()) { - return false; - } - if (request.getCapability().getVirtualCores() < 0 - || request.getCapability().getVirtualCores() > maximumAllocation - .getVirtualCores()) { + if (Resources.lessThan(maximumAllocation, request.getCapability()) + || Resources.lessThan(request.getCapability(), Resources.none())) { return false; } ResourceScheduler scheduler = rmContext.getScheduler(); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerUtils.java index c999e26..5798c23 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerUtils.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerUtils.java @@ -274,23 +274,12 @@ public static void normalizeAndvalidateRequest(ResourceRequest resReq, private static void validateResourceRequest(ResourceRequest resReq, Resource maximumResource, QueueInfo queueInfo, RMContext rmContext) throws InvalidResourceRequestException { - if (resReq.getCapability().getMemorySize() < 0 || - resReq.getCapability().getMemorySize() > maximumResource.getMemorySize()) { + if (Resources.lessThan(maximumResource, resReq.getCapability()) + || Resources.lessThan(resReq.getCapability(), Resources.none())) { throw new InvalidResourceRequestException("Invalid resource request" - + ", requested memory < 0" - + ", or requested memory > max configured" - + ", requestedMemory=" + resReq.getCapability().getMemorySize() - + ", maxMemory=" + maximumResource.getMemorySize()); - } - if (resReq.getCapability().getVirtualCores() < 0 || - resReq.getCapability().getVirtualCores() > - maximumResource.getVirtualCores()) { - throw new InvalidResourceRequestException("Invalid resource request" - + ", requested virtual cores < 0" - + ", or requested virtual cores > max configured" - + ", requestedVirtualCores=" - + resReq.getCapability().getVirtualCores() - + ", maxVirtualCores=" + maximumResource.getVirtualCores()); + + ", requested resource < 0" + + ", or requested resource > max configured" + ", requested Resource=" + + resReq.getCapability() + ", max Resource=" + maximumResource); } String labelExp = resReq.getNodeLabelExpression(); // we don't allow specify label expression other than resourceName=ANY now