[
https://issues.apache.org/jira/browse/YARN-11153?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17579341#comment-17579341
]
ASF GitHub Bot commented on YARN-11153:
---------------------------------------
slfan1989 commented on code in PR #4314:
URL: https://github.com/apache/hadoop/pull/4314#discussion_r945245127
##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/TestFedAppReportFetcher.java:
##########
@@ -0,0 +1,170 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
under
+ * the License.
+ */
+
+package org.apache.hadoop.yarn.server.webproxy;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.test.LambdaTestUtils;
+import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
+import org.apache.hadoop.yarn.api.ApplicationHistoryProtocol;
+import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest;
+import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportResponse;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
+import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import org.apache.hadoop.yarn.server.federation.store.FederationStateStore;
+import
org.apache.hadoop.yarn.server.federation.store.impl.MemoryFederationStateStore;
+import
org.apache.hadoop.yarn.server.federation.store.records.AddApplicationHomeSubClusterRequest;
+import
org.apache.hadoop.yarn.server.federation.store.records.ApplicationHomeSubCluster;
+import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId;
+import org.apache.hadoop.yarn.server.federation.store.records.SubClusterInfo;
+import
org.apache.hadoop.yarn.server.federation.store.records.SubClusterRegisterRequest;
+import org.apache.hadoop.yarn.server.federation.store.records.SubClusterState;
+import
org.apache.hadoop.yarn.server.federation.utils.FederationStateStoreFacade;
+import org.apache.hadoop.yarn.util.StringHelper;
+import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.junit.Assert.fail;
+
+public class TestFedAppReportFetcher {
+
+ private Configuration conf;
+ private static ApplicationHistoryProtocol history;
+
+ private SubClusterId subClusterId1 = SubClusterId.newInstance("subCluster1");
+ private SubClusterId subClusterId2 = SubClusterId.newInstance("subCluster2");
+ private SubClusterInfo clusterInfo1 =
SubClusterInfo.newInstance(subClusterId1, "10.0.0.1:1000",
+ "10.0.0.1:1000", "10.0.0.1:1000", "10.0.0.1:1000",
SubClusterState.SC_RUNNING, 0L, "");
+ private SubClusterInfo clusterInfo2 =
SubClusterInfo.newInstance(subClusterId2, "10.0.0.2:1000",
+ "10.0.0.2:1000", "10.0.0.2:1000", "10.0.0.2:1000",
SubClusterState.SC_RUNNING, 0L, "");
+ private ApplicationClientProtocol appManager1;
+ private ApplicationClientProtocol appManager2;
+ private ApplicationId appId1 = ApplicationId.newInstance(0, 1);
+ private ApplicationId appId2 = ApplicationId.newInstance(0, 2);
+
+ private static FedAppReportFetcher fetcher;
+ private final String appNotFoundExceptionMsg = "APP NOT FOUND";
+
+ @After
+ public void cleanUp() {
+ history = null;
+ fetcher = null;
+ }
+
+ private void testHelper(boolean isAHSEnabled)
+ throws YarnException, IOException {
+ conf = new YarnConfiguration();
+ conf.setBoolean(YarnConfiguration.APPLICATION_HISTORY_ENABLED,
isAHSEnabled);
+
+ FederationStateStoreFacade fedFacade =
FederationStateStoreFacade.getInstance();
+ FederationStateStore fss = new MemoryFederationStateStore();
+ fss.init(conf);
+ fedFacade.reinitialize(fss, conf);
+
+
fss.registerSubCluster(SubClusterRegisterRequest.newInstance(clusterInfo1));
+
fss.registerSubCluster(SubClusterRegisterRequest.newInstance(clusterInfo2));
+ fss.addApplicationHomeSubCluster(AddApplicationHomeSubClusterRequest
+ .newInstance(ApplicationHomeSubCluster.newInstance(appId1,
subClusterId1)));
+ fss.addApplicationHomeSubCluster(AddApplicationHomeSubClusterRequest
+ .newInstance(ApplicationHomeSubCluster.newInstance(appId2,
subClusterId2)));
+
+ appManager1 = Mockito.mock(ApplicationClientProtocol.class);
+
Mockito.when(appManager1.getApplicationReport(Mockito.any(GetApplicationReportRequest.class)))
+ .thenThrow(new ApplicationNotFoundException(appNotFoundExceptionMsg));
+
+ appManager2 = Mockito.mock(ApplicationClientProtocol.class);
+
Mockito.when(appManager2.getApplicationReport(Mockito.any(GetApplicationReportRequest.class)))
+ .thenThrow(new ApplicationNotFoundException(appNotFoundExceptionMsg));
+
+ fetcher = new TestFedAppReportFetcher.FedAppReportFetcherForTest(conf);
+ fetcher.registerSubCluster(clusterInfo1, appManager1);
+ fetcher.registerSubCluster(clusterInfo2, appManager2);
+ }
+
+ @Test
+ public void testFetchReportAHSEnabled() throws YarnException, IOException {
+ testHelper(true);
+ fetcher.getApplicationReport(appId1);
+ fetcher.getApplicationReport(appId2);
+ Mockito.verify(history, Mockito.times(2))
+ .getApplicationReport(Mockito.any(GetApplicationReportRequest.class));
+ Mockito.verify(appManager1, Mockito.times(1))
+ .getApplicationReport(Mockito.any(GetApplicationReportRequest.class));
+ Mockito.verify(appManager2, Mockito.times(1))
+ .getApplicationReport(Mockito.any(GetApplicationReportRequest.class));
+ }
+
+ @Test
+ public void testFetchReportAHSDisabled() throws Exception {
+ testHelper(false);
+
+ /* RM will not know of the app and Application History Service is disabled
+ * So we will not try to get the report from AHS and RM will throw
+ * ApplicationNotFoundException
+ */
+ LambdaTestUtils.intercept(ApplicationNotFoundException.class,
appNotFoundExceptionMsg,
+ () -> fetcher.getApplicationReport(appId1));
+ LambdaTestUtils.intercept(ApplicationNotFoundException.class,
appNotFoundExceptionMsg,
+ () -> fetcher.getApplicationReport(appId2));
+
+ Mockito.verify(appManager1, Mockito.times(1))
+ .getApplicationReport(Mockito.any(GetApplicationReportRequest.class));
+ Mockito.verify(appManager2, Mockito.times(1))
+ .getApplicationReport(Mockito.any(GetApplicationReportRequest.class));
+ Assert.assertNull("HistoryManager should be null as AHS is disabled",
history);
+ }
+
+ @Test
+ public void testGetRmAppPageUrlBase() throws IOException, YarnException {
+ testHelper(true);
+ String scheme = WebAppUtils.getHttpSchemePrefix(conf);
+ Assert.assertEquals(fetcher.getRmAppPageUrlBase(appId1),
+ StringHelper.pjoin(scheme + clusterInfo1.getRMWebServiceAddress(),
"cluster", "app"));
+ Assert.assertEquals(fetcher.getRmAppPageUrlBase(appId2),
+ StringHelper.pjoin(scheme + clusterInfo2.getRMWebServiceAddress(),
"cluster", "app"));
+ }
+
+ static class FedAppReportFetcherForTest extends FedAppReportFetcher {
+
+ FedAppReportFetcherForTest(Configuration conf) {
+ super(conf);
+ }
+
+ @Override
+ protected ApplicationHistoryProtocol getAHSProxy(Configuration conf)
+ throws IOException {
+ GetApplicationReportResponse resp =
Mockito.mock(GetApplicationReportResponse.class);
+ history = Mockito.mock(ApplicationHistoryProtocol.class);
+ try {
+
Mockito.when(history.getApplicationReport(Mockito.any(GetApplicationReportRequest.class)))
+ .thenReturn(resp);
+ } catch (YarnException e) {
+ // This should never happen
+ fail("Found exception when getApplicationReport!");
+ }
+ return history;
+ }
+ }
+
Review Comment:
remove blank lines.
> Make proxy server support YARN federation.
> ------------------------------------------
>
> Key: YARN-11153
> URL: https://issues.apache.org/jira/browse/YARN-11153
> Project: Hadoop YARN
> Issue Type: Sub-task
> Components: yarn
> Affects Versions: 3.2.1
> Reporter: zhengchenyu
> Assignee: zhengchenyu
> Priority: Major
> Labels: pull-request-available
> Fix For: 3.4.0
>
> Time Spent: 8h 40m
> Remaining Estimate: 0h
>
> Detail message see: https://issues.apache.org/jira/browse/YARN-10775 and
> YARN-10775-design-doc.001.pdf
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]