[ https://issues.apache.org/jira/browse/NIFI-1727?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15245956#comment-15245956 ]
ASF GitHub Bot commented on NIFI-1727: -------------------------------------- Github user olegz commented on a diff in the pull request: https://github.com/apache/nifi/pull/338#discussion_r60090174 --- Diff: nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ControllerStatusEndpointMerger.java --- @@ -0,0 +1,83 @@ +/* + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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.nifi.cluster.coordination.http.endpoints; + +import java.net.URI; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; + +import org.apache.nifi.cluster.manager.NodeResponse; +import org.apache.nifi.cluster.manager.StatusMerger; +import org.apache.nifi.cluster.protocol.NodeIdentifier; +import org.apache.nifi.web.api.dto.BulletinDTO; +import org.apache.nifi.web.api.dto.status.ControllerStatusDTO; +import org.apache.nifi.web.api.entity.ControllerStatusEntity; + +public class ControllerStatusEndpointMerger extends AbstractSingleEntityEndpoint<ControllerStatusEntity, ControllerStatusDTO> { + public static final Pattern CONTROLLER_STATUS_URI_PATTERN = Pattern.compile("/nifi-api/controller/status"); + + @Override + public boolean canHandle(URI uri, String method) { + return "GET".equalsIgnoreCase(method) && CONTROLLER_STATUS_URI_PATTERN.matcher(uri.getPath()).matches(); + } + + @Override + protected Class<ControllerStatusEntity> getEntityClass() { + return ControllerStatusEntity.class; + } + + @Override + protected ControllerStatusDTO getDto(ControllerStatusEntity entity) { + return entity.getControllerStatus(); + } + + @Override + protected void mergeResponses(ControllerStatusDTO clientDto, Map<NodeIdentifier, ControllerStatusDTO> dtoMap, Set<NodeResponse> successfulResponses, Set<NodeResponse> problematicResponses) { + ControllerStatusDTO mergedStatus = clientDto; + for (final Map.Entry<NodeIdentifier, ControllerStatusDTO> entry : dtoMap.entrySet()) { + final NodeIdentifier nodeId = entry.getKey(); + final ControllerStatusDTO nodeStatus = entry.getValue(); + + final String nodeAddress = nodeId.getApiAddress() + ":" + nodeId.getApiPort(); + for (final BulletinDTO bulletin : nodeStatus.getBulletins()) { + bulletin.setNodeAddress(nodeAddress); + } + for (final BulletinDTO bulletin : nodeStatus.getControllerServiceBulletins()) { + bulletin.setNodeAddress(nodeAddress); + } + for (final BulletinDTO bulletin : nodeStatus.getReportingTaskBulletins()) { + bulletin.setNodeAddress(nodeAddress); + } --- End diff -- Also, since we are using Java 8 this could be further simplified into a single line ``` Stream.concat(nodeStatus.getBulletins(), nodeStatus.getControllerServiceBulletins(), nodeStatus.getReportingTaskBulletins()).forEach(bulletin:: setNodeAddress) ``` > Refactor NCM Node Response merging > ---------------------------------- > > Key: NIFI-1727 > URL: https://issues.apache.org/jira/browse/NIFI-1727 > Project: Apache NiFi > Issue Type: Improvement > Components: Core Framework > Reporter: Mark Payne > Assignee: Mark Payne > Fix For: 1.0.0 > > > Currently, when the NCM federates a request to nodes in the cluster, those > responses are merged using one massive 'mergeResponses' method, which > delegates to many different 'mergeXYZ' methods. The logic is very repetitive > and tedious to update and lives within the WebClusterManager. > We need to simplify the logic, since it is very repetitive and need to pull > the logic out of WebClusterManager into a separate interface so that the code > can be cleanly pulled from the NCM and merged into the cluster coordinator on > the nodes. -- This message was sent by Atlassian JIRA (v6.3.4#6332)