[
https://issues.apache.org/jira/browse/OAK-3169?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Mueller updated OAK-3169:
--------------------------------
Affects Version/s: 1.0.16
1.3.3
1.3.2
1.0.17
> 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
> Affects Versions: 1.2.3, 1.0.16, 1.3.3, 1.3.2, 1.0.17, 1.0.18
> Reporter: Thomas Mueller
> Assignee: Thomas Mueller
> Fix For: 1.2.4, 1.3.4, 1.0.19
>
> Attachments: OAK-3169.patch
>
>
> 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)