[
https://issues.apache.org/jira/browse/OAK-1370?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13886679#comment-13886679
]
Michael Dürig commented on OAK-1370:
------------------------------------
Looking through the JCR API I came up with the following places returning an
iterator:
{code}
VersionManager#merge(java.lang.String, java.lang.String, boolean)
VersionManager#merge(java.lang.String, java.lang.String, boolean, boolean)
VersionManager#merge(javax.jcr.Node)
VersionHistory#getAllLinearVersions
VersionHistory#getAllVersions
VersionHistory#getAllLinearFrozenNodes
VersionHistory#getAllFrozenNodes
NodeType#getSubtypes
NodeType#getDeclaredSubtypes
NodeTypeManager#getAllNodeTypes
NodeTypeManager#getPrimaryNodeTypes
NodeTypeManager#getMixinNodeTypes
NodeTypeManager#registerNodeTypes
QueryResult#getRows
QueryResult#getNodes
AccessControlManager#getApplicablePolicies
{code}
We need to figure out which of these are problematic and need the same kind of
wrapping I did for those returned by {{NodeImpl}}.
> Guard against concurrent read access through the same session
> -------------------------------------------------------------
>
> Key: OAK-1370
> URL: https://issues.apache.org/jira/browse/OAK-1370
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: core
> Reporter: Michael Dürig
> Assignee: Michael Dürig
> Fix For: 0.17
>
>
> OAK-687 synchronized {{SessionDelegate#perform}} to protect Oak internal data
> structures from becoming corrupt in the case a session is accessed
> concurrently from multiple threads. Turns out however, that there are more
> cases we didn't consider so far: e.g. concurrently iterating over iterators
> returned by {{Node.getNodes()}} is not captured by this mechanism.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)