Pawe�� Boguski created SLING-11754:
--------------------------------------

             Summary: Race condition in OsgiInstaller
                 Key: SLING-11754
                 URL: https://issues.apache.org/jira/browse/SLING-11754
             Project: Sling
          Issue Type: Bug
          Components: Installer
    Affects Versions: Installer Core 3.12.0, Installer Packages Factory 1.0.4
            Reporter: Pawe�� Boguski


[OsgiInstallerImpl|https://github.com/apache/sling-org-apache-sling-installer-core/blob/master/src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java#L143]
 is using 
[SortingServiceTracker|https://github.com/apache/sling-org-apache-sling-installer-core/blob/master/src/main/java/org/apache/sling/installer/core/impl/SortingServiceTracker.java#L87]
 to schedule a retry of the OSGi installer run when new service of type 
ResourceTransformer is added. During the OSGi installer run, the list of 
available ResourceTransformer services is loaded to [transform 
resources|https://github.com/apache/sling-org-apache-sling-installer-core/blob/master/src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java#L953].
  

It might happen that the list of available ResourceTransformer services will be 
loaded during transforming resources before the new ResourceTransformer which 
triggered the OSGi installer run will be available in the SortingServiceTracker 
instance, because the scheduleRetry call is done in 
SortingServiceTracker.addingService not when the service is already available 
in SortingServiceTracker but during the preparation of the service instance 
(the instance returned from SortingServiceTracker.addingService is later added 
to services list in SortingServiceTracker).

So in other words, there is a race condition between adding a new service 
instance to SortingServiceTracker services list and OSGi installer run which 
perform getting the instances of ResourceTransformer services from the 
SortingServiceTracker.

In the result activation of ResourceTransformer might trigger the OSGi 
installer run but the service will not be found during the run.

Example issue caused by this:

If such a last OSGi installer run would be caused by activation of 
[PackageTransformer|https://github.com/apache/sling-org-apache-sling-installer-core/blob/master/src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java#L953]
 the untransformed content packages (for example added by OSGI feature model 
during the first start of the instance) stays untransformed.

In our pipelines for PRs validation this is happening very often.



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

Reply via email to