YARN-4979. FSAppAttempt demand calculation considers demands at multiple locality levels different. (Zhihai Xu via kasha)
This commit is contained in:
parent
eebb39a56f
commit
6d043aa4cf
|
@ -929,7 +929,8 @@ public class FSAppAttempt extends SchedulerApplicationAttempt
|
||||||
// Add up outstanding resource requests
|
// Add up outstanding resource requests
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
for (Priority p : getPriorities()) {
|
for (Priority p : getPriorities()) {
|
||||||
for (ResourceRequest r : getResourceRequests(p).values()) {
|
ResourceRequest r = getResourceRequest(p, ResourceRequest.ANY);
|
||||||
|
if (r != null) {
|
||||||
Resources.multiplyAndAddTo(demand,
|
Resources.multiplyAndAddTo(demand,
|
||||||
r.getCapability(), r.getNumContainers());
|
r.getCapability(), r.getNumContainers());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1691,28 +1691,31 @@ public class TestFairScheduler extends FairSchedulerTestBase {
|
||||||
ask1.add(request1);
|
ask1.add(request1);
|
||||||
scheduler.allocate(id11, ask1, new ArrayList<ContainerId>(), null, null, null, null);
|
scheduler.allocate(id11, ask1, new ArrayList<ContainerId>(), null, null, null, null);
|
||||||
|
|
||||||
// Second ask, queue2 requests 1 large + (2 * minReqSize)
|
// Second ask, queue2 requests 1 large.
|
||||||
List<ResourceRequest> ask2 = new ArrayList<ResourceRequest>();
|
List<ResourceRequest> ask2 = new ArrayList<ResourceRequest>();
|
||||||
ResourceRequest request2 = createResourceRequest(2 * minReqSize, "foo", 1, 1,
|
ResourceRequest request2 = createResourceRequest(2 * minReqSize, "foo", 1, 1,
|
||||||
false);
|
false);
|
||||||
ResourceRequest request3 = createResourceRequest(minReqSize, "bar", 1, 2,
|
ResourceRequest request3 = createResourceRequest(2 * minReqSize,
|
||||||
false);
|
ResourceRequest.ANY, 1, 1, false);
|
||||||
ask2.add(request2);
|
ask2.add(request2);
|
||||||
ask2.add(request3);
|
ask2.add(request3);
|
||||||
scheduler.allocate(id21, ask2, new ArrayList<ContainerId>(), null, null, null, null);
|
scheduler.allocate(id21, ask2, new ArrayList<ContainerId>(), null, null, null, null);
|
||||||
|
|
||||||
// Third ask, queue2 requests 1 large
|
// Third ask, queue2 requests 2 small (minReqSize).
|
||||||
List<ResourceRequest> ask3 = new ArrayList<ResourceRequest>();
|
List<ResourceRequest> ask3 = new ArrayList<ResourceRequest>();
|
||||||
ResourceRequest request4 =
|
ResourceRequest request4 = createResourceRequest(minReqSize, "bar", 2, 2,
|
||||||
createResourceRequest(2 * minReqSize, ResourceRequest.ANY, 1, 1, true);
|
true);
|
||||||
|
ResourceRequest request5 = createResourceRequest(minReqSize,
|
||||||
|
ResourceRequest.ANY, 2, 2, true);
|
||||||
ask3.add(request4);
|
ask3.add(request4);
|
||||||
|
ask3.add(request5);
|
||||||
scheduler.allocate(id22, ask3, new ArrayList<ContainerId>(), null, null, null, null);
|
scheduler.allocate(id22, ask3, new ArrayList<ContainerId>(), null, null, null, null);
|
||||||
|
|
||||||
scheduler.update();
|
scheduler.update();
|
||||||
|
|
||||||
assertEquals(2 * minReqSize, scheduler.getQueueManager().getQueue("root.queue1")
|
assertEquals(2 * minReqSize, scheduler.getQueueManager().getQueue("root.queue1")
|
||||||
.getDemand().getMemory());
|
.getDemand().getMemory());
|
||||||
assertEquals(2 * minReqSize + 2 * minReqSize + (2 * minReqSize), scheduler
|
assertEquals(2 * minReqSize + 2 * minReqSize, scheduler
|
||||||
.getQueueManager().getQueue("root.queue2").getDemand()
|
.getQueueManager().getQueue("root.queue2").getDemand()
|
||||||
.getMemory());
|
.getMemory());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue