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


##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/RouterWebServiceUtil.java:
##########
@@ -540,4 +542,38 @@ public static NodeToLabelsInfo mergeNodeToLabels(
 
     return new NodeToLabelsInfo(nodeToLabels);
   }
+
+  public static ApplicationStatisticsInfo mergeApplicationStatisticsInfo(
+      Collection<ApplicationStatisticsInfo> appStatistics) {
+    ApplicationStatisticsInfo result = new ApplicationStatisticsInfo();
+    Map<String, StatisticsItemInfo> statisticsItemMap = new HashMap<>();
+
+    appStatistics.stream().forEach(appStatistic -> {
+      List<StatisticsItemInfo> statisticsItemInfos = 
appStatistic.getStatItems();
+      for (StatisticsItemInfo statisticsItemInfo : statisticsItemInfos) {
+
+        String statisticsItemKey =
+            statisticsItemInfo.getType() + "_" + 
statisticsItemInfo.getState().toString();
+
+        StatisticsItemInfo statisticsItemValue;
+        if(statisticsItemMap.containsKey(statisticsItemKey)) {

Review Comment:
   space after if



##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestRouterWebServiceUtil.java:
##########
@@ -592,4 +594,92 @@ public static AppAttemptInfo generateAppAttemptInfo(int 
attemptId) {
     when(appAttemptInfo.getLogsLink()).thenReturn("LogLink_" + attemptId);
     return appAttemptInfo;
   }
+
+  @Test
+  public void testMergeApplicationStatisticsInfo() {
+    ApplicationStatisticsInfo infoA = new ApplicationStatisticsInfo();
+    ApplicationStatisticsInfo infoB = new ApplicationStatisticsInfo();
+
+    StatisticsItemInfo item1 =

Review Comment:
   Single line



##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestFederationInterceptorREST.java:
##########
@@ -949,4 +959,73 @@ public void testGetAppQueue() throws IOException, 
InterruptedException, YarnExce
     Assert.assertNotNull(queue);
     Assert.assertEquals(queueName, queue.getQueue());
   }
+
+  @Test
+  public void testGetAppStatistics() throws IOException, InterruptedException, 
YarnException {
+    AppState appStateRUNNING = new 
AppState(YarnApplicationState.RUNNING.name());
+
+    // Submit application to multiSubCluster
+    ApplicationId appId = ApplicationId.newInstance(Time.now(), 1);
+    ApplicationSubmissionContextInfo context = new 
ApplicationSubmissionContextInfo();
+    context.setApplicationId(appId.toString());
+    context.setApplicationType("MapReduce");
+    context.setQueue("queue");
+
+    Assert.assertNotNull(interceptor.submitApplication(context, null));
+
+    GetApplicationHomeSubClusterRequest request =
+        GetApplicationHomeSubClusterRequest.newInstance(appId);
+    GetApplicationHomeSubClusterResponse response =
+        stateStore.getApplicationHomeSubCluster(request);
+
+    Assert.assertNotNull(response);
+    ApplicationHomeSubCluster homeSubCluster = 
response.getApplicationHomeSubCluster();
+
+    DefaultRequestInterceptorREST interceptorREST =
+        
interceptor.getInterceptorForSubCluster(homeSubCluster.getHomeSubCluster());
+
+    MockDefaultRequestInterceptorREST mockInterceptorREST =
+        (MockDefaultRequestInterceptorREST) interceptorREST;
+    mockInterceptorREST.updateApplicationState(YarnApplicationState.RUNNING,
+        appId.toString());
+
+    Set<String> stateQueries = new HashSet<>();
+    stateQueries.add(YarnApplicationState.RUNNING.name());
+
+    Set<String> typeQueries = new HashSet<>();
+    typeQueries.add("MapReduce");
+
+    ApplicationStatisticsInfo response2 =
+        interceptor.getAppStatistics(null, stateQueries, typeQueries);
+
+    Assert.assertNotNull(response2);
+    Assert.assertTrue(!response2.getStatItems().isEmpty());

Review Comment:
   assertFalse



##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestRouterWebServiceUtil.java:
##########
@@ -592,4 +594,92 @@ public static AppAttemptInfo generateAppAttemptInfo(int 
attemptId) {
     when(appAttemptInfo.getLogsLink()).thenReturn("LogLink_" + attemptId);
     return appAttemptInfo;
   }
+
+  @Test
+  public void testMergeApplicationStatisticsInfo() {
+    ApplicationStatisticsInfo infoA = new ApplicationStatisticsInfo();
+    ApplicationStatisticsInfo infoB = new ApplicationStatisticsInfo();
+
+    StatisticsItemInfo item1 =
+        new StatisticsItemInfo(YarnApplicationState.ACCEPTED, "*", 10);
+    StatisticsItemInfo item2 =
+        new StatisticsItemInfo(YarnApplicationState.ACCEPTED, "*", 20);
+
+    infoA.add(item1);
+    infoB.add(item2);
+
+    List<ApplicationStatisticsInfo> lists = new ArrayList<>();
+    lists.add(infoA);
+    lists.add(infoB);
+
+    ApplicationStatisticsInfo mergeInfo =
+        RouterWebServiceUtil.mergeApplicationStatisticsInfo(lists);
+    ArrayList<StatisticsItemInfo> statItem = mergeInfo.getStatItems();
+
+    Assert.assertNotNull(statItem);
+    Assert.assertEquals(1, statItem.size());
+
+    StatisticsItemInfo first = statItem.get(0);
+
+    Assert.assertEquals(item1.getCount() + item2.getCount(), first.getCount());
+    Assert.assertEquals(item1.getType(), first.getType());
+    Assert.assertEquals(item1.getState(), first.getState());
+  }
+
+  @Test
+  public void testMergeDiffApplicationStatisticsInfo() {
+    ApplicationStatisticsInfo infoA = new ApplicationStatisticsInfo();
+    StatisticsItemInfo item1 =

Review Comment:
   Single line



##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestRouterWebServiceUtil.java:
##########
@@ -592,4 +594,92 @@ public static AppAttemptInfo generateAppAttemptInfo(int 
attemptId) {
     when(appAttemptInfo.getLogsLink()).thenReturn("LogLink_" + attemptId);
     return appAttemptInfo;
   }
+
+  @Test
+  public void testMergeApplicationStatisticsInfo() {
+    ApplicationStatisticsInfo infoA = new ApplicationStatisticsInfo();
+    ApplicationStatisticsInfo infoB = new ApplicationStatisticsInfo();
+
+    StatisticsItemInfo item1 =
+        new StatisticsItemInfo(YarnApplicationState.ACCEPTED, "*", 10);
+    StatisticsItemInfo item2 =
+        new StatisticsItemInfo(YarnApplicationState.ACCEPTED, "*", 20);
+
+    infoA.add(item1);
+    infoB.add(item2);
+
+    List<ApplicationStatisticsInfo> lists = new ArrayList<>();
+    lists.add(infoA);
+    lists.add(infoB);
+
+    ApplicationStatisticsInfo mergeInfo =
+        RouterWebServiceUtil.mergeApplicationStatisticsInfo(lists);
+    ArrayList<StatisticsItemInfo> statItem = mergeInfo.getStatItems();
+
+    Assert.assertNotNull(statItem);
+    Assert.assertEquals(1, statItem.size());
+
+    StatisticsItemInfo first = statItem.get(0);
+
+    Assert.assertEquals(item1.getCount() + item2.getCount(), first.getCount());
+    Assert.assertEquals(item1.getType(), first.getType());
+    Assert.assertEquals(item1.getState(), first.getState());
+  }
+
+  @Test
+  public void testMergeDiffApplicationStatisticsInfo() {
+    ApplicationStatisticsInfo infoA = new ApplicationStatisticsInfo();
+    StatisticsItemInfo item1 =
+        new StatisticsItemInfo(YarnApplicationState.ACCEPTED, "*", 10);
+    StatisticsItemInfo item2 =
+        new StatisticsItemInfo(YarnApplicationState.NEW_SAVING, "test1", 20);
+    infoA.add(item1);
+    infoA.add(item2);
+
+    ApplicationStatisticsInfo infoB = new ApplicationStatisticsInfo();
+    StatisticsItemInfo item3 =
+        new StatisticsItemInfo(YarnApplicationState.NEW_SAVING, "test1", 30);
+    StatisticsItemInfo item4 =
+        new StatisticsItemInfo(YarnApplicationState.FINISHED, "test3", 40);
+    infoB.add(item3);
+    infoB.add(item4);
+
+    List<ApplicationStatisticsInfo> lists = new ArrayList<>();
+    lists.add(infoA);
+    lists.add(infoB);
+
+    ApplicationStatisticsInfo mergeInfo =
+        RouterWebServiceUtil.mergeApplicationStatisticsInfo(lists);
+
+    Assert.assertEquals(3, mergeInfo.getStatItems().size());
+    ArrayList<StatisticsItemInfo> mergeInfoStatItems = 
mergeInfo.getStatItems();

Review Comment:
   ```
   List<StatisticsItemInfo> mergeInfoStatItems
   ```



##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestRouterWebServiceUtil.java:
##########
@@ -592,4 +594,92 @@ public static AppAttemptInfo generateAppAttemptInfo(int 
attemptId) {
     when(appAttemptInfo.getLogsLink()).thenReturn("LogLink_" + attemptId);
     return appAttemptInfo;
   }
+
+  @Test
+  public void testMergeApplicationStatisticsInfo() {
+    ApplicationStatisticsInfo infoA = new ApplicationStatisticsInfo();
+    ApplicationStatisticsInfo infoB = new ApplicationStatisticsInfo();
+
+    StatisticsItemInfo item1 =
+        new StatisticsItemInfo(YarnApplicationState.ACCEPTED, "*", 10);
+    StatisticsItemInfo item2 =
+        new StatisticsItemInfo(YarnApplicationState.ACCEPTED, "*", 20);
+
+    infoA.add(item1);
+    infoB.add(item2);
+
+    List<ApplicationStatisticsInfo> lists = new ArrayList<>();
+    lists.add(infoA);
+    lists.add(infoB);
+
+    ApplicationStatisticsInfo mergeInfo =
+        RouterWebServiceUtil.mergeApplicationStatisticsInfo(lists);
+    ArrayList<StatisticsItemInfo> statItem = mergeInfo.getStatItems();
+
+    Assert.assertNotNull(statItem);
+    Assert.assertEquals(1, statItem.size());
+
+    StatisticsItemInfo first = statItem.get(0);
+
+    Assert.assertEquals(item1.getCount() + item2.getCount(), first.getCount());
+    Assert.assertEquals(item1.getType(), first.getType());
+    Assert.assertEquals(item1.getState(), first.getState());
+  }
+
+  @Test
+  public void testMergeDiffApplicationStatisticsInfo() {
+    ApplicationStatisticsInfo infoA = new ApplicationStatisticsInfo();
+    StatisticsItemInfo item1 =
+        new StatisticsItemInfo(YarnApplicationState.ACCEPTED, "*", 10);
+    StatisticsItemInfo item2 =
+        new StatisticsItemInfo(YarnApplicationState.NEW_SAVING, "test1", 20);
+    infoA.add(item1);
+    infoA.add(item2);
+
+    ApplicationStatisticsInfo infoB = new ApplicationStatisticsInfo();
+    StatisticsItemInfo item3 =
+        new StatisticsItemInfo(YarnApplicationState.NEW_SAVING, "test1", 30);
+    StatisticsItemInfo item4 =
+        new StatisticsItemInfo(YarnApplicationState.FINISHED, "test3", 40);
+    infoB.add(item3);
+    infoB.add(item4);
+
+    List<ApplicationStatisticsInfo> lists = new ArrayList<>();
+    lists.add(infoA);
+    lists.add(infoB);
+
+    ApplicationStatisticsInfo mergeInfo =
+        RouterWebServiceUtil.mergeApplicationStatisticsInfo(lists);
+
+    Assert.assertEquals(3, mergeInfo.getStatItems().size());
+    ArrayList<StatisticsItemInfo> mergeInfoStatItems = 
mergeInfo.getStatItems();
+
+    StatisticsItemInfo item1Result = null;
+    StatisticsItemInfo item2Result = null;
+    StatisticsItemInfo item3Result = null;
+
+    for (StatisticsItemInfo item : mergeInfoStatItems) {
+      // ACCEPTED
+      if (item.getState() == YarnApplicationState.ACCEPTED) {
+        item1Result = item;
+      }
+
+      // NEW_SAVING
+      if (item.getState() == YarnApplicationState.NEW_SAVING) {
+        item2Result = item;
+      }
+
+      // FINISHED
+      if (item.getState() == YarnApplicationState.FINISHED) {
+        item3Result = item;
+      }
+    }
+
+    Assert.assertEquals(item1.getType(), item1Result.getType());

Review Comment:
   Can we do:
   ```
   assertEquals(YarnApplicationState.ACCEPTED, item1Result.getState());
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to