[ https://issues.apache.org/jira/browse/OAK-3169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14647707#comment-14647707 ]
angela edited comment on OAK-3169 at 7/30/15 2:44 PM: ------------------------------------------------------ [~tmueller], thanks for spotting. as far as test-cases are concerned: at the Oak level there are quite some security related tests that create hidden {{Tree}}. so, that should be feasible if the default security setup is used later on to run the test, which adds a node with {{mix:versionable}} to trigger the {{VersionablePathHook}}. was (Author: anchela): [~tmueller], thanks for spotting. as far as test-cases are concerned: at the Oak level there are quite some security related tests that create hidden {{Tree}}s. so, that should be feasible if the default security setup is used later on to run the test, which adds a node with {{mix:versionable}} to trigger the {{VersionablePathHook}}. > 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)