RouterWebServiceUtil { public static AppsInfo mergeAppsInfo(ArrayList<AppInfo> appsInfo, boolean returnPartialResult) { AppsInfo allApps = new AppsInfo(); Map<String, AppInfo> federationAM = new HashMap<String, AppInfo>(); Map<String, AppInfo> federationUAMSum = new HashMap<String, AppInfo>(); for (AppInfo a : appsInfo) { if (a.getAMHostHttpAddress() != null) { federationAM.put(a.getAppId(), a); if (federationUAMSum.containsKey(a.getAppId())) { mergeAMWithUAM(a, federationUAMSum.get(a.getAppId())); federationUAMSum.remove(a.getAppId()); } } else { if (federationAM.containsKey(a.getAppId())) { mergeAMWithUAM(federationAM.get(a.getAppId()), a); } else if (federationUAMSum.containsKey(a.getAppId())) { federationUAMSum.put(a.getAppId(), mergeUAMWithUAM(federationUAMSum.get(a.getAppId()), a)); } else { federationUAMSum.put(a.getAppId(), a); } } } for (AppInfo a : federationUAMSum.values()) { if (returnPartialResult || (a.getName() != null && !(a.getName().startsWith(UnmanagedApplicationManager.APP_NAME) || a.getName().startsWith(PARTIAL_REPORT)))) { federationAM.put(a.getAppId(), a); } } allApps.addAll(new ArrayList<AppInfo>(federationAM.values())); return allApps; } private  RouterWebServiceUtil(); static Response clientResponseToResponse(ClientResponse r); static void retrieveException(ClientResponse response); static AppsInfo mergeAppsInfo(ArrayList<AppInfo> appsInfo,
      boolean returnPartialResult); static NodesInfo deleteDuplicateNodesInfo(ArrayList<NodeInfo> nodes); static void mergeMetrics(ClusterMetricsInfo metrics,
      ClusterMetricsInfo metricsResponse);  }
