Index: oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentWriteACLTest.java =================================================================== --- oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentWriteACLTest.java (revision 1574819) +++ oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentWriteACLTest.java (working copy) @@ -19,6 +19,7 @@ import java.util.Random; +import javax.jcr.InvalidItemStateException; import javax.jcr.Node; import javax.jcr.Session; import javax.jcr.security.AccessControlEntry; @@ -73,28 +74,30 @@ Session session = null; try { session = loginWriter(); - for (int i=0; i<10; i++) { + for (int i=0; i<20; i++) { session.refresh(false); int a = random.nextInt(NODE_COUNT); int b = random.nextInt(NODE_COUNT); String path = "/" + ROOT_NODE_NAME + "/node" + a + "/node" + b; AccessControlManager acMgr = session.getAccessControlManager(); JackrabbitAccessControlList acl = AccessControlUtils.getAccessControlList(session, path); - Privilege[] privileges = new Privilege[] { - acMgr.privilegeFromName(Privilege.JCR_READ), - acMgr.privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL) - }; - if (acl.addAccessControlEntry(EveryonePrincipal.getInstance(), privileges)) { + if (acl.isEmpty()) { + Privilege[] privileges = new Privilege[] { + acMgr.privilegeFromName(Privilege.JCR_READ), + acMgr.privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL) + }; + if (acl.addAccessControlEntry(EveryonePrincipal.getInstance(), privileges)) { + acMgr.setPolicy(path, acl); + } + } else { + for (AccessControlEntry ace: acl.getAccessControlEntries()) { + acl.removeAccessControlEntry(ace); + } acMgr.setPolicy(path, acl); } session.save(); - for (AccessControlEntry ace: acl.getAccessControlEntries()) { - acl.removeAccessControlEntry(ace); - } - acMgr.setPolicy(path, acl); - session.save(); } - } catch (Exception e) { + } catch (InvalidItemStateException e) { // ignore } finally { if (session != null) {