YARN-3489. RMServerUtils.validateResourceRequests should only obtain queue info once. (Varun Saxena via wangda)
(cherry picked from commit d6f6741296
)
This commit is contained in:
parent
53e9973afc
commit
d06d2a96f5
|
@ -360,6 +360,9 @@ Release 2.7.1 - UNRELEASED
|
||||||
YARN-3243. CapacityScheduler should pass headroom from parent to children
|
YARN-3243. CapacityScheduler should pass headroom from parent to children
|
||||||
to make sure ParentQueue obey its capacity limits. (Wangda Tan via jianhe)
|
to make sure ParentQueue obey its capacity limits. (Wangda Tan via jianhe)
|
||||||
|
|
||||||
|
YARN-3489. RMServerUtils.validateResourceRequests should only obtain queue
|
||||||
|
info once. (Varun Saxena via wangda)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
|
|
@ -35,6 +35,7 @@ import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
||||||
import org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport;
|
import org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport;
|
||||||
import org.apache.hadoop.yarn.api.records.ContainerId;
|
import org.apache.hadoop.yarn.api.records.ContainerId;
|
||||||
import org.apache.hadoop.yarn.api.records.NodeState;
|
import org.apache.hadoop.yarn.api.records.NodeState;
|
||||||
|
import org.apache.hadoop.yarn.api.records.QueueInfo;
|
||||||
import org.apache.hadoop.yarn.api.records.Resource;
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
import org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest;
|
import org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest;
|
||||||
import org.apache.hadoop.yarn.api.records.ResourceRequest;
|
import org.apache.hadoop.yarn.api.records.ResourceRequest;
|
||||||
|
@ -94,9 +95,16 @@ public class RMServerUtils {
|
||||||
Resource maximumResource, String queueName, YarnScheduler scheduler,
|
Resource maximumResource, String queueName, YarnScheduler scheduler,
|
||||||
RMContext rmContext)
|
RMContext rmContext)
|
||||||
throws InvalidResourceRequestException {
|
throws InvalidResourceRequestException {
|
||||||
|
// Get queue from scheduler
|
||||||
|
QueueInfo queueInfo = null;
|
||||||
|
try {
|
||||||
|
queueInfo = scheduler.getQueueInfo(queueName, false, false);
|
||||||
|
} catch (IOException e) {
|
||||||
|
}
|
||||||
|
|
||||||
for (ResourceRequest resReq : ask) {
|
for (ResourceRequest resReq : ask) {
|
||||||
SchedulerUtils.normalizeAndvalidateRequest(resReq, maximumResource,
|
SchedulerUtils.normalizeAndvalidateRequest(resReq, maximumResource,
|
||||||
queueName, scheduler, rmContext);
|
queueName, scheduler, rmContext, queueInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -213,13 +213,21 @@ public class SchedulerUtils {
|
||||||
Resource maximumResource, String queueName, YarnScheduler scheduler,
|
Resource maximumResource, String queueName, YarnScheduler scheduler,
|
||||||
boolean isRecovery, RMContext rmContext)
|
boolean isRecovery, RMContext rmContext)
|
||||||
throws InvalidResourceRequestException {
|
throws InvalidResourceRequestException {
|
||||||
|
normalizeAndValidateRequest(resReq, maximumResource, queueName, scheduler,
|
||||||
|
isRecovery, rmContext, null);
|
||||||
|
}
|
||||||
|
|
||||||
QueueInfo queueInfo = null;
|
public static void normalizeAndValidateRequest(ResourceRequest resReq,
|
||||||
try {
|
Resource maximumResource, String queueName, YarnScheduler scheduler,
|
||||||
queueInfo = scheduler.getQueueInfo(queueName, false, false);
|
boolean isRecovery, RMContext rmContext, QueueInfo queueInfo)
|
||||||
} catch (IOException e) {
|
throws InvalidResourceRequestException {
|
||||||
// it is possible queue cannot get when queue mapping is set, just ignore
|
if (null == queueInfo) {
|
||||||
// the queueInfo here, and move forward
|
try {
|
||||||
|
queueInfo = scheduler.getQueueInfo(queueName, false, false);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// it is possible queue cannot get when queue mapping is set, just ignore
|
||||||
|
// the queueInfo here, and move forward
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SchedulerUtils.normalizeNodeLabelExpressionInRequest(resReq, queueInfo);
|
SchedulerUtils.normalizeNodeLabelExpressionInRequest(resReq, queueInfo);
|
||||||
if (!isRecovery) {
|
if (!isRecovery) {
|
||||||
|
@ -231,8 +239,16 @@ public class SchedulerUtils {
|
||||||
Resource maximumResource, String queueName, YarnScheduler scheduler,
|
Resource maximumResource, String queueName, YarnScheduler scheduler,
|
||||||
RMContext rmContext)
|
RMContext rmContext)
|
||||||
throws InvalidResourceRequestException {
|
throws InvalidResourceRequestException {
|
||||||
|
normalizeAndvalidateRequest(resReq, maximumResource, queueName, scheduler,
|
||||||
|
rmContext, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void normalizeAndvalidateRequest(ResourceRequest resReq,
|
||||||
|
Resource maximumResource, String queueName, YarnScheduler scheduler,
|
||||||
|
RMContext rmContext, QueueInfo queueInfo)
|
||||||
|
throws InvalidResourceRequestException {
|
||||||
normalizeAndValidateRequest(resReq, maximumResource, queueName, scheduler,
|
normalizeAndValidateRequest(resReq, maximumResource, queueName, scheduler,
|
||||||
false, rmContext);
|
false, rmContext, queueInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue