shashank created CAMEL-26461:
--------------------------------
Summary: camel-core - NoErrorHandler: an AsyncProcessor that
throws hangs the exchange in a route with noErrorHandler()
Key: CAMEL-26461
URL: https://issues.apache.org/jira/browse/CAMEL-26461
Project: Camel
Issue Type: Bug
Components: camel-core
Reporter: shashank
Assignee: shashank
Follow-up of CAMEL-26430 and CAMEL-26445 (the {{SimpleTask}} of
{{RedeliveryErrorHandler}}), named in CAMEL-26445.
With {{errorHandler(noErrorHandler())}} the step is wrapped in
{{NoErrorHandler}}, whose {{process(exchange, callback)}} calls
{{output.process(exchange, wrappedCallback)}} with no try/catch. When the
processor is an {{AsyncProcessor}} that throws from {{process(exchange,
callback)}} instead of setting the exception on the exchange, the exception
goes up to the work of the reactive executor that runs the step ({{Pipeline}}),
{{DefaultReactiveExecutor}} logs it ({noformat}Error executing reactive work
due to ... This exception is ignored.{noformat}) and drops it, and the callback
is never called: the caller waits forever, with or without an asynchronous step
before it. A plain {{Processor}} that throws does not hang (its converter
catches it).
*Proposal*
* Catch an exception thrown by {{output.process}} before the callback was
called, set it on the exchange and call the callback, with the same
exactly-once rule as CAMEL-26430 and CAMEL-26445 (the takeover through the
reactive executor after the work already queued there; a callback that comes
after it is ignored with a WARN). {{NoErrorHandler}} allocates a callback per
call already, so the flag can live there.
* A throw after the callback is rethrown to the caller, as before; a callback
called twice is ignored with a WARN.
* The same applies to the producers of a recipient list, which are wrapped in a
clone of the route's error handler.
* Tests as for the {{SimpleTask}} (default, asynchronous step, transacted,
controls with the callback called before the throw and queued on the reactive
executor, a late callback from another thread), and a recipient list.
_Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)