You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-commits@hadoop.apache.org by sa...@apache.org on 2014/02/18 18:51:41 UTC
svn commit: r1569443 - in /hadoop/common/trunk/hadoop-yarn-project:
CHANGES.txt
hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
Author: sandy
Date: Tue Feb 18 17:51:40 2014
New Revision: 1569443
URL: http://svn.apache.org/r1569443
Log:
YARN-1721. When moving app between queues in Fair Scheduler, grab lock on FSSchedulerApp (Sandy Ryza)
Modified:
hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
Modified: hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt?rev=1569443&r1=1569442&r2=1569443&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt Tue Feb 18 17:51:40 2014
@@ -289,6 +289,9 @@ Release 2.4.0 - UNRELEASED
instead rely on the http policy framework. And also fix some bugs related
to https handling in YARN web-apps. (Haohui Mai via vinodkv)
+ YARN-1721. When moving app between queues in Fair Scheduler, grab lock on
+ FSSchedulerApp (Sandy Ryza)
+
Release 2.3.1 - UNRELEASED
INCOMPATIBLE CHANGES
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java?rev=1569443&r1=1569442&r2=1569443&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java Tue Feb 18 17:51:40 2014
@@ -1366,24 +1366,26 @@ public class FairScheduler extends Abstr
throw new YarnException("App to be moved " + appId + " not found.");
}
FSSchedulerApp attempt = (FSSchedulerApp) app.getCurrentAppAttempt();
-
- FSLeafQueue oldQueue = (FSLeafQueue) app.getQueue();
- FSLeafQueue targetQueue = queueMgr.getLeafQueue(queueName, false);
- if (targetQueue == null) {
- throw new YarnException("Target queue " + queueName
- + " not found or is not a leaf queue.");
- }
- if (targetQueue == oldQueue) {
- return oldQueue.getQueueName();
- }
-
- if (oldQueue.getRunnableAppSchedulables().contains(
- attempt.getAppSchedulable())) {
- verifyMoveDoesNotViolateConstraints(attempt, oldQueue, targetQueue);
+ // To serialize with FairScheduler#allocate, synchronize on app attempt
+ synchronized (attempt) {
+ FSLeafQueue oldQueue = (FSLeafQueue) app.getQueue();
+ FSLeafQueue targetQueue = queueMgr.getLeafQueue(queueName, false);
+ if (targetQueue == null) {
+ throw new YarnException("Target queue " + queueName
+ + " not found or is not a leaf queue.");
+ }
+ if (targetQueue == oldQueue) {
+ return oldQueue.getQueueName();
+ }
+
+ if (oldQueue.getRunnableAppSchedulables().contains(
+ attempt.getAppSchedulable())) {
+ verifyMoveDoesNotViolateConstraints(attempt, oldQueue, targetQueue);
+ }
+
+ executeMove(app, attempt, oldQueue, targetQueue);
+ return targetQueue.getQueueName();
}
-
- executeMove(app, attempt, oldQueue, targetQueue);
- return targetQueue.getQueueName();
}
private void verifyMoveDoesNotViolateConstraints(FSSchedulerApp app,
@@ -1420,8 +1422,8 @@ public class FairScheduler extends Abstr
}
/**
- * Helper for moveApplication, which is synchronized, so all operations will
- * be atomic.
+ * Helper for moveApplication, which has appropriate synchronization, so all
+ * operations will be atomic.
*/
private void executeMove(SchedulerApplication app, FSSchedulerApp attempt,
FSLeafQueue oldQueue, FSLeafQueue newQueue) {