[ 
https://issues.apache.org/jira/browse/FELIX-5887?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16559728#comment-16559728
 ] 

Marko Herchet edited comment on FELIX-5887 at 7/27/18 1:56 PM:
---------------------------------------------------------------

I attached a simple sample (two eclipse-projects, target and launch-config) 
that produces the "Circular reference detected trying to get service" error. 
When changing the launch-config to use felix.scr 2.0.10 instead of 2.0.14, no 
error occurs.

Until now this is the only one of my three "Circular Reference" scenarios which 
I get in production environment, that I was able to reproduce with a simple 
application. And the one that seems to cause the least trouble because the 
services will be created and activated anyway.


was (Author: mherchet):
I attached a simple sample (two eclipse-projects, target and launch-config) 
that produces the "Circular reference detected trying to get service" error. 
When changing the launch-config to use felix.scr 2.0.10 instead of 2.0.14, no 
error occurs.

Until now this is the only one of my three "Circular Reference" scenarios I get 
in production environment, that I was able to reproduce with a simple 
application and the one that seems to do the least troube cause the services 
will be created and activated despite of it.

> Cycles in DS depending on bundle order
> --------------------------------------
>
>                 Key: FELIX-5887
>                 URL: https://issues.apache.org/jira/browse/FELIX-5887
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>    Affects Versions: scr-2.0.14, scr-2.1.0
>         Environment: MacOS + Windows + Linux 
>            Reporter: Marko Herchet
>            Priority: Critical
>         Attachments: TestProjects.7z
>
>
> Following test case:
> top.jar: Top @Reference volatile List<Bottom>
>  bottom.jar: Bottom @Reference Top
> In SCR 2.0.2:
>  top.jar, bottom.jar -> OK, see trace
>  new Top()
>  Top.activate()
>  new Bottom()
>  Bottom.top=<top>
>  Bottom.activate()
>  Top.bottom +=<bottom>
> bottom.jar, top.jar -> FAILS but recovers
>  [osgi.enroute.examples.concurrency.cycle.bottom.Bottom(1)] 
>  Circular reference detected, getService returning null
>  new Top()
>  Top.activate()
>  new Bottom()
>  Bottom.top=<top>
>  Bottom.activate()
>  Top.bottom +=<bottom>
> In SCR 2.0.4 and later
> top.jar,bottom.jar -> OK
> new Top()
>  Top.activate()
>  new Bottom()
>  Bottom.top=<top>
>  Bottom.activate()
>  Top.bottom +=<bottom>
> bottom.jar, top.jar -> FAILS and DOES NOT RECOVER!
>  new Bottom()
>  new Top()
>  Top.activate()
>  new Bottom()
> The Bottom component never gets added to Top. This is a very serious problem 
> for reliable systems. I see this behaviour on 2.0.4, 2.0.6, and 2.0.8
> ----------
>  I've traced the cycle problem in 2.0.2. What happens is:
>  1) The Bottom configuration is started. There is no Top, so it is not 
> satisfied
>  2) The Top configuration is started. It is satisfied since it can live with 
> 0 Bottoms. 
>  3) The top configuration registers Top
>  4) The bottom configuration sees a Top and initiates Bottom
>  5) The bottom configuration gets Top (which is under construction)
>  6) The top configuration looks at its dependencies
>  7) The top configuration sees there is a Bottom now and tries to get it
>  8) The bottom factory is called again on the same thread and blows up
> I am not sure what happens in 2.0.4 and later but it does look scary that 
> Bottom is now never added to the Top.
> ---- Fix
>  I tried to do the activation in a background thread that but that failed. I 
> think the cycle should be detected and and de Top should not get its dynamic 
> dependencies after the activate method returned. But, just a guess, this is 
> complicated stuff.
> ---- Workaround
>  The workaround is to not let Top register as a service but manually register 
> it at the end of the activate method. Since the service is then already 
> initialized and registered, the Bottom will not get activated until the Top 
> is done.
> There is a bnd workspace that consistently shows this output.
>  [https://github.com/pkriens/felix.scr.cycle]
> I've added 4 log files. 2.0.4 and 2.0.8 seem to act very similar



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to