YARN-3969. Allow jobs to be submitted to reservation that is active but does not have any allocations. (subru via curino)
(cherry picked from commit0fcb4a8cf2
) (cherry picked from commit6a71a0a230
)
This commit is contained in:
parent
b919c1c044
commit
76339bfb9f
|
@ -204,6 +204,9 @@ Release 2.7.1 - 2015-07-06
|
||||||
YARN-3850. NM fails to read files from full disks which can lead to
|
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)
|
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
|
Release 2.7.0 - 2015-04-20
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -39,12 +39,9 @@ public class ReservationQueue extends LeafQueue {
|
||||||
|
|
||||||
private PlanQueue parent;
|
private PlanQueue parent;
|
||||||
|
|
||||||
private int maxSystemApps;
|
|
||||||
|
|
||||||
public ReservationQueue(CapacitySchedulerContext cs, String queueName,
|
public ReservationQueue(CapacitySchedulerContext cs, String queueName,
|
||||||
PlanQueue parent) throws IOException {
|
PlanQueue parent) throws IOException {
|
||||||
super(cs, queueName, parent, null);
|
super(cs, queueName, parent, null);
|
||||||
maxSystemApps = cs.getConfiguration().getMaximumSystemApplications();
|
|
||||||
// the following parameters are common to all reservation in the plan
|
// the following parameters are common to all reservation in the plan
|
||||||
updateQuotas(parent.getUserLimitForReservation(),
|
updateQuotas(parent.getUserLimitForReservation(),
|
||||||
parent.getUserLimitFactor(),
|
parent.getUserLimitFactor(),
|
||||||
|
@ -90,7 +87,6 @@ public class ReservationQueue extends LeafQueue {
|
||||||
}
|
}
|
||||||
setCapacity(capacity);
|
setCapacity(capacity);
|
||||||
setAbsoluteCapacity(getParent().getAbsoluteCapacity() * getCapacity());
|
setAbsoluteCapacity(getParent().getAbsoluteCapacity() * getCapacity());
|
||||||
setMaxApplications((int) (maxSystemApps * getAbsoluteCapacity()));
|
|
||||||
// note: we currently set maxCapacity to capacity
|
// note: we currently set maxCapacity to capacity
|
||||||
// this might be revised later
|
// this might be revised later
|
||||||
setMaxCapacity(entitlement.getMaxCapacity());
|
setMaxCapacity(entitlement.getMaxCapacity());
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
package org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity;
|
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.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
@ -39,6 +40,7 @@ public class TestReservationQueue {
|
||||||
|
|
||||||
CapacitySchedulerConfiguration csConf;
|
CapacitySchedulerConfiguration csConf;
|
||||||
CapacitySchedulerContext csContext;
|
CapacitySchedulerContext csContext;
|
||||||
|
final static int DEF_MAX_APPS = 10000;
|
||||||
final static int GB = 1024;
|
final static int GB = 1024;
|
||||||
private final ResourceCalculator resourceCalculator =
|
private final ResourceCalculator resourceCalculator =
|
||||||
new DefaultResourceCalculator();
|
new DefaultResourceCalculator();
|
||||||
|
@ -66,7 +68,13 @@ public class TestReservationQueue {
|
||||||
// create a queue
|
// create a queue
|
||||||
PlanQueue pq = new PlanQueue(csContext, "root", null, null);
|
PlanQueue pq = new PlanQueue(csContext, "root", null, null);
|
||||||
reservationQueue = new ReservationQueue(csContext, "a", pq);
|
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
|
@Test
|
||||||
|
@ -74,25 +82,20 @@ public class TestReservationQueue {
|
||||||
|
|
||||||
// verify that setting, adding, subtracting capacity works
|
// verify that setting, adding, subtracting capacity works
|
||||||
reservationQueue.setCapacity(1.0F);
|
reservationQueue.setCapacity(1.0F);
|
||||||
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
|
validateReservationQueue(1);
|
||||||
reservationQueue.getCapacity() - 1 < CSQueueUtils.EPSILON);
|
|
||||||
reservationQueue.setEntitlement(new QueueEntitlement(0.9f, 1f));
|
reservationQueue.setEntitlement(new QueueEntitlement(0.9f, 1f));
|
||||||
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
|
validateReservationQueue(0.9);
|
||||||
reservationQueue.getCapacity() - 0.9 < CSQueueUtils.EPSILON);
|
|
||||||
reservationQueue.setEntitlement(new QueueEntitlement(1f, 1f));
|
reservationQueue.setEntitlement(new QueueEntitlement(1f, 1f));
|
||||||
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
|
validateReservationQueue(1);
|
||||||
reservationQueue.getCapacity() - 1 < CSQueueUtils.EPSILON);
|
|
||||||
reservationQueue.setEntitlement(new QueueEntitlement(0f, 1f));
|
reservationQueue.setEntitlement(new QueueEntitlement(0f, 1f));
|
||||||
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
|
validateReservationQueue(0);
|
||||||
reservationQueue.getCapacity() < CSQueueUtils.EPSILON);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
reservationQueue.setEntitlement(new QueueEntitlement(1.1f, 1f));
|
reservationQueue.setEntitlement(new QueueEntitlement(1.1f, 1f));
|
||||||
fail();
|
fail();
|
||||||
} catch (SchedulerDynamicEditException iae) {
|
} catch (SchedulerDynamicEditException iae) {
|
||||||
// expected
|
// expected
|
||||||
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
|
validateReservationQueue(1);
|
||||||
reservationQueue.getCapacity() - 1 < CSQueueUtils.EPSILON);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -100,8 +103,7 @@ public class TestReservationQueue {
|
||||||
fail();
|
fail();
|
||||||
} catch (SchedulerDynamicEditException iae) {
|
} catch (SchedulerDynamicEditException iae) {
|
||||||
// expected
|
// expected
|
||||||
assertTrue(" actual capacity: " + reservationQueue.getCapacity(),
|
validateReservationQueue(1);
|
||||||
reservationQueue.getCapacity() - 1 < CSQueueUtils.EPSILON);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue