You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Benjamin Graf <Be...@gmx.net> on 2021/04/06 08:13:21 UTC

Copy over state for multicast eip

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

Re: Copy over state for multicast eip

Posted by Benjamin Graf <be...@gmx.net>.
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 <be...@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 <Be...@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
>>>
>


Re: Copy over state for multicast eip

Posted by Claus Ibsen <cl...@gmail.com>.
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 <be...@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 <Be...@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
> >
> >
>


-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Re: Copy over state for multicast eip

Posted by Benjamin Graf <be...@gmx.net>.
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 <Be...@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
>
>


Re: Copy over state for multicast eip

Posted by Claus Ibsen <cl...@gmail.com>.
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 <Be...@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



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2