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


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


Reply via email to