Good catch. I remember we investigated some race condition issues with Greg.
Let me check if the name matches. Regards JB On Wed, May 31, 2023 at 4:45 PM Jesse White <je...@opennms.com> wrote: > > Good find Ben, and thanks Grzegorz. > > Reverting that commit does solve the problem, so it must be related. > > I also found that this change does the trick: > > diff --git > a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java > > b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java > index 40bb666a34..fce2c1221c 100644 > --- > a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java > +++ > b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java > @@ -68,9 +68,7 @@ public class FeatureConfigInstaller { > if (n > 0) { > cid.isFactoryPid = true; > cid.factoryPid = pid.substring(0, n); > - if (pid.contains("~")) { > - cid.name = pid.substring(n + 1); > - } > + cid.name = pid.substring(n + 1); > } > return cid; > } > > I guess there's some mismatch about the "name" of the config, so it gets > treated as two distinct objects. > > Best, > Jesse > ________________________________ > From: Grzegorz Grzybek <gr.grzy...@gmail.com> > Sent: Wednesday, May 31, 2023 10:33 AM > To: user@karaf.apache.org <user@karaf.apache.org> > Subject: Re: same configuration registered with multiple PIDs in > ManagedServiceFactory > > > EXTERNAL EMAIL DON'T BE QUICK TO CLICK > > If you believe this email is suspicious, report via ‘Phish Alert Report’ > button > > ________________________________ > Hello > > I remember adding some safety logic related to feature-embedded > configuration. Because you're using dash ("-") in the PID, you're actually > adding a factory PID. And there may be some hidden race condition here. > > Let me check this problem tomorrow. > > regards > Grzegorz Grzybek > > śr., 31 maj 2023 o 16:29 ran...@opennms.org <ran...@opennms.org> napisał(a): > > Looking at a diff between 4.3.6 and 4.3.7, the only thing that seems relevant > is this change, maybe the issue with multiple threads writing the config at > the same time needs to be solved in a different way? > > > > My guess is this fixed the race condition by making it atomic, but it doesn’t > stop it from happening twice in quick succession. > > commit 1221b0158d2494523cf94cc3f223bd552a2467c7 > > Author: Grzegorz Grzybek gr.grzy...@gmail.com > > Date: Wed Feb 9 11:53:33 2022 +0100 > > > > [KARAF-7389] Prevent two threads (feature installer, CM Event Dispatcher > through fileinstall) writing the same config file > > > > (cherry picked from commit f3260d5ab641cdbf1bbd594875c07d974ed470a0) > > > > diff --git > a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java > > b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java > > index ba46eb3a2d..40bb666a34 100644 > > --- > a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java > > +++ > b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java > > @@ -139,2 +139,3 @@ public class FeatureConfigInstaller { > > properties.put(CONFIG_KEY, cid.pid); > > + cfg.update(cfgProps); > > if (storage != null && configCfgStore) { > > @@ -142,3 +143,2 @@ public class FeatureConfigInstaller { > > } > > - cfg.update(cfgProps); > > try { > > @@ -327,7 +327,9 @@ public class FeatureConfigInstaller { > > if (!cfgFile.exists()) { > > + File tmpCfgFile = File.createTempFile(cfgFile.getName(), > ".tmp", cfgFile.getParentFile()); > > if (jsonFormat) { > > - Configurations.buildWriter().build(new > FileWriter(cfgFile)).writeConfiguration(convertToDict(props)); > > + Configurations.buildWriter().build(new > FileWriter(tmpCfgFile)).writeConfiguration(convertToDict(props)); > > } else { > > - props.save(cfgFile); > > + props.save(tmpCfgFile); > > } > > + tmpCfgFile.renameTo(cfgFile); > > } else { > > > > From: Jesse White <je...@opennms.com> > Date: Tuesday, May 30, 2023 at 7:11 PM > To: user@karaf.apache.org <user@karaf.apache.org> > Subject: same configuration registered with multiple PIDs in > ManagedServiceFactory > > Hey folks, > > > > I've encountered some odd behavior with Karaf 4.4.3, and I'd like to confirm > if this is a bug or if there are some settings I can tune to alter the > behavior. > > > > Here's how to reproduce: > > Start Karaf 4.4.3 w/ JDK 11 > Install the managed factory example > > feature:repo-add > mvn:org.apache.karaf.examples/karaf-config-example-features/4.4.3/xml > > feature:install karaf-config-example-managed-factory > > Copy the attached 'config.xml' file to the 'deploy/' directory > Wait about 5 seconds, and notice the following output to the console > > New configuration with pid > org.apache.karaf.example.config.04388423-2d46-4308-8214-3dcd1e0b8fd0 > > key1 = value1 > > key2 = value2 > > org.apache.karaf.features.configKey = org.apache.karaf.example.config-abc > > service.factoryPid = org.apache.karaf.example.config > > service.pid = > org.apache.karaf.example.config.04388423-2d46-4308-8214-3dcd1e0b8fd0 > > 18:42:02.131 INFO [features-3-thread-1] Done. > > 18:42:10.999 INFO > [fileinstall-/Users/jesse/labs/karaf/apache-karaf-4.4.3/etc] Creating > configuration {org.apache.karaf.example.config~abc} from > /Users/jesse/labs/karaf/apache-karaf-4.4.3/etc/org.apache.karaf.example.config-abc.cfg > > New configuration with pid org.apache.karaf.example.config~abc > > felix.fileinstall.filename = > file:/Users/jesse/labs/karaf/apache-karaf-4.4.3/etc/org.apache.karaf.example.config-abc.cfg > > key1 = value1 > > key2 = value2 > > org.apache.karaf.features.configKey = org.apache.karaf.example.config-abc > > service.factoryPid = org.apache.karaf.example.config > > service.pid = org.apache.karaf.example.config~abc > > > > > > Note that the single config results in multiple callbacks under two separate > pids. This seems isolated to cases where the deploy/ folder is used to write > the config, and doesn't happen when the configuration is manually placed in > etc/. > > > > Following the same instructions with Karaf 4.3.6 has the expected behavior. > Karaf 4.3.7 and later experience this issue though. > > > > Any ideas? > > > > Thanks, > > Jesse > > > > > > > > CONFIDENTIALITY NOTICE > This e-mail message and any attachments are only for the use of the intended > recipient and may contain information that is privileged, confidential or > exempt from disclosure under applicable law. If you are not the intended > recipient, any disclosure, distribution or other use of this e-mail message > or attachments is prohibited. If you have received this e-mail message in > error, please delete and notify the sender immediately. Thank you.