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

jbrennan pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/branch-3.3 by this push:
     new c789e94  YARN-10451. RM (v1) UI NodesPage can NPE when yarn.io/gpu 
resource type is defined. Contributed by Eric Payne
c789e94 is described below

commit c789e944b7166e1430c4b5c8d6def87515d7f46d
Author: Jim Brennan <jbren...@apache.org>
AuthorDate: Tue Oct 6 18:18:08 2020 +0000

    YARN-10451. RM (v1) UI NodesPage can NPE when yarn.io/gpu resource type is 
defined. Contributed by Eric Payne
    
    (cherry picked from commit b361f29dda08fa9b4e406d07945d188a914bc437)
---
 .../server/resourcemanager/webapp/NodesPage.java   |  3 ++-
 .../resourcemanager/webapp/TestNodesPage.java      | 27 ++++++++++++++++++++--
 .../resourcemanager/webapp/TestRMWebApp.java       | 23 ++++++++++++++++--
 3 files changed, 48 insertions(+), 5 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/webapp/NodesPage.java
 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java
index 446a810..169cfea 100644
--- 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java
+++ 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java
@@ -175,7 +175,8 @@ class NodesPage extends RmView {
             .get(ResourceInformation.GPU_URI);
         long usedGPUs = 0;
         long availableGPUs = 0;
-        if (gpuIndex != null) {
+        if (gpuIndex != null && info.getUsedResource() != null
+            && info.getAvailableResource() != null) {
           usedGPUs = info.getUsedResource().getResource()
               .getResourceValue(ResourceInformation.GPU_URI);
           availableGPUs = info.getAvailableResource().getResource()
diff --git 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestNodesPage.java
 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestNodesPage.java
index 1f6a8c0..00ca697 100644
--- 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestNodesPage.java
+++ 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestNodesPage.java
@@ -19,12 +19,16 @@ package 
org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Map;
 
 import org.apache.hadoop.yarn.api.records.NodeState;
+import org.apache.hadoop.yarn.api.records.ResourceInformation;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import 
org.apache.hadoop.yarn.server.resourcemanager.webapp.NodesPage.NodesBlock;
+import 
org.apache.hadoop.yarn.util.resource.CustomResourceTypesConfigurationProvider;
+import org.apache.hadoop.yarn.util.resource.ResourceUtils;
 import org.apache.hadoop.yarn.webapp.test.WebAppTests;
 import org.junit.Before;
 import org.junit.Test;
@@ -56,6 +60,10 @@ public class TestNodesPage {
   
   @Before
   public void setUp() throws Exception {
+    setUpInternal(false);
+  }
+
+  private void setUpInternal(final boolean useDRC) throws Exception {
     final RMContext mockRMContext =
         TestRMWebApp.mockRMContext(3, numberOfRacks, numberOfNodesPerRack,
           8 * TestRMWebApp.GiB);
@@ -66,7 +74,7 @@ public class TestNodesPage {
             public void configure(Binder binder) {
               try {
                 binder.bind(ResourceManager.class).toInstance(
-                  TestRMWebApp.mockRm(mockRMContext));
+                    TestRMWebApp.mockRm(mockRMContext, useDRC));
               } catch (IOException e) {
                 throw new IllegalStateException(e);
               }
@@ -101,7 +109,22 @@ public class TestNodesPage {
     Mockito.verify(writer, Mockito.times(numberOfThInMetricsTable))
         .print("<td");
   }
-  
+
+  @Test
+  public void testNodesBlockRenderForLostNodesWithGPUResources()
+      throws Exception {
+    Map<String, ResourceInformation> oldRtMap =
+        ResourceUtils.getResourceTypes();
+    CustomResourceTypesConfigurationProvider.
+        initResourceTypes(ResourceInformation.GPU_URI);
+    this.setUpInternal(true);
+    try {
+      this.testNodesBlockRenderForLostNodes();
+    } finally {
+      ResourceUtils.initializeResourcesFromResourceInformationMap(oldRtMap);
+    }
+  }
+
   @Test
   public void testNodesBlockRenderForNodeLabelFilterWithNonEmptyLabel() {
     NodesBlock nodesBlock = injector.getInstance(NodesBlock.class);
diff --git 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
index 1a4d6e3..0a83f06 100644
--- 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
+++ 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
@@ -247,8 +247,13 @@ public class TestRMWebApp {
   }
 
   public static ResourceManager mockRm(RMContext rmContext) throws IOException 
{
+    return mockRm(rmContext, false);
+  }
+
+  public static ResourceManager mockRm(RMContext rmContext,
+      boolean useDRC) throws IOException {
     ResourceManager rm = mock(ResourceManager.class);
-    ResourceScheduler rs = mockCapacityScheduler();
+    ResourceScheduler rs = mockCapacityScheduler(useDRC);
     ApplicationACLsManager aclMgr = mockAppACLsManager();
     ClientRMService clientRMService = mockClientRMService(rmContext);
     when(rm.getResourceScheduler()).thenReturn(rs);
@@ -259,9 +264,14 @@ public class TestRMWebApp {
   }
 
   public static CapacityScheduler mockCapacityScheduler() throws IOException {
+    return mockCapacityScheduler(false);
+  }
+
+  public static CapacityScheduler mockCapacityScheduler(boolean useDRC)
+      throws IOException {
     // stolen from TestCapacityScheduler
     CapacitySchedulerConfiguration conf = new CapacitySchedulerConfiguration();
-    setupQueueConfiguration(conf);
+    setupQueueConfiguration(conf, useDRC);
 
     CapacityScheduler cs = new CapacityScheduler();
     YarnConfiguration yarnConf = new YarnConfiguration();
@@ -313,6 +323,11 @@ public class TestRMWebApp {
 
 
   static void setupQueueConfiguration(CapacitySchedulerConfiguration conf) {
+    setupQueueConfiguration(conf, false);
+  }
+
+  static void setupQueueConfiguration(CapacitySchedulerConfiguration conf,
+      boolean useDRC) {
     // Define top-level queues
     conf.setQueues(CapacitySchedulerConfiguration.ROOT, new String[] {"a", 
"b", "c"});
 
@@ -358,6 +373,10 @@ public class TestRMWebApp {
     conf.setCapacity(C11, 15);
     conf.setCapacity(C12, 45);
     conf.setCapacity(C13, 40);
+    if (useDRC) {
+      conf.set("yarn.scheduler.capacity.resource-calculator",
+          "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator");
+    }
   }
 
   public static ResourceManager mockFifoRm(int apps, int racks, int nodes,


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

Reply via email to