[ 
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)

Reply via email to