@Test public void testMerge4DifferentApps() { AppsInfo apps = new AppsInfo(); int value = 1000; AppInfo app1 = new AppInfo(); app1.setAppId(APPID1.toString()); app1.setAMHostHttpAddress("http: app1.setState(YarnApplicationState.FINISHED); app1.setNumAMContainerPreempted(value); apps.add(app1); AppInfo app2 = new AppInfo(); app2.setAppId(APPID2.toString()); app2.setAMHostHttpAddress("http: app2.setState(YarnApplicationState.ACCEPTED); app2.setAllocatedVCores(2 * value); apps.add(app2); AppInfo app3 = new AppInfo(); app3.setAppId(APPID3.toString()); app3.setAMHostHttpAddress("http: app3.setState(YarnApplicationState.RUNNING); app3.setReservedMB(3 * value); apps.add(app3); AppInfo app4 = new AppInfo(); app4.setAppId(APPID4.toString()); app4.setAMHostHttpAddress("http: app4.setState(YarnApplicationState.NEW); app4.setAllocatedMB(4 * value); apps.add(app4); AppsInfo result = RouterWebServiceUtil.mergeAppsInfo(apps.getApps(), false); Assert.assertNotNull(result); Assert.assertEquals(4, result.getApps().size()); List<String> appIds = new ArrayList<String>(); AppInfo appInfo1 = null, appInfo2 = null, appInfo3 = null, appInfo4 = null; for (AppInfo app : result.getApps()) { appIds.add(app.getAppId()); if (app.getAppId().equals(APPID1.toString())) { appInfo1 = app; } if (app.getAppId().equals(APPID2.toString())) { appInfo2 = app; } if (app.getAppId().equals(APPID3.toString())) { appInfo3 = app; } if (app.getAppId().equals(APPID4.toString())) { appInfo4 = app; } } Assert.assertTrue(appIds.contains(APPID1.toString())); Assert.assertTrue(appIds.contains(APPID2.toString())); Assert.assertTrue(appIds.contains(APPID3.toString())); Assert.assertTrue(appIds.contains(APPID4.toString())); Assert.assertEquals(app1.getState(), appInfo1.getState()); Assert.assertEquals(app1.getNumAMContainerPreempted(), appInfo1.getNumAMContainerPreempted()); Assert.assertEquals(app2.getState(), appInfo2.getState()); Assert.assertEquals(app3.getAllocatedVCores(), appInfo3.getAllocatedVCores()); Assert.assertEquals(app3.getState(), appInfo3.getState()); Assert.assertEquals(app3.getReservedMB(), appInfo3.getReservedMB()); Assert.assertEquals(app4.getState(), appInfo4.getState()); Assert.assertEquals(app3.getAllocatedMB(), appInfo3.getAllocatedMB()); }
@Test public void testMergeAppsFinished() { AppsInfo apps = new AppsInfo(); String amHost = "http: AppInfo am = new AppInfo(); am.setAppId(APPID1.toString()); am.setAMHostHttpAddress(amHost); am.setState(YarnApplicationState.FINISHED); int value = 1000; setAppInfoFinished(am, value); apps.add(am); AppInfo uam1 = new AppInfo(); uam1.setAppId(APPID1.toString()); apps.add(uam1); setAppInfoFinished(uam1, value); AppInfo uam2 = new AppInfo(); uam2.setAppId(APPID1.toString()); apps.add(uam2); setAppInfoFinished(uam2, value); AppsInfo result = RouterWebServiceUtil.mergeAppsInfo(apps.getApps(), false); Assert.assertNotNull(result); Assert.assertEquals(1, result.getApps().size()); AppInfo app = result.getApps().get(0); Assert.assertEquals(APPID1.toString(), app.getAppId()); Assert.assertEquals(amHost, app.getAMHostHttpAddress()); Assert.assertEquals(value * 3, app.getPreemptedResourceMB()); Assert.assertEquals(value * 3, app.getPreemptedResourceVCores()); Assert.assertEquals(value * 3, app.getNumNonAMContainerPreempted()); Assert.assertEquals(value * 3, app.getNumAMContainerPreempted()); Assert.assertEquals(value * 3, app.getPreemptedMemorySeconds()); Assert.assertEquals(value * 3, app.getPreemptedVcoreSeconds()); }
@Test public void testMergeAppsRunning() { AppsInfo apps = new AppsInfo(); String amHost = "http: AppInfo am = new AppInfo(); am.setAppId(APPID2.toString()); am.setAMHostHttpAddress(amHost); am.setState(YarnApplicationState.RUNNING); int value = 1000; setAppInfoRunning(am, value); apps.add(am); AppInfo uam1 = new AppInfo(); uam1.setAppId(APPID2.toString()); uam1.setState(YarnApplicationState.RUNNING); apps.add(uam1); setAppInfoRunning(uam1, value); AppInfo uam2 = new AppInfo(); uam2.setAppId(APPID2.toString()); uam2.setState(YarnApplicationState.RUNNING); apps.add(uam2); setAppInfoRunning(uam2, value); AppsInfo result = RouterWebServiceUtil.mergeAppsInfo(apps.getApps(), false); Assert.assertNotNull(result); Assert.assertEquals(1, result.getApps().size()); AppInfo app = result.getApps().get(0); Assert.assertEquals(APPID2.toString(), app.getAppId()); Assert.assertEquals(amHost, app.getAMHostHttpAddress()); Assert.assertEquals(value * 3, app.getAllocatedMB()); Assert.assertEquals(value * 3, app.getAllocatedVCores()); Assert.assertEquals(value * 3, app.getReservedMB()); Assert.assertEquals(value * 3, app.getReservedVCores()); Assert.assertEquals(value * 3, app.getRunningContainers()); Assert.assertEquals(value * 3, app.getMemorySeconds()); Assert.assertEquals(value * 3, app.getVcoreSeconds()); Assert.assertEquals(3, app.getResourceRequests().size()); }
@Test public void testMerge2UAM() { AppsInfo apps = new AppsInfo(); AppInfo app1 = new AppInfo(); app1.setAppId(APPID1.toString()); app1.setName(UnmanagedApplicationManager.APP_NAME); app1.setState(YarnApplicationState.RUNNING); apps.add(app1); AppInfo app2 = new AppInfo(); app2.setAppId(APPID1.toString()); app2.setName(UnmanagedApplicationManager.APP_NAME); app2.setState(YarnApplicationState.RUNNING); apps.add(app2); AppsInfo result = RouterWebServiceUtil.mergeAppsInfo(apps.getApps(), false); Assert.assertNotNull(result); Assert.assertEquals(0, result.getApps().size()); AppsInfo result2 = RouterWebServiceUtil.mergeAppsInfo(apps.getApps(), true); Assert.assertNotNull(result2); Assert.assertEquals(1, result2.getApps().size()); Assert.assertEquals(YarnApplicationState.RUNNING, result2.getApps().get(0).getState()); }
@Test public void testMergeUAM() { AppsInfo apps = new AppsInfo(); AppInfo app1 = new AppInfo(); app1.setAppId(APPID1.toString()); app1.setName("Test"); apps.add(app1); AppsInfo result = RouterWebServiceUtil.mergeAppsInfo(apps.getApps(), false); Assert.assertNotNull(result); Assert.assertEquals(1, result.getApps().size()); }