YARN-7591. NPE in async-scheduling mode of CapacityScheduler. (Tao Yang via wangda)

Change-Id: I67e086d6d35c3166ec0f6305490ea6527bd6d799
(cherry picked from commit 41796ea60a)
(cherry picked from commit c27a5ba65c)
This commit is contained in:
Wangda Tan 2017-12-08 21:43:28 -08:00
parent 39d0fdf1b2
commit 524ecb19ef
3 changed files with 29 additions and 1 deletions

View File

@ -1258,6 +1258,10 @@ public class CapacityScheduler extends
if (reservedContainer != null) {
FiCaSchedulerApp reservedApplication = getCurrentAttemptForContainer(
reservedContainer.getContainerId());
if (reservedApplication == null) {
LOG.error("Trying to schedule for a finished app, please double check.");
return null;
}
// Try to fulfill the reservation
LOG.info(

View File

@ -1186,7 +1186,14 @@ public class LeafQueue extends AbstractCSQueue {
allocation.getSchedulingMode(), null);
// Deduct resources that we can release
Resource usedResource = Resources.clone(getUser(username).getUsed(p));
User user = getUser(username);
if (user == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("User " + username + " has been removed!");
}
return false;
}
Resource usedResource = Resources.clone(user.getUsed(p));
Resources.subtractFrom(usedResource,
request.getTotalReleasedResource());
@ -1391,6 +1398,12 @@ public class LeafQueue extends AbstractCSQueue {
SchedulingMode schedulingMode, Resource userLimit) {
String user = application.getUser();
User queueUser = getUser(user);
if (queueUser == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("User " + user + " has been removed!");
}
return Resources.none();
}
// Compute user limit respect requested labels,
// TODO, need consider headroom respect labels also
@ -1485,6 +1498,12 @@ public class LeafQueue extends AbstractCSQueue {
try {
readLock.lock();
User user = getUser(userName);
if (user == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("User " + userName + " has been removed!");
}
return false;
}
currentResourceLimits.setAmountNeededUnreserve(Resources.none());

View File

@ -321,6 +321,11 @@ public class FiCaSchedulerApp extends SchedulerApplicationAttempt {
RMContainer reservedContainerOnNode =
schedulerContainer.getSchedulerNode().getReservedContainer();
if (reservedContainerOnNode != null) {
// adding NP check as this proposal could not be allocated from reserved
// container in async-scheduling mode
if (allocation.getAllocateFromReservedContainer() == null) {
return false;
}
RMContainer fromReservedContainer =
allocation.getAllocateFromReservedContainer().getRmContainer();