goiri commented on code in PR #4543:
URL: https://github.com/apache/hadoop/pull/4543#discussion_r921553113
##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java:
##########
@@ -1336,7 +1336,51 @@ public AppAttemptInfo getAppAttempt(HttpServletRequest
req,
@Override
public ContainersInfo getContainers(HttpServletRequest req,
HttpServletResponse res, String appId, String appAttemptId) {
- throw new NotImplementedException("Code is not implemented");
+ ContainersInfo containersInfo = new ContainersInfo();
+
+ Map<SubClusterId, SubClusterInfo> subClustersActive = null;
+ try {
+ subClustersActive = federationFacade.getSubClusters(true);
+ } catch (YarnException e) {
+ LOG.error("Get All active sub cluster(s) error.", e);
+ return containersInfo;
+ }
+
+ // Send the requests in parallel
+ CompletionService<ContainersInfo> compSvc =
+ new ExecutorCompletionService<>(this.threadpool);
+
+ for (final SubClusterInfo info : subClustersActive.values()) {
+ compSvc.submit(() -> {
+ DefaultRequestInterceptorREST interceptor =
+ getOrCreateInterceptorForSubCluster(info.getSubClusterId(),
info.getRMWebServiceAddress());
+ try {
+ ContainersInfo containers =
+ interceptor.getContainers(req, res, appId, appAttemptId);
+ return containers;
+ } catch (Exception e) {
+ LOG.error("SubCluster {} failed to return GetContainers.",
+ info.getSubClusterId());
+ return null;
+ }
+ });
+ }
+
+ // Collect all the responses in parallel
+ for (int i = 0; i < subClustersActive.size(); i++) {
+ try {
+ Future<ContainersInfo> future = compSvc.take();
+ ContainersInfo containersResponse = future.get();
+
+ if (containersResponse != null) {
+ containersInfo.addAll(containersResponse.getContainers());
+ }
+ } catch (Throwable e) {
+ LOG.warn("Failed to get containers report. ", e);
Review Comment:
Trim the space at the end of the string.
##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java:
##########
@@ -1336,7 +1336,51 @@ public AppAttemptInfo getAppAttempt(HttpServletRequest
req,
@Override
public ContainersInfo getContainers(HttpServletRequest req,
HttpServletResponse res, String appId, String appAttemptId) {
- throw new NotImplementedException("Code is not implemented");
+ ContainersInfo containersInfo = new ContainersInfo();
+
+ Map<SubClusterId, SubClusterInfo> subClustersActive = null;
+ try {
+ subClustersActive = federationFacade.getSubClusters(true);
+ } catch (YarnException e) {
+ LOG.error("Get All active sub cluster(s) error.", e);
+ return containersInfo;
+ }
+
+ // Send the requests in parallel
+ CompletionService<ContainersInfo> compSvc =
+ new ExecutorCompletionService<>(this.threadpool);
+
+ for (final SubClusterInfo info : subClustersActive.values()) {
+ compSvc.submit(() -> {
+ DefaultRequestInterceptorREST interceptor =
+ getOrCreateInterceptorForSubCluster(info.getSubClusterId(),
info.getRMWebServiceAddress());
+ try {
+ ContainersInfo containers =
+ interceptor.getContainers(req, res, appId, appAttemptId);
+ return containers;
+ } catch (Exception e) {
+ LOG.error("SubCluster {} failed to return GetContainers.",
+ info.getSubClusterId());
Review Comment:
Should we print the specific error?
##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/dao/ContainersInfo.java:
##########
@@ -46,4 +46,7 @@ public ArrayList<ContainerInfo> getContainers() {
return container;
}
+ public void addAll(ArrayList<ContainerInfo> containersInfo) {
Review Comment:
Maybe just make this `Collection<ContainerInfo>`
##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java:
##########
@@ -1336,7 +1336,51 @@ public AppAttemptInfo getAppAttempt(HttpServletRequest
req,
@Override
public ContainersInfo getContainers(HttpServletRequest req,
HttpServletResponse res, String appId, String appAttemptId) {
- throw new NotImplementedException("Code is not implemented");
+ ContainersInfo containersInfo = new ContainersInfo();
+
+ Map<SubClusterId, SubClusterInfo> subClustersActive = null;
+ try {
+ subClustersActive = federationFacade.getSubClusters(true);
+ } catch (YarnException e) {
+ LOG.error("Get All active sub cluster(s) error.", e);
+ return containersInfo;
+ }
+
+ // Send the requests in parallel
+ CompletionService<ContainersInfo> compSvc =
+ new ExecutorCompletionService<>(this.threadpool);
+
+ for (final SubClusterInfo info : subClustersActive.values()) {
+ compSvc.submit(() -> {
+ DefaultRequestInterceptorREST interceptor =
+ getOrCreateInterceptorForSubCluster(info.getSubClusterId(),
info.getRMWebServiceAddress());
+ try {
+ ContainersInfo containers =
+ interceptor.getContainers(req, res, appId, appAttemptId);
+ return containers;
+ } catch (Exception e) {
+ LOG.error("SubCluster {} failed to return GetContainers.",
Review Comment:
One line
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]