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

Pierre Villard resolved NIP-25.
-------------------------------
    Resolution: Fixed

> Add Metadata-Only Parameter Listing to ParameterProvider
> --------------------------------------------------------
>
>                 Key: NIP-25
>                 URL: https://issues.apache.org/jira/browse/NIP-25
>             Project: NiFi Improvement Proposal
>          Issue Type: Improvement
>            Reporter: Pierre Villard
>            Assignee: Pierre Villard
>            Priority: Major
>
> h2. Motivation
> The {{ParameterProvider}} interface currently requires implementations to 
> return fully resolved parameter values whenever the framework enumerates 
> available parameters. For providers backed by external secret stores such as 
> AWS Secrets Manager, or Azure Key Vault, fetching every secret value may be 
> expensive.
> The NiFi framework uses {{ParameterProvider.fetchParameters()}} to populate 
> the secrets-picker UI presented to connector users. This UI only needs 
> parameter metadata (name, group, description) and never displays secret 
> values. There is currently no way for a provider to return metadata without 
> also fetching values, forcing the expensive full-fetch path even when only a 
> listing is needed.
> h2. Scope
> Add a single default method to the {{ParameterProvider}} interface in 
> nifi-api:
> {code:java}
> default List<ParameterGroup> listParameters(ConfigurationContext context) 
> throws IOException {
>     return fetchParameters(context);
> }         {code}
>  
> The default implementation delegates to the existing 
> {{fetchParameters(context)}} method, ensuring full backward compatibility. 
> Providers that can separate metadata retrieval from value retrieval can 
> override this method to return {{Parameter}} objects with null values and 
> populated descriptors.
> No new types, interfaces, or classes are introduced in nifi-api.
> h2. Description
> The change consists of a single default method addition to 
> {{{}org.apache.nifi.parameter.ParameterProvider{}}}:
>  * Method: {{listParameters(ConfigurationContext context)}}
>  * Returns: {{List<ParameterGroup>}} — the same return type as 
> {{{}fetchParameters(){}}}, using existing {{ParameterGroup}} and 
> {{Parameter}} types.
>  * Contract: Returns parameter metadata (names, groups, descriptors). Values 
> may be null when the provider can enumerate parameters without resolving 
> their values.
>  * Default behavior: Calls {{{}fetchParameters(context){}}}, so existing 
> providers require no changes.
> Subsequent framework changes (outside the scope of this NIP) would update 
> {{{}SecretsManager{}}}, {{{}SecretProvider{}}}, and the web layer to call 
> {{listParameters()}} instead of {{fetchParameters()}} / {{getAllSecrets()}} 
> when populating the secrets-picker UI. Provider implementations in the NiFi 
> codebase or external repositories can then override {{listParameters()}} to 
> provide an optimized metadata-only code path.
> h2. Compatibility
> This is a purely additive change with no impact on backward compatibility:
>  * The method has a default implementation, so existing {{ParameterProvider}} 
> implementations continue to compile and function without modification.
>  * No existing method signatures, return types, or behaviors are altered.
>  * No new types are introduced.
>  * The change does not require a new major version of the Apache NiFi API.
> h2. Verification
>  * Existing unit tests for {{ParameterProvider}} implementations continue to 
> pass without modification, confirming backward compatibility.
>  * A new unit test should verify that the default {{listParameters()}} 
> implementation delegates to {{fetchParameters()}} and returns the same result.
>  * Framework-level integration can be verified when the corresponding NiFi 
> framework changes consume the new method.
> h2. Alternatives
>  # New {{SecretDescriptor}} interface in nifi-api — Introduce a metadata-only 
> type separate from {{{}Secret{}}}. This was considered but using existing 
> {{{}ParameterGroup{}}}/{{{}Parameter{}}} types with null values achieves the 
> same goal without expanding the API surface.
>  # Add a {{metadataOnly}} flag to {{fetchParameters()}} — Modify the existing 
> method signature or add a boolean parameter. This is not great because it 
> changes the contract of an established method and is less clear than a 
> distinct method name.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to