YARN-8464. Async scheduling thread could be interrupted when there are no NodeManagers in cluster. (Sunil G via wangda)
Change-Id: I4f5f856373378685713e77752ba6cf0988a66065 (cherry picked from commit bedc4fe0799cf3b161100acc521fc62a97793427) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/ec37e02b Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/ec37e02b Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/ec37e02b Branch: refs/heads/branch-3.1 Commit: ec37e02bc908f63659f8b7969ecb9a6763203b72 Parents: 8f226f4 Author: Wangda Tan <[email protected]> Authored: Tue Jun 26 19:27:17 2018 -0700 Committer: Wangda Tan <[email protected]> Committed: Tue Jun 26 19:34:15 2018 -0700 ---------------------------------------------------------------------- .../scheduler/capacity/CapacityScheduler.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/ec37e02b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.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/scheduler/capacity/CapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java index 8ec6eca..4b68678 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java @@ -519,7 +519,14 @@ public class CapacityScheduler extends // First randomize the start point int current = 0; Collection<FiCaSchedulerNode> nodes = cs.nodeTracker.getAllNodes(); - int start = random.nextInt(nodes.size()); + + // If nodes size is 0 (when there are no node managers registered, + // we can return from here itself. + int nodeSize = nodes.size(); + if(nodeSize == 0) { + return; + } + int start = random.nextInt(nodeSize); // To avoid too verbose DEBUG logging, only print debug log once for // every 10 secs. @@ -572,6 +579,7 @@ public class CapacityScheduler extends @Override public void run() { + int debuggingLogCounter = 0; while (!Thread.currentThread().isInterrupted()) { try { if (!runSchedules.get()) { @@ -583,6 +591,14 @@ public class CapacityScheduler extends Thread.sleep(1); } else{ schedule(cs); + if(LOG.isDebugEnabled()) { + // Adding a debug log here to ensure that the thread is alive + // and running fine. + if (debuggingLogCounter++ > 10000) { + debuggingLogCounter = 0; + LOG.debug("AsyncScheduleThread[" + getName() + "] is running!"); + } + } } } } catch (InterruptedException ie) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
