[ 
https://issues.apache.org/jira/browse/YARN-11577?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17786470#comment-17786470
 ] 

ASF GitHub Bot commented on YARN-11577:
---------------------------------------

goiri commented on code in PR #6190:
URL: https://github.com/apache/hadoop/pull/6190#discussion_r1394645699


##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/subcluster/capacity/TestYarnFederationWithCapacityScheduler.java:
##########
@@ -73,4 +147,469 @@ public void testGetClusterInfo() throws 
InterruptedException, IOException {
       assertTrue(subClusters.contains(clusterInfo.getSubClusterId()));
     }
   }
+
+  @Test
+  public void testInfo() throws InterruptedException, IOException {
+    FederationClusterInfo federationClusterInfo =
+        TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS, 
RM_WEB_SERVICE_PATH + INFO,
+        FederationClusterInfo.class, null, null);
+    List<ClusterInfo> clusterInfos = federationClusterInfo.getList();
+    assertNotNull(clusterInfos);
+    assertEquals(2, clusterInfos.size());
+    for (ClusterInfo clusterInfo : clusterInfos) {
+      assertNotNull(clusterInfo);
+      assertTrue(subClusters.contains(clusterInfo.getSubClusterId()));
+    }
+  }
+
+  @Test
+  public void testClusterUserInfo() throws Exception {
+    FederationClusterUserInfo federationClusterUserInfo =
+        TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+        RM_WEB_SERVICE_PATH + CLUSTER_USER_INFO,
+        FederationClusterUserInfo.class, null, null);
+    List<ClusterUserInfo> clusterUserInfos = 
federationClusterUserInfo.getList();
+    assertNotNull(clusterUserInfos);
+    assertEquals(2, clusterUserInfos.size());
+    for (ClusterUserInfo clusterUserInfo : clusterUserInfos) {
+      assertNotNull(clusterUserInfo);
+      assertTrue(subClusters.contains(clusterUserInfo.getSubClusterId()));
+    }
+  }
+
+  @Test
+  public void testMetricsInfo() throws Exception {
+    // It takes time to start the sub-cluster.
+    // We need to wait for the sub-cluster to be completely started,
+    // so we need to set the waiting time.
+    // The resources of the two sub-clusters we registered are 24C and 12G,
+    // so the resources that the Router should collect are 48C and 24G.
+    GenericTestUtils.waitFor(() -> {
+      try {
+        ClusterMetricsInfo clusterMetricsInfo =
+            TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+            RM_WEB_SERVICE_PATH + METRICS, ClusterMetricsInfo.class, null, 
null);
+        assertNotNull(clusterMetricsInfo);
+        return (48 == clusterMetricsInfo.getTotalVirtualCores() &&
+            24576 == clusterMetricsInfo.getTotalMB());
+      } catch (Exception e) {
+        return false;
+      }
+    }, 5000, 50 * 5000);
+  }
+
+  @Test
+  public void testSchedulerInfo() throws Exception {
+    FederationSchedulerTypeInfo schedulerTypeInfo =
+        TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+        RM_WEB_SERVICE_PATH + SCHEDULER, FederationSchedulerTypeInfo.class, 
null, null);
+    assertNotNull(schedulerTypeInfo);
+    List<SchedulerTypeInfo> schedulerTypeInfos = schedulerTypeInfo.getList();
+    assertNotNull(schedulerTypeInfos);
+    assertEquals(2, schedulerTypeInfos.size());
+    for (SchedulerTypeInfo schedulerTypeInfoItem : schedulerTypeInfos) {
+      assertNotNull(schedulerTypeInfoItem);
+      
assertTrue(subClusters.contains(schedulerTypeInfoItem.getSubClusterId()));
+      CapacitySchedulerInfo schedulerInfo =
+          (CapacitySchedulerInfo) schedulerTypeInfoItem.getSchedulerInfo();
+      assertNotNull(schedulerInfo);
+      assertEquals(3, schedulerInfo.getQueues().getQueueInfoList().size());
+    }
+  }
+
+  @Test
+  public void testNodesEmpty() throws Exception {
+    // We are in 2 sub-clusters, each with 3 nodes, so our Router should 
correspond to 6 nodes.
+    GenericTestUtils.waitFor(() -> {
+      try {
+        NodesInfo nodesInfo =
+            TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+            RM_WEB_SERVICE_PATH + NODES, NodesInfo.class, null, null);
+        assertNotNull(nodesInfo);
+        ArrayList<NodeInfo> nodes = nodesInfo.getNodes();
+        assertNotNull(nodes);
+        return (6 == nodes.size());
+      } catch (Exception e) {
+        return false;
+      }
+    }, 5000, 50 * 5000);
+  }
+
+  @Test
+  public void testNodesLost() throws Exception {
+    GenericTestUtils.waitFor(() -> {
+      try {
+        NodesInfo nodesInfo =
+            TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+            RM_WEB_SERVICE_PATH + NODES, NodesInfo.class, STATES, "LOST");
+        assertNotNull(nodesInfo);
+        ArrayList<NodeInfo> nodes = nodesInfo.getNodes();
+        assertNotNull(nodes);
+        return (0 == nodes.size());

Review Comment:
   isEmpty?



##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/subcluster/fair/TestYarnFederationWithFairScheduler.java:
##########
@@ -72,4 +152,488 @@ public void testGetClusterInfo() throws 
InterruptedException, IOException {
       assertTrue(subClusters.contains(clusterInfo.getSubClusterId()));
     }
   }
+
+  @Test
+  public void testInfo() throws InterruptedException, IOException {
+    FederationClusterInfo federationClusterInfo =
+        TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS, 
RM_WEB_SERVICE_PATH + INFO,
+        FederationClusterInfo.class, null, null);
+    List<ClusterInfo> clusterInfos = federationClusterInfo.getList();
+    assertNotNull(clusterInfos);
+    assertEquals(2, clusterInfos.size());
+    for (ClusterInfo clusterInfo : clusterInfos) {
+      assertNotNull(clusterInfo);
+      assertTrue(subClusters.contains(clusterInfo.getSubClusterId()));
+    }
+  }
+
+  @Test
+  public void testClusterUserInfo() throws Exception {
+    FederationClusterUserInfo federationClusterUserInfo =
+        TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+        RM_WEB_SERVICE_PATH + CLUSTER_USER_INFO,
+        FederationClusterUserInfo.class, null, null);
+    List<ClusterUserInfo> clusterUserInfos = 
federationClusterUserInfo.getList();
+    assertNotNull(clusterUserInfos);
+    assertEquals(2, clusterUserInfos.size());
+    for (ClusterUserInfo clusterUserInfo : clusterUserInfos) {
+      assertNotNull(clusterUserInfo);
+      assertTrue(subClusters.contains(clusterUserInfo.getSubClusterId()));
+    }
+  }
+
+  @Test
+  public void testMetricsInfo() throws Exception {
+    // It takes time to start the sub-cluster.
+    // We need to wait for the sub-cluster to be completely started,
+    // so we need to set the waiting time.
+    // The resources of the two sub-clusters we registered are 24C and 12G,
+    // so the resources that the Router should collect are 48C and 24G.
+    GenericTestUtils.waitFor(() -> {
+      try {
+        ClusterMetricsInfo clusterMetricsInfo =
+            TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+            RM_WEB_SERVICE_PATH + METRICS, ClusterMetricsInfo.class, null, 
null);
+        assertNotNull(clusterMetricsInfo);
+        return (48 == clusterMetricsInfo.getTotalVirtualCores() &&
+            24576 == clusterMetricsInfo.getTotalMB());
+      } catch (Exception e) {
+        return false;
+      }
+    }, 5000, 50 * 5000);
+  }
+
+  @Test
+  public void testSchedulerInfo() throws Exception {
+    FederationSchedulerTypeInfo schedulerTypeInfo =
+        TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+        RM_WEB_SERVICE_PATH + SCHEDULER, FederationSchedulerTypeInfo.class, 
null, null);
+    assertNotNull(schedulerTypeInfo);
+    List<SchedulerTypeInfo> schedulerTypeInfos = schedulerTypeInfo.getList();
+    assertNotNull(schedulerTypeInfos);
+    assertEquals(2, schedulerTypeInfos.size());
+    for (SchedulerTypeInfo schedulerTypeInfoItem : schedulerTypeInfos) {
+      assertNotNull(schedulerTypeInfoItem);
+      
assertTrue(subClusters.contains(schedulerTypeInfoItem.getSubClusterId()));
+      FairSchedulerQueueInfo rootQueueInfo =
+          ((FairSchedulerInfo) 
schedulerTypeInfoItem.getSchedulerInfo()).getRootQueueInfo();
+      assertNotNull(rootQueueInfo);
+      assertEquals("fair", rootQueueInfo.getSchedulingPolicy());
+    }
+  }
+
+  @Test
+  public void testNodesEmpty() throws Exception {
+    // We are in 2 sub-clusters, each with 3 nodes, so our Router should 
correspond to 6 nodes.
+    GenericTestUtils.waitFor(() -> {
+      try {
+        NodesInfo nodesInfo =
+            TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+            RM_WEB_SERVICE_PATH + NODES, NodesInfo.class, null, null);
+        assertNotNull(nodesInfo);
+        ArrayList<NodeInfo> nodes = nodesInfo.getNodes();
+        assertNotNull(nodes);
+        return (6 == nodes.size());
+      } catch (Exception e) {
+        return false;
+      }
+    }, 5000, 50 * 5000);
+  }
+
+  @Test
+  public void testNodesLost() throws Exception {
+    GenericTestUtils.waitFor(() -> {
+      try {
+        NodesInfo nodesInfo =
+            TestFederationSubCluster.performGetCalls(ROUTER_WEB_ADDRESS,
+            RM_WEB_SERVICE_PATH + NODES, NodesInfo.class, STATES, "LOST");
+        assertNotNull(nodesInfo);
+        ArrayList<NodeInfo> nodes = nodesInfo.getNodes();
+        assertNotNull(nodes);
+        return (0 == nodes.size());

Review Comment:
   isEmpty





> Improve FederationInterceptorREST Method Result
> -----------------------------------------------
>
>                 Key: YARN-11577
>                 URL: https://issues.apache.org/jira/browse/YARN-11577
>             Project: Hadoop YARN
>          Issue Type: Improvement
>          Components: federation
>    Affects Versions: 3.4.0
>            Reporter: Shilun Fan
>            Assignee: Shilun Fan
>            Priority: Major
>              Labels: pull-request-available
>
> In the FederationInterceptorREST, some methods currently return null or throw 
> exceptions. We will ensure that the returned results are similar to those 
> returned by RM, handling cases of null values or exceptions gracefully.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to