karaf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From J. Brébec (JIRA) <j...@apache.org>
Subject [jira] [Commented] (KARAF-6074) Race condition between the FeaturesService and FeatureDeploymentListener
Date Thu, 04 Apr 2019 07:16:00 GMT

    [ https://issues.apache.org/jira/browse/KARAF-6074?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16809580#comment-16809580

J. Brébec commented on KARAF-6074:

You're right, i am wrong with my scenario. You have to take into account another point : Activator
in Karaf use "BaseActivator". This implementation declares dependencies in the @Service annotation.
In the Activator.start() method, if the dependencies are not met, then the real activation
(doStart) is done asynchronously in another thread (and is not blocking)

In the case of the FeaturesService (at leat in my custom distribution), randomly, the dependency
to the maven URLStreamHandlerService is not resolved in Activator.start() and the FeaturesServiceImpl
is instanciated in another thread. this can happen after the feature-deployer bundle is activated.

The mvnURLStreamHandlerService is implemented as a ManagedService : the registration waits
for the "org.ops4j.pax.url.mvn" configuration to be present, and this configuration is injected
by fileinstall in a background thread. If fileinstall is "too slow" and the configuration
is injected after the start of the feature-core bundle, then this NPE occurs.

> Race condition between the FeaturesService and FeatureDeploymentListener
> ------------------------------------------------------------------------
>                 Key: KARAF-6074
>                 URL: https://issues.apache.org/jira/browse/KARAF-6074
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf
>    Affects Versions: 4.2.2, 4.2.4
>         Environment: Karaf 4.2.2 Windows 7 and Equinox
>            Reporter: J. Brébec
>            Assignee: Grzegorz Grzybek
>            Priority: Critical
>             Fix For: 4.2.3
> On the first start of a custom Karaf container (4.2.2), the logs shows a log of NPE in FeatureDeploymentListener.
> After some analysis of this Exception, it's look like a race condition between the FeaturesService
and the FeatureDeploymentListener :
>  # The FeaturesService starts and launch a provisioning in another thread
>  # a FeatureDeploymentListener is registered, and call bundleChanged for every bundle
installed (the startup bundles)
>  # It calls FeaturesService.state.requirements and get an empty map
>  # Updating the root regions in the requirements map fails with an NPE
>  # Some times later, the deployment task launched at step 1 is started, and FeaturesService.saveState()
is called : state.requirements."root region" is initialised
> The step 5 is executed in another thread, so it can happens before step 2 (and it works)
or after, causing this NPE
> Moreover, some methods in FeaturesService assume that state.requirements."root region"
exists. There are probably others npe here.
> {code:java}
> 14:37:55.668 ERROR [activator-1-thread-2] Unable to update deployed features for bundle:
org.eclipse.osgi - 3.12.100.v20180210-1608
> java.lang.NullPointerException: null
> at org.apache.karaf.deployer.features.FeatureDeploymentListener.bundleChanged(FeatureDeploymentListener.java:247)
> at org.apache.karaf.deployer.features.FeatureDeploymentListener.init(FeatureDeploymentListener.java:95)
> at org.apache.karaf.deployer.features.osgi.Activator.doStart(Activator.java:52) [25:org.apache.karaf.deployer.features:4.2.2]
> at org.apache.karaf.util.tracker.BaseActivator.run(BaseActivator.java:292) [25:org.apache.karaf.deployer.features:4.2.2]
> at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
> at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]{code}

This message was sent by Atlassian JIRA

View raw message