Repository: hadoop Updated Branches: refs/heads/trunk ae7abad3d -> 02599bda0
YARN-7051. Avoid concurrent modification exception in FifoIntraQueuePreemptionPlugin. Contributed by Eric Payne. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/02599bda Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/02599bda Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/02599bda Branch: refs/heads/trunk Commit: 02599bda04e0ef46f4628b006f2430ad63cac97e Parents: ae7abad Author: Sunil G <[email protected]> Authored: Mon Aug 28 12:22:56 2017 +0530 Committer: Sunil G <[email protected]> Committed: Mon Aug 28 12:22:56 2017 +0530 ---------------------------------------------------------------------- .../FifoIntraQueuePreemptionPlugin.java | 26 +++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/02599bda/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/FifoIntraQueuePreemptionPlugin.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/FifoIntraQueuePreemptionPlugin.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/FifoIntraQueuePreemptionPlugin.java index 4bf6760..00ae3da 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/FifoIntraQueuePreemptionPlugin.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/FifoIntraQueuePreemptionPlugin.java @@ -397,10 +397,16 @@ public class FifoIntraQueuePreemptionPlugin ResourceUsage userResourceUsage = tq.leafQueue.getUser(userName) .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( tq.leafQueue.getUser(userName), tq.queueName, Resources.clone(userResourceUsage.getUsed(partition)), - Resources.clone(perUserAMUsed.get(userName)), + Resources.clone(userSpecificAmUsed), Resources.clone(userResourceUsage.getReserved(partition)), Resources.none()); @@ -547,15 +553,17 @@ public class FifoIntraQueuePreemptionPlugin Collection<FiCaSchedulerApp> runningApps = leafQueue.getApplications(); Resource amUsed = Resources.createResource(0, 0); - for (FiCaSchedulerApp app : runningApps) { - Resource userAMResource = perUserAMUsed.get(app.getUser()); - if (null == userAMResource) { - userAMResource = Resources.createResource(0, 0); - perUserAMUsed.put(app.getUser(), userAMResource); - } + synchronized (leafQueue) { + for (FiCaSchedulerApp app : runningApps) { + Resource userAMResource = perUserAMUsed.get(app.getUser()); + if (null == userAMResource) { + userAMResource = Resources.createResource(0, 0); + perUserAMUsed.put(app.getUser(), userAMResource); + } - Resources.addTo(userAMResource, app.getAMResource(partition)); - Resources.addTo(amUsed, app.getAMResource(partition)); + Resources.addTo(userAMResource, app.getAMResource(partition)); + Resources.addTo(amUsed, app.getAMResource(partition)); + } } return amUsed; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
