You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Pierre Villard (Jira)" <ji...@apache.org> on 2026/07/07 12:56:00 UTC
[jira] [Created] (NIFI-16085) Flow synchronization fails when a Parameter Provider-backed Parameter Context contains a parameter not flagged as provided
Pierre Villard created NIFI-16085:
-------------------------------------
Summary: Flow synchronization fails when a Parameter Provider-backed Parameter Context contains a parameter not flagged as provided
Key: NIFI-16085
URL: https://issues.apache.org/jira/browse/NIFI-16085
Project: Apache NiFi
Issue Type: Bug
Components: Core Framework
Reporter: Pierre Villard
Assignee: Pierre Villard
When NiFi synchronizes a flow (a node joining/rejoining a cluster, or loading the flow at startup) VersionedFlowSynchronizer rebuilds each Parameter Context's parameters from the serialized flow and copies the per-parameter provided flag verbatim (VersionedParameter.isProvided()). If a Parameter Context that is backed by a Parameter Provider contains a parameter whose serialized provided flag is false, the synchronizer calls ParameterContext.setParameters(...) with a user-entered parameter, which StandardParameterContext rejects:
{code:java}
java.lang.IllegalArgumentException: Parameters for Context [<name>] cannot be manually updated
because they are provided by Parameter Provider [<id>]{code}
wrapped as:
{code:java}
org.apache.nifi.controller.serialization.FlowSynchronizationException: Failed to connect node to cluster
because local flow controller partially updated. Administrator should disconnect node and review flow for corruption. {code}
The node then fails to start the Flow Service and, in a cluster, disconnects with Disconnect Code "Node's Flow did not Match Cluster Flow" and cannot rejoin. The node stays down until the flow is manually corrected.
Why the state is reachable: a provider-backed Parameter Context can never hold a non-provided (user-entered) parameter as a live object, it is rejected at every write path (setParameters, and binding a Provider onto a context that already has user-entered parameters). However, VersionedParameter.provided is a primitive boolean that defaults to false on deserialization, so a serialized flow can present a provider-backed context with a provided=false parameter (e.g. across serialization/version differences). Flow synchronization trusts that per-parameter flag instead of the context-level Provider binding.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)