Skip to content

Commit

Permalink
YARN-3969. Allow jobs to be submitted to reservation that is active b…
Browse files Browse the repository at this point in the history
…ut does not have any allocations. (subru via curino)
  • Loading branch information
carlo curino authored and carlo curino committed Jul 24, 2015
1 parent 206d493 commit 0fcb4a8
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 16 deletions.
3 changes: 3 additions & 0 deletions hadoop-yarn-project/CHANGES.txt
Expand Up @@ -864,6 +864,9 @@ Release 2.7.1 - 2015-07-06
YARN-3850. NM fails to read files from full disks which can lead to
container logs being lost and other issues (Varun Saxena via jlowe)

YARN-3969. Allow jobs to be submitted to reservation that is active
but does not have any allocations. (subru via curino)

Release 2.7.0 - 2015-04-20

INCOMPATIBLE CHANGES
Expand Down
Expand Up @@ -39,12 +39,9 @@ public class ReservationQueue extends LeafQueue {

private PlanQueue parent;

private int maxSystemApps;

public ReservationQueue(CapacitySchedulerContext cs, String queueName,
PlanQueue parent) throws IOException {
super(cs, queueName, parent, null);
maxSystemApps = cs.getConfiguration().getMaximumSystemApplications();
// the following parameters are common to all reservation in the plan
updateQuotas(parent.getUserLimitForReservation(),
parent.getUserLimitFactor(),
Expand Down Expand Up @@ -89,7 +86,6 @@ public synchronized void setEntitlement(QueueEntitlement entitlement)
}
setCapacity(capacity);
setAbsoluteCapacity(getParent().getAbsoluteCapacity() * getCapacity());
setMaxApplications((int) (maxSystemApps * getAbsoluteCapacity()));
// note: we currently set maxCapacity to capacity
// this might be revised later
setMaxCapacity(entitlement.getMaxCapacity());
Expand Down
Expand Up @@ -18,6 +18,7 @@

package org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
Expand All @@ -39,6 +40,7 @@ public class TestReservationQueue {

CapacitySchedulerConfiguration csConf;
CapacitySchedulerContext csContext;
final static int DEF_MAX_APPS = 10000;
final static int GB = 1024;
private final ResourceCalculator resourceCalculator =
new DefaultResourceCalculator();
Expand Down Expand Up @@ -66,42 +68,42 @@ public void setup() throws IOException {
// create a queue
PlanQueue pq = new PlanQueue(csContext, "root", null, null);
reservationQueue = new ReservationQueue(csContext, "a", pq);
}

private void validateReservationQueue(double capacity) {
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
reservationQueue.getCapacity() - capacity < CSQueueUtils.EPSILON);
assertEquals(reservationQueue.maxApplications, DEF_MAX_APPS);
assertEquals(reservationQueue.maxApplicationsPerUser, DEF_MAX_APPS);
}

@Test
public void testAddSubtractCapacity() throws Exception {

// verify that setting, adding, subtracting capacity works
reservationQueue.setCapacity(1.0F);
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
reservationQueue.getCapacity() - 1 < CSQueueUtils.EPSILON);
validateReservationQueue(1);
reservationQueue.setEntitlement(new QueueEntitlement(0.9f, 1f));
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
reservationQueue.getCapacity() - 0.9 < CSQueueUtils.EPSILON);
validateReservationQueue(0.9);
reservationQueue.setEntitlement(new QueueEntitlement(1f, 1f));
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
reservationQueue.getCapacity() - 1 < CSQueueUtils.EPSILON);
validateReservationQueue(1);
reservationQueue.setEntitlement(new QueueEntitlement(0f, 1f));
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
reservationQueue.getCapacity() < CSQueueUtils.EPSILON);
validateReservationQueue(0);

try {
reservationQueue.setEntitlement(new QueueEntitlement(1.1f, 1f));
fail();
} catch (SchedulerDynamicEditException iae) {
// expected
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
reservationQueue.getCapacity() - 1 < CSQueueUtils.EPSILON);
validateReservationQueue(1);
}

try {
reservationQueue.setEntitlement(new QueueEntitlement(-0.1f, 1f));
fail();
} catch (SchedulerDynamicEditException iae) {
// expected
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
reservationQueue.getCapacity() - 1 < CSQueueUtils.EPSILON);
validateReservationQueue(1);
}

}
Expand Down

0 comments on commit 0fcb4a8

Please sign in to comment.