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

Benjamin BONNET updated CAMEL-17613:
------------------------------------
    Attachment: CAMEL-17613-log.txt

> camel-sql - Race condition in AggregateProcessor with Jdbc Repository
> ---------------------------------------------------------------------
>
>                 Key: CAMEL-17613
>                 URL: https://issues.apache.org/jira/browse/CAMEL-17613
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core, camel-sql
>    Affects Versions: 3.11.2
>            Reporter: Benjamin BONNET
>            Priority: Major
>             Fix For: 3.16.0
>
>         Attachments: CAMEL-17613-log.txt
>
>
> Hi,
> using aggregate with a JdbcAggregationRepository, we are encountering a race 
> condition that may leave a completed exchange in completed table even after 
> that completed exchange has been sent. Unfortunately, that leads to 
> duplicates since recovery task will eventually try and recover it.
> Normally, when the exchange completes, it is deleted from repo exchange table 
> and inserted into repo completed exchange table. Then exchange is sent and 
> deleted from repo completed exchange table.
> But, due to the fact those two actions are run by different threads (and in 
> different transactions) that order may vary.
>  
> Here is a normal sequence : 
> AggregateProcessor.doProcess
>   doAggregation
>     doAggregationComplete
>       onCompletion
>         JdbcAggregationRepository.remove : => INSERT ... INTO _completed  
>   onSubmitCompletion  
>     AggregateOnCompletion.onComplete   (via executorService)
>       JdbcAggregationRepository.confirm  : => DELETE FROM _completed
> With the use of executorService, confirm is run by another thread and may 
> commit before remove commits. Eventually, when that occurs, one can check 
> that DELETE statement returns 0 (number of deleted rows) instead of 1.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to