Author: angela
Date: Fri Feb  2 14:58:03 2018
New Revision: 1822969

URL: http://svn.apache.org/viewvc?rev=1822969&view=rev
Log:
OAK-7238 : Benchmark : random read for different sets of principals

Added:
    
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java
      - copied, changed from r1822848, 
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyUserReadTest.java
Modified:
    
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java

Modified: 
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java?rev=1822969&r1=1822968&r2=1822969&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
 Fri Feb  2 14:58:03 2018
@@ -361,6 +361,10 @@ public class BenchmarkRunner {
                     itemsToRead.value(options),
                     report.value(options),
                     randomUser.value(options)),
+            new ReadWithMembershipTest(
+                    itemsToRead.value(options),
+                    report.value(options),
+                    numberOfGroups.value(options)),
             new ConcurrentTraversalTest(
                     runAsAdmin.value(options),
                     itemsToRead.value(options),

Copied: 
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java
 (from r1822848, 
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyUserReadTest.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java?p2=jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java&p1=jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyUserReadTest.java&r1=1822848&r2=1822969&rev=1822969&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyUserReadTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java
 Fri Feb  2 14:58:03 2018
@@ -16,30 +16,36 @@
  */
 package org.apache.jackrabbit.oak.benchmark;
 
-import javax.jcr.Node;
+import java.util.UUID;
+import javax.jcr.Repository;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
-import javax.jcr.security.Privilege;
 
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import 
org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
-import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
-
-/**
- * UserTest... TODO
- */
-public class ManyUserReadTest extends ReadDeepTreeTest {
-
-    private final int numberOfUsers = 1000;
-    private final int numberOfMembers = 10;
-    private final boolean randomUser;
-
-    protected ManyUserReadTest(boolean runAsAdmin, int itemsToRead, boolean 
doReport, boolean randomUser) {
-        super(runAsAdmin, itemsToRead, doReport, !randomUser);
-        this.randomUser = randomUser;
+import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.fixture.JcrCreator;
+import org.apache.jackrabbit.oak.fixture.OakRepositoryFixture;
+import org.apache.jackrabbit.oak.fixture.RepositoryFixture;
+import org.apache.jackrabbit.oak.jcr.Jcr;
+import org.apache.jackrabbit.oak.security.internal.SecurityProviderBuilder;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+
+public class ReadWithMembershipTest extends ReadDeepTreeTest {
+
+    private final String userId;
+    private final int membershipSize;
+
+    protected ReadWithMembershipTest(int itemsToRead, boolean doReport, int 
membershipSize) {
+        super(false, itemsToRead, doReport, false);
+        userId = "user-" + UUID.randomUUID();
+        this.membershipSize = membershipSize;
     }
 
     @Override
@@ -47,45 +53,16 @@ public class ManyUserReadTest extends Re
         super.createDeepTree();
 
         UserManager userManager = ((JackrabbitSession) 
adminSession).getUserManager();
-        for (int i = 0; i < numberOfUsers; i++) {
-            User user = userManager.createUser("user"+i, "user"+i);
-            AccessControlUtils.addAccessControlEntry(adminSession, 
user.getPath(), user.getPrincipal(), new String[] {Privilege.JCR_ALL}, true);
-
-            Node userNode = adminSession.getNode(user.getPath());
-            Node n = userNode.addNode("public");
-            n.setProperty("prop", "value");
-            String path = n.getPath();
-            AccessControlUtils.addAccessControlEntry(adminSession, path, 
EveryonePrincipal.getInstance(), new String[]{Privilege.JCR_READ}, true);
-            allPaths.add(path);
-            allPaths.add(path + "/prop");
+        User user = userManager.createUser(userId, userId);
 
+        for (int i = 0; i < membershipSize; i++) {
             Group g = userManager.createGroup("group" + i);
-            AccessControlUtils.addAccessControlEntry(adminSession, 
g.getPath(), g.getPrincipal(), new String[] {Privilege.JCR_READ}, true);
+            g.addMember(user);
 
-            n = userNode.addNode("semi");
-            n.setProperty("prop", "value");
-            path = n.getPath();
-            AccessControlUtils.addAccessControlEntry(adminSession, path, 
g.getPrincipal(), new String[]{Privilege.JCR_READ}, true);
-            allPaths.add(path);
-            allPaths.add(path + "/prop");
+            AccessControlUtils.addAccessControlEntry(adminSession, 
g.getPath(), g.getPrincipal(), new String[] {PrivilegeConstants.JCR_READ}, 
true);
+            AccessControlUtils.addAccessControlEntry(adminSession, 
testRoot.getPath(), g.getPrincipal(), new String[] 
{PrivilegeConstants.JCR_READ}, true);
 
-            userNode.addNode("private").setProperty("prop", "value");
-            adminSession.save();
         }
-        System.out.println("Setup "+numberOfUsers+" users");
-
-        for (int i = 0; i < numberOfUsers; i++) {
-            Group g = (Group) userManager.getAuthorizable("group"+i);
-            for (int j = 0; j < numberOfMembers; j++) {
-                g.addMember(userManager.getAuthorizable("user" + getIndex()));
-            }
-            adminSession.save();
-        }
-
-        System.out.println("Setup group membership ("+numberOfMembers+" 
members per group)");
-        System.out.println("All Paths : " + allPaths.size());
-
-        AccessControlUtils.denyAllToEveryone(adminSession, 
"/rep:security/rep:authorizables");
         adminSession.save();
 
     }
@@ -96,16 +73,23 @@ public class ManyUserReadTest extends Re
     }
 
     protected Session getTestSession() {
-        if (runAsAdmin) {
-            return loginWriter();
-        } else {
-            String userId = (randomUser) ? "user"+getIndex() : "user1";
-            SimpleCredentials sc = new SimpleCredentials(userId, 
userId.toCharArray());
-            return login(sc);
-        }
+        SimpleCredentials sc = new SimpleCredentials(userId, 
userId.toCharArray());
+        return login(sc);
     }
 
-    private int getIndex() {
-        return (int) Math.floor(numberOfUsers * Math.random());
+    @Override
+    protected Repository[] createRepository(RepositoryFixture fixture) throws 
Exception {
+        if (fixture instanceof OakRepositoryFixture) {
+            return ((OakRepositoryFixture) fixture).setUpCluster(1, new 
JcrCreator() {
+                @Override
+                public Jcr customize(Oak oak) {
+                    ConfigurationParameters params = 
ConfigurationParameters.of("eagerCacheSize", 100);
+                    SecurityProvider securityProvider = new 
SecurityProviderBuilder().with(ConfigurationParameters.of(AuthorizationConfiguration.NAME,
 params)).build();
+                    return new Jcr(oak).with(securityProvider);
+                }
+            });
+        } else {
+            throw new IllegalArgumentException("Fixture " + fixture + " not 
supported for this benchmark.");
+        }
     }
 }
\ No newline at end of file


Reply via email to