You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "shashank (Jira)" <ji...@apache.org> on 2026/10/20 04:51:00 UTC
[jira] [Work started] (CAMEL-25852) camel-jgroups - with the channel option of the component, an endpoint whose producer stops, or whose route is removed, disconnects or closes the channel under the consumers of the other endpoints
[ https://issues.apache.org/jira/browse/CAMEL-25852?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on CAMEL-25852 started by shashank.
----------------------------------------
> camel-jgroups - with the channel option of the component, an endpoint whose producer stops, or whose route is removed, disconnects or closes the channel under the consumers of the other endpoints
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25852
> URL: https://issues.apache.org/jira/browse/CAMEL-25852
> Project: Camel
> Issue Type: Bug
> Components: camel-jgroups
> Reporter: shashank
> Assignee: shashank
> Priority: Major
>
> The {{channel}} option of the JGroups component (a {{JChannel}}, for example a channel secured with AUTH and encryption, as the consumer start-up guard of CAMEL-25223 suggests) is given to every endpoint the component creates. Each {{JGroupsEndpoint}} (main 20cdb309f7d0) counts only its own producers and consumers in {{connectCount}}, and closes the channel when it stops:
> {code:java}
> public void disconnect() {
> if (connectCount.decrementAndGet() == 0) {
> resolvedChannel.disconnect();
> }
> }
> protected void doStop() throws Exception {
> if (resolvedChannel != null) {
> resolvedChannel.close();
> }
> ...
> {code}
> With the component channel, two endpoints of the same cluster that differ in their options (for example a producer to {{jgroups:orders}} and a consumer from {{jgroups:orders?enableViewMessages=true}}) share the channel but not the count. When the producer route stops, its endpoint disconnects the channel, and the consumer route stays started and receives nothing until a producer or consumer of the other endpoint starts again. When the producer route is removed, its endpoint is stopped and closes the channel, and the consumer receives nothing more for good (a closed {{JChannel}} cannot be connected again). Nothing is logged.
> *Fix*: the component counts the producers and consumers of a channel that the endpoints did not create (the component channel) and disconnects it when the last of them stops; an endpoint closes only a channel it created, and the component closes its channel when it stops (before, the first endpoint that stopped closed it). A channel an endpoint creates itself (no component channel) is unchanged.
> *Tests*: new {{JGroupsComponentChannelEndpointsTest}} (component channel, a producer route and a consumer route on two endpoints of the same cluster, messages sent by a separate channel): {{stoppingTheProducerKeepsTheConsumerReceiving}} and {{removingTheProducerRouteKeepsTheConsumerReceiving}} both fail on main with {{mock://received Received message count. Expected: <1> but was: <0>}}, and pass with the fix. camel-jgroups unit tests with the fix: 28 run, 0 failures.
> *How it was found*: variant analysis of CAMEL-25849 and CAMEL-25850 (a resource that belongs to one owner kept where another owner finds and stops it), then the JUnit test above.
> *Affected*: main, camel-4.18.x and camel-4.14.x (the same per-endpoint {{connectCount}} and {{close}} in {{doStop}}; read, not run). Not changed: two consumers on one channel still replace each other's receiver ({{setReceiver}}), a separate limitation.
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)