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