ItemStateCache in SharedItemStateManager not properly synchronized when using
FineGrainedISMLocking
---------------------------------------------------------------------------------------------------
Key: JCR-1274
URL: https://issues.apache.org/jira/browse/JCR-1274
Project: Jackrabbit
Issue Type: Bug
Components: jackrabbit-core
Reporter: Marcel Reutegger
Priority: Minor
When using FineGrainedISMLocking the ItemStateCache in SharedItemStateManager
is not sufficiently synchronized.
FineGrainedISMLocking allows a thread to read from the cache while a write is
in progress. After changes are committed the cache is updated and may interfere
with reading.
Running ConcurrentCheckinMixedTransactionTest with 200 threads results in
endless loops for several threads. Example:
"Thread-1136" prio=6 tid=0x2b9a5c00 nid=0x278 runnable [0x2fa2f000..0x2fa2fb94]
java.lang.Thread.State: RUNNABLE
at
org.apache.commons.collections.map.AbstractHashedMap.getEntry(AbstractHashedMap.java:433)
at
org.apache.commons.collections.map.AbstractReferenceMap.getEntry(AbstractReferenceMap.java:404)
at
org.apache.commons.collections.map.AbstractReferenceMap.containsKey(AbstractReferenceMap.java:200)
at
org.apache.jackrabbit.core.state.ItemStateMap.contains(ItemStateMap.java:66)
at
org.apache.jackrabbit.core.state.ItemStateReferenceCache.isCached(ItemStateReferenceCache.java:91)
at
org.apache.jackrabbit.core.state.SharedItemStateManager.hasItemState(SharedItemStateManager.java:274)
at
org.apache.jackrabbit.core.state.LocalItemStateManager.hasItemState(LocalItemStateManager.java:179)
at
org.apache.jackrabbit.core.state.XAItemStateManager.hasItemState(XAItemStateManager.java:252)
at
org.apache.jackrabbit.core.version.NodeStateEx.getOrCreatePropertyState(NodeStateEx.java:246)
at
org.apache.jackrabbit.core.version.NodeStateEx.setPropertyValues(NodeStateEx.java:228)
at
org.apache.jackrabbit.core.version.NodeStateEx.setPropertyValue(NodeStateEx.java:201)
at
org.apache.jackrabbit.core.version.InternalFrozenNodeImpl.checkin(InternalFrozenNodeImpl.java:273)
at
org.apache.jackrabbit.core.version.InternalFrozenNodeImpl.checkin(InternalFrozenNodeImpl.java:249)
at
org.apache.jackrabbit.core.version.InternalVersionHistoryImpl.checkin(InternalVersionHistoryImpl.java:483)
at
org.apache.jackrabbit.core.version.AbstractVersionManager.checkin(AbstractVersionManager.java:377)
at
org.apache.jackrabbit.core.version.XAVersionManager.checkin(XAVersionManager.java:369)
at
org.apache.jackrabbit.core.version.XAVersionManager.checkin(XAVersionManager.java:158)
at org.apache.jackrabbit.core.NodeImpl.checkin(NodeImpl.java:2993)
at
org.apache.jackrabbit.core.ConcurrentCheckinMixedTransactionTest$1$1.execute(ConcurrentCheckinMixedTransactionTest.java:67)
at
org.apache.jackrabbit.core.AbstractConcurrencyTest$Executor.run(AbstractConcurrencyTest.java:110)
at java.lang.Thread.run(Thread.java:619)
When DefaultISMLocking is used this situation should never occur, because the
SharedItemStateManager is completely locked when changes are committed.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.