You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Karl Pauls (Jira)" <ji...@apache.org> on 2019/08/22 06:39:00 UTC

[jira] [Resolved] (SLING-8647) Provide policies for configuration merging

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

Karl Pauls resolved SLING-8647.
-------------------------------
    Resolution: Fixed

Done. We now have the following possible policies:
{code:java}
/** Used to handle configuration merging - fail the merge when there is a clash for a PID - this is the default */
public static final String CONFIG_FAIL_ON_CLASH = "CLASH";

/** Used to handle configuration merging - fail the merge only when there is a clash on a property level */
public static final String CONFIG_FAIL_ON_PROPERTY_CLASH = "PROPERTY_CLASH";

/** Used to handle configuration merging - use the latest configuration, but don't merge */
public static final String CONFIG_USE_LATEST = "USE_LATEST";

/** Used to handle configuration merging - use the first configuration, don't merge */
public static final String CONFIG_USE_FIRST = "USE_FIRST";

/** Used to handle configuration merging - merge the latest configuration in, latest props might override previous values */
public static final String CONFIG_MERGE_LATEST = "MERGE_LATEST";

/** Used to handle configuration merging - merge the first configuration in, latest props will not override previous values */
public static final String CONFIG_MERGE_FIRST = "MERGE_FIRST";
{code}
They can be given to the BuilderContext via a map where the key is the pid and the value the policy. That map will be processed in order (it is a linked hash map internally) and the first matching policy will be used (with FAIL_ON_CASH as the default if none) where matching means:
 * factorypid only matches factorypid
 * pid only matches pid
 * and * at the end is a wildcard (in case of a fpid it is at the end of the fpid and the name
 * a * only is special to allow to match all configs (regardless of factory or not

As an Example:

org.apache.sling.* -> matches all pids (but not fpids) starting with org.apache.sling.

org.apache.sling.*~foo* -> matches all factory configs that have a factory pid starting with org.apache.sling. and a name starting with foo

'*' -> matches both

For the slingfeature-maven-plugin, the policies can be given just as the artifactOverrides can be given and the launcher has a new -CC option to give them as well.

 

> Provide policies for configuration merging
> ------------------------------------------
>
>                 Key: SLING-8647
>                 URL: https://issues.apache.org/jira/browse/SLING-8647
>             Project: Sling
>          Issue Type: Improvement
>          Components: Feature Model
>            Reporter: Carsten Ziegeler
>            Assignee: Karl Pauls
>            Priority: Major
>             Fix For: Feature Model 1.1.0
>
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> At the moment, configurations are merged automatically with properties from the later feature potentially overwriting properties from an earlier feature.
> However for bundles/artifacts as well as framework properties we removed the auto merge and introduced policies.
> As automatic merging of configurations can be a source of error, we should introduce such policies for configurations as well



--
This message was sent by Atlassian Jira
(v8.3.2#803003)