[ 
https://issues.apache.org/jira/browse/NIFI-6900?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mark Payne resolved NIFI-6900.
------------------------------
    Fix Version/s: 1.15.0
       Resolution: Fixed

> Request to retrieve flow in clustered environment should be much less 
> expensive
> -------------------------------------------------------------------------------
>
>                 Key: NIFI-6900
>                 URL: https://issues.apache.org/jira/browse/NIFI-6900
>             Project: Apache NiFi
>          Issue Type: Improvement
>          Components: Core Framework
>            Reporter: Mark Payne
>            Priority: Major
>              Labels: cluster, dto, performance, ui
>             Fix For: 1.15.0
>
>
> When a request is made to the `/nifi-api/flow/process-groups/\{pgId}` 
> endpoint, the request must be replicated and the responses merged. The things 
> that need to be merged include bulletins, component permissions, statuses, 
> load balance indicators, validation errors, and perhaps a few others.
> However, each node currently responds with a fully populated 
> `ProcessGroupFlowEntity`. This entity contains all information that is needed 
> to display the current Process Group in the UI, as well as a lot of other 
> details. For example, it contains the Property Descriptors for every 
> component, including the property description, default value, etc. These 
> should only be needed when configuring a component, not to display the canvas.
> This request can take a while when the flow is large or when the cluster is 
> large, because the JSON must be parsed from every node in the cluster in 
> order to merge the responses. Profiling shows that the expense can be broken 
> down into two functions: parsing the nodes' responses into DTO objects and 
> merging the responses, with parsing being the dominant function in terms of 
> cost (over 80%).
> There are two big improvements that I think can be made:
>  * Null out some things from the DTO before returning the response. Things 
> like Property Descriptors, Property Values, and most all component 
> configuration. These should be fetched when the component is configured. 
> However, this change may require significant changes to the UI, as well.
>  * Add a query parameter to the endpoint such as `minimal=true`. This query 
> parameter would default to `false` in order to maintain backward 
> compatibility but if set to `true`, the response would contain only the 
> information needed in order to assemble a fully response to the client. To 
> accomplish this, one response would need to be fully populated (likely, this 
> would be whichever node is the Cluster Coordinator) and that response would 
> include a 'fullyPopulated' flag. This would be the 'clientResponse' that is 
> used when merging the node responses. All other nodes would first null out 
> the elements that are not required for merging. So it would include things 
> like the bulletins, validation errors, status, etc. Even the status could be 
> further reduced by not including the "human readable" values but only the raw 
> numeric values, since the human readable values are ignored when merging 
> anyway.
> This would significantly reduce the amount of time taken to replicate this 
> request, which would provide the user with a far better experience due to the 
> significantly shorter response times.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to