[ 
https://issues.apache.org/jira/browse/JCR-3006?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13114758#comment-13114758
 ] 

Julian Reschke commented on JCR-3006:
-------------------------------------

OK, it seems there are two straightforward ways to fix this, depending how 
important we feel it is to parallelize user creation.

(1) serialize all user/group creation, or

(2) try a retry strategy.

(2) seems to be a bit shaky due to session ownership. (1) seems to be simple.

Opinions?

> 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
>
>
> 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.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to