This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 5bf68c8913d NIFI-15906 Fixed Exception on cluster reconnect for
running RemoteGroupPort Destinations (#11212)
5bf68c8913d is described below
commit 5bf68c8913d67776566c7c3210525a315985b844
Author: Rakesh Kumar Singh <[email protected]>
AuthorDate: Thu May 14 23:21:21 2026 +0530
NIFI-15906 Fixed Exception on cluster reconnect for running RemoteGroupPort
Destinations (#11212)
During cluster reconnect, StandardVersionedComponentSynchronizer calls
updateConnectionDestinations() which temporarily re-points connections to
a dummy Funnel. When the current destination is a RemoteGroupPort (RPG)
that has versionedComponentId=null (common for S2S ports discovered at
runtime), the synchronizer cannot match it to the versioned component map
and attempts a temp-Funnel detour.
Signed-off-by: David Handermann <[email protected]>
---
.../org/apache/nifi/connectable/StandardConnection.java | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/connectable/StandardConnection.java
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/connectable/StandardConnection.java
index f326caf0b30..315299be2d9 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/connectable/StandardConnection.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/connectable/StandardConnection.java
@@ -292,7 +292,18 @@ public final class StandardConnection implements
Connection {
return;
}
- if (previousDestination.isRunning() && !(previousDestination
instanceof Funnel || previousDestination instanceof LocalPort)) {
+ // Allow destination changes when the current destination is a Funnel,
a LocalPort, or a
+ // RemoteGroupPort. Funnels and LocalPorts cannot be stopped/started
so they are exempt.
+ // RemoteGroupPort represents an S2S ingress point: re-routing its
incoming connections
+ // during cluster reconnect synchronization (e.g., temporarily
pointing to a dummy Funnel)
+ // is safe because the RPG does not hold per-FlowFile processing state
the way a Processor
+ // does. Without this exemption,
StandardVersionedComponentSynchronizer throws
+ // IllegalStateException when a running RPG with
versionedComponentId=null is encountered
+ // during updateConnectionDestinations(), leaving the node permanently
disconnected.
+ // (NIFI-15906)
+ if (previousDestination.isRunning() && !(previousDestination
instanceof Funnel
+ || previousDestination instanceof LocalPort
+ || previousDestination instanceof RemoteGroupPort)) {
throw new IllegalStateException("Cannot change destination of
Connection because the current destination ([%s]) is
running".formatted(previousDestination));
}