blob: 75749437b819c0ccf2cdfd06706bf68a40d6b19a [file] [log] [blame]
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
// This source code is licensed under both the GPLv2 (found in the
// COPYING file in the root directory) and Apache 2.0 License
// (found in the LICENSE.Apache file in the root directory).
package org.rocksdb;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Random;
import static org.assertj.core.api.Assertions.assertThat;
public class ColumnFamilyOptionsTest {
@ClassRule
public static final RocksMemoryResource rocksMemoryResource =
new RocksMemoryResource();
public static final Random rand = PlatformRandomHelper.
getPlatformSpecificRandomFactory();
@Test
public void getColumnFamilyOptionsFromProps() {
Properties properties = new Properties();
properties.put("write_buffer_size", "112");
properties.put("max_write_buffer_number", "13");
try (final ColumnFamilyOptions opt = ColumnFamilyOptions.
getColumnFamilyOptionsFromProps(properties)) {
// setup sample properties
assertThat(opt).isNotNull();
assertThat(String.valueOf(opt.writeBufferSize())).
isEqualTo(properties.get("write_buffer_size"));
assertThat(String.valueOf(opt.maxWriteBufferNumber())).
isEqualTo(properties.get("max_write_buffer_number"));
}
}
@Test
public void failColumnFamilyOptionsFromPropsWithIllegalValue() {
// setup sample properties
final Properties properties = new Properties();
properties.put("tomato", "1024");
properties.put("burger", "2");
try (final ColumnFamilyOptions opt =
ColumnFamilyOptions.getColumnFamilyOptionsFromProps(properties)) {
assertThat(opt).isNull();
}
}
@Test(expected = IllegalArgumentException.class)
public void failColumnFamilyOptionsFromPropsWithNullValue() {
try (final ColumnFamilyOptions opt =
ColumnFamilyOptions.getColumnFamilyOptionsFromProps(null)) {
}
}
@Test(expected = IllegalArgumentException.class)
public void failColumnFamilyOptionsFromPropsWithEmptyProps() {
try (final ColumnFamilyOptions opt =
ColumnFamilyOptions.getColumnFamilyOptionsFromProps(
new Properties())) {
}
}
@Test
public void writeBufferSize() throws RocksDBException {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setWriteBufferSize(longValue);
assertThat(opt.writeBufferSize()).isEqualTo(longValue);
}
}
@Test
public void maxWriteBufferNumber() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setMaxWriteBufferNumber(intValue);
assertThat(opt.maxWriteBufferNumber()).isEqualTo(intValue);
}
}
@Test
public void minWriteBufferNumberToMerge() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setMinWriteBufferNumberToMerge(intValue);
assertThat(opt.minWriteBufferNumberToMerge()).isEqualTo(intValue);
}
}
@Test
public void numLevels() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setNumLevels(intValue);
assertThat(opt.numLevels()).isEqualTo(intValue);
}
}
@Test
public void levelZeroFileNumCompactionTrigger() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setLevelZeroFileNumCompactionTrigger(intValue);
assertThat(opt.levelZeroFileNumCompactionTrigger()).isEqualTo(intValue);
}
}
@Test
public void levelZeroSlowdownWritesTrigger() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setLevelZeroSlowdownWritesTrigger(intValue);
assertThat(opt.levelZeroSlowdownWritesTrigger()).isEqualTo(intValue);
}
}
@Test
public void levelZeroStopWritesTrigger() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setLevelZeroStopWritesTrigger(intValue);
assertThat(opt.levelZeroStopWritesTrigger()).isEqualTo(intValue);
}
}
@Test
public void targetFileSizeBase() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setTargetFileSizeBase(longValue);
assertThat(opt.targetFileSizeBase()).isEqualTo(longValue);
}
}
@Test
public void targetFileSizeMultiplier() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setTargetFileSizeMultiplier(intValue);
assertThat(opt.targetFileSizeMultiplier()).isEqualTo(intValue);
}
}
@Test
public void maxBytesForLevelBase() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setMaxBytesForLevelBase(longValue);
assertThat(opt.maxBytesForLevelBase()).isEqualTo(longValue);
}
}
@Test
public void levelCompactionDynamicLevelBytes() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final boolean boolValue = rand.nextBoolean();
opt.setLevelCompactionDynamicLevelBytes(boolValue);
assertThat(opt.levelCompactionDynamicLevelBytes())
.isEqualTo(boolValue);
}
}
@Test
public void maxBytesForLevelMultiplier() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final double doubleValue = rand.nextDouble();
opt.setMaxBytesForLevelMultiplier(doubleValue);
assertThat(opt.maxBytesForLevelMultiplier()).isEqualTo(doubleValue);
}
}
@Test
public void maxBytesForLevelMultiplierAdditional() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue1 = rand.nextInt();
final int intValue2 = rand.nextInt();
final int[] ints = new int[]{intValue1, intValue2};
opt.setMaxBytesForLevelMultiplierAdditional(ints);
assertThat(opt.maxBytesForLevelMultiplierAdditional()).isEqualTo(ints);
}
}
@Test
public void maxCompactionBytes() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setMaxCompactionBytes(longValue);
assertThat(opt.maxCompactionBytes()).isEqualTo(longValue);
}
}
@Test
public void softPendingCompactionBytesLimit() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setSoftPendingCompactionBytesLimit(longValue);
assertThat(opt.softPendingCompactionBytesLimit()).isEqualTo(longValue);
}
}
@Test
public void hardPendingCompactionBytesLimit() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setHardPendingCompactionBytesLimit(longValue);
assertThat(opt.hardPendingCompactionBytesLimit()).isEqualTo(longValue);
}
}
@Test
public void level0FileNumCompactionTrigger() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setLevel0FileNumCompactionTrigger(intValue);
assertThat(opt.level0FileNumCompactionTrigger()).isEqualTo(intValue);
}
}
@Test
public void level0SlowdownWritesTrigger() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setLevel0SlowdownWritesTrigger(intValue);
assertThat(opt.level0SlowdownWritesTrigger()).isEqualTo(intValue);
}
}
@Test
public void level0StopWritesTrigger() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setLevel0StopWritesTrigger(intValue);
assertThat(opt.level0StopWritesTrigger()).isEqualTo(intValue);
}
}
@Test
public void arenaBlockSize() throws RocksDBException {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setArenaBlockSize(longValue);
assertThat(opt.arenaBlockSize()).isEqualTo(longValue);
}
}
@Test
public void disableAutoCompactions() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final boolean boolValue = rand.nextBoolean();
opt.setDisableAutoCompactions(boolValue);
assertThat(opt.disableAutoCompactions()).isEqualTo(boolValue);
}
}
@Test
public void maxSequentialSkipInIterations() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setMaxSequentialSkipInIterations(longValue);
assertThat(opt.maxSequentialSkipInIterations()).isEqualTo(longValue);
}
}
@Test
public void inplaceUpdateSupport() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final boolean boolValue = rand.nextBoolean();
opt.setInplaceUpdateSupport(boolValue);
assertThat(opt.inplaceUpdateSupport()).isEqualTo(boolValue);
}
}
@Test
public void inplaceUpdateNumLocks() throws RocksDBException {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setInplaceUpdateNumLocks(longValue);
assertThat(opt.inplaceUpdateNumLocks()).isEqualTo(longValue);
}
}
@Test
public void memtablePrefixBloomSizeRatio() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final double doubleValue = rand.nextDouble();
opt.setMemtablePrefixBloomSizeRatio(doubleValue);
assertThat(opt.memtablePrefixBloomSizeRatio()).isEqualTo(doubleValue);
}
}
@Test
public void memtableHugePageSize() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setMemtableHugePageSize(longValue);
assertThat(opt.memtableHugePageSize()).isEqualTo(longValue);
}
}
@Test
public void bloomLocality() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final int intValue = rand.nextInt();
opt.setBloomLocality(intValue);
assertThat(opt.bloomLocality()).isEqualTo(intValue);
}
}
@Test
public void maxSuccessiveMerges() throws RocksDBException {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final long longValue = rand.nextLong();
opt.setMaxSuccessiveMerges(longValue);
assertThat(opt.maxSuccessiveMerges()).isEqualTo(longValue);
}
}
@Test
public void optimizeFiltersForHits() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final boolean aBoolean = rand.nextBoolean();
opt.setOptimizeFiltersForHits(aBoolean);
assertThat(opt.optimizeFiltersForHits()).isEqualTo(aBoolean);
}
}
@Test
public void memTable() throws RocksDBException {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
opt.setMemTableConfig(new HashLinkedListMemTableConfig());
assertThat(opt.memTableFactoryName()).
isEqualTo("HashLinkedListRepFactory");
}
}
@Test
public void comparator() throws RocksDBException {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
opt.setComparator(BuiltinComparator.BYTEWISE_COMPARATOR);
}
}
@Test
public void linkageOfPrepMethods() {
try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
options.optimizeUniversalStyleCompaction();
options.optimizeUniversalStyleCompaction(4000);
options.optimizeLevelStyleCompaction();
options.optimizeLevelStyleCompaction(3000);
options.optimizeForPointLookup(10);
options.optimizeForSmallDb();
}
}
@Test
public void shouldSetTestPrefixExtractor() {
try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
options.useFixedLengthPrefixExtractor(100);
options.useFixedLengthPrefixExtractor(10);
}
}
@Test
public void shouldSetTestCappedPrefixExtractor() {
try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
options.useCappedPrefixExtractor(100);
options.useCappedPrefixExtractor(10);
}
}
@Test
public void compressionTypes() {
try (final ColumnFamilyOptions columnFamilyOptions
= new ColumnFamilyOptions()) {
for (final CompressionType compressionType :
CompressionType.values()) {
columnFamilyOptions.setCompressionType(compressionType);
assertThat(columnFamilyOptions.compressionType()).
isEqualTo(compressionType);
assertThat(CompressionType.valueOf("NO_COMPRESSION")).
isEqualTo(CompressionType.NO_COMPRESSION);
}
}
}
@Test
public void compressionPerLevel() {
try (final ColumnFamilyOptions columnFamilyOptions
= new ColumnFamilyOptions()) {
assertThat(columnFamilyOptions.compressionPerLevel()).isEmpty();
List<CompressionType> compressionTypeList = new ArrayList<>();
for (int i = 0; i < columnFamilyOptions.numLevels(); i++) {
compressionTypeList.add(CompressionType.NO_COMPRESSION);
}
columnFamilyOptions.setCompressionPerLevel(compressionTypeList);
compressionTypeList = columnFamilyOptions.compressionPerLevel();
for (CompressionType compressionType : compressionTypeList) {
assertThat(compressionType).isEqualTo(
CompressionType.NO_COMPRESSION);
}
}
}
@Test
public void differentCompressionsPerLevel() {
try (final ColumnFamilyOptions columnFamilyOptions
= new ColumnFamilyOptions()) {
columnFamilyOptions.setNumLevels(3);
assertThat(columnFamilyOptions.compressionPerLevel()).isEmpty();
List<CompressionType> compressionTypeList = new ArrayList<>();
compressionTypeList.add(CompressionType.BZLIB2_COMPRESSION);
compressionTypeList.add(CompressionType.SNAPPY_COMPRESSION);
compressionTypeList.add(CompressionType.LZ4_COMPRESSION);
columnFamilyOptions.setCompressionPerLevel(compressionTypeList);
compressionTypeList = columnFamilyOptions.compressionPerLevel();
assertThat(compressionTypeList.size()).isEqualTo(3);
assertThat(compressionTypeList).
containsExactly(
CompressionType.BZLIB2_COMPRESSION,
CompressionType.SNAPPY_COMPRESSION,
CompressionType.LZ4_COMPRESSION);
}
}
@Test
public void bottommostCompressionType() {
try (final ColumnFamilyOptions columnFamilyOptions
= new ColumnFamilyOptions()) {
assertThat(columnFamilyOptions.bottommostCompressionType())
.isEqualTo(CompressionType.DISABLE_COMPRESSION_OPTION);
for (final CompressionType compressionType : CompressionType.values()) {
columnFamilyOptions.setBottommostCompressionType(compressionType);
assertThat(columnFamilyOptions.bottommostCompressionType())
.isEqualTo(compressionType);
}
}
}
@Test
public void compressionOptions() {
try (final ColumnFamilyOptions columnFamilyOptions
= new ColumnFamilyOptions();
final CompressionOptions compressionOptions = new CompressionOptions()
.setMaxDictBytes(123)) {
columnFamilyOptions.setCompressionOptions(compressionOptions);
assertThat(columnFamilyOptions.compressionOptions())
.isEqualTo(compressionOptions);
assertThat(columnFamilyOptions.compressionOptions().maxDictBytes())
.isEqualTo(123);
}
}
@Test
public void compactionStyles() {
try (final ColumnFamilyOptions columnFamilyOptions
= new ColumnFamilyOptions()) {
for (final CompactionStyle compactionStyle :
CompactionStyle.values()) {
columnFamilyOptions.setCompactionStyle(compactionStyle);
assertThat(columnFamilyOptions.compactionStyle()).
isEqualTo(compactionStyle);
assertThat(CompactionStyle.valueOf("FIFO")).
isEqualTo(CompactionStyle.FIFO);
}
}
}
@Test
public void maxTableFilesSizeFIFO() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
long longValue = rand.nextLong();
// Size has to be positive
longValue = (longValue < 0) ? -longValue : longValue;
longValue = (longValue == 0) ? longValue + 1 : longValue;
opt.setMaxTableFilesSizeFIFO(longValue);
assertThat(opt.maxTableFilesSizeFIFO()).
isEqualTo(longValue);
}
}
@Test
public void maxWriteBufferNumberToMaintain() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
int intValue = rand.nextInt();
// Size has to be positive
intValue = (intValue < 0) ? -intValue : intValue;
intValue = (intValue == 0) ? intValue + 1 : intValue;
opt.setMaxWriteBufferNumberToMaintain(intValue);
assertThat(opt.maxWriteBufferNumberToMaintain()).
isEqualTo(intValue);
}
}
@Test
public void compactionPriorities() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
for (final CompactionPriority compactionPriority :
CompactionPriority.values()) {
opt.setCompactionPriority(compactionPriority);
assertThat(opt.compactionPriority()).
isEqualTo(compactionPriority);
}
}
}
@Test
public void reportBgIoStats() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final boolean booleanValue = true;
opt.setReportBgIoStats(booleanValue);
assertThat(opt.reportBgIoStats()).
isEqualTo(booleanValue);
}
}
@Test
public void compactionOptionsUniversal() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions();
final CompactionOptionsUniversal optUni = new CompactionOptionsUniversal()
.setCompressionSizePercent(7)) {
opt.setCompactionOptionsUniversal(optUni);
assertThat(opt.compactionOptionsUniversal()).
isEqualTo(optUni);
assertThat(opt.compactionOptionsUniversal().compressionSizePercent())
.isEqualTo(7);
}
}
@Test
public void compactionOptionsFIFO() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions();
final CompactionOptionsFIFO optFifo = new CompactionOptionsFIFO()
.setMaxTableFilesSize(2000)) {
opt.setCompactionOptionsFIFO(optFifo);
assertThat(opt.compactionOptionsFIFO()).
isEqualTo(optFifo);
assertThat(opt.compactionOptionsFIFO().maxTableFilesSize())
.isEqualTo(2000);
}
}
@Test
public void forceConsistencyChecks() {
try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
final boolean booleanValue = true;
opt.setForceConsistencyChecks(booleanValue);
assertThat(opt.forceConsistencyChecks()).
isEqualTo(booleanValue);
}
}
}