Hi,

no, the problem is not the optimization into a simple boolean. It is the fact that the rollback flags a are copied at all. Before 3.1 those flags were not copied from child to parent  when multicast done is processed. After 3.1 the flag is copied and does overwrite a possible still set to true flag on parent with definitely false if child exchange has been processed by errorhandler. This way there is no possible pattern I know, how to do a rollbackonlylast even through a multicast eip where I have to handle parent and child exchanges.

Regards,

Benjamin

On 08.04.2021 17:22, Claus Ibsen wrote:
Hi

Ah okay so it's not the "too much" is copied over.
But the fact before the rollback_last was stored as property, which
had 3 states: null, true, false
And now its optimized into a simple boolean that has: true, false


On Wed, Apr 7, 2021 at 7:15 PM Benjamin Graf <benjamin.g...@gmx.net> wrote:
Hi Clause,

well, the code is quite to complex to put it into an easy test case. But
I can share the idea. We're using nested transaction to separate
incoming MQ system from several transactional systems. In case of error
we do disqualify message to kind of deadletter queue and rollback all
actions already done. That's why we use rollbackonlylast feature to let
initial jms transaction being committed successfully, while  all other
operations are rollbacked. But with multicast the rollbackonlylast of
parent exchange is set to false again after child exchange has been
handled by transactional errorhandler and copy of state in
MulticastProcessor has been done. Since this change has been introduced
with Camel 3.1 the question is whether too much information is copied
from child to parent or not.

Best regards

Benjamin

On 07.04.2021 15:42, Claus Ibsen wrote:
Hi

I suggest if you can put together a small example / unit test or
something that demonstrates what you are doing and why you need to do
custom error handling.
And put it on github or in a JIRA ticket.


On Tue, Apr 6, 2021 at 10:13 AM Benjamin Graf <benjamin.g...@gmx.net>
wrote:
Hi together,

https://issues.apache.org/jira/browse/CAMEL-14354 introduces a change to ExchangeHelper to copy internal state of child exchanges to parent exchanges. Especially the code addition from https://github.com/apache/camel/blob/a9fd03f1d022a48553207ab59e42f35b8cd6c325/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java#L417-L418 is causing troubles for my custom error handling policy because rollback states are set to false on parent after errorhandler has set it back to false on child exchange and multicast does the copy over. This makes my transaction
separation actually impossible for multicast use cases causing rollbacks to AMQ 
and DLQ the latter one.

Is this really intended or maybe a bug/race condition of the patch after 3.1 
ongoing?

Best regards
Benjamin



Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to