shashank created CAMEL-26881:
--------------------------------
Summary: camel-core - Aggregate EIP: an Error of the aggregation
strategy or repository stops the completion timeout, interval or recover task
for good
Key: CAMEL-26881
URL: https://issues.apache.org/jira/browse/CAMEL-26881
Project: Camel
Issue Type: Bug
Components: camel-core
Reporter: shashank
Assignee: shashank
Follow-up of CAMEL-26741: another place that catches only {{Exception}}, found
while going through the follow-ups of that change. The completion timeout
checker of the Aggregate EIP runs on {{DefaultTimeoutMap}}: a task scheduled
with {{scheduleWithFixedDelay}} purges the expired entries and calls the
listener of the aggregator ({{AggregationTimeoutMap.onEviction}}), which
completes the group and calls {{AggregationStrategy.timeout}} and
{{onCompletion}}. Three places catch only {{Exception}}: {{onEviction}},
{{DefaultTimeoutMap.emitEvent}} and the purge task. So an {{Error}} that is not
a {{VirtualMachineError}} (such as an {{AssertionError}} or a
{{NoClassDefFoundError}} of the strategy) escapes the purge task, the executor
does not run the task again (the {{Error}} stays in its {{ScheduledFuture}},
which nothing reads, so nothing is logged), and no group of that aggregator
completes by its timeout again until the route is restarted; the other entries
that expired in the same purge are already removed from the timeout map and are
not completed either.
Expected: as after CAMEL-26741, such an {{Error}} is handled as an exception:
{{onEviction}} logs it and tries again as for an exception (CAMEL-25709), and
the timeout map catches it per listener and per purge, so the other entries and
the next purges go on; the completion interval and recover tasks log it and go
on, as for an exception; a {{VirtualMachineError}} is left as before.
The other users of {{DefaultTimeoutMap}} (camel-jms, camel-sjms,
camel-rocketmq, camel-netty) have the same gap. The completion interval task
({{AggregationIntervalTask}}, {{scheduleAtFixedRate}}) and the recover task of
the Aggregate EIP also catch only {{Exception}} and are stopped for good by
such an {{Error}} (for example of {{onCompletion}}); {{TimerListenerManager}}
has the same gap (left for a follow-up).
Not changed: a group whose {{timeout}} throws is handled as for an exception
(it was removed from the repository before {{timeout}} is called: not delivered
with a repository that is not recoverable, recovered later with a recoverable
one).
_Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)