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.

Reply via email to