Cannot checkout node
predatorro666 Oct 20, 2017 8:06 AMHi everyone,
After migration from Modeshape 4 to 5, we found the next strange behavior in versioning:
Saying we have the next structure:
[kn:node] > kn:base, mix:etag, mix:lockable, mix:referenceable, nt:unstructured [kn:versionableNode] > kn:node, mix:versionable [kn:folder] > kn:base, mix:etag, mix:lockable, mix:referenceable, nt:unstructured, mix:versionable [kn:category] > kn:versionableNode - kn:id (STRING) + kn:caAttributes (kn:caAttributes) ... [kn:categoriesFolder] > kn:folder + kn:categoryItem (kn:category) SNS [kn:kbase] > kn:versionableNode - kn:id (STRING) + kn:categories (kn:categoriesFolder) ...
Saying we have the next node with path
/03ebay_101/kn:categories/31b11ea9-5f40-48a4-a582-dd04285b0fe1_en
After accessing/writing to the root node (kn:kbase) it is impossible to change child node (kn:category) because of exception:
'/03ebay_101/kn:categories/31b11ea9-5f40-48a4-a582-dd04285b0fe1_en' (or its nearest versionable ancestor) is checked in, preventing this action
Trying to checkout this node has no effect
session.getWorkspace().getVersionManager().checkout(itemNode.getPath())
but
session.getWorkspace().getVersionManager().isCheckedOut(itemNode.getPath())
give us 'false'
All the root nodes, which I suppose, must be the only ancestors for the current node, are checkedOut. We can see it when request parents one by one:
session.getWorkspace().getVersionManager().isCheckedOut(itemNode.getParent().getParent().getParent().getPath()) //root node - '/'
session.getWorkspace().getVersionManager().isCheckedOut(itemNode.getParent().getParent().getPath()) //kn:kbase node - '/03ebay_101/'
session.getWorkspace().getVersionManager().isCheckedOut(itemNode.getParent().getPath()) ///kn:categoriesFolder' - '03ebay_101/kn:categories/'
All operations are made under one session which is connected to the web-request. Turning off transactions have no effect.
After some tracing I see that check out is happened here
org.modeshape.jcr.JcrVersionManager#checkout(org.modeshape.jcr.AbstractJcrNode)
versionable.setProperty(versionSession, props.create(JcrLexicon.IS_CHECKED_OUT, Boolean.TRUE));
IsCheckedOut method is here
org.modeshape.jcr.AbstractJcrNode#isCheckedOut
And here we have different session cache where related node has property IsCheckedOut = false