YARN-7051. Avoid concurrent modification exception in FifoIntraQueuePreemptionPlugin. Contributed by Eric Payne.
(cherry picked from commit 02599bda04e0ef46f4628b006f2430ad63cac97e)
This commit is contained in:
parent
b7f319c53c
commit
80570737a8
@ -397,10 +397,16 @@ private PriorityQueue<TempAppPerPartition> createTempAppForResCalculation(
|
|||||||
ResourceUsage userResourceUsage = tq.leafQueue.getUser(userName)
|
ResourceUsage userResourceUsage = tq.leafQueue.getUser(userName)
|
||||||
.getResourceUsage();
|
.getResourceUsage();
|
||||||
|
|
||||||
|
// perUserAMUsed was populated with running apps, now we are looping
|
||||||
|
// through both running and pending apps.
|
||||||
|
Resource userSpecificAmUsed = perUserAMUsed.get(userName);
|
||||||
|
amUsed = (userSpecificAmUsed == null)
|
||||||
|
? Resources.none() : userSpecificAmUsed;
|
||||||
|
|
||||||
TempUserPerPartition tmpUser = new TempUserPerPartition(
|
TempUserPerPartition tmpUser = new TempUserPerPartition(
|
||||||
tq.leafQueue.getUser(userName), tq.queueName,
|
tq.leafQueue.getUser(userName), tq.queueName,
|
||||||
Resources.clone(userResourceUsage.getUsed(partition)),
|
Resources.clone(userResourceUsage.getUsed(partition)),
|
||||||
Resources.clone(perUserAMUsed.get(userName)),
|
Resources.clone(userSpecificAmUsed),
|
||||||
Resources.clone(userResourceUsage.getReserved(partition)),
|
Resources.clone(userResourceUsage.getReserved(partition)),
|
||||||
Resources.none());
|
Resources.none());
|
||||||
|
|
||||||
@ -547,15 +553,17 @@ private Resource calculateUsedAMResourcesPerQueue(String partition,
|
|||||||
Collection<FiCaSchedulerApp> runningApps = leafQueue.getApplications();
|
Collection<FiCaSchedulerApp> runningApps = leafQueue.getApplications();
|
||||||
Resource amUsed = Resources.createResource(0, 0);
|
Resource amUsed = Resources.createResource(0, 0);
|
||||||
|
|
||||||
for (FiCaSchedulerApp app : runningApps) {
|
synchronized (leafQueue) {
|
||||||
Resource userAMResource = perUserAMUsed.get(app.getUser());
|
for (FiCaSchedulerApp app : runningApps) {
|
||||||
if (null == userAMResource) {
|
Resource userAMResource = perUserAMUsed.get(app.getUser());
|
||||||
userAMResource = Resources.createResource(0, 0);
|
if (null == userAMResource) {
|
||||||
perUserAMUsed.put(app.getUser(), userAMResource);
|
userAMResource = Resources.createResource(0, 0);
|
||||||
}
|
perUserAMUsed.put(app.getUser(), userAMResource);
|
||||||
|
}
|
||||||
|
|
||||||
Resources.addTo(userAMResource, app.getAMResource(partition));
|
Resources.addTo(userAMResource, app.getAMResource(partition));
|
||||||
Resources.addTo(amUsed, app.getAMResource(partition));
|
Resources.addTo(amUsed, app.getAMResource(partition));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return amUsed;
|
return amUsed;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user