You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by pb...@apache.org on 2021/04/01 09:40:14 UTC

[hadoop] branch trunk updated: YARN-9618. NodesListManager event improvement. Contributed by Qi Zhu.

This is an automated email from the ASF dual-hosted git repository.

pbacsko pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 9f1655b  YARN-9618. NodesListManager event improvement. Contributed by Qi Zhu.
9f1655b is described below

commit 9f1655baf283075389dbe7506b4475881a47baf7
Author: Peter Bacsko <pb...@cloudera.com>
AuthorDate: Thu Apr 1 11:39:08 2021 +0200

    YARN-9618. NodesListManager event improvement. Contributed by Qi Zhu.
---
 .../server/resourcemanager/NodesListManager.java   |  8 +--
 .../rmapp/TestNodesListManager.java                | 78 +++++++---------------
 2 files changed, 26 insertions(+), 60 deletions(-)

diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java
index f9e1591..07d78cb 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java
@@ -509,12 +509,8 @@ public class NodesListManager extends CompositeService implements
       RMNode eventNode, RMAppNodeUpdateType appNodeUpdateType) {
     for(RMApp app : rmContext.getRMApps().values()) {
       if (!app.isAppFinalStateStored()) {
-        this.rmContext
-            .getDispatcher()
-            .getEventHandler()
-            .handle(
-                new RMAppNodeUpdateEvent(app.getApplicationId(), eventNode,
-                    appNodeUpdateType));
+        app.handle(new RMAppNodeUpdateEvent(app.getApplicationId(), eventNode,
+            appNodeUpdateType));
       }
     }
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestNodesListManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestNodesListManager.java
index 0df295c..35148e9 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestNodesListManager.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestNodesListManager.java
@@ -22,10 +22,7 @@ import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.spy;
 
-import java.util.ArrayList;
-
 import org.apache.hadoop.test.GenericTestUtils;
-import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.api.records.ContainerState;
 import org.apache.hadoop.yarn.api.records.Resource;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
@@ -52,8 +49,8 @@ import org.junit.Test;
 import org.mockito.ArgumentMatcher;
 
 public class TestNodesListManager {
-  // To hold list of application for which event was received
-  ArrayList<ApplicationId> applist = new ArrayList<ApplicationId>();
+  private boolean isRMAppEvent;
+  private boolean isNodesListEvent;
 
   @Test(timeout = 300000)
   public void testNodeUsableEvent() throws Exception {
@@ -68,67 +65,32 @@ public class TestNodesListManager {
     };
     rm.start();
     MockNM nm1 = rm.registerNode("h1:1234", 28000);
-    NodesListManager nodesListManager = rm.getNodesListManager();
     Resource clusterResource = Resource.newInstance(28000, 8);
     RMNode rmnode = MockNodes.newNodeInfo(1, clusterResource);
 
     // Create killing APP
-    RMApp killrmApp = MockRMAppSubmitter.submitWithMemory(200, rm);
-    rm.killApp(killrmApp.getApplicationId());
-    rm.waitForState(killrmApp.getApplicationId(), RMAppState.KILLED);
+    RMApp killRmApp = MockRMAppSubmitter.submitWithMemory(200, rm);
+    rm.killApp(killRmApp.getApplicationId());
+    rm.waitForState(killRmApp.getApplicationId(), RMAppState.KILLED);
 
     // Create finish APP
-    RMApp finshrmApp = MockRMAppSubmitter.submitWithMemory(2000, rm);
+    RMApp finshRmApp = MockRMAppSubmitter.submitWithMemory(2000, rm);
     nm1.nodeHeartbeat(true);
-    RMAppAttempt attempt = finshrmApp.getCurrentAppAttempt();
+    RMAppAttempt attempt = finshRmApp.getCurrentAppAttempt();
     MockAM am = rm.sendAMLaunched(attempt.getAppAttemptId());
     am.registerAppAttempt();
     am.unregisterAppAttempt();
     nm1.nodeHeartbeat(attempt.getAppAttemptId(), 1, ContainerState.COMPLETE);
     rm.waitForState(am.getApplicationAttemptId(), RMAppAttemptState.FINISHED);
 
-    // Create submitted App
-    RMApp subrmApp = MockRMAppSubmitter.submitWithMemory(200, rm);
-
     // Fire Event for NODE_USABLE
-    nodesListManager.handle(new NodesListManagerEvent(
+    // Should not have RMAppNodeUpdateEvent to AsyncDispatcher.
+    dispatcher.getEventHandler().handle(new NodesListManagerEvent(
         NodesListManagerEventType.NODE_USABLE, rmnode));
-    if (applist.size() > 0) {
-      Assert.assertTrue(
-          "Event based on running app expected " + subrmApp.getApplicationId(),
-          applist.contains(subrmApp.getApplicationId()));
-      Assert.assertFalse(
-          "Event based on finish app not expected "
-              + finshrmApp.getApplicationId(),
-          applist.contains(finshrmApp.getApplicationId()));
-      Assert.assertFalse(
-          "Event based on killed app not expected "
-              + killrmApp.getApplicationId(),
-          applist.contains(killrmApp.getApplicationId()));
-    } else {
-      Assert.fail("Events received should have beeen more than 1");
-    }
-    applist.clear();
-
-    // Fire Event for NODE_UNUSABLE
-    nodesListManager.handle(new NodesListManagerEvent(
-        NodesListManagerEventType.NODE_UNUSABLE, rmnode));
-    if (applist.size() > 0) {
-      Assert.assertTrue(
-          "Event based on running app expected " + subrmApp.getApplicationId(),
-          applist.contains(subrmApp.getApplicationId()));
-      Assert.assertFalse(
-          "Event based on finish app not expected "
-              + finshrmApp.getApplicationId(),
-          applist.contains(finshrmApp.getApplicationId()));
-      Assert.assertFalse(
-          "Event based on killed app not expected "
-              + killrmApp.getApplicationId(),
-          applist.contains(killrmApp.getApplicationId()));
-    } else {
-      Assert.fail("Events received should have beeen more than 1");
-    }
-
+    Assert.assertFalse("Got unexpected RM app event",
+        getIsRMAppEvent());
+    Assert.assertTrue("Received no NodesListManagerEvent",
+        getIsNodesListEvent());
   }
 
   @Test
@@ -241,9 +203,10 @@ public class TestNodesListManager {
           @Override
           public boolean matches(AbstractEvent argument) {
             if (argument instanceof RMAppNodeUpdateEvent) {
-              ApplicationId appid =
-                  ((RMAppNodeUpdateEvent) argument).getApplicationId();
-              applist.add(appid);
+              isRMAppEvent = true;
+            }
+            if (argument instanceof NodesListManagerEvent) {
+              isNodesListEvent = true;
             }
             return false;
           }
@@ -256,4 +219,11 @@ public class TestNodesListManager {
     };
   }
 
+  public boolean getIsNodesListEvent() {
+    return isNodesListEvent;
+  }
+
+  public boolean getIsRMAppEvent() {
+    return isRMAppEvent;
+  }
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org