You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Micah Whitacre (JIRA)" <ji...@apache.org> on 2009/02/03 20:33:59 UTC

[jira] Created: (JCR-1961) Improper Exception thrown on concurrent versioned node changes

Improper Exception thrown on concurrent versioned node changes
--------------------------------------------------------------

                 Key: JCR-1961
                 URL: https://issues.apache.org/jira/browse/JCR-1961
             Project: Jackrabbit Content Repository
          Issue Type: Bug
          Components: jackrabbit-core, versioning
    Affects Versions: core 1.4.8
         Environment: ubuntu 7.10 - the Gutsy Gibbon Sun JDK 1.5.0_13
            Reporter: Micah Whitacre


When two sessions connected through two separate repositories but backed by the same database make non conflicting changes to the same versioned node, an InvalidItemStateException is thrown.  I'll attach a test project that when built displays this error but essentially the code is the following:

        Node node1 = session1.getRootNode().getNode(baseNodeName);
        Node node2 = session2.getRootNode().getNode(baseNodeName);

        node1.checkout();
        Node child1 = node1.addNode(UUID.randomUUID().toString(), "nt:folder");
        child1.addMixin("mix:versionable");
        child1.checkout();
        node1.save();
        child1.checkin();
        node1.checkin();

        node2.checkout();
        Node child2 = node2.addNode(UUID.randomUUID().toString(), "nt:folder");
        child2.addMixin("mix:versionable");
        child2.checkout();
        node2.save();
        child2.checkin();
        node2.checkin();

The above code throws the following exception on the node2.checkout() call.

javax.jcr.InvalidItemStateException: de6b39ce-1ec6-43e2-ba0e-2966341e6aff/{http://www.jcp.org/jcr/1.0}predecessors has been modified externally
	at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1251)
	at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:897)
	at org.apache.jackrabbit.core.NodeImpl.checkout(NodeImpl.java:3004)
	at concurrent.version.test.ConcurrentVersionNodeAddTest.testConcurrentNodeAdd(ConcurrentVersionNodeAddTest.java:89)

or

javax.jcr.InvalidItemStateException: e384b5f6-0fcd-4853-962c-0085901cdcce/{http://www.jcp.org/jcr/1.0}isCheckedOut has been modified externally
	at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1251)
	at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:897)
	at org.apache.jackrabbit.core.NodeImpl.checkout(NodeImpl.java:3004)
	at concurrent.version.test.ConcurrentVersionNodeAddTest.testConcurrentNodeAdd(ConcurrentVersionNodeAddTest.java:89)

Based on JCR-584[1], it would seem that since the change to the node is being merged properly that the versioning should be able to merge its information properly as well.  The difference between the merging of nodes and this version exception is the fact that one is a node and other are properties.  Now while I would like properties to be merged nicely (it would eliminate some other problems I'm having), since I can't control conflicting changes in how the versioning is managed it seems appropriate that it should merge nicely.  

[1] -https://issues.apache.org/jira/browse/JCR-584


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (JCR-1961) Improper Exception thrown on concurrent versioned node changes

Posted by "Micah Whitacre (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/JCR-1961?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Micah Whitacre updated JCR-1961:
--------------------------------

    Attachment: concurrent-version-test.tar.gz

A test project that when ran through Maven will run a test that creates two different repository with the same underlying Derby database.  It then creates two sessions that make non conflicting changes to a version node.  However the versioning mechanism throws an exception being unable to merge its information.

> Improper Exception thrown on concurrent versioned node changes
> --------------------------------------------------------------
>
>                 Key: JCR-1961
>                 URL: https://issues.apache.org/jira/browse/JCR-1961
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core, versioning
>    Affects Versions: core 1.4.8
>         Environment: ubuntu 7.10 - the Gutsy Gibbon Sun JDK 1.5.0_13
>            Reporter: Micah Whitacre
>         Attachments: concurrent-version-test.tar.gz
>
>
> When two sessions connected through two separate repositories but backed by the same database make non conflicting changes to the same versioned node, an InvalidItemStateException is thrown.  I'll attach a test project that when built displays this error but essentially the code is the following:
>         Node node1 = session1.getRootNode().getNode(baseNodeName);
>         Node node2 = session2.getRootNode().getNode(baseNodeName);
>         node1.checkout();
>         Node child1 = node1.addNode(UUID.randomUUID().toString(), "nt:folder");
>         child1.addMixin("mix:versionable");
>         child1.checkout();
>         node1.save();
>         child1.checkin();
>         node1.checkin();
>         node2.checkout();
>         Node child2 = node2.addNode(UUID.randomUUID().toString(), "nt:folder");
>         child2.addMixin("mix:versionable");
>         child2.checkout();
>         node2.save();
>         child2.checkin();
>         node2.checkin();
> The above code throws the following exception on the node2.checkout() call.
> javax.jcr.InvalidItemStateException: de6b39ce-1ec6-43e2-ba0e-2966341e6aff/{http://www.jcp.org/jcr/1.0}predecessors has been modified externally
> 	at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1251)
> 	at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:897)
> 	at org.apache.jackrabbit.core.NodeImpl.checkout(NodeImpl.java:3004)
> 	at concurrent.version.test.ConcurrentVersionNodeAddTest.testConcurrentNodeAdd(ConcurrentVersionNodeAddTest.java:89)
> or
> javax.jcr.InvalidItemStateException: e384b5f6-0fcd-4853-962c-0085901cdcce/{http://www.jcp.org/jcr/1.0}isCheckedOut has been modified externally
> 	at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1251)
> 	at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:897)
> 	at org.apache.jackrabbit.core.NodeImpl.checkout(NodeImpl.java:3004)
> 	at concurrent.version.test.ConcurrentVersionNodeAddTest.testConcurrentNodeAdd(ConcurrentVersionNodeAddTest.java:89)
> Based on JCR-584[1], it would seem that since the change to the node is being merged properly that the versioning should be able to merge its information properly as well.  The difference between the merging of nodes and this version exception is the fact that one is a node and other are properties.  Now while I would like properties to be merged nicely (it would eliminate some other problems I'm having), since I can't control conflicting changes in how the versioning is managed it seems appropriate that it should merge nicely.  
> [1] -https://issues.apache.org/jira/browse/JCR-584

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.