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 an...@apache.org on 2019/10/01 16:17:02 UTC
svn commit: r1867848 - in
/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark:
./ authorization/permission/ authorization/principalbased/
Author: angela
Date: Tue Oct 1 16:17:02 2019
New Revision: 1867848
URL: http://svn.apache.org/viewvc?rev=1867848&view=rev
Log:
OAK-8491 : Review default size of eagerCache parameter
Added:
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/permission/
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/permission/EagerCacheSizeTest.java (with props)
Modified:
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/principalbased/PrinicipalBasedReadTest.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=1867848&r1=1867847&r2=1867848&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 Oct 1 16:17:02 2019
@@ -49,6 +49,7 @@ import org.apache.jackrabbit.oak.benchma
import org.apache.jackrabbit.oak.benchmark.authentication.external.SyncExternalUsersTest;
import org.apache.jackrabbit.oak.benchmark.authorization.AceCreationTest;
import org.apache.jackrabbit.oak.benchmark.authorization.CanReadNonExisting;
+import org.apache.jackrabbit.oak.benchmark.authorization.permission.EagerCacheSizeTest;
import org.apache.jackrabbit.oak.benchmark.authorization.principalbased.HasItemGetItemIsModifiedTest;
import org.apache.jackrabbit.oak.benchmark.authorization.principalbased.PermissionEvaluationTest;
import org.apache.jackrabbit.oak.benchmark.authorization.principalbased.PrinicipalBasedReadTest;
@@ -380,6 +381,11 @@ public class BenchmarkRunner {
compositionType.value(options),
useAggregationFilter.value(options),
report.value(options)),
+ new EagerCacheSizeTest(itemsToRead.value(options),
+ numberOfInitialAce.value(options),
+ numberOfUsers.value(options),
+ cacheSize,
+ report.value(options)),
new ConcurrentReadDeepTreeTest(
runAsAdmin.value(options),
itemsToRead.value(options),
Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java?rev=1867848&r1=1867847&r2=1867848&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java Tue Oct 1 16:17:02 2019
@@ -55,14 +55,11 @@ public class ConcurrentHasPermissionTest
try {
int allows = 0;
int denies = 0;
- int size = allPaths.size();
long start = System.currentTimeMillis();
for (int i = 0; i < cnt; i++) {
- double rand = size * Math.random();
- int index = (int) Math.floor(rand);
- String path = allPaths.get(index);
+ String path = getRandom(allPaths);
- String actions = getRandomActions();
+ String actions = getRandom(ACTIONS);
if (testSession.hasPermission(path, actions)) {
allows++;
} else {
@@ -79,9 +76,4 @@ public class ConcurrentHasPermissionTest
}
}
}
-
- private static String getRandomActions() {
- int index = (int) Math.floor(10 * Math.random());
- return ACTIONS.get(index);
- }
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java?rev=1867848&r1=1867847&r2=1867848&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java Tue Oct 1 16:17:02 2019
@@ -47,12 +47,9 @@ public class ConcurrentReadRandomNodeAnd
int nodeCnt = 0;
int propertyCnt = 0;
int noAccess = 0;
- int size = allPaths.size();
long start = System.currentTimeMillis();
for (int i = 0; i < cnt; i++) {
- double rand = size * Math.random();
- int index = (int) Math.floor(rand);
- String path = allPaths.get(index);
+ String path = getRandom(allPaths);
if (testSession.itemExists(path)) {
Item item = testSession.getItem(path);
if (item.isNode()) {
Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java?rev=1867848&r1=1867847&r2=1867848&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java Tue Oct 1 16:17:02 2019
@@ -51,12 +51,9 @@ public class ConcurrentTraversalTest ext
int nodeCnt = 0;
int propertyCnt = 0;
int noAccess = 0;
- int size = allPaths.size();
long start = System.currentTimeMillis();
for (int i = 0; i < cnt; i++) {
- double rand = size * Math.random();
- int index = (int) Math.floor(rand);
- String path = allPaths.get(index);
+ String path = getRandom(allPaths);
if (testSession.itemExists(path)) {
Item item = testSession.getItem(path);
Visitor visitor = new Visitor();
Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java?rev=1867848&r1=1867847&r2=1867848&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java Tue Oct 1 16:17:02 2019
@@ -106,12 +106,9 @@ public class CugOakTest extends CugTest
int nodeCnt = 0;
int propertyCnt = 0;
int noAccess = 0;
- int size = allPaths.size();
long start = System.currentTimeMillis();
for (int i = 0; i < itemsToRead; i++) {
- double rand = size * Math.random();
- int index = (int) Math.floor(rand);
- String path = allPaths.get(index);
+ String path = getRandom(allPaths);
TreeLocation treeLocation = TreeLocation.create(root, path);
if (treeLocation.exists()) {
PropertyState ps = treeLocation.getProperty();
Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java?rev=1867848&r1=1867847&r2=1867848&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java Tue Oct 1 16:17:02 2019
@@ -36,6 +36,7 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.util.Text;
+import org.jetbrains.annotations.NotNull;
/**
* Randomly read 1000 items from the deep tree.
@@ -142,12 +143,9 @@ public class ReadDeepTreeTest extends Ab
int nodeCnt = 0;
int propertyCnt = 0;
int noAccess = 0;
- int size = allPaths.size();
long start = System.currentTimeMillis();
for (int i = 0; i < cnt; i++) {
- double rand = size * Math.random();
- int index = (int) Math.floor(rand);
- String path = allPaths.get(index);
+ String path = getRandom(allPaths);
if (testSession.itemExists(path)) {
Item item = testSession.getItem(path);
if (item.isNode()) {
@@ -210,4 +208,9 @@ public class ReadDeepTreeTest extends Ab
return path;
}
+ @NotNull
+ protected static String getRandom(@NotNull List<String> strings) {
+ int index = (int) Math.floor(strings.size() * Math.random());
+ return strings.get(index);
+ }
}
Added: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/permission/EagerCacheSizeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/permission/EagerCacheSizeTest.java?rev=1867848&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/permission/EagerCacheSizeTest.java (added)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/permission/EagerCacheSizeTest.java Tue Oct 1 16:17:02 2019
@@ -0,0 +1,190 @@
+/*
+ * 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.authorization.permission;
+
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
+import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlManager;
+import org.apache.jackrabbit.api.security.user.Authorizable;
+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.Oak;
+import org.apache.jackrabbit.oak.benchmark.ReadDeepTreeTest;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+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.authorization.accesscontrol.AccessControlConstants;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.Node;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.security.Privilege;
+import javax.security.auth.Subject;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import static javax.jcr.security.Privilege.JCR_ALL;
+
+public class EagerCacheSizeTest extends ReadDeepTreeTest {
+
+ private static final Logger log = LoggerFactory.getLogger(EagerCacheSizeTest.class);
+
+ private final int numberOfACEs;
+ private final int subjectSize;
+ private final long eagerCacheSize;
+
+ private final List<String> nodePaths = new ArrayList<>();
+ private Subject subject;
+
+ public EagerCacheSizeTest(int itemsToRead, int numberOfACEs, int subjectSize, long eagerCacheSize, boolean doReport) {
+ super(false, itemsToRead, doReport, false);
+ this.numberOfACEs = numberOfACEs;
+ this.subjectSize = subjectSize;
+ this.eagerCacheSize = eagerCacheSize;
+ }
+
+ @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", eagerCacheSize);
+ SecurityProvider securityProvider = SecurityProviderBuilder.newBuilder().with(ConfigurationParameters.of(AuthorizationConfiguration.NAME, params)).build();
+ return new Jcr(oak).with(securityProvider);
+ }
+ });
+ } else {
+ throw new IllegalArgumentException("Fixture " + fixture + " not supported for this benchmark.");
+ }
+ }
+
+ @Override
+ protected void beforeSuite() throws Exception {
+ super.beforeSuite();
+
+ // populate subject
+ subject = new Subject();
+ UserManager userManager = ((JackrabbitSession) adminSession).getUserManager();
+ for (int i = 0; i < subjectSize; i++) {
+ User user = userManager.createSystemUser("system_" +i, null);
+ subject.getPrincipals().add(user.getPrincipal());
+ }
+ adminSession.save();
+
+ JackrabbitAccessControlManager acMgr = (JackrabbitAccessControlManager) adminSession.getAccessControlManager();
+
+ // grant read at the root
+ Principal principal = subject.getPrincipals().iterator().next();
+ Privilege[] readPrivs = AccessControlUtils.privilegesFromNames(acMgr, Privilege.JCR_READ);
+ addEntry(acMgr, principal, PathUtils.ROOT_PATH, readPrivs);
+
+ // create additional ACEs for each principal in the subject
+ List<Privilege> allPrivileges = Lists.newArrayList(acMgr.privilegeFromName(JCR_ALL).getAggregatePrivileges());
+ Iterator<Principal> principalIterator = Iterators.cycle(subject.getPrincipals());
+ int cnt = 0;
+ while (cnt < numberOfACEs) {
+ if (!principalIterator.hasNext()) {
+ throw new IllegalStateException("Cannot setup ACE. no principals available.");
+ }
+ if (addEntry(acMgr, principalIterator.next(), getRandom(nodePaths), getRandomPrivileges(allPrivileges))) {
+ cnt++;
+ }
+ }
+ adminSession.save();
+
+ System.out.println("BEFORE DONE");
+ }
+
+ @Override
+ protected void visitingNode(Node node, int i) throws RepositoryException {
+ super.visitingNode(node, i);
+ String path = node.getPath();
+ if (!path.contains(AccessControlConstants.REP_POLICY)) {
+ nodePaths.add(path);
+ }
+ }
+
+ @NotNull
+ private static Privilege[] getRandomPrivileges(@NotNull List<Privilege> allPrivileges) {
+ Collections.shuffle(allPrivileges);
+ return allPrivileges.subList(0, 3).toArray(new Privilege[0]);
+ }
+
+ private static boolean addEntry(@NotNull JackrabbitAccessControlManager acMgr, @NotNull Principal principal, @NotNull String path, @NotNull Privilege[] privileges) throws RepositoryException {
+ JackrabbitAccessControlList acl = AccessControlUtils.getAccessControlList(acMgr, path);
+ if (acl == null) {
+ throw new IllegalStateException("No policy to setup ACE.");
+ }
+ boolean added = acl.addAccessControlEntry(principal, privileges);
+ if (added) {
+ acMgr.setPolicy(acl.getPath(), acl);
+ }
+ return added;
+ }
+
+ @Override
+ protected void afterSuite() throws Exception {
+ try {
+ UserManager userManager = ((JackrabbitSession) adminSession).getUserManager();
+ for (Principal p : subject.getPrincipals()) {
+ Authorizable a = userManager.getAuthorizable(p);
+ if (a != null) {
+ a.remove();
+ }
+ }
+ adminSession.save();
+ } finally {
+ super.afterSuite();
+ }
+ }
+
+ @NotNull
+ @Override
+ protected Session getTestSession() {
+ return loginSubject(subject);
+ }
+
+ @NotNull
+ @Override
+ protected String getImportFileName() {
+ return "deepTree.xml";
+ }
+
+ @NotNull
+ @Override
+ protected String getTestNodeName() {
+ return "EagerCacheSizeTest";
+ }
+
+}
\ No newline at end of file
Propchange: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/permission/EagerCacheSizeTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/principalbased/PrinicipalBasedReadTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/principalbased/PrinicipalBasedReadTest.java?rev=1867848&r1=1867847&r2=1867848&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/principalbased/PrinicipalBasedReadTest.java (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/principalbased/PrinicipalBasedReadTest.java Tue Oct 1 16:17:02 2019
@@ -160,12 +160,6 @@ public class PrinicipalBasedReadTest ext
}
@NotNull
- static String getRandom(@NotNull List<String> paths) {
- int index = (int) Math.floor(paths.size() * Math.random());
- return paths.get(index);
- }
-
- @NotNull
private static Privilege[] getRandomPrivileges(@NotNull List<Privilege> allPrivileges) {
Collections.shuffle(allPrivileges);
return allPrivileges.subList(0, 3).toArray(new Privilege[0]);