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/22 09:30:44 UTC
[jira] [Resolved] (SLING-6542) MapEntries' concurrent session
access broken
[ https://issues.apache.org/jira/browse/SLING-6542?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stefan Egli resolved SLING-6542.
--------------------------------
Resolution: Fixed
patch plus a test case added to trunk: http://svn.apache.org/viewvc?rev=1783987&view=rev
> 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
> Assignee: Stefan Egli
> Priority: Critical
> Fix For: Resource Resolver 1.5.14
>
> Attachments: SLING-6542.patch
>
>
> 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)