[
https://issues.apache.org/jira/browse/CAMEL-4345?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hadrian Zbarcea reassigned CAMEL-4345:
--------------------------------------
Assignee: Hadrian Zbarcea
> Synchronized code causes long delays and hangs for big applications
> especially with Blueprint
> ---------------------------------------------------------------------------------------------
>
> Key: CAMEL-4345
> URL: https://issues.apache.org/jira/browse/CAMEL-4345
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Affects Versions: 2.8.0
> Environment: Linux and Mac multicore machines
> Reporter: Jeff Genender
> Assignee: Hadrian Zbarcea
> Attachments: CAMEL-4345.patch
>
>
> The DefaultCamelContext uses synchronized "endpoints" which ends up
> ultimately extending a LinkedHashMap through the LRUCache. The LinkedHashMap
> is obviously not thread safe, so it requires synchronized guards when
> accessing the endpoints object. This especially happens in the
> getEndpoint(s) calls in the DefaultCamelContext. In large systems with lots
> of routes and on multicore systems, dynamically created routes (and many
> routes) can cause long delays and hang for long times since route creation
> and the starting of the camel route can occur in unison with synchronization.
> In a blueprint container, such as Karaf, this can cause timeouts on the
> bundle and camel routes will appear to hang indefinately. Thread dumps show
> the hangs occur on the synchronized call in getEndpoint(s). The fix for this
> is to use concurrent apis as much as possible and remove the synchronized
> code. I refactored the LRUCache/LRUSoftCache to use Google's
> ConcurrentLinkedHashMap (ASL2 License
> http://code.google.com/p/concurrentlinkedhashmap) and removed the
> synchronized code that locks the endpoints object. This should remove the
> hangs since the locks are no longer required. Since COncurrentLinkedHashmap
> is not OSGi ready, I have shaded the classes in core. On my executions, all
> unit tests pass with this refactoring using the concurrent code. This should
> speed up Camel on multicore systems that have lots of routes.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira