[
https://issues.apache.org/jira/browse/CAMEL-25659?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-25659 started by shashank.
----------------------------------------
> camel-sjms - connection recovery can report success when the new connection
> fails before the consumers are created
> ------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25659
> URL: https://issues.apache.org/jira/browse/CAMEL-25659
> Project: Camel
> Issue Type: Bug
> Components: camel-sjms
> Reporter: shashank
> Assignee: shashank
> Priority: Minor
>
> Follow-up requested in the review of
> [#27799|https://github.com/apache/camel/pull/27799] (CAMEL-25612, merged).
> Since CAMEL-25612, {{SimpleMessageListenerContainer.recoverConnection}}
> notices that an {{onException}} cut a recovery attempt short:
> {{initConsumers}} assigns the {{sessions}}/{{consumers}} sets before its
> loop, {{onException}} nulls them, and {{recoverConnection}} checks them under
> {{connectionLock}} at the end.
> One window remains: an {{onException}} for the new connection that arrives
> after {{refreshConnection()}} but before {{initConsumers}} assigns the sets.
> It nulls fields that are still null, so the signal is lost. This is harmless
> when the following create calls fail, which is the usual case after a
> connection failure. If the JMS provider still creates the sessions and
> consumers on the failed connection, the attempt reports success and the
> container has no working consumer until the next failure.
> h3. Proposed fix
> A failure counter, independent of the create calls: {{onException}}
> increments it, {{recoverConnection}} reads it after {{refreshConnection()}}
> and compares it again under {{connectionLock}} at the end; if it changed, the
> attempt is not done and the recovery task runs again.
> h3. Test
> A test with a connection factory whose connection reports a failure through
> its {{ExceptionListener}} before the consumers are created while the create
> calls still succeed: without the change the recovery reports success with no
> working consumer; with the change a further attempt runs and messages are
> consumed again.
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)