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

David Jencks commented on FELIX-3645:
-------------------------------------

I made a lot of changes and think I have this problem solved.

I think your integration test can produce some expected errors and warnings as 
services disappear between the time we think a component is satisfied and when 
we actually get the service from the service reference.  Felix logs an error in 
this case, and we do some logging too.  So I modified the test to ignore the 
"expected" errors due to this.

I also moved the very useful logging code into the base itest so I could use it 
for all the other problems I was having :-)

The current state of the code is that we release all locks (including read 
locks) when registering the service and when collecting dependencies for a 
component instance.  Then we take a write lock to actually create the component 
instance using these collected dependencies.

I'm storing the collected dependencies in a map in AbstractComponentManager.  
This now holds most of the state for the dependency managers.  I think we could 
move the rest of the state into this map and make the bind/unbind/updated 
methods even more permanent and share the dependency managers between 
ImmediateComponentManagers for different configurations for the same Component.
                
> SCR could not obtain lock in 5000 ms
> ------------------------------------
>
>                 Key: FELIX-3645
>                 URL: https://issues.apache.org/jira/browse/FELIX-3645
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>         Environment: linux fc16, bipro, Java(TM) SE Runtime Environment 
> (build 1.6.0_32-b05)
>            Reporter: Pierre De Rop
>            Assignee: David Jencks
>         Attachments: 
> TEST-org.apache.felix.scr.integration.ComponentConcurrencyTest.xml
>
>
> I finally made an integration test and committed it in the trunk.
> This test sounds to reproduce the problem described in 
> http://www.mail-archive.com/[email protected]/msg26360.html.
> the test contains the following files:
> src/test/resources/integration_test_component_concurrency.xml
> src/test/java/org/apache/felix/scr/integration/ComponentConcurrencyTest.java
> src/test/java/org/apache/felix/scr/integration/components/concurrency/A.java
> src/test/java/org/apache/felix/scr/integration/components/concurrency/B.java
> src/test/java/org/apache/felix/scr/integration/components/concurrency/C.java
> src/test/java/org/apache/felix/scr/integration/components/concurrency/AFactory.java
> src/test/java/org/apache/felix/scr/integration/components/concurrency/CFactory.java
> I also slightly modified 
> src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
> in order to use the apache log service, and also to declare the new package 
> from org/apache/felix/scr/integration/components/concurrency.
> The test does the following:
> A optionally depends on B (dynamic=true, cardinality=0..N)
> B depends on C
> A is a factory component and is created by the AFactory class, in an infinite 
> loop and in a dedicated thread.
> C is also a factory component and is created/disposed for ever, by the 
> CFactory class.
> the integration test uses the log service in order to track logged errors, 
> and runs 30 seconds.
> If after 30 seconds, some errors are detected, then the test fail.
> It seems that we have many exceptions when the test fail, which I did not 
> reproduced so far. (see many IllegalMonitorState Exceptions).
> The initial exception discussed from the post in the @dev list is also 
> reproduced.
> For example, I attached to this post my 
> target/failsafe-reports/TEST-org.apache.felix.scr.integration.ComponentConcurrencyTest.xml,
>  when the problem takes place.
> Please take a look starting at line 951, as well as at the corresponding 
> dumpstack at line 713, and also the "Locking activity before 
> IllegalMonitorStateException" log, line 887.
> Hope this will help.
> /pierre

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