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

Xinyu Wang updated NIFI-15746:
------------------------------
    Description: 
When deploying a versioned flow from NiFi Registry using 
parameterContextHandlingStrategy=KEEP_EXISTING, if a parameter context with the 
same name already exists on the target NiFi instance, its parameter values are 
correctly preserved, but its inherited parameter context list is 
unconditionally replaced with the one from the versioned flow snapshot.

  This is problematic in multi-environment deployment scenarios (e.g., DEV → 
PROD) where the same-named parameter context is intentionally configured with 
different inheritance chains on each environment. The KEEP_EXISTING strategy 
should preserve the existing parameter context as-is — including its 
inheritance — but currently only preserves parameter values while silently 
overwriting the inheritance chain.

  The root cause is in 
StandardVersionedComponentSynchronizer.addMissingConfiguration(), which calls  
currentParameterContext.setInheritedParameterContexts(...) without checking 
whether the current parameter context already has inherited context configured.

*Steps to Reproduce:*

  1. Set up two NiFi instances (Instance A and Instance B), both connected to 
the same NiFi Registry.
  2. On Instance B (target), create the following parameter context hierarchy:
    - target-system-params — a top-level parameter context with 
environment-specific parameters
    - shared-service-params — inheriting from target-system-params
  3. On Instance A (source), create the following parameter context hierarchy:
    - source-system-params — a top-level parameter context
    - shared-service-params — inheriting from source-system-params
  4. On Instance A, create a Process Group MyWorkflow containing a nested 
Process Group MyService:
    - MyWorkflow uses parameter context workflow-params
    - MyService uses parameter context shared-service-params
  5. Save MyWorkflow to NiFi Registry as Version 1.
  6. Verify the state on Instance B before deployment:
    - Confirm shared-service-params inherits from target-system-params.
  7. On Instance B, deploy Version 1 from Registry:
  POST 
/process-groups/\{id}/process-groups?parameterContextHandlingStrategy=KEEP_EXISTING
  8. Check shared-service-params on Instance B after deployment.

*Expected Result:*

  shared-service-params on Instance B retains its existing inheritance from 
target-system-params. The KEEP_EXISTING strategy should preserve the existing 
parameter context entirely — both its parameters and its inheritance chain.

*Actual Result:*

  shared-service-params on Instance B now inherits from source-system-params 
(resolved by name on Instance B). The inheritance chain configured for the 
target environment has been silently overwritten by the source environment's 
definition.

  was:
When deploying a versioned flow from NiFi Registry using 
parameterContextHandlingStrategy=KEEP_EXISTING, if a parameter context with the 
same name already exists on the target NiFi instance, its parameter values are 
correctly preserved, but its inherited parameter context list is 
unconditionally replaced with the one from the versioned flow snapshot.

  This is problematic in multi-environment deployment scenarios (e.g., DEV → 
PROD) where the same-named parameter context is intentionally configured with 
different inheritance chains on each environment. The KEEP_EXISTING strategy 
should preserve the existing parameter context as-is — including its 
inheritance — but currently only preserves parameter values while silently 
overwriting the inheritance chain.

  The root cause is in 
StandardVersionedComponentSynchronizer.addMissingConfiguration(), which calls  
currentParameterContext.setInheritedParameterContexts(...) without checking 
whether the current parameter context already has inherited context configured.

  Steps to Reproduce:

  1. Set up two NiFi instances (Instance A and Instance B), both connected to 
the same NiFi Registry.
  2. On Instance B (target), create the following parameter context hierarchy:
    - target-system-params — a top-level parameter context with 
environment-specific parameters
    - shared-service-params — inheriting from target-system-params
  3. On Instance A (source), create the following parameter context hierarchy:
    - source-system-params — a top-level parameter context
    - shared-service-params — inheriting from source-system-params
  4. On Instance A, create a Process Group MyWorkflow containing a nested 
Process Group MyService:
    - MyWorkflow uses parameter context workflow-params
    - MyService uses parameter context shared-service-params
  5. Save MyWorkflow to NiFi Registry as Version 1.
  6. Verify the state on Instance B before deployment:
    - Confirm shared-service-params inherits from target-system-params.
  7. On Instance B, deploy Version 1 from Registry:
  POST 
/process-groups/\{id}/process-groups?parameterContextHandlingStrategy=KEEP_EXISTING
  8. Check shared-service-params on Instance B after deployment.

  Expected Result:

  shared-service-params on Instance B retains its existing inheritance from 
target-system-params. The KEEP_EXISTING strategy should preserve the existing 
parameter context entirely — both its parameters and its inheritance chain.

  Actual Result:

  shared-service-params on Instance B now inherits from source-system-params 
(resolved by name on Instance B). The inheritance chain configured for the 
target environment has been silently overwritten by the source environment's 
definition.


> Inherited parameter contexts unconditionally overwritten during versioned 
> flow deployment with KEEP_EXISTING strategy
> ---------------------------------------------------------------------------------------------------------------------
>
>                 Key: NIFI-15746
>                 URL: https://issues.apache.org/jira/browse/NIFI-15746
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Flow Versioning
>    Affects Versions: 2.5.0
>            Reporter: Xinyu Wang
>            Priority: Major
>
> When deploying a versioned flow from NiFi Registry using 
> parameterContextHandlingStrategy=KEEP_EXISTING, if a parameter context with 
> the same name already exists on the target NiFi instance, its parameter 
> values are correctly preserved, but its inherited parameter context list is 
> unconditionally replaced with the one from the versioned flow snapshot.
>   This is problematic in multi-environment deployment scenarios (e.g., DEV → 
> PROD) where the same-named parameter context is intentionally configured with 
> different inheritance chains on each environment. The KEEP_EXISTING strategy 
> should preserve the existing parameter context as-is — including its 
> inheritance — but currently only preserves parameter values while silently 
> overwriting the inheritance chain.
>   The root cause is in 
> StandardVersionedComponentSynchronizer.addMissingConfiguration(), which calls 
>  currentParameterContext.setInheritedParameterContexts(...) without checking 
> whether the current parameter context already has inherited context 
> configured.
> *Steps to Reproduce:*
>   1. Set up two NiFi instances (Instance A and Instance B), both connected to 
> the same NiFi Registry.
>   2. On Instance B (target), create the following parameter context hierarchy:
>     - target-system-params — a top-level parameter context with 
> environment-specific parameters
>     - shared-service-params — inheriting from target-system-params
>   3. On Instance A (source), create the following parameter context hierarchy:
>     - source-system-params — a top-level parameter context
>     - shared-service-params — inheriting from source-system-params
>   4. On Instance A, create a Process Group MyWorkflow containing a nested 
> Process Group MyService:
>     - MyWorkflow uses parameter context workflow-params
>     - MyService uses parameter context shared-service-params
>   5. Save MyWorkflow to NiFi Registry as Version 1.
>   6. Verify the state on Instance B before deployment:
>     - Confirm shared-service-params inherits from target-system-params.
>   7. On Instance B, deploy Version 1 from Registry:
>   POST 
> /process-groups/\{id}/process-groups?parameterContextHandlingStrategy=KEEP_EXISTING
>   8. Check shared-service-params on Instance B after deployment.
> *Expected Result:*
>   shared-service-params on Instance B retains its existing inheritance from 
> target-system-params. The KEEP_EXISTING strategy should preserve the existing 
> parameter context entirely — both its parameters and its inheritance chain.
> *Actual Result:*
>   shared-service-params on Instance B now inherits from source-system-params 
> (resolved by name on Instance B). The inheritance chain configured for the 
> target environment has been silently overwritten by the source environment's 
> definition.



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

Reply via email to