YARN-2978. Fixed potential NPE while getting queue info. Contributed by Varun Saxena
(cherry picked from commitdd57c2047b
) (cherry picked from commitc61e8a7bfa
)
This commit is contained in:
parent
88f022da24
commit
419e18cb37
|
@ -174,6 +174,9 @@ Release 2.6.1 - UNRELEASED
|
|||
YARN-2920. Changed CapacityScheduler to kill containers on nodes where
|
||||
node labels are changed. (Wangda Tan via jianhe)
|
||||
|
||||
YARN-2978. Fixed potential NPE while getting queue info. (Varun Saxena via
|
||||
jianhe)
|
||||
|
||||
Release 2.6.0 - 2014-11-18
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -65,7 +65,6 @@ public abstract class AbstractCSQueue implements CSQueue {
|
|||
RMNodeLabelsManager labelManager;
|
||||
String defaultLabelExpression;
|
||||
Resource usedResources = Resources.createResource(0, 0);
|
||||
QueueInfo queueInfo;
|
||||
Map<String, Float> absoluteCapacityByNodeLabels;
|
||||
Map<String, Float> capacitiyByNodeLabels;
|
||||
Map<String, Resource> usedResourcesByNodeLabels = new HashMap<String, Resource>();
|
||||
|
@ -87,7 +86,6 @@ public abstract class AbstractCSQueue implements CSQueue {
|
|||
this.parent = parent;
|
||||
this.queueName = queueName;
|
||||
this.resourceCalculator = cs.getResourceCalculator();
|
||||
this.queueInfo = recordFactory.newRecordInstance(QueueInfo.class);
|
||||
|
||||
// must be called after parent and queueName is set
|
||||
this.metrics = old != null ? old.getMetrics() :
|
||||
|
@ -99,9 +97,7 @@ public abstract class AbstractCSQueue implements CSQueue {
|
|||
this.accessibleLabels = cs.getConfiguration().getAccessibleNodeLabels(getQueuePath());
|
||||
this.defaultLabelExpression = cs.getConfiguration()
|
||||
.getDefaultNodeLabelExpression(getQueuePath());
|
||||
|
||||
this.queueInfo.setQueueName(queueName);
|
||||
|
||||
|
||||
// inherit from parent if labels not set
|
||||
if (this.accessibleLabels == null && parent != null) {
|
||||
this.accessibleLabels = parent.getAccessibleNodeLabels();
|
||||
|
@ -280,12 +276,6 @@ public abstract class AbstractCSQueue implements CSQueue {
|
|||
this.capacitiyByNodeLabels = new HashMap<String, Float>(nodeLabelCapacities);
|
||||
this.maxCapacityByNodeLabels =
|
||||
new HashMap<String, Float>(maximumNodeLabelCapacities);
|
||||
|
||||
this.queueInfo.setAccessibleNodeLabels(this.accessibleLabels);
|
||||
this.queueInfo.setCapacity(this.capacity);
|
||||
this.queueInfo.setMaximumCapacity(this.maximumCapacity);
|
||||
this.queueInfo.setQueueState(this.state);
|
||||
this.queueInfo.setDefaultNodeLabelExpression(this.defaultLabelExpression);
|
||||
|
||||
// Update metrics
|
||||
CSQueueUtils.updateQueueStatistics(
|
||||
|
@ -330,6 +320,18 @@ public abstract class AbstractCSQueue implements CSQueue {
|
|||
this.reservationsContinueLooking = reservationContinueLooking;
|
||||
}
|
||||
|
||||
protected QueueInfo getQueueInfo() {
|
||||
QueueInfo queueInfo = recordFactory.newRecordInstance(QueueInfo.class);
|
||||
queueInfo.setQueueName(queueName);
|
||||
queueInfo.setAccessibleNodeLabels(accessibleLabels);
|
||||
queueInfo.setCapacity(capacity);
|
||||
queueInfo.setMaximumCapacity(maximumCapacity);
|
||||
queueInfo.setQueueState(state);
|
||||
queueInfo.setDefaultNodeLabelExpression(defaultLabelExpression);
|
||||
queueInfo.setCurrentCapacity(getUsedCapacity());
|
||||
return queueInfo;
|
||||
}
|
||||
|
||||
@Private
|
||||
public Resource getMaximumAllocation() {
|
||||
return maximumAllocation;
|
||||
|
|
|
@ -160,8 +160,6 @@ public class LeafQueue extends AbstractCSQueue {
|
|||
float maxAMResourcePerQueuePercent = cs.getConfiguration()
|
||||
.getMaximumApplicationMasterResourcePerQueuePercent(getQueuePath());
|
||||
|
||||
this.queueInfo.setChildQueues(new ArrayList<QueueInfo>());
|
||||
|
||||
QueueState state = cs.getConfiguration().getState(getQueuePath());
|
||||
|
||||
Map<QueueACL, AccessControlList> acls =
|
||||
|
@ -237,14 +235,14 @@ public class LeafQueue extends AbstractCSQueue {
|
|||
this.defaultLabelExpression)) {
|
||||
throw new IOException("Invalid default label expression of "
|
||||
+ " queue="
|
||||
+ queueInfo.getQueueName()
|
||||
+ getQueueName()
|
||||
+ " doesn't have permission to access all labels "
|
||||
+ "in default label expression. labelExpression of resource request="
|
||||
+ (this.defaultLabelExpression == null ? ""
|
||||
: this.defaultLabelExpression)
|
||||
+ ". Queue labels="
|
||||
+ (queueInfo.getAccessibleNodeLabels() == null ? "" : StringUtils.join(queueInfo
|
||||
.getAccessibleNodeLabels().iterator(), ',')));
|
||||
+ (getAccessibleNodeLabels() == null ? "" : StringUtils.join(
|
||||
getAccessibleNodeLabels().iterator(), ',')));
|
||||
}
|
||||
|
||||
this.nodeLocalityDelay = nodeLocalityDelay;
|
||||
|
@ -412,7 +410,7 @@ public class LeafQueue extends AbstractCSQueue {
|
|||
@Override
|
||||
public synchronized QueueInfo getQueueInfo(
|
||||
boolean includeChildQueues, boolean recursive) {
|
||||
queueInfo.setCurrentCapacity(usedCapacity);
|
||||
QueueInfo queueInfo = getQueueInfo();
|
||||
return queueInfo;
|
||||
}
|
||||
|
||||
|
|
|
@ -110,8 +110,6 @@ public class ParentQueue extends AbstractCSQueue {
|
|||
Map<QueueACL, AccessControlList> acls =
|
||||
cs.getConfiguration().getAcls(getQueuePath());
|
||||
|
||||
this.queueInfo.setChildQueues(new ArrayList<QueueInfo>());
|
||||
|
||||
setupQueueConfigs(cs.getClusterResource(), capacity, absoluteCapacity,
|
||||
maximumCapacity, absoluteMaxCapacity, state, acls, accessibleLabels,
|
||||
defaultLabelExpression, capacitiyByNodeLabels, maxCapacityByNodeLabels,
|
||||
|
@ -206,7 +204,7 @@ public class ParentQueue extends AbstractCSQueue {
|
|||
@Override
|
||||
public synchronized QueueInfo getQueueInfo(
|
||||
boolean includeChildQueues, boolean recursive) {
|
||||
queueInfo.setCurrentCapacity(usedCapacity);
|
||||
QueueInfo queueInfo = getQueueInfo();
|
||||
|
||||
List<QueueInfo> childQueuesInfo = new ArrayList<QueueInfo>();
|
||||
if (includeChildQueues) {
|
||||
|
|
Loading…
Reference in New Issue