Skip to content

Commit

Permalink
YARN-3145. Fixed ConcurrentModificationException on CapacityScheduler…
Browse files Browse the repository at this point in the history
… ParentQueue#getQueueUserAclInfo. Contributed by Tsuyoshi OZAWA
  • Loading branch information
jian-he committed Feb 6, 2015
1 parent b77ff37 commit 4641196
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 19 deletions.
3 changes: 3 additions & 0 deletions hadoop-yarn-project/CHANGES.txt
Expand Up @@ -491,6 +491,9 @@ Release 2.7.0 - UNRELEASED
YARN-3149. Fix typo in message for invalid application id.
(Bibin A Chundatt via xgong)

YARN-3145. Fixed ConcurrentModificationException on CapacityScheduler
ParentQueue#getQueueUserAclInfo. (Tsuyoshi OZAWA via jianhe)

Release 2.6.0 - 2014-11-18

INCOMPATIBLE CHANGES
Expand Down
Expand Up @@ -158,7 +158,7 @@ synchronized void setupQueueConfigs(Resource clusterResource, float capacity,
}

private static float PRECISION = 0.0005f; // 0.05% precision
void setChildQueues(Collection<CSQueue> childQueues) {
synchronized void setChildQueues(Collection<CSQueue> childQueues) {
// Validate
float childCapacities = 0;
for (CSQueue queue : childQueues) {
Expand Down Expand Up @@ -574,7 +574,7 @@ private synchronized CSAssignment assignContainersToChildQueues(Resource cluster
printChildQueues();

// Try to assign to most 'under-served' sub-queue
for (Iterator<CSQueue> iter=childQueues.iterator(); iter.hasNext();) {
for (Iterator<CSQueue> iter = childQueues.iterator(); iter.hasNext();) {
CSQueue childQueue = iter.next();
if(LOG.isDebugEnabled()) {
LOG.debug("Trying to assign to queue: " + childQueue.getQueuePath()
Expand Down Expand Up @@ -644,26 +644,26 @@ public void completedContainer(Resource clusterResource,
" absoluteUsedCapacity=" + getAbsoluteUsedCapacity() +
" used=" + queueUsage.getUsed() +
" cluster=" + clusterResource);
}

// Note that this is using an iterator on the childQueues so this can't be
// called if already within an iterator for the childQueues. Like
// from assignContainersToChildQueues.
if (sortQueues) {
// reinsert the updated queue
for (Iterator<CSQueue> iter=childQueues.iterator(); iter.hasNext();) {
CSQueue csqueue = iter.next();
if(csqueue.equals(completedChildQueue))
{
iter.remove();
LOG.info("Re-sorting completed queue: " + csqueue.getQueuePath() +
" stats: " + csqueue);
childQueues.add(csqueue);
break;
// Note that this is using an iterator on the childQueues so this can't
// be called if already within an iterator for the childQueues. Like
// from assignContainersToChildQueues.
if (sortQueues) {
// reinsert the updated queue
for (Iterator<CSQueue> iter = childQueues.iterator();
iter.hasNext();) {
CSQueue csqueue = iter.next();
if(csqueue.equals(completedChildQueue)) {
iter.remove();
LOG.info("Re-sorting completed queue: " + csqueue.getQueuePath() +
" stats: " + csqueue);
childQueues.add(csqueue);
break;
}
}
}
}

// Inform the parent
if (parent != null) {
// complete my parent
Expand Down Expand Up @@ -715,7 +715,7 @@ public ActiveUsersManager getActiveUsersManager() {
}

@Override
public void collectSchedulerApplications(
public synchronized void collectSchedulerApplications(
Collection<ApplicationAttemptId> apps) {
for (CSQueue queue : childQueues) {
queue.collectSchedulerApplications(apps);
Expand Down

0 comments on commit 4641196

Please sign in to comment.