ソースを参照

YARN-9650. Set thread names for CapacityScheduler AsyncScheduleThread (#2665)

Amogh Rajesh Desai via Zhankun Tang
Amogh Rajesh Desai 4 年 前
コミット
0b05dd8802

+ 3 - 0
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

@@ -200,6 +200,8 @@ public class CapacityScheduler extends
 
   private CSConfigurationProvider csConfProvider;
 
+  private int threadNum = 0;
+
   @Override
   public void setConf(Configuration conf) {
       yarnConf = conf;
@@ -653,6 +655,7 @@ public class CapacityScheduler extends
 
     public AsyncScheduleThread(CapacityScheduler cs) {
       this.cs = cs;
+      setName("AsyncCapacitySchedulerThread" + cs.threadNum++);
       setDaemon(true);
     }
 

+ 29 - 2
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerAsyncScheduling.java

@@ -130,13 +130,41 @@ public class TestCapacitySchedulerAsyncScheduling {
     testAsyncContainerAllocation(2);
   }
 
+  @Test(timeout = 300000)
+  public void testAsyncThreadNames() throws Exception {
+    conf.setInt(
+        CapacitySchedulerConfiguration.SCHEDULE_ASYNCHRONOUSLY_MAXIMUM_THREAD,
+        1);
+    conf.setInt(CapacitySchedulerConfiguration.SCHEDULE_ASYNCHRONOUSLY_PREFIX
+        + ".scheduling-interval-ms", 0);
+    final RMNodeLabelsManager mg = new NullRMNodeLabelsManager();
+    mg.init(conf);
+
+    // inject node label manager
+    MockRM rm = new MockRM(TestUtils.getConfigurationWithMultipleQueues(conf)) {
+      @Override
+      public RMNodeLabelsManager createNodeLabelManager() {
+        return mg;
+      }
+    };
+
+    rm.getRMContext().setNodeLabelManager(mg);
+    rm.start();
+
+    CapacityScheduler cs = (CapacityScheduler) rm.getResourceScheduler();
+    for (CapacityScheduler.AsyncScheduleThread thread :
+        cs.asyncSchedulerThreads) {
+      Assert.assertTrue(thread.getName()
+          .startsWith("AsyncCapacitySchedulerThread"));
+    }
+  }
+
   public void testAsyncContainerAllocation(int numThreads) throws Exception {
     conf.setInt(
         CapacitySchedulerConfiguration.SCHEDULE_ASYNCHRONOUSLY_MAXIMUM_THREAD,
         numThreads);
     conf.setInt(CapacitySchedulerConfiguration.SCHEDULE_ASYNCHRONOUSLY_PREFIX
         + ".scheduling-interval-ms", 0);
-
     final RMNodeLabelsManager mgr = new NullRMNodeLabelsManager();
     mgr.init(conf);
 
@@ -187,7 +215,6 @@ public class TestCapacitySchedulerAsyncScheduling {
       ams.get(i).allocate("*", 1024, 20 * (i + 1), new ArrayList<>());
       totalAsked += 20 * (i + 1) * GB;
     }
-
     // Wait for at most 15000 ms
     int waitTime = 15000; // ms
     while (waitTime > 0) {