shashank created CAMEL-26880:
--------------------------------
Summary: camel-cluster - ClusteredRoutePolicy: a leadership change
while the CamelContext is suspended is lost after the resume
Key: CAMEL-26880
URL: https://issues.apache.org/jira/browse/CAMEL-26880
Project: Camel
Issue Type: Bug
Components: camel-core
Reporter: shashank
Assignee: shashank
A leadership change that a {{ClusteredRoutePolicy}} gets while the CamelContext
is suspended (for example suspended from JMX) is not applied after the resume:
*Leadership taken while suspended.* The policy starts its routes with
{{startRoute}}, which does nothing while the CamelContext is suspended, and
records them as started. The resume only resumes the routes that were started
before the suspend, so after the resume the leader does not run the routes, and
no later change starts them until the leadership changes again.
*Leadership lost while suspended.* A route whose consumer does not support
suspension is stopped by the suspend. The policy then skips it (it is not
stoppable) and keeps it recorded as started. The resume starts it again, so a
node that is no longer the leader runs the route next to the new leader.
Expected: after the resume, the leader runs the routes of the policy, and a
node that is not the leader does not.
Suggested fix: do not start the routes while the CamelContext is suspending or
suspended; on {{CamelContextResumedEvent}} apply the leadership again (start
the stopped routes on the leader, stop the started ones elsewhere), on the
policy thread. Note that the resumed event comes while the CamelContext status
is still starting, so the start must not be deferred to the started event,
which does not come again.
Found with Specula (TLA+ model checked against traces of the real code) and
code review, and confirmed with tests on the real classes.
_Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)