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 2013/10/15 16:00:42 UTC
svn commit: r1532341 -
/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/
Author: angela
Date: Tue Oct 15 14:00:42 2013
New Revision: 1532341
URL: http://svn.apache.org/r1532341
Log:
OAK-527: more benchmark tests
Added:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java?rev=1532341&r1=1532340&r2=1532341&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java Tue Oct 15 14:00:42 2013
@@ -120,6 +120,11 @@ public class BenchmarkRunner {
itemsToRead.value(options),
bgReaders.value(options),
report.value(options)),
+ new ConcurrentReadSinglePolicyTreeTest(
+ runAsAdmin.value(options),
+ itemsToRead.value(options),
+ bgReaders.value(options),
+ report.value(options)),
new ConcurrentReadAccessControlledTreeTest(
runAsAdmin.value(options),
itemsToRead.value(options),
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java?rev=1532341&r1=1532340&r2=1532341&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java Tue Oct 15 14:00:42 2013
@@ -16,16 +16,13 @@
*/
package org.apache.jackrabbit.oak.benchmark;
-import javax.jcr.ItemVisitor;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
-import javax.jcr.security.AccessControlList;
import javax.jcr.security.AccessControlManager;
-import javax.jcr.security.AccessControlPolicy;
-import javax.jcr.security.AccessControlPolicyIterator;
import javax.jcr.security.Privilege;
-import javax.jcr.util.TraversingItemVisitor;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.apache.jackrabbit.core.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.util.Text;
@@ -34,8 +31,9 @@ import org.apache.jackrabbit.util.Text;
* Concurrently reads random items from the deep tree where every 10th node is
* access controlled.
*/
-public class ConcurrentReadAccessControlledTreeTest
- extends ConcurrentReadDeepTreeTest {
+public class ConcurrentReadAccessControlledTreeTest extends ConcurrentReadDeepTreeTest {
+
+ int counter = 0;
public ConcurrentReadAccessControlledTreeTest(
boolean runAsAdmin, int itemsToRead, int bgReaders, boolean doReport) {
@@ -43,53 +41,39 @@ public class ConcurrentReadAccessControl
}
@Override
- protected void beforeSuite() throws Exception {
- super.beforeSuite();
-
- ItemVisitor visitor = new TraversingItemVisitor.Default() {
- int counter = 0;
- @Override
- protected void entering(Node node, int level) throws RepositoryException {
- if (++counter == 10) {
- addPolicy(node);
- counter = 0;
- }
- super.entering(node, level);
- }
+ protected void visitingNode(Node node, int i) throws RepositoryException {
+ if (++counter == 10) {
+ addPolicy(node);
+ counter = 0;
+ }
+ super.visitingNode(node, i);
+ }
- private void addPolicy(Node node) throws RepositoryException {
- AccessControlManager acMgr = node.getSession().getAccessControlManager();
- String path = node.getPath();
- int level = 0;
- if (node.isNodeType(AccessControlConstants.NT_REP_POLICY)) {
- level = 1;
- } else if (node.isNodeType(AccessControlConstants.NT_REP_ACE)) {
- level = 2;
- } else if (node.isNodeType(AccessControlConstants.NT_REP_RESTRICTIONS)) {
- level = 3;
- }
- if (level > 0) {
- path = Text.getRelativeParent(path, level);
- }
- AccessControlPolicyIterator acIterator = acMgr.getApplicablePolicies(path);
- if (acIterator.hasNext()) {
- AccessControlPolicy policy = acIterator.nextAccessControlPolicy();
- if (policy instanceof AccessControlList) {
- AccessControlList acl = (AccessControlList) policy;
- Privilege[] privileges = new Privilege[] {
- acMgr.privilegeFromName(Privilege.JCR_READ),
- acMgr.privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL)
- };
- if (acl.addAccessControlEntry(EveryonePrincipal.getInstance(), privileges)) {
- acMgr.setPolicy(path, acl);
- node.getSession().save();
- }
- }
- }
+ private void addPolicy(Node node) throws RepositoryException {
+ AccessControlManager acMgr = node.getSession().getAccessControlManager();
+ String path = node.getPath();
+ int level = 0;
+ if (node.isNodeType(AccessControlConstants.NT_REP_POLICY)) {
+ level = 1;
+ } else if (node.isNodeType(AccessControlConstants.NT_REP_ACE)) {
+ level = 2;
+ } else if (node.isNodeType(AccessControlConstants.NT_REP_RESTRICTIONS)) {
+ level = 3;
+ }
+ if (level > 0) {
+ path = Text.getRelativeParent(path, level);
+ }
+ JackrabbitAccessControlList acl = AccessControlUtils.getAccessControlList(node.getSession(), path);
+ if (acl != null) {
+ Privilege[] privileges = new Privilege[] {
+ acMgr.privilegeFromName(Privilege.JCR_READ),
+ acMgr.privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL)
+ };
+ if (acl.addAccessControlEntry(EveryonePrincipal.getInstance(), privileges)) {
+ acMgr.setPolicy(path, acl);
+ node.getSession().save();
}
- };
-
- visitor.visit(testRoot);
+ }
}
}
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java?rev=1532341&r1=1532340&r2=1532341&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java Tue Oct 15 14:00:42 2013
@@ -19,19 +19,16 @@ package org.apache.jackrabbit.oak.benchm
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
-import javax.jcr.ItemVisitor;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
-import javax.jcr.security.AccessControlList;
import javax.jcr.security.AccessControlManager;
-import javax.jcr.security.AccessControlPolicy;
-import javax.jcr.security.AccessControlPolicyIterator;
import javax.jcr.security.Privilege;
-import javax.jcr.util.TraversingItemVisitor;
import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.UserManager;
+import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.util.Text;
@@ -42,17 +39,15 @@ import org.apache.jackrabbit.util.Text;
*/
public class ConcurrentReadAccessControlledTreeTest2 extends ConcurrentReadDeepTreeTest {
- List<Principal> principals = new ArrayList();
+ int counter = 0;
+ final List<Principal> principals = new ArrayList();
- public ConcurrentReadAccessControlledTreeTest2(
- boolean runAsAdmin, int itemsToRead, int bgReaders, boolean doReport) {
+ public ConcurrentReadAccessControlledTreeTest2(boolean runAsAdmin, int itemsToRead, int bgReaders, boolean doReport) {
super(runAsAdmin, itemsToRead, bgReaders, doReport);
}
@Override
- protected void beforeSuite() throws Exception {
- super.beforeSuite();
-
+ protected void createDeepTree() throws Exception {
UserManager uMgr = ((JackrabbitSession) adminSession).getUserManager();
for (int i = 0; i < 100; i++) {
Authorizable a = uMgr.getAuthorizable("group" + i);
@@ -61,52 +56,43 @@ public class ConcurrentReadAccessControl
principals.add(a.getPrincipal());
}
}
+ super.createDeepTree();
+ }
- ItemVisitor visitor = new TraversingItemVisitor.Default() {
- int counter = 0;
- @Override
- protected void entering(Node node, int level) throws RepositoryException {
- if (++counter == 100) {
- addPolicy(node);
- counter = 0;
- }
- super.entering(node, level);
- }
+ @Override
+ protected void visitingNode(Node node, int i) throws RepositoryException {
+ if (++counter == 100) {
+ addPolicy(node);
+ counter = 0;
+ }
+ super.visitingNode(node, i);
+ }
- private void addPolicy(Node node) throws RepositoryException {
- AccessControlManager acMgr = node.getSession().getAccessControlManager();
- String path = node.getPath();
- int level = 0;
- if (node.isNodeType(AccessControlConstants.NT_REP_POLICY)) {
- level = 1;
- } else if (node.isNodeType(AccessControlConstants.NT_REP_ACE)) {
- level = 2;
- } else if (node.isNodeType(AccessControlConstants.NT_REP_RESTRICTIONS)) {
- level = 3;
- }
- if (level > 0) {
- path = Text.getRelativeParent(path, level);
- }
- AccessControlPolicyIterator acIterator = acMgr.getApplicablePolicies(path);
- if (acIterator.hasNext()) {
- AccessControlPolicy policy = acIterator.nextAccessControlPolicy();
- if (policy instanceof AccessControlList) {
- AccessControlList acl = (AccessControlList) policy;
- Privilege[] privileges = new Privilege[] {
- acMgr.privilegeFromName(Privilege.JCR_READ),
- acMgr.privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL)
- };
- for (Principal principal : principals) {
- acl.addAccessControlEntry(principal, privileges);
- }
- acMgr.setPolicy(path, acl);
- adminSession.save();
- }
- }
+ private void addPolicy(Node node) throws RepositoryException {
+ AccessControlManager acMgr = node.getSession().getAccessControlManager();
+ String path = node.getPath();
+ int level = 0;
+ if (node.isNodeType(AccessControlConstants.NT_REP_POLICY)) {
+ level = 1;
+ } else if (node.isNodeType(AccessControlConstants.NT_REP_ACE)) {
+ level = 2;
+ } else if (node.isNodeType(AccessControlConstants.NT_REP_RESTRICTIONS)) {
+ level = 3;
+ }
+ if (level > 0) {
+ path = Text.getRelativeParent(path, level);
+ }
+ JackrabbitAccessControlList acl = AccessControlUtils.getAccessControlList(node.getSession(), path);
+ if (acl != null) {
+ Privilege[] privileges = new Privilege[] {
+ acMgr.privilegeFromName(Privilege.JCR_READ),
+ acMgr.privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL)
+ };
+ for (Principal principal : principals) {
+ acl.addAccessControlEntry(principal, privileges);
}
- };
-
- visitor.visit(testRoot);
+ acMgr.setPolicy(path, acl);
+ adminSession.save();
+ }
}
-
}
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java?rev=1532341&r1=1532340&r2=1532341&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java Tue Oct 15 14:00:42 2013
@@ -21,8 +21,7 @@ package org.apache.jackrabbit.oak.benchm
*/
public class ConcurrentReadDeepTreeTest extends ReadDeepTreeTest {
- public ConcurrentReadDeepTreeTest(
- boolean runAsAdmin, int itemsToRead, int bgReaders, boolean doReport) {
+ public ConcurrentReadDeepTreeTest(boolean runAsAdmin, int itemsToRead, int bgReaders, boolean doReport) {
super(runAsAdmin, itemsToRead, bgReaders, doReport);
}
Added: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java?rev=1532341&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java (added)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java Tue Oct 15 14:00:42 2013
@@ -0,0 +1,60 @@
+/*
+ * 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 javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.AccessControlPolicy;
+import javax.jcr.security.Privilege;
+
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
+import org.apache.jackrabbit.core.security.principal.EveryonePrincipal;
+
+/**
+ * Concurrently reads random items from the deep tree where only the root node is
+ * access controlled.
+ */
+public class ConcurrentReadSinglePolicyTreeTest extends ConcurrentReadDeepTreeTest {
+
+ public ConcurrentReadSinglePolicyTreeTest(
+ boolean runAsAdmin, int itemsToRead, int bgReaders, boolean doReport) {
+ super(runAsAdmin, itemsToRead, bgReaders, doReport);
+ }
+
+ @Override
+ protected void visitingNode(Node node, int i) throws RepositoryException {
+ String path = node.getPath();
+ AccessControlManager acMgr = node.getSession().getAccessControlManager();
+ if ("/".equals(path)) {
+ JackrabbitAccessControlList policy = AccessControlUtils.getAccessControlList(acMgr, path);
+ if (policy != null) {
+ policy.addEntry(EveryonePrincipal.getInstance(), AccessControlUtils.privilegesFromNames(acMgr, Privilege.JCR_READ), true);
+ }
+ acMgr.setPolicy(path, policy);
+ } else {
+ for (AccessControlPolicy policy : acMgr.getPolicies(path)) {
+ if (policy instanceof JackrabbitAccessControlList) {
+ acMgr.removePolicy(path, policy);
+ }
+ }
+ }
+ node.getSession().save();
+ super.visitingNode(node, i);
+ }
+}
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java?rev=1532341&r1=1532340&r2=1532341&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java Tue Oct 15 14:00:42 2013
@@ -44,71 +44,80 @@ public class ReadDeepTreeTest extends Ab
private Session testSession;
- protected List<String> allPaths;
+ protected List<String> allPaths = new ArrayList();
- protected ReadDeepTreeTest(
- boolean runAsAdmin, int itemsToRead, int bgReaders, boolean doReport) {
+ protected ReadDeepTreeTest(boolean runAsAdmin, int itemsToRead, int bgReaders, boolean doReport) {
this.runAsAdmin = runAsAdmin;
this.itemsToRead = itemsToRead;
this.bgReaders = bgReaders;
this.doReport = doReport;
}
- public ReadDeepTreeTest(
- boolean runAsAdmin, int itemsToRead, boolean doReport) {
+ public ReadDeepTreeTest(boolean runAsAdmin, int itemsToRead, boolean doReport) {
this(runAsAdmin, itemsToRead, 0, doReport);
}
@Override
protected void beforeSuite() throws Exception {
adminSession = loginWriter();
- String name = getClass().getSimpleName() + TEST_ID;
+
+ createDeepTree();
+
+ for (int i = 0; i < bgReaders; i++) {
+ final Session session = getTestSession();
+ addBackgroundJob(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ randomRead(session, allPaths, itemsToRead);
+ } catch (RepositoryException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+ }
+ System.out.println("Threads started: " + bgReaders);
+
+ testSession = getTestSession();
+ }
+
+ protected void createDeepTree() throws Exception {
Node rn = adminSession.getRootNode();
+ String testNodeName = getClass().getSimpleName() + TEST_ID;
long start = System.currentTimeMillis();
- if (!rn.hasNode(name)) {
- testRoot = adminSession.getRootNode().addNode(name, "nt:unstructured");
+ if (!rn.hasNode(testNodeName)) {
+ testRoot = adminSession.getRootNode().addNode(testNodeName, "nt:unstructured");
InputStream in = getClass().getClassLoader().getResourceAsStream("deepTree.xml");
adminSession.importXML(testRoot.getPath(), in, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
adminSession.save();
} else {
- testRoot = rn.getNode(name);
+ testRoot = rn.getNode(testNodeName);
}
System.out.println("Import deep tree: " + (System.currentTimeMillis()-start));
- final List<String> paths = new ArrayList<String>();
ItemVisitor v = new TraversingItemVisitor.Default() {
@Override
protected void entering(Node node, int i) throws RepositoryException {
- paths.add(node.getPath());
+ visitingNode(node, i);
super.entering(node, i);
}
@Override
protected void entering(Property prop, int i) throws RepositoryException {
- paths.add(prop.getPath());
+ visitingProperty(prop, i);
super.entering(prop, i);
}
};
v.visit(testRoot);
- allPaths = paths;
-
System.out.println("All paths: " + allPaths.size());
+ }
- for (int i = 0; i < bgReaders; i++) {
- final Session session = getTestSession();
- addBackgroundJob(new Runnable() {
- @Override
- public void run() {
- try {
- randomRead(session, allPaths, itemsToRead);
- } catch (RepositoryException e) {
- throw new RuntimeException(e);
- }
- }
- });
- }
+ protected void visitingNode(Node node, int i) throws RepositoryException {
+ allPaths.add(node.getPath());
+ }
- testSession = getTestSession();
+ protected void visitingProperty(Property property, int i) throws RepositoryException {
+ allPaths.add(property.getPath());
}
@Override