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
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