Index: test/performance/base/src/main/java/org/apache/jackrabbit/performance/TreeRandomReadTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- test/performance/base/src/main/java/org/apache/jackrabbit/performance/TreeRandomReadTest.java (revision ) +++ test/performance/base/src/main/java/org/apache/jackrabbit/performance/TreeRandomReadTest.java (revision ) @@ -0,0 +1,39 @@ +package org.apache.jackrabbit.performance; + +import javax.jcr.Session; +import java.util.Set; + +public class TreeRandomReadTest extends AbstractDeepTreeTest { + + private Set itemPaths; + + private Session newSession; + + private Session readerSession; + + @Override + protected void beforeSuite() throws Exception { + super.beforeSuite(); + newSession = loginReader(); + readerSession = loginReader(); + itemPaths = uniqueRandomPaths(readerSession, allPaths, 1000); + } + + @Override + protected void afterSuite() throws Exception { + readerSession.logout(); + newSession.logout(); + super.afterSuite(); + } + + @Override + protected void runTest() throws Exception { + + // Using a new session, accessing non-cached items + + for (String nodePath : itemPaths) { + newSession.getItem(nodePath); + } + } + +} Index: test/performance/base/src/main/java/org/apache/jackrabbit/performance/RepeatedTreeRandomReadTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- test/performance/base/src/main/java/org/apache/jackrabbit/performance/RepeatedTreeRandomReadTest.java (revision ) +++ test/performance/base/src/main/java/org/apache/jackrabbit/performance/RepeatedTreeRandomReadTest.java (revision ) @@ -0,0 +1,37 @@ +package org.apache.jackrabbit.performance; + +import javax.jcr.Session; +import java.util.Set; + +public class RepeatedTreeRandomReadTest extends AbstractDeepTreeTest { + + private Set itemPaths; + + private Session readerSession; + + @Override + protected void beforeSuite() throws Exception { + super.beforeSuite(); + readerSession = loginReader(); + itemPaths = uniqueRandomPaths(readerSession, allPaths, 100); + } + + @Override + protected void afterSuite() throws Exception { + readerSession.logout(); + super.afterSuite(); + } + + @Override + protected void runTest() throws Exception { + + // Using the same session to access cached items + + for (int i = 0; i < 10; i++) { + for (String nodePath : itemPaths) { + readerSession.getItem(nodePath); + } + } + } + +} Index: test/performance/base/src/main/java/org/apache/jackrabbit/performance/AbstractDeepTreeTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- test/performance/base/src/main/java/org/apache/jackrabbit/performance/AbstractDeepTreeTest.java (revision 1483460) +++ test/performance/base/src/main/java/org/apache/jackrabbit/performance/AbstractDeepTreeTest.java (revision ) @@ -18,7 +18,9 @@ import java.io.InputStream; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.jcr.ImportUUIDBehavior; import javax.jcr.Item; import javax.jcr.ItemVisitor; @@ -101,5 +103,31 @@ if (doReport) { System.out.println("Reading " + (cnt-noAccess) + " (Nodes: "+ nodeCnt +"; Properties: "+propertyCnt+") completed in " + (end - start)); } + } + + protected static Set uniqueRandomPaths(Session session, List paths, int count) throws RepositoryException { + Set result = new HashSet(); + + for (int i = 0; i < count; i++) { + String path; + + while (true) { + path = paths.get((int) Math.floor(paths.size() * Math.random())); + + if (result.contains(path)) { + continue; + } + + if (!session.itemExists(path)) { + continue; + } + + break; + } + + result.add(path); + } + + return result; } } Index: test/performance/base/src/main/java/org/apache/jackrabbit/performance/AbstractPerformanceTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- test/performance/base/src/main/java/org/apache/jackrabbit/performance/AbstractPerformanceTest.java (revision 1483460) +++ test/performance/base/src/main/java/org/apache/jackrabbit/performance/AbstractPerformanceTest.java (revision ) @@ -113,6 +113,8 @@ // ignore these tests if the required jackrabbit-api // extensions are not available } + runTest(new TreeRandomReadTest(), name, conf); + runTest(new RepeatedTreeRandomReadTest(), name, conf); } private void runTest(AbstractTest test, String name, byte[] conf) {