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();