You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2016/05/11 14:36:16 UTC
svn commit: r1743380 -
/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java
Author: mreutegg
Date: Wed May 11 14:36:15 2016
New Revision: 1743380
URL: http://svn.apache.org/viewvc?rev=1743380&view=rev
Log:
OAK-4361: Reduce performance impact of observation ACFilter
Add additional parameters to tweak test behaviour
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java?rev=1743380&r1=1743379&r2=1743380&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java Wed May 11 14:36:15 2016
@@ -22,10 +22,18 @@ import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.Privilege;
+import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.api.security.user.UserManager;
+import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
+import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import static javax.jcr.observation.Event.NODE_ADDED;
import static javax.jcr.observation.Event.NODE_MOVED;
@@ -42,6 +50,9 @@ public class ConcurrentCreateNodesTest e
protected static final String ROOT_NODE_NAME = "test" + TEST_ID;
private static final int WORKER_COUNT = Integer.getInteger("workerCount", 20);
private static final int LISTENER_COUNT = Integer.getInteger("listenerCount", 0);
+ private static final boolean NON_ADMIN_LISTENER = Boolean.getBoolean("nonAdminListener");
+ private static final String LISTENER_PATH = System.getProperty("listenerPath", "/");
+ private static final int ACL_COUNT = Integer.getInteger("aclCount", 0);
private static final int NODE_COUNT_LEVEL2 = 50;
private static final String NODE_TYPE = System.getProperty("nodeType", "nt:unstructured");
private static final boolean DISABLE_INDEX = Boolean.getBoolean("disableIndex");
@@ -68,14 +79,47 @@ public class ConcurrentCreateNodesTest e
for (int i = 1; i < WORKER_COUNT; i++) {
addBackgroundJob(new Writer(rootNode.getPath() + "/node" + i));
}
+ UserManager uMgr = ((JackrabbitSession) session).getUserManager();
+ String userId;
+ String password;
+ if (NON_ADMIN_LISTENER) {
+ userId = "user-" + System.currentTimeMillis();
+ password = "secret";
+ uMgr.createUser(userId, password);
+ session.save();
+ } else {
+ userId = "admin";
+ password = "admin";
+ }
+ createACLsForEveryone(session, ACL_COUNT);
+
for (int i = 0; i < LISTENER_COUNT; i++) {
- Session s = loginWriter();
+ Session s = login(new SimpleCredentials(userId, password.toCharArray()));
s.getWorkspace().getObservationManager().addEventListener(
- new Listener(), EVENT_TYPES, "/", true, null, null, false);
+ new Listener(), EVENT_TYPES, LISTENER_PATH, true, null, null, false);
}
writer = new Writer(rootNode.getPath() + "/node" + 0);
}
+ private void createACLsForEveryone(Session session, int numACLs)
+ throws RepositoryException {
+ AccessControlManager acMgr = session.getAccessControlManager();
+ Node listenHere = session.getRootNode().addNode("nodes-with-acl");
+ for (int i = 0; i < numACLs; i++) {
+ String path = listenHere.addNode("node-" + i).getPath();
+ JackrabbitAccessControlList acl = AccessControlUtils.getAccessControlList(session, path);
+ if (acl.isEmpty()) {
+ Privilege[] privileges = new Privilege[] {
+ acMgr.privilegeFromName(Privilege.JCR_READ)
+ };
+ if (acl.addAccessControlEntry(EveryonePrincipal.getInstance(), privileges)) {
+ acMgr.setPolicy(path, acl);
+ }
+ }
+ }
+ session.save();
+ }
+
private class Writer implements Runnable {
private final Session session = loginWriter();