[ 
https://issues.apache.org/jira/browse/OAK-6459?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Deparvu reassigned OAK-6459:
---------------------------------

       Assignee: Alex Deparvu
       Priority: Minor  (was: Major)
    Component/s: core

> VisibleValidator duplicated in chain for each hierarchy level
> -------------------------------------------------------------
>
>                 Key: OAK-6459
>                 URL: https://issues.apache.org/jira/browse/OAK-6459
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: core
>            Reporter: Alexander Klimetschek
>            Assignee: Alex Deparvu
>            Priority: Minor
>
> VisibleValidator gets chained multiple times, while each one working on the 
> same NodeState will run the exact same check, NodeStateUtils.isHidden(name). 
> One execution should be enough.
> Below stacktrace has 9 instances chained. Code for propertyAdded as in the 
> stacktrace below in 1.4 is 
> [here|https://github.com/apache/jackrabbit-oak/blob/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/VisibleValidator.java#L82-L83].
>  
> Also found a similar stacktrace in OAK-6358 with 12 instances.
> This might be a small optimization to make, especially if there are many 
> properties added, and if there is apparently another variable factor in how 
> many instances there are.
> According to [~stillalex]:
> This is directly related to the hierarchy level (so if a change is 5 levels 
> deep, you'll see 5 validators chained there) and the short fix is to fix 
> calls [creating new 
> VisibleValidators|https://github.com/apache/jackrabbit-oak/blob/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/spi/commit/VisibleValidator.java#L44]
>  to unwrap if needed, like 
> [here|https://github.com/apache/jackrabbit-oak/blob/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/spi/commit/VisibleEditor.java#L38].
> {noformat}
> Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: 
> OakAccess0000: Access denied
>       at 
> org.apache.jackrabbit.oak.security.authorization.permission.PermissionValidator.checkPermissions(PermissionValidator.java:242)
>       at 
> org.apache.jackrabbit.oak.security.authorization.permission.PermissionValidator.propertyAdded(PermissionValidator.java:112)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.VisibleValidator.propertyAdded(VisibleValidator.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.CompositeEditor.propertyAdded(CompositeEditor.java:83)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.propertyAdded(EditorDiff.java:82)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareProperties(SegmentNodeState.java:593)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:491)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:531)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:483)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:584)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:483)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:584)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:483)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compareBranch(MapRecord.java:561)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:466)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:584)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:483)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:584)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:483)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compareBranch(MapRecord.java:561)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:466)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:584)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord$2.childNodeChanged(MapRecord.java:399)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord$3.childNodeChanged(MapRecord.java:440)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:483)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:432)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:390)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:584)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:414)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:584)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:148)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:414)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:584)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorDiff.process(EditorDiff.java:52)
>       at 
> org.apache.jackrabbit.oak.spi.commit.EditorHook.processCommit(EditorHook.java:54)
>       at 
> org.apache.jackrabbit.oak.spi.commit.CompositeHook.processCommit(CompositeHook.java:61)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore$Commit.prepare(SegmentNodeStore.java:502)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore$Commit.optimisticMerge(SegmentNodeStore.java:525)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore$Commit.execute(SegmentNodeStore.java:581)
>       at 
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore.merge(SegmentNodeStore.java:238)
>       at 
> org.apache.jackrabbit.oak.spi.state.ProxyNodeStore.merge(ProxyNodeStore.java:43)
>       at 
> org.apache.jackrabbit.oak.core.MutableRoot.commit(MutableRoot.java:247)
>       at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.commit(SessionDelegate.java:347)
>       at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:494)
>       ... 126 common frames omitted
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to