Merge -r 1424944:1424945 from trunk to branch-2. Fixes: YARN-271. Fair scheduler hits IllegalStateException trying to reserve different apps on same node. Contributed by Sandy Ryza.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1424946 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8c293a7ff1
commit
0e9379a9f1
|
@ -123,6 +123,9 @@ Release 2.0.3-alpha - Unreleased
|
||||||
YARN-264. y.s.rm.DelegationTokenRenewer attempts to renew token even
|
YARN-264. y.s.rm.DelegationTokenRenewer attempts to renew token even
|
||||||
after removing an app. (kkambatl via tucu)
|
after removing an app. (kkambatl via tucu)
|
||||||
|
|
||||||
|
YARN-271. Fair scheduler hits IllegalStateException trying to reserve
|
||||||
|
different apps on same node. (Sandy Ryza via tomwhite)
|
||||||
|
|
||||||
Release 2.0.2-alpha - 2012-09-07
|
Release 2.0.2-alpha - 2012-09-07
|
||||||
|
|
||||||
YARN-9. Rename YARN_HOME to HADOOP_YARN_HOME. (vinodkv via acmurthy)
|
YARN-9. Rename YARN_HOME to HADOOP_YARN_HOME. (vinodkv via acmurthy)
|
||||||
|
|
|
@ -777,7 +777,8 @@ public class FairScheduler implements ResourceScheduler {
|
||||||
boolean assignedContainer = false;
|
boolean assignedContainer = false;
|
||||||
for (FSLeafQueue sched : scheds) {
|
for (FSLeafQueue sched : scheds) {
|
||||||
Resource assigned = sched.assignContainer(node, false);
|
Resource assigned = sched.assignContainer(node, false);
|
||||||
if (Resources.greaterThan(assigned, Resources.none())) {
|
if (Resources.greaterThan(assigned, Resources.none()) ||
|
||||||
|
node.getReservedContainer() != null) {
|
||||||
eventLog.log("ASSIGN", nm.getHostName(), assigned);
|
eventLog.log("ASSIGN", nm.getHostName(), assigned);
|
||||||
assignedContainers++;
|
assignedContainers++;
|
||||||
assignedContainer = true;
|
assignedContainer = true;
|
||||||
|
|
|
@ -1098,4 +1098,31 @@ public class TestFairScheduler {
|
||||||
assertTrue(Resources.equals(
|
assertTrue(Resources.equals(
|
||||||
Resources.createResource(1536), scheduler.resToPreempt(schedD, clock.getTime())));
|
Resources.createResource(1536), scheduler.resToPreempt(schedD, clock.getTime())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMultipleContainersWaitingForReservation() {
|
||||||
|
// Add a node
|
||||||
|
RMNode node1 = MockNodes.newNodeInfo(1, Resources.createResource(1024));
|
||||||
|
NodeAddedSchedulerEvent nodeEvent1 = new NodeAddedSchedulerEvent(node1);
|
||||||
|
scheduler.handle(nodeEvent1);
|
||||||
|
|
||||||
|
// Request full capacity of node
|
||||||
|
createSchedulingRequest(1024, "queue1", "user1", 1);
|
||||||
|
scheduler.update();
|
||||||
|
NodeUpdateSchedulerEvent updateEvent = new NodeUpdateSchedulerEvent(node1,
|
||||||
|
new ArrayList<ContainerStatus>(), new ArrayList<ContainerStatus>());
|
||||||
|
scheduler.handle(updateEvent);
|
||||||
|
|
||||||
|
ApplicationAttemptId attId1 = createSchedulingRequest(1024, "queue2", "user2", 1);
|
||||||
|
ApplicationAttemptId attId2 = createSchedulingRequest(1024, "queue3", "user3", 1);
|
||||||
|
|
||||||
|
scheduler.update();
|
||||||
|
scheduler.handle(updateEvent);
|
||||||
|
|
||||||
|
// One container should get reservation and the other should get nothing
|
||||||
|
assertEquals(1024,
|
||||||
|
scheduler.applications.get(attId1).getCurrentReservation().getMemory());
|
||||||
|
assertEquals(0,
|
||||||
|
scheduler.applications.get(attId2).getCurrentReservation().getMemory());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue