[
https://issues.apache.org/jira/browse/JCR-3006?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13115523#comment-13115523
]
Julian Reschke commented on JCR-3006:
-------------------------------------
Note the current patch will not solve (completely) the problem in clustered
installations.
Alternatives:
1) JCR lock on parent node: will prevent other changes in principals, such as
changing properties, also that node is not lockable right now
2) "lock" file, used to serialize access
3) if the common modus operandi is the "autoSave" mode, the createUser code
could indeed do a retry after refreshing the session.
> UserManager: concurrent user creation using same intermediate path fails
> ------------------------------------------------------------------------
>
> Key: JCR-3006
> URL: https://issues.apache.org/jira/browse/JCR-3006
> Project: Jackrabbit Content Repository
> Issue Type: Bug
> Components: security
> Affects Versions: 2.2.7
> Reporter: Stefan Guggisberg
> Attachments: ConcurrentCreateUserTest.java,
> ConcurrentCreateUserTest.java, ConcurrentCreateUserTest.java, JCR-3006.patch
>
>
> concurrently creating users using same intermediate path fails with "node ...
> has been modified externally".
> the problem is the intermediate path. if it doesn't exist multiple threads
> try to create it concurrently:
> o.a.jackrabbit.core.security.user.UserManagerImpl, line 1310ff:
> String[] segmts = defaultPath.split("/");
> NodeImpl folder = (NodeImpl) session.getRootNode();
> String authRoot = (isGroup) ? groupsPath : usersPath;
> for (String segment : segmts) {
> if (segment.length() < 1) {
> continue;
> }
> if (folder.hasNode(segment)) {
> folder = (NodeImpl) folder.getNode(segment);
> if (Text.isDescendantOrEqual(authRoot, folder.getPath())
> &&
> !folder.isNodeType(NT_REP_AUTHORIZABLE_FOLDER)) {
> throw new ConstraintViolationException("Invalid
> intermediate path. Must be of type rep:AuthorizableFolder.");
> }
> } else {
> Node parent = folder;
> folder = addNode(folder, session.getQName(segment),
> NT_REP_AUTHORIZABLE_FOLDER);
> }
> }
> the attached test case illustrates this issue/
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira