You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by js...@apache.org on 2024/06/25 09:30:58 UTC

(sling-org-apache-sling-installer-factory-configuration) branch cod18017/SLING-12283 created (now ea6e620)

This is an automated email from the ASF dual-hosted git repository.

jsedding pushed a change to branch cod18017/SLING-12283
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-installer-factory-configuration.git


      at ea6e620  SLING-12283 - Configuration in Cluster mode are not in sync

This branch includes the following new commits:

     new ea6e620  SLING-12283 - Configuration in Cluster mode are not in sync

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(sling-org-apache-sling-installer-factory-configuration) 01/01: SLING-12283 - Configuration in Cluster mode are not in sync

Posted by js...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jsedding pushed a commit to branch cod18017/SLING-12283
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-installer-factory-configuration.git

commit ea6e620b61502addfd260c38ffb430dc27b5d970
Author: Julian Sedding <(none)>
AuthorDate: Tue Jun 25 11:29:19 2024 +0200

    SLING-12283 - Configuration in Cluster mode are not in sync
---
 .../configuration/impl/ConfigTaskCreator.java      | 43 +++++++++++++++++-----
 .../factories/configuration/impl/ConfigUtil.java   |  8 +++-
 2 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
index a96abc6..e555095 100644
--- a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
+++ b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
@@ -25,6 +25,8 @@ import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.sling.installer.api.InstallableResource;
 import org.apache.sling.installer.api.ResourceChangeListener;
@@ -57,6 +59,8 @@ import org.slf4j.LoggerFactory;
 public class ConfigTaskCreator
     implements InstallTaskFactory, ConfigurationListener, ResourceTransformer {
 
+    private static final Pattern FELIX_FACTORY_CONFIG_PATTERN = Pattern.compile("(.*)\\.([0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12})");
+
     /** Logger. */
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -90,7 +94,7 @@ public class ConfigTaskCreator
                 ResourceTransformer.class.getName()
         };
         final ServiceRegistration<?> reg = bundleContext.registerService(serviceInterfaces, this, props);
-        this.logger.info("OSGi Configuration support for OSGi installer active, default location={}, merge schemes={}", 
+        this.logger.info("OSGi Configuration support for OSGi installer active, default location={}, merge schemes={}",
                 Activator.DEFAULT_LOCATION, Activator.MERGE_SCHEMES);
         return reg;
     }
@@ -252,18 +256,29 @@ public class ConfigTaskCreator
         final Map<String, Object> attr = new HashMap<>();
         final String factoryPid;
         final String configPid;
-        int n = pid.indexOf('~');
-        if ( n == -1 ) {
-            n = pid.indexOf('-');
+
+        final String[] pids = parseAsFelixFactoryConfigurationPid(pid);
+        if (pids != null && pids.length == 2) {
+            factoryPid = pids[0];
+            configPid = pids[1];
+        } else {
+            int n = pid.indexOf('~');
+            if (n == -1) {
+                n = pid.indexOf('-');
+            }
+            if (n > 0) {
+                configPid = pid.substring(n + 1);
+                factoryPid = pid.substring(0, n);
+            } else {
+                factoryPid = null;
+                configPid = pid;
+            }
         }
-        if (n > 0) {
-            configPid = pid.substring(n + 1);
-            factoryPid = pid.substring(0, n);
+
+        if (factoryPid != null) {
             attr.put(ConfigurationAdmin.SERVICE_FACTORYPID, factoryPid);
-        } else {
-            factoryPid = null;
-            configPid = pid;
         }
+        // configPid is the "name" in case a factoryPid is present
         attr.put(Constants.SERVICE_PID, configPid);
 
         final TransformationResult tr = new TransformationResult();
@@ -275,6 +290,14 @@ public class ConfigTaskCreator
         return new TransformationResult[] {tr};
     }
 
+    private static String[] parseAsFelixFactoryConfigurationPid(String pid) {
+        Matcher matcher = FELIX_FACTORY_CONFIG_PATTERN.matcher(pid);
+        if (matcher.matches()) {
+            return new String[] {matcher.group(1), matcher.group(2)};
+        }
+        return null;
+    }
+
     private static final List<String> EXTENSIONS = Arrays.asList(".config", ".properties", ".cfg", ".cfg.json");
     private static String removeConfigExtension(final String id) {
         for(final String ext : EXTENSIONS) {
diff --git a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
index 738008e..9de426a 100644
--- a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
+++ b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
@@ -172,7 +172,11 @@ abstract class ConfigUtil {
             final String factoryPid,
             final String configPidOrName)
     throws IOException, InvalidSyntaxException {
-        return getOrCreateConfiguration(ca, factoryPid, configPidOrName, null, false);
+        Configuration config = getOrCreateConfiguration(ca, factoryPid, configPidOrName, null, false);
+        if (config == null && factoryPid != null) {
+            config = getLegacyFactoryConfig(ca, factoryPid, null, configPidOrName);
+        }
+        return config;
     }
 
     public static Configuration createConfiguration(final ConfigurationAdmin ca,
@@ -184,7 +188,7 @@ abstract class ConfigUtil {
     }
 
     /**
-     * 
+     *
      * @param ca
      * @param factoryPid
      * @param configPidOrName