Browse Source

YARN-9431. Fix flaky junit test fair.TestAppRunnability after YARN-8967. Contributed by Wilfred Spiegelenburg.

Giovanni Matteo Fumarola 6 years ago
parent
commit
da7f8c244d

+ 6 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerTestBase.java

@@ -293,11 +293,16 @@ public class FairSchedulerTestBase {
       Resource amResource, List<ResourceRequest> amReqs) {
     RMContext rmContext = resourceManager.getRMContext();
     ApplicationId appId = attId.getApplicationId();
+    // This fakes the placement which is not part of the scheduler anymore
+    ApplicationPlacementContext placementCtx =
+        new ApplicationPlacementContext(queue);
+    // Set the placement in the app and not just in the event in the next call
+    // otherwise with out of order event processing we might remove the app.
     RMApp rmApp = new RMAppImpl(appId, rmContext, conf, null, user, null,
         ApplicationSubmissionContext.newInstance(appId, null, queue, null,
             mock(ContainerLaunchContext.class), false, false, 0, amResource,
             null),
-        scheduler, null, 0, null, null, amReqs);
+        scheduler, null, 0, null, null, amReqs, placementCtx, -1);
     rmContext.getRMApps().put(appId, rmApp);
   }
 

+ 8 - 8
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestAppRunnability.java

@@ -89,27 +89,27 @@ public class TestAppRunnability extends FairSchedulerTestBase {
   }
 
   @Test
-  public void testNotUserAsDefaultQueue() throws Exception {
+  public void testNotUserAsDefaultQueue() {
 
-    // Restarting resource manager since the Conf object is changed changed.
-    resourceManager.stop();
+    // We need a new scheduler since we want to change the conf object. This
+    // requires a new RM to propagate it . Do a proper teardown to not leak
+    tearDown();
+    // Create a new one with the amended config.
     conf.set(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, "false");
     resourceManager = new MockRM(conf);
     resourceManager.start();
     scheduler = (FairScheduler) resourceManager.getResourceScheduler();
 
     ApplicationAttemptId appAttemptId = createAppAttemptId(1, 1);
-    createApplicationWithAMResource(appAttemptId, "default", "user2", null);
-    assertEquals(0, scheduler.getQueueManager().getLeafQueue("user1", true)
-        .getNumRunnableApps());
+    createApplicationWithAMResource(appAttemptId, "default", "user1", null);
     assertEquals(1, scheduler.getQueueManager().getLeafQueue("default", true)
         .getNumRunnableApps());
-    assertEquals(0, scheduler.getQueueManager().getLeafQueue("user2", true)
+    assertEquals(0, scheduler.getQueueManager().getLeafQueue("user1", true)
         .getNumRunnableApps());
   }
 
   @Test
-  public void testAppAdditionAndRemoval() throws Exception {
+  public void testAppAdditionAndRemoval() {
     ApplicationAttemptId attemptId = createAppAttemptId(1, 1);
     ApplicationPlacementContext apc =
         new ApplicationPlacementContext("user1");