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
OpenPGP_signature
Description: OpenPGP digital signature