Uploaded image for project: 'Karaf'
  1. Karaf
  2. KARAF-4843

Updating factory configuration leads to new configuration instance

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 4.1.0
    • Fix Version/s: 4.1.0
    • Component/s: karaf
    • Labels:
      None

      Description

      Start with a fresh Karaf 4.1.0-SNAPSHOT installation and validate that felix.fileinstall.enableConfigSave = true is set.

      Scenario:

      • Create a factory configuration.
      • Update the configuration.

      Result:
      The configuration gets updated, but a new configuration with another incorrect service.factoryPid gets created:

      Steps to reproduce:

      karaf@root()> config:edit --factory com.example.TestConfig
      karaf@root()> config:property-set A B
      karaf@root()> config:update
      karaf@root()> config:list '(service.factoryPid=com.example.TestConfig*)'
      ----------------------------------------------------------------
      Pid:            com.example.TestConfig.8d22975e-3cb3-477c-985d-7c1a1d9f98af
      FactoryPid:     com.example.TestConfig
      BundleLocation: null
      Properties:
         A = B
         service.factoryPid = com.example.TestConfig
         service.pid = com.example.TestConfig.8d22975e-3cb3-477c-985d-7c1a1d9f98af
      
      karaf@root()> config:edit com.example.TestConfig.8d22975e-3cb3-477c-985d-7c1a1d9f98af
      karaf@root()> config:property-set A C
      karaf@root()> config:update
      karaf@root()> config:list '(service.factoryPid=com.example.TestConfig*)'
      ----------------------------------------------------------------
      Pid:            com.example.TestConfig.8d22975e-3cb3-477c-985d-7c1a1d9f98af
      FactoryPid:     com.example.TestConfig
      BundleLocation: null
      Properties:
         A = C
         service.factoryPid = com.example.TestConfig
         service.pid = com.example.TestConfig.8d22975e-3cb3-477c-985d-7c1a1d9f98af
      ----------------------------------------------------------------
      Pid:            com.example.TestConfig.8d22975e.22055df0-4a85-4b87-94c6-7787cd84a8e5
      FactoryPid:     com.example.TestConfig.8d22975e
      BundleLocation: null
      Properties:
         A = C
         felix.fileinstall.filename = file:/opt/apache-karaf-4.1.0-SNAPSHOT/etc/com.example.TestConfig.8d22975e-3cb3-477c-985d-7c1a1d9f98af.cfg
         service.factoryPid = com.example.TestConfig.8d22975e
         service.pid = com.example.TestConfig.8d22975e.22055df0-4a85-4b87-94c6-7787cd84a8e5
      karaf@root()> config:list '(service.factoryPid=com.example.TestConfigd*)'
      

      I think that there is a problem with fileinstall and hyphen handling. The string before the hyphen is interpreted as factoryPid resulting in "com.example.TestConfig.8d22975e". Fileinstall tries to find the existing configuration using the key "felix.fileinstall.filename" which is not set by "ConfigRepositoryImpl".

      Solution:
      I am not sure, but I think, that in the "update"-method of "ConfigRepositoryImpl", the "felix.fileinstall.filename"-property has to be set explicitly and that an alias has be used that does not contain a hyphen.

      It would be nice to add an "-alias" option to the command "config:edit" that allows a user to specify the alias that gets used for the factory configuration. Unfortunately, the alias does not get used when the configuration gets created for the first time. Only its update leads to a file creation that gets considered by Fileinstall.

      What are your thoughts?

        Attachments

          Activity

            People

            • Assignee:
              gnt Guillaume Nodet
              Reporter:
              herr-herner Jens Offenbach
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: