You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Peter Nowak (Jira)" <ji...@apache.org> on 2023/11/11 10:25:00 UTC

[jira] [Commented] (CAMEL-20103) DefaultProducerCache returns wrong ProducerTemplate under high concurrency load

    [ https://issues.apache.org/jira/browse/CAMEL-20103?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17785158#comment-17785158 ] 

Peter Nowak commented on CAMEL-20103:
-------------------------------------

my pull request (containing the same changes as the attached patch) https://github.com/apache/camel/pull/11971

> DefaultProducerCache returns wrong ProducerTemplate under high concurrency load
> -------------------------------------------------------------------------------
>
>                 Key: CAMEL-20103
>                 URL: https://issues.apache.org/jira/browse/CAMEL-20103
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 4.0.0, 4.0.1, 4.0.2, 4.1.0, 4.2.0
>            Reporter: Peter Nowak
>            Priority: Critical
>         Attachments: patch.diff
>
>
> as already posted on the [dev mailing list|https://lists.apache.org/thread/2o0fhstmdjgc0nss0t30d9g3337qnm8j] the DefaultProducerCache can return a wrong ProducerTemplate under high concurrency load which leads to misrouted exchanges and therefor errors in the application and workflow.
>  
> The improvement in the DefaultProducerCache from [issue 19058|https://issues.apache.org/jira/browse/CAMEL-19058] introduced a severe concurrency issue with [that change|https://github.com/apache/camel/commit/921ce519331ac5c8b0a1dfd099f9acbaba4feeab]. 
> While writing to the "lastUsed" fields in "acquireProducers" is synchronised, so that they are updated together, the read at the beginning of the method is not synchronised at all with the writes and therefor can be read at every time, even between the synced update to the fields which can lead to wrong producer templates being returned under high concurrency load. This then leads to exchanges being delivered to wrong endpoints causing severe malfunctions and errors.
>  
> i have created a patch (and also a branch in my forked camel repo) including the fix and a unit test reproduces the problem with returning the wrong producer template for the requested endpoint when accessing from multiple threads



--
This message was sent by Atlassian Jira
(v8.20.10#820010)