Author: alexparvulescu Date: Tue May 9 14:41:55 2017 New Revision: 1794589
URL: http://svn.apache.org/viewvc?rev=1794589&view=rev Log: OAK-6177 AddMembersTest should add unique items to groups - added dedicated bench Added: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddUniqueMembersTest.java (with props) Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMemberTest.java jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java 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/AddMemberTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMemberTest.java?rev=1794589&r1=1794588&r2=1794589&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMemberTest.java (original) +++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMemberTest.java Tue May 9 14:41:55 2017 @@ -33,7 +33,7 @@ import org.apache.jackrabbit.oak.spi.xml * following parameters can be used to run the benchmark: * * - numberOfMembers : the number of members that should be added in the test run - * - batchSize : the number of users to be added as membes before {@link Session#save()} is called. + * - batchSize : the number of users to be added as members before {@link Session#save()} is called. * * In contrast to {@link AddMembersTest}, this benchmark will always call * {@link Group#addMember(Authorizable)}. @@ -47,6 +47,7 @@ public class AddMemberTest extends AddMe userPaths = new ArrayList<String>(numberOfMembers); } + @Override protected void createUsers(@Nonnull UserManager userManager) throws Exception { for (int i = 0; i <= numberOfMembers; i++) { String id = USER + i; Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java?rev=1794589&r1=1794588&r2=1794589&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java (original) +++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java Tue May 9 14:41:55 2017 @@ -68,7 +68,7 @@ public class AddMembersTest extends Abst final int batchSize; private final String importBehavior; - private final List<String> groupPaths = new ArrayList(GROUP_CNT); + private final List<String> groupPaths = new ArrayList<>(GROUP_CNT); public AddMembersTest(int numberOfMembers, int batchSize, @Nonnull String importBehavior) { this.numberOfMembers = numberOfMembers; Added: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddUniqueMembersTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddUniqueMembersTest.java?rev=1794589&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddUniqueMembersTest.java (added) +++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddUniqueMembersTest.java Tue May 9 14:41:55 2017 @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.benchmark; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicLong; + +import javax.annotation.Nonnull; +import javax.jcr.Session; + +import org.apache.jackrabbit.api.security.user.Group; +import org.apache.jackrabbit.api.security.user.UserManager; +import org.apache.jackrabbit.oak.spi.xml.ImportBehavior; +import org.junit.Assert; + +/** + * Test the performance of adding a configured number of members to groups. The + * following parameters can be used to run the benchmark: + * + * - numberOfMembers : the number of members that should be added in the test run + * - batchSize : the size of the memberID-array to be passed to the addMembers call + * + * In contrast to {@link AddMembersTest}, this benchmark will always add unique + * members to the given group. + */ +public class AddUniqueMembersTest extends AddMembersTest { + + private static AtomicLong index = new AtomicLong(); + + public AddUniqueMembersTest(int numberOfMembers, int batchSize) { + super(numberOfMembers, batchSize, ImportBehavior.NAME_BESTEFFORT); + } + + @Override + protected void createUsers(@Nonnull UserManager userManager) throws Exception { + // no need for creating the users beforehand + } + + @Override + protected void addMembers(@Nonnull UserManager userManger, @Nonnull Group group, @Nonnull Session s) + throws Exception { + long uid = index.getAndIncrement(); + + for (int i = 0; i <= numberOfMembers; i++) { + Set<String> failed; + if (batchSize <= DEFAULT_BATCH_SIZE) { + failed = group.addMembers(USER + i + "_" + uid); + } else { + List<String> ids = new ArrayList<String>(batchSize); + for (int j = 0; j < batchSize && i <= numberOfMembers; j++) { + ids.add(USER + i + "_" + uid); + i++; + } + failed = group.addMembers(ids.toArray(new String[ids.size()])); + } + Assert.assertTrue("Group " + group.getID() + ": unable to add: " + failed, failed.isEmpty()); + s.save(); + } + } +} Propchange: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddUniqueMembersTest.java ------------------------------------------------------------------------------ svn:eol-style = native 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=1794589&r1=1794588&r2=1794589&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 Tue May 9 14:41:55 2017 @@ -372,6 +372,9 @@ public class BenchmarkRunner { new AddMemberTest( numberOfUsers.value(options), batchSize.value(options)), + new AddUniqueMembersTest( + numberOfUsers.value(options), + batchSize.value(options)), // benchmarks removing multiple or single members new RemoveMembersTest(
