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

Pierre De Rop commented on FELIX-3910:
--------------------------------------

Before submitting a patch, I need a better integration test than the RaceTest I 
committed in test/ submodule. I also need the latest pax exam, as well as 
latest felix framework.

So, as discussed with Marcel privately, I committed in revision 1530206., a new 
"test2" subproject, based on pax exam 3.0.0 and latest Felix framework. 

In that new test2 project, I committed an "AspectRaceTest" which reproduces 
some race conditions when aspect-aware services are concurrently 
registered/unregistered.

I also started to migrate the old api test 
"test/src/test/java/org/apache/felix/dm/test/AspectBaseTest.java", and moved it 
to 
test2/src/test/java/org/apache/felix/dependencymanager/test2/integration/api/AspectBaseTest.java

The work is in progress, and the intent is to progressively migrate all our 
existing tests from test/* into test2/*.  And once all is migrated, we'll 
finally remove old "test" module and rename new "test2" module into "test".

To run the tests, the "mvn clean install" command has to be executed (because 
tests are run in the integration phase, after the test phase. I need this in 
order to be able to generate some annotated components before executing tests.

Basically, migrating an old api test seems simple: the test has to extend 
TestBase, which already has a @Configuration annotation. If one maven 
dependency is missing, just add it to the TestBase class.
Notice that with the new pax exam 3.0.0, all testXXX methods must not take the 
BundleContext in parameter (but the super class has a "context" BundleContext 
class attribute, which can be reused by all existing tests).


The test2 module is organized like this:

* src/main/java/org/apache/felix/dependencymanager/test2/components/

This package contains some components used by integration tests. Most of the 
components from this package are meant to be used by only annotations tests, 
except  the "Ensure" helper, which is used by all integration tests.

*  src/test/java/org/apache/felix/dependencymanager/test2/integration/*

this package contains all integration tests

* src/test/java/org/apache/felix/dependencymanager/test2/integration/api/*

this package contains all API integration tests. For now, I have migrated the 
old test/.../AspectBaseTest.java into 
test2/src/test/java/org/apache/felix/dependencymanager/test2/integration/api/AspectBaseTest.java

There is also the new AspectRaceTest in the api package.

* 
src/test/java/org/apache/felix/dependencymanager/test2/integration/annotations/*

this package contains all Annotations integration tests. For now, I migrated 
the old test/.../SimpleAnnotationsTest.java into 
test2/src/test/java/org/apache/felix/dependencymanager/test2/integration/annotations//SimpleAnnotationsTest.java


I will now cleanup the patch and will submit it to this issue a bit later.

/Pierre

> Race conditions in DependencyManager
> ------------------------------------
>
>                 Key: FELIX-3910
>                 URL: https://issues.apache.org/jira/browse/FELIX-3910
>             Project: Felix
>          Issue Type: Bug
>          Components: Dependency Manager
>    Affects Versions: dependencymanager-3.0.0
>         Environment: jdk1.6, jdk1.7, linux fc16
>            Reporter: Pierre De Rop
>         Attachments: FELIX-3910-patch, FELIX-3910.patch.2, 
> FELIX-3910.patch.3, FELIX-3910.patch.4
>
>
> In a multi threaded context, where dependencies are injected concurrently 
> from different threads, we  came across some exceptions which seem to take 
> place from dependencymanager.
> I have tried to reproduce the problems using a paxexam test which I will 
> commit.
> Not all exceptions are reproduced by the test case, but I think that the 
> testcase really reproduces a problem. 
> I also have a candidate patch, which I will submit to this jira issue.
> Here are the exceptions we have seen:
> first stacktrace seen:
> ===============
> ERROR: Bundle test.dm [21] EventDispatcher: Error during dispatch. 
> (java.lang.NullPointerException)
> java.lang.NullPointerException
>         at 
> org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.addedService(ServiceDependencyImpl.java:481)
>         at 
> org.apache.felix.dm.tracker.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1325)
>         at 
> org.apache.felix.dm.tracker.AbstractTracked.trackAdding(AbstractTracked.java:290)
>         at 
> org.apache.felix.dm.tracker.AbstractTracked.track(AbstractTracked.java:236)
>         at 
> org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChangedHideAspects(ServiceTracker.java:1206)
>         at 
> org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1101)
>         at 
> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)
>         at 
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
>         at 
> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
>         at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4260)
>         at org.apache.felix.framework.Felix.registerService(Felix.java:3275)
>         at 
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
>         at 
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:320)
>         at test.dm.race.RaceTest$RegistrationHelper$1.run(RaceTest.java:104)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
> second exceptions:
> ==============
> ERROR: EventDispatcher: Error during dispatch. 
> (java.lang.NullPointerException)
> java.lang.NullPointerException
>         at 
> org.apache.felix.dm.impl.ComponentImpl.invokeCallbackMethod(ComponentImpl.java:686)
>         at 
> org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.invoke(ServiceDependencyImpl.java:704)
>         at 
> org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.invokeRemoved(ServiceDependencyImpl.java:666)
>         at 
> org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.removedService(ServiceDependencyImpl.java:520)
>         at 
> org.apache.felix.dm.tracker.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1351)
>         at 
> org.apache.felix.dm.tracker.AbstractTracked.untrack(AbstractTracked.java:359)
>         at 
> org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChangedHideAspects(ServiceTracker.java:1285)
>         at 
> org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1101)
>         at 
> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:878)
>         at 
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:732)
>         at 
> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
>         at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3587)
>         at org.apache.felix.framework.Felix.access$000(Felix.java:40)
>         at org.apache.felix.framework.Felix$1.serviceChanged(Felix.java:625)
>         at 
> org.apache.felix.framework.ServiceRegistry.unregisterService(ServiceRegistry.java:117)
>         at 
> org.apache.felix.framework.ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:128)
>         at org.apache.felix.dm.test.RaceTest$AFactory$2.run(RaceTest.java:151)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to