[ 
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)

Reply via email to