You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Bastien Meert (JIRA)" <ji...@apache.org> on 2019/04/10 13:19:00 UTC

[jira] [Updated] (CAMEL-13403) Default allowUseOriginalMessage="false" prevent clearing inflightRepository using jms with transferExchange="true"

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

Bastien Meert updated CAMEL-13403:
----------------------------------
    Summary: Default allowUseOriginalMessage="false" prevent clearing inflightRepository using jms with transferExchange="true"  (was: Default allowUseOriginalMessage="false" prevent inflightRepository using jms with transferExchange="true")

> Default allowUseOriginalMessage="false" prevent clearing inflightRepository using jms with transferExchange="true"
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-13403
>                 URL: https://issues.apache.org/jira/browse/CAMEL-13403
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jms
>            Reporter: Bastien Meert
>            Priority: Minor
>         Attachments: JmsInOutTransferExchangeInflightRepositoryFlushTest.java
>
>
> When using transferExchange="true" in a JMS consumer (assuming producer also did), camel is breaking the match between key and exchange in inflightRepository if allowUseOriginalMessage="true" is not set in camel context.
> This can lead to java heap space out of memory because camel is not able to clear the inflightRepository from old Exchange.
> Identified behaviour :
>  # Camel receive the JMS message
>  ## If allowUseOriginalMessage=true : parse JMS message to build Exchange instance
>  ## If not : generate a new Instance
>  # Camel add the Exchange to inflightRepository
>  # On accessing the ExchangeBody, if it was not parsed  yet camel rebuild the Exchange but do not change the key(exchangeId) in the inflightRepository
>  # When the route process is over the message is not disposed if the key has been changed in the Exchange but not inflightRepository
>  # Sooner or later the heap space if full and application crash.
> The problem appeared in 2.18.0 and is present up until 2.23.1 (tested with attached test case). Release note of 2.18.0 says :
> "Optimize Camel to only enable AllowUseOriginalMessage if in use by error handler or OnCompletion<[http://camel.apache.org/oncompletion.html]>. End user who manually access the original message using the Java API must configure AllowUseOriginalMessage=true."
> Problem is transferExchange="true" case also needs allowUseOriginalMessage="true" even if the not accessing original message by Java API an other way.
> Easy work around : set allowUseOriginalMessage="true" in camel context configuration



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)