You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "Grzegorz Grzybek (JIRA)" <ji...@apache.org> on 2018/10/03 13:17:00 UTC

[jira] [Updated] (ARIES-1841) Race condition on blueprint-cm with ConfigAdmin

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

Grzegorz Grzybek updated ARIES-1841:
------------------------------------
    Description: 
If a blueprint bundle use CM like:

{code}
<cm-properties persistent-id="persistentId" id="my.config" xmlns="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.2.0"/>
{code}

if the configuration is created by another bundle (directly using {{ConfigurationAdmin}}) like:

{code}
        Configuration configuration = configurationAdmin.getConfiguration(CONFIG_PID, null);
        Dictionary<String, Object> dictionary = Optional.ofNullable(configuration.getProperties()).orElse(new Hashtable());
        for (Map.Entry entry : properties.entrySet()) {
            dictionary.put(entry.getKey().toString(), entry.getValue());
        }
       configuration.update(dictionary);
{code}

then, it's possible to have a race condition where the blueprint container thread starts whereas the config update is not complete (two different threads).

Blueprint CM should have an option to wait an updated config. For instance, it could check {{\_felix\_.cm.newConfiguration}} property.

  was:
If a blueprint bundle use CM like:

{code}
<cm-properties persistent-id="persistentId" id="my.config" xmlns="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.2.0"/>
{code}

if the configuration is created by another bundle (directly using {{ConfigurationAdmin}}) like:

{code}
        Configuration configuration = configurationAdmin.getConfiguration(CONFIG_PID, null);
        Dictionary<String, Object> dictionary = Optional.ofNullable(configuration.getProperties()).orElse(new Hashtable());
        for (Map.Entry entry : properties.entrySet()) {
            dictionary.put(entry.getKey().toString(), entry.getValue());
        }
       configuration.update(dictionary);
{code}

then, it's possible to have a race condition where the blueprint container thread starts whereas the config update is not complete (two different threads).

Blueprint CM should have an option to wait an updated config. For instance, it could check {{_felix_.cm.newConfiguration}} property.


> Race condition on blueprint-cm with ConfigAdmin
> -----------------------------------------------
>
>                 Key: ARIES-1841
>                 URL: https://issues.apache.org/jira/browse/ARIES-1841
>             Project: Aries
>          Issue Type: Bug
>          Components: Blueprint
>    Affects Versions: blueprint-core-1.9.0, blueprint-core-1.8.3
>            Reporter: Jean-Baptiste Onofré
>            Assignee: Jean-Baptiste Onofré
>            Priority: Major
>             Fix For: blueprint-core-1.8.4, blueprint-core-1.9.1
>
>
> If a blueprint bundle use CM like:
> {code}
> <cm-properties persistent-id="persistentId" id="my.config" xmlns="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.2.0"/>
> {code}
> if the configuration is created by another bundle (directly using {{ConfigurationAdmin}}) like:
> {code}
>         Configuration configuration = configurationAdmin.getConfiguration(CONFIG_PID, null);
>         Dictionary<String, Object> dictionary = Optional.ofNullable(configuration.getProperties()).orElse(new Hashtable());
>         for (Map.Entry entry : properties.entrySet()) {
>             dictionary.put(entry.getKey().toString(), entry.getValue());
>         }
>        configuration.update(dictionary);
> {code}
> then, it's possible to have a race condition where the blueprint container thread starts whereas the config update is not complete (two different threads).
> Blueprint CM should have an option to wait an updated config. For instance, it could check {{\_felix\_.cm.newConfiguration}} property.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)