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));
         }
 

Reply via email to