diff --git a/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 b/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 index 04bbe0ff684..f08d0d5689c 100644 --- a/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 +++ b/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 @@ -1004,8 +1004,11 @@ void continuousSchedulingAttempt() throws InterruptedException { List nodeIdList; // Hold a lock to prevent comparator order changes due to changes of node // unallocated resources - synchronized (this) { + readLock.lock(); + try { nodeIdList = nodeTracker.sortedNodeList(nodeAvailableResourceComparator); + } finally { + readLock.unlock(); } // iterate all nodes diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestContinuousScheduling.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestContinuousScheduling.java index 5dac8622164..37ef63278bb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestContinuousScheduling.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestContinuousScheduling.java @@ -316,40 +316,6 @@ public void testSchedulerThreadLifeCycle() throws InterruptedException { assertNotEquals("The Scheduling thread is still alive", 0, numRetries); } - @SuppressWarnings("deprecation") - @Test - public void TestNodeAvailableResourceComparatorTransitivity() { - ClusterNodeTracker clusterNodeTracker = - scheduler.getNodeTracker(); - - List rmNodes = - MockNodes.newNodes(2, 4000, Resource.newInstance(4096, 4)); - for (RMNode rmNode : rmNodes) { - clusterNodeTracker.addNode(new FSSchedulerNode(rmNode, false)); - } - - // To simulate unallocated resource changes - new Thread() { - @Override - public void run() { - for (int j = 0; j < 100; j++) { - for (FSSchedulerNode node : clusterNodeTracker.getAllNodes()) { - int i = ThreadLocalRandom.current().nextInt(-30, 30); - synchronized (scheduler) { - node.deductUnallocatedResource(Resource.newInstance(i * 1024, i)); - } - } - } - } - }.start(); - - try { - scheduler.continuousSchedulingAttempt(); - } catch (Exception e) { - fail(e.getMessage()); - } - } - @Test public void testFairSchedulerContinuousSchedulingInitTime() throws Exception { scheduler.start();