nifi-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mark Payne (JIRA)" <j...@apache.org>
Subject [jira] [Created] (NIFI-6503) Cleanup code around Controller Service management
Date Tue, 30 Jul 2019 14:46:00 GMT
Mark Payne created NIFI-6503:
--------------------------------

             Summary: Cleanup code around Controller Service management
                 Key: NIFI-6503
                 URL: https://issues.apache.org/jira/browse/NIFI-6503
             Project: Apache NiFi
          Issue Type: Improvement
          Components: Core Framework
            Reporter: Mark Payne
            Assignee: Mark Payne


In reviewing code for the Controller Services, I see a lot of overlapping code that is not
very clean. `StandardControllerServiceProvider` maintains a cache of all Controller Services.
`StandardFlowManager` also keeps a cache of the Controller Services that exist at the 'root'
or 'controller' level. There's no need to be caching these services twice. `StandardFlowManager`
should be simply delegating calls to `StandardControllerServiceProvider` or vice-versa.

When a Controller Service is removed from the `StandardControllerServiceProvider`, it first
gets the Process Group of the service. If there is none, it's a root-level controller service
so the class delegates to `StandardFlowManager` to handle the cleanup of the removed Controller
Service. If there is a Process Group, it delegates the cleanup to the associated Process Group.
Both of those pieces of code are nearly identical. This code should be removed from both places
and instead relocated to the `StandardControllerServiceProvider` to handle.

`ComponentNode` should probably have a method along the lines of `List<ControllerServiceNode>
getReferencedControllerServices(ControllerServiceProvider provider)` so that places that need
to iterate over the referenced services can do so much more easily. Depending on the actions
taken against this List, it may make more sense to instead return a `ControllerServiceReferences`
type of object that is capable of performing those actions instead of requiring the caller
iterate over each of them. For example, a `removeReference(ComponentNode referencingComponent)`
method to remove references from all services. This would more easily facilitate logging,
etc. Also note that this is denoted as a `List`, not a `Set` because if a Processor references
a Controller Service multiple times, it's important to evaluate things like `removeReference`
multiples times. A convenience method of `ControllerServiceReferences distinct()` could be
useful here as well.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Mime
View raw message