This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 291f6c1dc4b8 camel-jgroups-raft: set the documented 
CamelJGroupsRaftLeaderAddress header (#29957)
291f6c1dc4b8 is described below

commit 291f6c1dc4b877c5a7661a649616728fe87c152d
Author: dhairya05 <[email protected]>
AuthorDate: Sun Nov 15 01:06:55 2026 +0530

    camel-jgroups-raft: set the documented CamelJGroupsRaftLeaderAddress header 
(#29957)
    
    …header
    
    JGroupsRaftConstants declares it as a consumer header with javaType
    org.jgroups.Address, but populateJGroupsRaftHeaders sets the other six
    and skips it, so it never reaches an exchange and the documented header
    cannot be used to find out who the leader is.
    
    The gap was noticed before: JGroupsRaftAbstractTest.checkHeaders asserts
    the other six and carries the leader-address assertion commented out,
    against an Address type the file does not even import.
    
    Set it from resolvedRaftHandle.leader(), the same handle the other six
    come from.
    
    The assertion goes back in, as checkLeaderAddressHeader, called from the
    producer test rather than from checkHeaders: the leader address is only
    known once an election has finished, so a role change event observed
    while the election was still running carries none, and the consumer test
    checks exactly such an exchange.
---
 .../camel/component/jgroups/raft/JGroupsRaftEndpoint.java     |  1 +
 .../camel/component/jgroups/raft/JGroupsRaftAbstractTest.java | 11 ++++++++++-
 .../camel/component/jgroups/raft/JGroupsRaftProducerTest.java |  4 ++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java
 
b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java
index cedad3f42b7c..e708fc38436c 100644
--- 
a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java
+++ 
b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java
@@ -111,6 +111,7 @@ public class JGroupsRaftEndpoint extends DefaultEndpoint {
         
exchange.getIn().setHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_CURRENT_TERM,
 resolvedRaftHandle.currentTerm());
         
exchange.getIn().setHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_IS_LEADER, 
resolvedRaftHandle.isLeader());
         
exchange.getIn().setHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_LAST_APPLIED,
 resolvedRaftHandle.lastApplied());
+        
exchange.getIn().setHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_LEADER_ADDRESS,
 resolvedRaftHandle.leader());
         
exchange.getIn().setHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_LOG_SIZE, 
resolvedRaftHandle.logSize());
         
exchange.getIn().setHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_RAFT_ID, 
resolvedRaftHandle.raftId());
     }
diff --git 
a/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftAbstractTest.java
 
b/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftAbstractTest.java
index 100e82d08b03..372233e00d67 100644
--- 
a/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftAbstractTest.java
+++ 
b/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftAbstractTest.java
@@ -21,6 +21,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.camel.Exchange;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.awaitility.core.ConditionTimeoutException;
+import org.jgroups.Address;
 import org.jgroups.protocols.raft.InMemoryLog;
 import org.jgroups.raft.RaftHandle;
 import org.junit.jupiter.api.AfterEach;
@@ -52,11 +53,19 @@ public abstract class JGroupsRaftAbstractTest extends 
CamelTestSupport {
         
assertNotNull(exchange.getIn().getHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_CURRENT_TERM,
 int.class));
         
assertNotNull(exchange.getIn().getHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_IS_LEADER,
 boolean.class));
         
assertNotNull(exchange.getIn().getHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_LAST_APPLIED,
 int.class));
-        
//assertNotNull(exchange.getIn().getHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_LEADER_ADDRESS,
 Address.class));
         
assertNotNull(exchange.getIn().getHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_LOG_SIZE,
 int.class));
         
assertNotNull(exchange.getIn().getHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_RAFT_ID,
 String.class));
     }
 
+    /**
+     * Checked apart from {@link #checkHeaders(Exchange)}: the leader address 
is only known once a leader has been
+     * elected, so an exchange whose headers were populated while the election 
was still running (a role change event,
+     * for instance) legitimately carries none.
+     */
+    protected void checkLeaderAddressHeader(Exchange exchange) {
+        
assertNotNull(exchange.getIn().getHeader(JGroupsRaftConstants.HEADER_JGROUPSRAFT_LEADER_ADDRESS,
 Address.class));
+    }
+
     /**
      * Wait until a leader has been elected AND all given handles know who the 
leader is. Only connected handles are
      * checked; disconnected or closed handles are skipped. Without checking 
leader() on every active handle, a follower
diff --git 
a/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftProducerTest.java
 
b/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftProducerTest.java
index 1cbf0e279e3a..c2be8ac80602 100644
--- 
a/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftProducerTest.java
+++ 
b/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftProducerTest.java
@@ -64,15 +64,19 @@ public class JGroupsRaftProducerTest extends 
JGroupsRaftAbstractTest {
 
         assertNotNull(res.getIn().getBody());
         checkHeaders(res);
+        checkLeaderAddressHeader(res);
         assertNotNull(res2.getIn().getBody());
         checkHeaders(res2);
+        checkLeaderAddressHeader(res2);
         assertNotNull(res3.getIn().getBody());
         checkHeaders(res3);
+        checkLeaderAddressHeader(res3);
 
         // a text body is converted to bytes
         Exchange resText = template.request("direct:start", exchange -> 
exchange.getIn().setBody(MESSAGE));
         assertNull(resText.getException());
         assertInstanceOf(byte[].class, resText.getIn().getBody());
         checkHeaders(resText);
+        checkLeaderAddressHeader(resText);
     }
 }

Reply via email to