You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Tobias Bocanegra (JIRA)" <ji...@apache.org> on 2007/03/01 14:41:50 UTC

[jira] Created: (JCR-772) Merging between workspaces fails

Merging between workspaces fails
--------------------------------

                 Key: JCR-772
                 URL: https://issues.apache.org/jira/browse/JCR-772
             Project: Jackrabbit
          Issue Type: Bug
          Components: versioning
    Affects Versions: 1.2.2, 1.2.1, 1.1.1, 1.1, 1.0.1, 1.0, 0.9
            Reporter: Tobias Bocanegra
         Assigned To: Tobias Bocanegra


I have setup 2 workspaces in Jackrabbit.  I have a preview and a production
workspace.  These workspaces keep a tree of menu nodes that can have content
associated to those menus.  Each node is of type nt:unstructured and has
mixin types of versionable, lockable, and referenceable.

In our system you are only allowed to edit nodes in the preview workspace.
So what I do is when you go to edit a node we check it out, allow for edits,
then check it in.  This creates a new version on the node.  Then we merge
the node up to the production workspace.  All nodes in the production
workspace are always checked in and not locked.

When I go to do a merge I run into problems when I try to merge a node that
has children.  Lets say I have node A with children B and C.  These all have
the same node types as stated above.  I make a change to a property in Node
A in the preview workspace and now want to merge it into the production
workspace (where it exists already).  Here is the code that is run:

Node destNode = destSession.getNodeByUUID(getUUID());
NodeIterator ni = destNode.merge("preview", true);

Now this fails in the ItemImpl.internalRemove() method with a
VersionException of cannot remove a child of a checked-in node.  Here is the
trace for the error:
at org.apache.jackrabbit.core.ItemImpl.internalRemove(ItemImpl.java:848)
at org.apache.jackrabbit.core.NodeImpl.internalMerge(NodeImpl.java:3693)
at org.apache.jackrabbit.core.NodeImpl.internalMerge(NodeImpl.java:3587)
at org.apache.jackrabbit.core.NodeImpl.merge(NodeImpl.java:3003)

Now if I understand correctly when doing a merge the node that you are
trying to merge to needs to be older then the source node and the
destination node cannot be checked out (NodeImpl.doMergeTest() is where I
figured that out).  But then when I step through further in the merge in
NodeImpl it gets all the nodes of the src node and retrieves the same
children in the destination workspace and then tries to remove those
destination children but it can't remove those children b/c the parent node
(which is node A in the production workspace) is not checked out, but
according to the mergeTest it can't be checked out or the merge won't even
begin.

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


[jira] Resolved: (JCR-772) Merging between workspaces fails

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

Tobias Bocanegra resolved JCR-772.
----------------------------------

       Resolution: Fixed
    Fix Version/s: 1.3

fixed.

