[ 
https://issues.apache.org/jira/browse/CAMEL-6068?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aki Yoshida updated CAMEL-6068:
-------------------------------

    Attachment: trunk-components-camel-blueprint-20130211.diff
    
> CamelBlueprintContext may be wrongly started and this may lead to a deadlock
> ----------------------------------------------------------------------------
>
>                 Key: CAMEL-6068
>                 URL: https://issues.apache.org/jira/browse/CAMEL-6068
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-blueprint
>    Affects Versions: 2.10.3
>            Reporter: Aki Yoshida
>         Attachments: trunk-components-camel-blueprint-20130211.diff
>
>
> We observed a deadlock situation that seems to be caused by the change that 
> came in with CAMEL-5712, which changed the way how CamelBlueprintContext is 
> started to solve another issue.
> The current code listens to the service registered event for 
> org.osgi....BlueprintContainer (supposedly for its associated BP container) 
> and decides to start itself if not started. From the description of the 
> ticket, this change was intended to make sure the starting of the context 
> occurs after its BP container is registered. 
> In that case, should it be checking whether the received event belongs to the 
> same bundle? This checking is missing in the current code and consequently, 
> it may wrongly react to the event from another bundle's container 
> registration event. When this happens under some specific timing situation, 
> it may also lead to a deadlock.
> So, should we be checking the event source in CamelBlueprintContext's 
> serviceChanged method?
> Regards, aki
> Stack trace from 2.10.3
> ========================================================================
> Name: Blueprint Extender: 3
> State: BLOCKED on java.lang.Object@9064b42 owned by: Blueprint Extender: 2
> Total blocked: 13  Total waited: 38
> Stack trace:
>  
> org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:212)
> org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:198)
> org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:137)
> org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:709)
> org.apache.camel.blueprint.BlueprintContainerRegistry.lookup(BlueprintContainerRegistry.java:41)
> org.apache.camel.impl.CompositeRegistry.lookup(CompositeRegistry.java:68)
> org.apache.camel.impl.PropertyPlaceholderDelegateRegistry.lookup(PropertyPlaceholderDelegateRegistry.java:49)
> org.apache.camel.blueprint.BlueprintComponentResolver.resolveComponent(BlueprintComponentResolver.java:39)
> org.apache.camel.impl.DefaultCamelContext.getComponent(DefaultCamelContext.java:314)
>    - locked 
> java.util.hash...@1660de94org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:456)
> org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:50)
> org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:186)
> org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:108)
> org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:114)
> org.apache.camel.model.FromDefinition.resolveEndpoint(FromDefinition.java:72)
> org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:90)
> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:851)
> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:171)
> org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:722)
> org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1789)
> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1575)
> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1444)
>    - locked 
> org.apache.camel.blueprint.BlueprintCamelContext@5011bafaorg.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)
> org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1412)
> org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:127)
> org.apache.camel.blueprint.BlueprintCamelContext.serviceChanged(BlueprintCamelContext.java:96)
> org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
> org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
> org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
> org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
> org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
> org.apache.aries.blueprint.container.BlueprintContainerImpl.registerService(BlueprintContainerImpl.java:410)
> org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:346)
> org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:230)
>    - locked java.util.concurrent.atomic.AtomicBoolean@3cb3ada
>    - locked java.util.concurrent.atomic.AtomicBoolean@31b4d206
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> java.util.concurrent.FutureTask.run(FutureTask.java:138)
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> java.lang.Thread.run(Thread.java:722)
> ========================================================================
> Name: Blueprint Extender: 2
> State: BLOCKED on
> org.apache.camel.blueprint.BlueprintCamelContext@5011bafa owned by: Blueprint 
> Extender: 3
> Total blocked: 24  Total waited: 58
> Stack trace:
>  
> org.apache.camel.impl.DefaultCamelContext.getTypeConverter(DefaultCamelContext.java:1053)
> org.apache.camel.util.EndpointHelper.setProperties(EndpointHelper.java:249)
> org.apache.camel.impl.DefaultComponent.setProperties(DefaultComponent.java:222)
> org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:64)
> org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:36)
> org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:91)
> org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:461)
> org.apache.camel.core.xml.AbstractCamelEndpointFactoryBean.getObject(AbstractCamelEndpointFactoryBean.java:46)
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> java.lang.reflect.Method.invoke(Method.java:597)
> org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:226)
> org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:824)
> org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:234)
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:706)
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)
>    - locked java.lang.Object@9064b42
> org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219)
>    - locked java.lang.Object@9064b42
> org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:147)
> org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:631)
> org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:337)
> org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:230)
>    - locked java.util.concurrent.atomic.AtomicBoolean@53b00227
>    - locked java.util.concurrent.atomic.AtomicBoolean@5648a168
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> java.util.concurrent.FutureTask.run(FutureTask.java:138)
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> java.lang.Thread.run(Thread.java:722)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to