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(


Reply via email to