[ 
https://issues.apache.org/jira/browse/JCR-2129?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Martijn Hendriks updated JCR-2129:
----------------------------------

    Attachment: repository.xml
                InconsistencyTest.java

> Prevent data inconsistencies due to missed merges in the 
> SharedItemStateManager
> -------------------------------------------------------------------------------
>
>                 Key: JCR-2129
>                 URL: https://issues.apache.org/jira/browse/JCR-2129
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core
>    Affects Versions: core 1.4.5, 2.0.0
>            Reporter: Martijn Hendriks
>            Priority: Critical
>         Attachments: InconsistencyTest.java, repository.xml
>
>
> The SharedItemStateManager.Update class's begin method tests whether states 
> in the given local ChangeLog are stale. If so, it tries to merge the changes 
> to the new persisted state. It does this by comparing the modCount of state 
> instances for non-transient states. There is a race between two threads that 
> call save such that sometimes this test fails and states are not merged when 
> they should be. As a result, the data in the repository can become corrupt 
> and, for instance, it becomes impossible to start Jackrabbit or remove 
> certain nodes.
> Analysis: persisted state information, including modCount, is pushed down 
> from another thread while a local ChangeLog is being constructed. The 
> increased modCount thus appears in the local ChangeLog and the SharedISM 
> falsely assumes that the state in the local ChangeLog needs no merging 
> (isStale test).
> Reproduction:
> The attached test program contains steps to reproduce the issue (see comments 
> of the testInconsistency1 and testInconsistency2 methods).

-- 
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