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