[ 
https://issues.apache.org/jira/browse/CAMEL-26446?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-26446.
---------------------------------
    Resolution: Fixed

Fixed by https://github.com/apache/camel/pull/29040

> camel-core - RedeliveryErrorHandler: a throw on the first delivery skips 
> redelivery, the dead letter channel and onException, and can continue the 
> exchange twice
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26446
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26446
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>            Reporter: shashank
>            Assignee: shashank
>            Priority: Minor
>             Fix For: 4.24.0
>
>
> Follow-up of CAMEL-26430 and CAMEL-26445 (the {{SimpleTask}} side), named in 
> both.
> {{RedeliveryErrorHandler.RedeliveryTask.run()}} runs the first delivery of a 
> step whose error handler has redelivery, exception policies or a dead letter 
> channel. When the processor (such as an {{AsyncProcessor}}) throws from 
> {{process(exchange, callback)}} there, the catch of {{run()}} sets the 
> exception on the exchange, releases the task and calls the callback directly:
> * so a throw on the first attempt is not redelivered, does not reach the dead 
> letter channel and is not handled by {{onException}}, while the same throw on 
> a redelivery goes through them since CAMEL-26430, and the same failure set on 
> the exchange by the processor goes through them too;
> * the catch has no exactly-once guard: a processor that hands its callback to 
> another thread and then throws gets the exchange completed by the catch and 
> continued a second time by that callback (two completions; with pooled tasks 
> the late callback works on a reset task).
> *Proposal*
> Redelivery now loops back (CAMEL-26430), so the first delivery should be made 
> consistent with it. Handle a throw of the first delivery as CAMEL-26430 
> handles one of a redelivery: take over through the reactive executor after 
> the work already queued there, with a flag shared with the callback of the 
> processor, set the exception and loop back to the error handler, so 
> redelivery, the dead letter channel and {{onException}} apply. CAMEL-24980 
> proposes to share the failure handling of the tasks; this could be that step. 
> Tests as in {{RedeliveryProcessorThrowsTest}} for the first delivery, and a 
> late callback from another thread.
> _Filed with Claude Code on behalf of allthingssecurity._



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to