camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Kulp (JIRA)" <>
Subject [jira] [Commented] (CAMEL-4345) Synchronized code causes long delays and hangs for big applications especially with Blueprint
Date Thu, 18 Aug 2011 16:08:27 GMT


Daniel Kulp commented on CAMEL-4345:

I have no problem shading it in, but does it need to be exported from the bundle in OSGi?

Since it's completely an internal field, I don't think it does.   I'd definitely prefer it
didn't get exported so if some other project has a bundle with it, we don't conflict and such.

> Synchronized code causes long delays and hangs for big applications especially with Blueprint
> ---------------------------------------------------------------------------------------------
>                 Key: CAMEL-4345
>                 URL:
>             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
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:


View raw message