Yes, that sounds like the easiest option - it would mean that the resource
resolver factory is re-registered with every change to a resource provider
factory - which doesn't sound too bad to me

Carsten


2014-02-20 13:25 GMT+01:00 Felix Meschberger <fmesc...@adobe.com>:

> Hi
>
> I see.
>
> Can this be easily "solved" by just making the ResourceProviderFactory
> reference in the ResourceResolverFactoryActivator a static reference with
> eager policyOption?
>
> Regards
> Felix
>
> Am 20.02.2014 um 13:21 schrieb Carsten Ziegeler <cziege...@apache.org>:
>
> > Only ResourceProviderFactories are affected - simple resourceProviders
> like
> > the servlet ones can't keep state. Those appear/disappear silently. I
> agree
> > that service registration modifications are rather expensive, on the
> other
> > hand there are only a few provider factories and those are usually not
> > updated frequently (of course, we never know what our users are doing).
> >
> > Your idea for keeping references to the entries makes sense, however
> today,
> > the resource resolver context is holding the reference to the factory -
> and
> > this needs to be nulled out in some way. We could maybe get away with an
> > intermediate ResourceProviderEntry.
> >
> > I'm still not sure if this is the right thing, as RPs from factories can
> > keep state, like transient changes and these would simply disappear-
> >
> > Carsten
> >
> >
> > 2014-02-20 13:09 GMT+01:00 Felix Meschberger <fmesc...@adobe.com>:
> >
> >> Hi
> >>
> >> Am 20.02.2014 um 10:19 schrieb Carsten Ziegeler <cziege...@apache.org>:
> >>
> >>> Hi,
> >>>
> >>> as noted in SLING-3400 we have a problem when a resource provider
> factory
> >>> is unregistered and a resource resolver is currently using a provider
> >> from
> >>> this factory. In that case, that reference is never cleared.
> >>> This problem occurs due to long running resource resolvers.
> >>>
> >>> I looked at solving this issue and my first idea was to simply remove
> the
> >>> reference to the provider if the factory is unregistered.
> Unfortunately,
> >>> this comes with the drawback that we have to keep a reference to all
> open
> >>> resource resolver (contexts) in order to notify them, once a factory is
> >>> removed.
> >>> Although this is feasible, while implementing it I came to the
> conclusion
> >>> that this is actually the wrong approach: a resource resolver is using
> /
> >>> has used a provider and this one silently disappears. This might cause
> >> some
> >>> trouble / unexpected behaviour.
> >>>
> >>> So I rather think, once this happens all resource resolvers need to be
> >>> closed and recreated - the easiest way to do this is to unregister and
> >>> reregister the resource resolver factory. However, I think simply
> >> modifying
> >>> the service registration of the resolver factory would be the better
> >> option
> >>> and should do the trick.
> >>
> >> This will be expensive since serlvets are registered as
> ResourceProviders
> >> this will cause all ResourceResolverFactory consumers to be "cycled"
> >> whenever a servlet is registered and unregistered. I think that is
> >> inappropriate overhead.
> >>
> >> Rather, I think it is perfectly fine to me, that we remove
> >> ResourceProvider instances used by ResourceResolver objects: At the end
> of
> >> the day, this is like removing JCR node subtree: A ResourceResolver
> cannot
> >> expect for this to exist for ever.
> >>
> >> Basically we have two cases:
> >>
> >> (1) ResourceProvider from ResourceProviderFactory
> >> (2) ResourceProvider service
> >>
> >> IIRC the second case of ResourceProvider services is easy because
> >> essentially a ResourceResovler instances share the same
> >> ResourceProviderEntry which in turn calls the ResourceProvider.
> >> Unregistering the ResourceProvider would just remove the
> ResourceProvider
> >> from the ResourceProviderEntry.
> >>
> >> For ResourceResourceProviderFactory it is a bit more complicated: Maybe
> we
> >> must keep a collection of ResourceProviderEntry instances which refer to
> >> the ResourceProvider instances provided by the ResourceProviderFactory.
> >> When the factory is unregistered the respective ResourceProvider
> instances
> >> are removed from the entries.
> >>
> >> Does that make sense ?
> >>
> >> Regards
> >> Felix
> >>
> >>
> >>>
> >>> WDYT?
> >>>
> >>> Regards
> >>> Carsten
> >>> --
> >>> Carsten Ziegeler
> >>> cziege...@apache.org
> >>
> >>
> >
> >
> > --
> > Carsten Ziegeler
> > cziege...@apache.org
>
>


-- 
Carsten Ziegeler
cziege...@apache.org

Reply via email to