You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Stefan Egli (JIRA)" <ji...@apache.org> on 2017/02/21 14:52:44 UTC

[jira] [Created] (SLING-6542) MapEntries' concurrent session access broken

Stefan Egli created SLING-6542:
----------------------------------

             Summary: MapEntries' concurrent session access broken
                 Key: SLING-6542
                 URL: https://issues.apache.org/jira/browse/SLING-6542
             Project: Sling
          Issue Type: Bug
          Components: ResourceResolver
    Affects Versions: Resource Resolver 1.5.0
            Reporter: Stefan Egli
            Priority: Critical
             Fix For: Resource Resolver 1.5.14


MapEntries uses a shared session. To avoid concurrent access it uses a Lock ({{ReentrantLock}}) "{{initializing}}". With SLING-6131 (to be precise [here|https://github.com/apache/sling/commit/e6e0d2fe9f43c97abd3e71978c9d2952e409aeef]) the order in which the lock is applied relative to refreshing however was inverted: the _refresh_ used to be _after_ the lock, with this change however it is now _before_. Which means that you can have a concurrent access to refresh and other session operations.

The following stacktrace illustrates a concurrent access:
* thread 1: {noformat}        at org.apache.sling.jcr.resource.internal.helper.jcr.JcrItemResourceFactory.getItemOrNull(JcrItemResourceFactory.java:184)
        at org.apache.sling.jcr.resource.internal.helper.jcr.JcrItemResourceFactory.createResource(JcrItemResourceFactory.java:96)
        at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.getResource(JcrResourceProvider.java:300)
        at org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider.getResource(AuthenticatedResourceProvider.java:135)
        at org.apache.sling.resourceresolver.impl.helper.ResourceResolverControl.getResource(ResourceResolverControl.java:224)
        at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getAbsoluteResourceInternal(ResourceResolverImpl.java:1066)
        at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getResourceInternal(ResourceResolverImpl.java:687)
        at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getResource(ResourceResolverImpl.java:641)
        at org.apache.sling.resourceresolver.impl.mapping.MapEntries.addResource(MapEntries.java:270)
        at org.apache.sling.resourceresolver.impl.mapping.MapEntries.onChange(MapEntries.java:718)
        at org.apache.sling.resourceresolver.impl.observation.BasicObservationReporter.reportChanges(BasicObservationReporter.java:210)
        at org.apache.sling.jcr.resource.internal.JcrResourceListener.onEvent(JcrResourceListener.java:155)
{noformat}
* thread 2: {noformat}        at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate$WarningLock.lock(SessionDelegate.java:759)
        at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate$WarningLock.lock(SessionDelegate.java:773)
        at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.performVoid(SessionDelegate.java:269)
        at org.apache.jackrabbit.oak.jcr.session.SessionImpl.refresh(SessionImpl.java:432)
        at com.adobe.granite.repository.impl.CRX3SessionImpl.refresh(CRX3SessionImpl.java:213)
        at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.refresh(JcrResourceProvider.java:516)
        at org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider.refresh(AuthenticatedResourceProvider.java:89)
        at org.apache.sling.resourceresolver.impl.helper.ResourceResolverControl.refresh(ResourceResolverControl.java:155)
        at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.refresh(ResourceResolverImpl.java:1340)
        at org.apache.sling.resourceresolver.impl.mapping.MapEntries.refreshResolverIfNecessary(MapEntries.java:636)
        at org.apache.sling.resourceresolver.impl.mapping.MapEntries.addResource(MapEntries.java:266)
        at org.apache.sling.resourceresolver.impl.mapping.MapEntries.onChange(MapEntries.java:718)
        at org.apache.sling.resourceresolver.impl.observation.BasicObservationReporter.reportChanges(BasicObservationReporter.java:210)
        at org.apache.sling.jcr.resource.internal.JcrResourceListener.onEvent(JcrResourceListener.java:155)
{noformat}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)