[ https://issues.apache.org/jira/browse/CAMEL-4345?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13087141#comment-13087141 ]
Hadrian Zbarcea commented on CAMEL-4345: ---------------------------------------- @Ben, thanks for the offer and welcome to the Camel community :). > 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 > 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