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

Marko Herchet edited comment on FELIX-5887 at 7/25/18 1:23 PM:
---------------------------------------------------------------

UPDATE:

Iam not sure if the problem described here is still present, as [~pkriens] 
stated in the comments of the linked Issue, but I can describe a change in the 
behaviour from 2.0.10 to 2.0.14 and later. I have a situation now in a project 
where I get three "Circular reference detected trying to get service" errors 
when I use 2.0.14 or 2.1.0. Then I exclusively change felix.scr to 2.0.10 and 
it works fine (just like it did, before we updated from eclipse4.7.3a to 
eclipse 4.8.0).

Unfortunately its a big project I cannot provide, where I can reliably 
reproduce the problem.


was (Author: mherchet):
UPDATE:

Iam not sure if the problem described here is still present, as [~pkriens] 
stated in the comments of the linked Issue, but I can describe a change in the 
behaviour from 2.0.10 to 2.0.14 and later. I have a situation now in our 
project where I get three "Circular reference detected trying to get service" 
errors when I use 2.0.14 or 2.1.0. Then I exclusively change felix.scr to 
2.0.10 and it works fine (just like it did, before we updated from 
eclipse4.7.3a to eclipse 4.8.0).

Unfortunately its a big project I cannot provide, where I can reliably 
reproduce the problem.

> 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
>
> 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