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

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

zhengchenyu commented on code in PR #4314:
URL: https://github.com/apache/hadoop/pull/4314#discussion_r950986663


##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/FedAppReportFetcher.java:
##########
@@ -0,0 +1,110 @@
+/**
+ * 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 java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.hadoop.classification.VisibleForTesting;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.ipc.RPC;
+import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.client.ClientRMProxy;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import 
org.apache.hadoop.yarn.server.federation.failover.FederationProxyProviderUtil;
+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.utils.FederationStateStoreFacade;
+import org.apache.hadoop.yarn.util.StringHelper;
+import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
+
+public class FedAppReportFetcher extends AppReportFetcher {
+
+  private final Map<SubClusterId, Pair<SubClusterInfo, 
ApplicationClientProtocol>> subClusters;
+  private FederationStateStoreFacade federationFacade;
+
+  /**
+   * Create a new Connection to the RM/Application History Server to fetch
+   * Application reports.
+   *
+   * @param conf the conf to use to know where the RM is.
+   */
+  public FedAppReportFetcher(Configuration conf) {
+    super(conf);
+    subClusters = new ConcurrentHashMap<>();
+    federationFacade = FederationStateStoreFacade.getInstance();
+  }
+
+  /**
+   * Get an application report for the specified application id from the RM and
+   * fall back to the Application History Server if not found in RM.
+   *
+   * @param appId id of the application to get.
+   * @return the ApplicationReport for the appId.
+   * @throws YarnException on any error.
+   * @throws IOException connection exception.
+   */
+  @Override
+  public FetchedAppReport getApplicationReport(ApplicationId appId)
+      throws YarnException, IOException {
+    SubClusterId scid = federationFacade.getApplicationHomeSubCluster(appId);
+    createSubclusterIfAbsent(scid);
+    ApplicationClientProtocol applicationsManager = 
subClusters.get(scid).getRight();
+
+    return super.getApplicationReport(applicationsManager, appId);
+  }
+
+  @Override
+  public String getRmAppPageUrlBase(ApplicationId appId)
+      throws IOException, YarnException {
+    SubClusterId scid = federationFacade.getApplicationHomeSubCluster(appId);
+    createSubclusterIfAbsent(scid);
+
+    SubClusterInfo subClusterInfo = subClusters.get(scid).getLeft();
+    String scheme = WebAppUtils.getHttpSchemePrefix(getConf());
+    return StringHelper.pjoin(scheme + 
subClusterInfo.getRMWebServiceAddress(), "cluster", "app");
+  }
+
+  private void createSubclusterIfAbsent(SubClusterId scId) throws 
YarnException, IOException {
+    if (subClusters.containsKey(scId)) {
+      return;
+    }
+    SubClusterInfo subClusterInfo = federationFacade.getSubCluster(scId);
+    Configuration subClusterConf = new Configuration(getConf());
+    FederationProxyProviderUtil
+        .updateConfForFederation(subClusterConf, 
subClusterInfo.getSubClusterId().toString());

Review Comment:
   Of course not. but explicit call is not wrong.





> 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]

Reply via email to