> Merging between workspaces fails
> --------------------------------
>
>                 Key: JCR-772
>                 URL: https://issues.apache.org/jira/browse/JCR-772
>             Project: Jackrabbit
>          Issue Type: Bug
>          Components: versioning
>    Affects Versions: 0.9, 1.0, 1.0.1, 1.1, 1.1.1, 1.2.1, 1.2.2
>            Reporter: Tobias Bocanegra
>         Assigned To: Tobias Bocanegra
>             Fix For: 1.3
>
>
> I have setup 2 workspaces in Jackrabbit.  I have a preview and a production
> workspace.  These workspaces keep a tree of menu nodes that can have content
> associated to those menus.  Each node is of type nt:unstructured and has
> mixin types of versionable, lockable, and referenceable.
> In our system you are only allowed to edit nodes in the preview workspace.
> So what I do is when you go to edit a node we check it out, allow for edits,
> then check it in.  This creates a new version on the node.  Then we merge
> the node up to the production workspace.  All nodes in the production
> workspace are always checked in and not locked.
> When I go to do a merge I run into problems when I try to merge a node that
> has children.  Lets say I have node A with children B and C.  These all have
> the same node types as stated above.  I make a change to a property in Node
> A in the preview workspace and now want to merge it into the production
> workspace (where it exists already).  Here is the code that is run:
> Node destNode = destSession.getNodeByUUID(getUUID());
> NodeIterator ni = destNode.merge("preview", true);
> Now this fails in the ItemImpl.internalRemove() method with a
> VersionException of cannot remove a child of a checked-in node.  Here is the
> trace for the error:
> at org.apache.jackrabbit.core.ItemImpl.internalRemove(ItemImpl.java:848)
> at org.apache.jackrabbit.core.NodeImpl.internalMerge(NodeImpl.java:3693)
> at org.apache.jackrabbit.core.NodeImpl.internalMerge(NodeImpl.java:3587)
> at org.apache.jackrabbit.core.NodeImpl.merge(NodeImpl.java:3003)
> Now if I understand correctly when doing a merge the node that you are
> trying to merge to needs to be older then the source node and the
> destination node cannot be checked out (NodeImpl.doMergeTest() is where I
> figured that out).  But then when I step through further in the merge in
> NodeImpl it gets all the nodes of the src node and retrieves the same
> children in the destination workspace and then tries to remove those
> destination children but it can't remove those children b/c the parent node
> (which is node A in the production workspace) is not checked out, but
> according to the mergeTest it can't be checked out or the merge won't even
> begin.

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


[jira] Updated: (JCR-772) Merging between workspaces fails

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

Jukka Zitting updated JCR-772:
------------------------------

    Fix Version/s:     (was: 1.3)
                   1.2.3

Tagging this still for 1.2.3.

> Merging between workspaces fails
> --------------------------------
>
>                 Key: JCR-772
>                 URL: https://issues.apache.org/jira/browse/JCR-772
>             Project: Jackrabbit
>          Issue Type: Bug
>          Components: versioning
>    Affects Versions: 0.9, 1.0, 1.0.1, 1.1, 1.1.1, 1.2.1, 1.2.2
>            Reporter: Tobias Bocanegra
>         Assigned To: Tobias Bocanegra
>             Fix For: 1.2.3
>
>
> I have setup 2 workspaces in Jackrabbit.  I have a preview and a production
> workspace.  These workspaces keep a tree of menu nodes that can have content
> associated to those menus.  Each node is of type nt:unstructured and has
> mixin types of versionable, lockable, and referenceable.
> In our system you are only allowed to edit nodes in the preview workspace.
> So what I do is when you go to edit a node we check it out, allow for edits,
> then check it in.  This creates a new version on the node.  Then we merge
> the node up to the production workspace.  All nodes in the production
> workspace are always checked in and not locked.
> When I go to do a merge I run into problems when I try to merge a node that
> has children.  Lets say I have node A with children B and C.  These all have
> the same node types as stated above.  I make a change to a property in Node
> A in the preview workspace and now want to merge it into the production
> workspace (where it exists already).  Here is the code that is run:
> Node destNode = destSession.getNodeByUUID(getUUID());
> NodeIterator ni = destNode.merge("preview", true);
> Now this fails in the ItemImpl.internalRemove() method with a
> VersionException of cannot remove a child of a checked-in node.  Here is the
> trace for the error:
> at org.apache.jackrabbit.core.ItemImpl.internalRemove(ItemImpl.java:848)
> at org.apache.jackrabbit.core.NodeImpl.internalMerge(NodeImpl.java:3693)
> at org.apache.jackrabbit.core.NodeImpl.internalMerge(NodeImpl.java:3587)
> at org.apache.jackrabbit.core.NodeImpl.merge(NodeImpl.java:3003)
> Now if I understand correctly when doing a merge the node that you are
> trying to merge to needs to be older then the source node and the
> destination node cannot be checked out (NodeImpl.doMergeTest() is where I
> figured that out).  But then when I step through further in the merge in
> NodeImpl it gets all the nodes of the src node and retrieves the same
> children in the destination workspace and then tries to remove those
> destination children but it can't remove those children b/c the parent node
> (which is node A in the production workspace) is not checked out, but
> according to the mergeTest it can't be checked out or the merge won't even
> begin.

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