Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
Resource Resolver 1.5.0
-
None
Description
MapEntries uses a shared session. To avoid concurrent access it uses a Lock (ReentrantLock) "initializing". With SLING-6131 (to be precise here) 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:
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)
- thread 2:
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)
Attachments
Attachments
Issue Links
- is broken by
-
SLING-6131 MapEntries: Invalid logic around added/changed/removed property names
- Closed