[ https://issues.apache.org/jira/browse/OAK-3169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14647689#comment-14647689 ]
Thomas Mueller commented on OAK-3169: ------------------------------------- The fix is simple, but we need a good test case. > rep:versionablePaths mixin not always set for versionable nodes > --------------------------------------------------------------- > > Key: OAK-3169 > URL: https://issues.apache.org/jira/browse/OAK-3169 > Project: Jackrabbit Oak > Issue Type: Bug > Components: core > Reporter: Thomas Mueller > Assignee: Thomas Mueller > Fix For: 1.4, 1.2.4, 1.3.4, 1.0.18 > > > For versionable nodes, the "rep:VersionablePaths" mixin and the > "\{workspaceName\}" property is sometimes not set. > The problem seems to be that VersionablePathHook terminates processing too > early if it encounters a hidden node: > {noformat} > public boolean childNodeChanged(String name, NodeState before, NodeState > after) { > if (NodeStateUtils.isHidden(name)) { > // stop comparison > return false; /// <<<<< bug > } > .... > } > {noformat} > Because the method returns false, processing is completely stopped, that > includes processing of sibling nodes and further processing on any parent > node. > The bugfix seems to be "return true" instead of "return false". > Remark: It's quite easy to make this mistake. Maybe we should consider > changing NodeStateDiff, and get rid of the return value for this method > (change all methods of NodeStateDiff to void). For the "stop any further > processing" case, we could use fast exception handling for flow control, for > example: > {noformat} > public interface NodeStateDiff { > // throw this exception to stop any further processing > Exception STOP_PROCESSING = new Exception(); > } > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)