Return-Path: X-Original-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Delivered-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D5B92F1B0 for ; Wed, 27 Mar 2013 11:31:42 +0000 (UTC) Received: (qmail 36782 invoked by uid 500); 27 Mar 2013 11:31:42 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 36732 invoked by uid 500); 27 Mar 2013 11:31:42 -0000 Mailing-List: contact oak-commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: oak-dev@jackrabbit.apache.org Delivered-To: mailing list oak-commits@jackrabbit.apache.org Received: (qmail 36686 invoked by uid 99); 27 Mar 2013 11:31:41 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 27 Mar 2013 11:31:41 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 27 Mar 2013 11:31:36 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id CB2052388994; Wed, 27 Mar 2013 11:31:14 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1461532 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/ oak-run/src/main/resources/org... Date: Wed, 27 Mar 2013 11:31:14 -0000 To: oak-commits@jackrabbit.apache.org From: jukka@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130327113114.CB2052388994@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jukka Date: Wed Mar 27 11:31:14 2013 New Revision: 1461532 URL: http://svn.apache.org/r1461532 Log: OAK-641: Improved benchmark tooling Uniform cache size settings (bundle cache for Jackrabbit, KernelNodeState cache for the MicroKernel and segment cache for SegmentMK) Added: jackrabbit/oak/trunk/oak-run/src/main/resources/org/ jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/ jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/jackrabbit/ jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/jackrabbit/oak/ jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/jackrabbit/oak/fixture/ jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/jackrabbit/oak/fixture/repository.xml Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java 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/fixture/JackrabbitRepositoryFixture.java jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java?rev=1461532&r1=1461531&r2=1461532&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java Wed Mar 27 11:31:14 2013 @@ -44,6 +44,8 @@ import static com.google.common.base.Pre */ public class KernelNodeStore implements NodeStore { + private static final long DEFAULT_CACHE_SIZE = 16 * 1024 * 1024; + /** * The {@link MicroKernel} instance used to store the content tree. */ @@ -55,42 +57,43 @@ public class KernelNodeStore implements @Nonnull private volatile Observer observer = EmptyObserver.INSTANCE; - private final LoadingCache cache = - CacheBuilder.newBuilder().maximumWeight(16 * 1024 * 1024).weigher( - new Weigher() { - @Override - public int weigh(String key, KernelNodeState state) { - return state.getMemory(); - } - }).build(new CacheLoader() { - @Override - public KernelNodeState load(String key) { - int slash = key.indexOf('/'); - String revision = key.substring(0, slash); - String path = key.substring(slash); - return new KernelNodeState(kernel, path, revision, cache); - } - - @Override - public ListenableFuture reload(String key, - KernelNodeState oldValue) - throws Exception { - // LoadingCache.reload() is only used to re-calculate the - // memory usage on KernelNodeState.init(). Therefore - // we simply return the old value as is (OAK-643) - SettableFuture future = SettableFuture.create(); - future.set(oldValue); - return future; - } - }); + private final LoadingCache cache; /** * State of the current root node. */ private KernelNodeState root; - public KernelNodeStore(MicroKernel kernel) { + + public KernelNodeStore(final MicroKernel kernel, long cacheSize) { this.kernel = checkNotNull(kernel); + this.cache = CacheBuilder.newBuilder() + .maximumWeight(cacheSize) + .weigher(new Weigher() { + @Override + public int weigh(String key, KernelNodeState state) { + return state.getMemory(); + } + }).build(new CacheLoader() { + @Override + public KernelNodeState load(String key) { + int slash = key.indexOf('/'); + String revision = key.substring(0, slash); + String path = key.substring(slash); + return new KernelNodeState(kernel, path, revision, cache); + } + @Override + public ListenableFuture reload( + String key, KernelNodeState oldValue) { + // LoadingCache.reload() is only used to re-calculate the + // memory usage on KernelNodeState.init(). Therefore + // we simply return the old value as is (OAK-643) + SettableFuture future = SettableFuture.create(); + future.set(oldValue); + return future; + } + }); + try { this.root = cache.get(kernel.getHeadRevision() + '/'); } catch (Exception e) { @@ -98,6 +101,10 @@ public class KernelNodeStore implements } } + public KernelNodeStore(MicroKernel kernel) { + this(kernel, DEFAULT_CACHE_SIZE); + } + @Nonnull public Observer getObserver() { return observer; 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=1461532&r1=1461531&r2=1461532&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 Wed Mar 27 11:31:14 2013 @@ -49,14 +49,15 @@ public class BenchmarkRunner { .withRequiredArg().ofType(File.class); OptionSet options = parser.parse(args); + int cacheSize = cache.value(options); RepositoryFixture[] allFixtures = new RepositoryFixture[] { - new JackrabbitRepositoryFixture(), - OakRepositoryFixture.getMemory(), - OakRepositoryFixture.getDefault(), - OakRepositoryFixture.getMongo(host.value(options), port.value(options)), + new JackrabbitRepositoryFixture(cacheSize), + OakRepositoryFixture.getMemory(cacheSize * MB), + OakRepositoryFixture.getDefault(cacheSize * MB), + OakRepositoryFixture.getMongo( + host.value(options), port.value(options), cacheSize * MB), OakRepositoryFixture.getSegment( - host.value(options), port.value(options), - cache.value(options) * MB) + host.value(options), port.value(options), cacheSize * MB) }; Benchmark[] allBenchmarks = new Benchmark[] { new LoginTest(), Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/JackrabbitRepositoryFixture.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/JackrabbitRepositoryFixture.java?rev=1461532&r1=1461531&r2=1461532&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/JackrabbitRepositoryFixture.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/JackrabbitRepositoryFixture.java Wed Mar 27 11:31:14 2013 @@ -16,18 +16,31 @@ */ package org.apache.jackrabbit.oak.fixture; +import static org.apache.jackrabbit.core.config.RepositoryConfigurationParser.REPOSITORY_HOME_VARIABLE; + import java.io.File; +import java.io.InputStream; +import java.util.Properties; import javax.jcr.Repository; +import javax.xml.transform.stream.StreamSource; import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.core.RepositoryImpl; import org.apache.jackrabbit.core.config.RepositoryConfig; +import org.apache.jackrabbit.core.config.RepositoryConfigurationParser; +import org.xml.sax.InputSource; public class JackrabbitRepositoryFixture implements RepositoryFixture { + private final int bundleCacheSize; + private RepositoryImpl[] cluster; + public JackrabbitRepositoryFixture(int bundleCacheSize) { + this.bundleCacheSize = bundleCacheSize; + } + @Override public boolean isAvailable(int n) { return n == 1; @@ -38,7 +51,16 @@ public class JackrabbitRepositoryFixture if (n == 1) { String name = "Jackrabbit-" + System.currentTimeMillis(); File directory = new File(name); - RepositoryConfig config = RepositoryConfig.install(directory); + + Properties variables = new Properties(System.getProperties()); + variables.setProperty( + REPOSITORY_HOME_VARIABLE, directory.getPath()); + variables.setProperty( + "bundleCacheSize", Integer.toString(bundleCacheSize)); + InputStream xml = getClass().getResourceAsStream("repository.xml"); + RepositoryConfig config = RepositoryConfig.create( + new InputSource(xml), variables); + RepositoryImpl repository = RepositoryImpl.create(config); this.cluster = new RepositoryImpl[] { repository }; return new Repository[] { repository }; Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java?rev=1461532&r1=1461531&r2=1461532&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java Wed Mar 27 11:31:14 2013 @@ -27,6 +27,7 @@ import org.apache.jackrabbit.mongomk.imp import org.apache.jackrabbit.mongomk.prototype.MongoMK; import org.apache.jackrabbit.oak.Oak; import org.apache.jackrabbit.oak.jcr.Jcr; +import org.apache.jackrabbit.oak.kernel.KernelNodeStore; import org.apache.jackrabbit.oak.plugins.segment.MongoStore; import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.plugins.segment.SegmentStore; @@ -35,14 +36,14 @@ import com.mongodb.Mongo; public abstract class OakRepositoryFixture implements RepositoryFixture { - public static RepositoryFixture getMemory() { + public static RepositoryFixture getMemory(final long cacheSize) { return new OakRepositoryFixture("Oak-Memory") { @Override public Repository[] setUpCluster(int n) throws Exception { Repository[] cluster = new Repository[n]; MicroKernel kernel = new MicroKernelImpl(); for (int i = 0; i < cluster.length; i++) { - Oak oak = new Oak(kernel); + Oak oak = new Oak(new KernelNodeStore(kernel, cacheSize)); cluster[i] = new Jcr(oak).createRepository(); } return cluster; @@ -50,7 +51,7 @@ public abstract class OakRepositoryFixtu }; } - public static RepositoryFixture getDefault() { + public static RepositoryFixture getDefault(final long cacheSize) { return new OakRepositoryFixture("Oak-Default") { private MicroKernelImpl[] kernels; @Override @@ -59,7 +60,8 @@ public abstract class OakRepositoryFixtu kernels = new MicroKernelImpl[cluster.length]; for (int i = 0; i < cluster.length; i++) { kernels[i] = new MicroKernelImpl(unique); - cluster[i] = new Jcr(kernels[i]).createRepository(); + Oak oak = new Oak(new KernelNodeStore(kernels[i], cacheSize)); + cluster[i] = new Jcr(oak).createRepository(); } return cluster; } @@ -73,7 +75,8 @@ public abstract class OakRepositoryFixtu }; } - public static RepositoryFixture getMongo(final String host, final int port) { + public static RepositoryFixture getMongo( + final String host, final int port, final long cacheSize) { return new OakRepositoryFixture("Oak-Mongo") { private MongoMK[] kernels; @Override @@ -84,7 +87,8 @@ public abstract class OakRepositoryFixtu MongoConnection mongo = new MongoConnection(host, port, unique); kernels[i] = new MongoMK(mongo.getDB(), i); - cluster[i] = new Jcr(kernels[i]).createRepository(); + Oak oak = new Oak(new KernelNodeStore(kernels[i], cacheSize)); + cluster[i] = new Jcr(oak).createRepository(); } return cluster; } Added: jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/jackrabbit/oak/fixture/repository.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/jackrabbit/oak/fixture/repository.xml?rev=1461532&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/jackrabbit/oak/fixture/repository.xml (added) +++ jackrabbit/oak/trunk/oak-run/src/main/resources/org/apache/jackrabbit/oak/fixture/repository.xml Wed Mar 27 11:31:14 2013 @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +