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

Julian Sedding commented on SLING-12283:
----------------------------------------

Further analysis showed that this issue occurs when a factory configuration is 
manually created using the Felix webconsole. The webconsole uses the API 
{{ConfigurationAdmin#createFactoryConfiguration(...)}} to create such a 
configuration. In contrast to the 
{{ConfigurationAdmin#getFactoryConfiguration(...)}} methods, which create a 
{{service.pid}} by concatenating the {{factoryPid}}, a tilde character ('~') 
and the "name" part (an arbitrary string passed by the caller), the 
{{ConfigurationAdmin#createFactoryConfiguration(...)}} methods, as implemented 
by Felix' implementation of the Configuration Admin specification, create a 
{{service.pid}} by concatenating the {{factoryPid}}, a dot character ('.') and 
a randomly generated UUID. The UUID part cannot be controlled by the caller of 
the message, and thus it is impossible to re-create a factory configuration 
with the exact same {{service.pid}} on a second cluster node.

The strategy implemented in PR #15 works as follows:
(1) The {{ConfigTaskCreator}} class, which implements the 
{{ResourceTransformer}} interface, already extracts the {{service.pid}}, and in 
the case of a factory configuration the {{factoryPid}}, from the filename of a 
{{RegisteredResource}} representing a configuration. In this extraction logic, 
the {{service.pid}} extracted from the filename is first matched against the 
format of configurations created using Felix' 
{{ConfigurationAdmin#createFactoryConfiguration(...)}} implementation, and the 
{{factoryPid}} and {{name}} are extracted. If it doesn't match, the previous 
logic, looking for a '~' separator etc is used.
(2) In the {{ConfigUtil#getConfiguration(...)}} method, which is used to check 
if a given configuration already exists, a check for a configuration using a 
"legacy naming convention" is used if no configuration was found with a name 
following the expected '~' separated format.

With these two changes the behaviour is as follows:
# a factory configuration is created on cluster node A using the webconsole
# via {{org.apache.sling.installer.provider.jcr}}, the configuration is 
persisted in the JCR repository using the format {{<factoryPid>.<random uuid>}}
# cluster node A sees the new RegisteredResource for the configuration, but 
finds a "live" configuration via the legacy support from point (2) above
# cluster node B sees the new RegisteredResource for the configuration, doesn't 
find a matching "live" configuration, and adds the configuration in the format 
{{<factoryPid>~<name>}}, where {{<name>}} is the same uuid used on cluster node 
A

> Configuration in Cluster mode are not in sync
> ---------------------------------------------
>
>                 Key: SLING-12283
>                 URL: https://issues.apache.org/jira/browse/SLING-12283
>             Project: Sling
>          Issue Type: Bug
>            Reporter: Rishabh Daim
>            Priority: Major
>
> {color:#172b4d}Configuration in Cluster mode is not in sync. When instances 
> are in shared mode, and a new configuration is created under 1st instance, it 
> is not reflected correctly in 2nd instance. {color}
> {color:#172b4d}The factory PID and hence properties are altered in the 2nd 
> instance.{color}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to