blob: f74f3510489ea5b23f30748e0ff968dcb747b51e [file] [log] [blame]
/*
* 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.fixture;
import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
import org.apache.jackrabbit.oak.segment.file.FileStore;
import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
class SegmentTarFixture extends OakFixture {
private FileStore[] stores;
private BlobStoreFixture[] blobStoreFixtures = new BlobStoreFixture[0];
private final File base;
private final int maxFileSizeMB;
private final int cacheSizeMB;
private final boolean memoryMapping;
private final boolean useBlobStore;
private final int dsCacheSizeInMB;
public SegmentTarFixture(String name, File base, int maxFileSizeMB, int cacheSizeMB,
boolean memoryMapping, boolean useBlobStore, int dsCacheSizeInMB) {
super(name);
this.base = base;
this.maxFileSizeMB = maxFileSizeMB;
this.cacheSizeMB = cacheSizeMB;
this.memoryMapping = memoryMapping;
this.useBlobStore = useBlobStore;
this.dsCacheSizeInMB = dsCacheSizeInMB;
}
@Override
public Oak getOak(int clusterId) throws Exception {
FileStore fs = fileStoreBuilder(base)
.withMaxFileSize(maxFileSizeMB)
.withSegmentCacheSize(cacheSizeMB)
.withMemoryMapping(memoryMapping)
.build();
return newOak(SegmentNodeStoreBuilders.builder(fs).build());
}
@Override
public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
Oak[] cluster = new Oak[n];
stores = new FileStore[cluster.length];
if (useBlobStore) {
blobStoreFixtures = new BlobStoreFixture[cluster.length];
}
for (int i = 0; i < cluster.length; i++) {
BlobStore blobStore = null;
if (useBlobStore) {
blobStoreFixtures[i] = BlobStoreFixture.create(base, true, dsCacheSizeInMB, statsProvider);
blobStore = blobStoreFixtures[i].setUp();
}
FileStoreBuilder builder = fileStoreBuilder(new File(base, unique));
if (blobStore != null) {
builder.withBlobStore(blobStore);
}
stores[i] = builder
.withMaxFileSize(maxFileSizeMB)
.withStatisticsProvider(statsProvider)
.withSegmentCacheSize(cacheSizeMB)
.withMemoryMapping(memoryMapping)
.build();
cluster[i] = newOak(SegmentNodeStoreBuilders.builder(stores[i]).build());
}
return cluster;
}
@Override
public void tearDownCluster() {
for (FileStore store : stores) {
store.close();
}
for (BlobStoreFixture blobStore : blobStoreFixtures) {
blobStore.tearDown();
}
FileUtils.deleteQuietly(new File(base, unique));
}
public BlobStoreFixture[] getBlobStoreFixtures() {
return blobStoreFixtures;
}
public FileStore[] getStores() {
return stores;
}
}