You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Angelo van der Sijpt (JIRA)" <ji...@apache.org> on 2009/06/21 20:26:07 UTC

[jira] Updated: (FELIX-1146) ConfigAdmin can deliver updates to a managed service factory more than once

     [ https://issues.apache.org/jira/browse/FELIX-1146?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Angelo van der Sijpt updated FELIX-1146:
----------------------------------------

    Attachment: ActivatorWithDependencyManager.java
                Activator.java

I created a minimal example that shows the described behavior. I also found out that this behavior is more easily reproducable when using the dependency manager (I didn't have the time to find out why).

ActivatorWithDependencyManager.java contains a bundle activator that, when used as an activator for a bundle, will demonstrate the problem. Activator.java contains the same situation, just using basic service primitives.

> ConfigAdmin can deliver updates to a managed service factory more than once
> ---------------------------------------------------------------------------
>
>                 Key: FELIX-1146
>                 URL: https://issues.apache.org/jira/browse/FELIX-1146
>             Project: Felix
>          Issue Type: Bug
>          Components: Configuration Admin
>    Affects Versions: configadmin-1.0.8
>            Reporter: Angelo van der Sijpt
>            Priority: Minor
>         Attachments: Activator.java, ActivatorWithDependencyManager.java
>
>
> When the update of a ManagedServiceFactoryConfiguration, and the registration of that ManagedServiceFactory are close together or 'crossing', it is possible that the update is delivered twice to the factory.
> This seems to happen because of the following interleaving, with line numbers from current trunk, rev 763614
> Some notes:
> - I would have preferred to add some ascii art MSC, but unfortunately Jira does not allow this
> - Time order is top to bottom; I left out many methods for clarity
> User thread:
> - createFactoryConfiguration(user code)
> - config.update(user code)
> - factory.addPID(ConfigurationImpl.java:329)
> (preempted)
> Managed Service Factory Tracker thread:
> - ManagedServiceFactoryTracker.addingService(ConfigurationManager.java:1505)
> - cm.configure(ConfigurationManager.java:1512)
> - updateThread.schedule(ConfigurationManager.java:622) (Schedules a ManagedServiceFactoryUpdate task)
> - schedule(UpdateThread.java:109)
> Update thread:
> - task.run(UpdateThread.java:89)
> - ManagedServiceFactoryUpdate.run, cfg.isDelivered()(ConfigurationManager:1096) (is false now)
> - cfg.setDelivered( true )(ConfigurationManager:1129)
> User thread:
> - setDelivered( false )(ConfigurationImpl:338)
> - updateThread.schedule(ConfigurationManager:482)
> - schedule(UpdateThread.java:109) (Schedules a 'regular' UpdateTask)
> Update thread:
> - task.run(UpdateThread.java:89)
> - UpdateConfiguration.run, config.isDelivered() (is false now, so the configuration is delivered twice!)
> In short, there is a possibility in which the ManagedServiceFactoryUpdate task and ConfigurationImpl influence the setDelivered in such a way, that they interfere with eachother.
> I do not have a contained testcase at the moment, nor an easy fix. Sorry about that...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.