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

Dirk Rudolph commented on SLING-8946:
-------------------------------------

Not sure if improving {{PathSet#optimize()}} will help to resolve this (if even 
possible) as we will always have to iterate over all ResourceProviders at least 
once multiplied with what ever the PathSet does != O(1).

Another approach would be 1) to throttle the update() on the ResourceProviders 
until a certain condition is meat to prevent recalculation of the excludes with 
each newly registered ResourceProvider, or 2) to stop recreating the 
ObservationReporter with each new ResourceProvider, but rather update its 
settings instead like its already done with the ProviderContext.

1) increases the complexity of the runtime behaviour unnecessarily I think but 
2) requires a change in the SPI

> Non-deterministic shadowing of resource observation
> ---------------------------------------------------
>
>                 Key: SLING-8946
>                 URL: https://issues.apache.org/jira/browse/SLING-8946
>             Project: Sling
>          Issue Type: Bug
>          Components: ResourceResolver
>    Affects Versions: Resource Resolver 1.5.34
>            Reporter: Dirk Rudolph
>            Assignee: Robert Munteanu
>            Priority: Critical
>             Fix For: Resource Resolver 1.6.18
>
>          Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> The BasicObservationReporter implements shadowing of events being propagated 
> per ResourceProvider instance [1]. Assuming we do have 2 ResourceProviders 
> registered, where the one shadows the other like this:
>  - RP A registered on /
>  - RP B registered on /path
> then currently the excludes given to the BasicObservationReporter are 
> different depending on either RP A or RP B gets registered first:
>  - RP A before RP B => excludes are empty
>  - RP B before RP A => excludes contain /path
> This is because only the newly registered RP gets its ProviderContext updated 
> [2]
> Same applies if RP B is registered before RP A and gets unregistered. In that 
> case the ObservationReporter of RP A stays untouched.
> [1] 
> [https://github.com/apache/sling-org-apache-sling-resourceresolver/blob/master/src/main/java/org/apache/sling/resourceresolver/impl/observation/BasicObservationReporter.java#L102]
>  [2] 
> [https://github.com/apache/sling-org-apache-sling-resourceresolver/blob/master/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java#L358]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to