Here is a commit on my personal fork of the camel github repo that adds a
setting to disable that cache.  I tested it with the reproducer and it
appears to be working well:

https://github.com/apache/camel/compare/main...artnaseef:camel:asn/disable-error-handler-cache-setting


Art


On Mon, Jun 3, 2024 at 12:46 PM Arthur Naseef <artnas...@apache.org> wrote:

> Out Of Memory (OOM) occurs when using the Recipient List with a large
> number of dynamic URLs.  For example:
>
>     .recipientList(simple("http://
> {{downstream-server}}/employee/${header.emplId}"))
>
> with a large number of values for ${header.emplId} leads to the OOM.
>
> REPRODUCER:
> =============
> https://github.com/artnaseef/camel-recipient-list-oom-reproducer
>
> - See the README.md for instructions to reproduce and detect the problem
>
> DETAILS
> =======
>  The MulticastProcessor, which RecipientListProcessor extends, has the
> following "unlimited" cache:
>
>     private final ConcurrentMap<Processor, Processor> errorHandlers = new
> ConcurrentHashMap<>();
>
> Entries are added to this map for every unique processor created - every
> unique URL generates a unique processor.  The entries themselves are
> wrapped processor instances for error handling IIUC (to support the custom
> error handling used by multicast and recipient-list).  Entries are only
> removed from this map on shutdown.  Ironically, there is an LRUCache for
> the processors themselves, with a default maximum size of 1000, so the
> wrapped processors may get recreated even though the error handler remains
> in the map indefinitely.
>
> IMPACT VERSIONS:
> ================
> Appears to impact versions >= 3.10.0
>
> COMMIT: 0d9227ff16fb00e047fdd087740c87cce01bb545
> =======
> It appears this commit introduced the use of the errorHandlers "unlimited"
> cache for recipient lists.
>
> FOLLOW-UP
> ==========
> I have ideas and questions for implemeting a fix:
>     - IDEA 1: We can use an LRUCache for this data structure as well.
>     - Does it make more sense to remove the entries from errorHandlers
> when the related Processor entry is removed from it's LRUCache?
>     - IDEA 2: setting on recipient list to disable the errorHandler cache
> (for dyamic urls with little chance of duplicates, this could be the best)
>
> Art
>

Reply via email to