]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/rocksdb/java/src/test/java/org/rocksdb/BlockBasedTableConfigTest.java
import 14.2.4 nautilus point release
[ceph.git] / ceph / src / rocksdb / java / src / test / java / org / rocksdb / BlockBasedTableConfigTest.java
index 2b15b69f81277cdb1af96898363ea78eaa24174d..fe9f8632509934690a986992971be6aeaba07646 100644 (file)
@@ -6,6 +6,7 @@
 package org.rocksdb;
 
 import org.junit.ClassRule;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -22,23 +23,94 @@ public class BlockBasedTableConfigTest {
 
   @Rule public TemporaryFolder dbFolder = new TemporaryFolder();
 
+  @Test
+  public void cacheIndexAndFilterBlocks() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setCacheIndexAndFilterBlocks(true);
+    assertThat(blockBasedTableConfig.cacheIndexAndFilterBlocks()).
+        isTrue();
+
+  }
+
+  @Test
+  public void cacheIndexAndFilterBlocksWithHighPriority() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setCacheIndexAndFilterBlocksWithHighPriority(true);
+    assertThat(blockBasedTableConfig.cacheIndexAndFilterBlocksWithHighPriority()).
+        isTrue();
+  }
+
+  @Test
+  public void pinL0FilterAndIndexBlocksInCache() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setPinL0FilterAndIndexBlocksInCache(true);
+    assertThat(blockBasedTableConfig.pinL0FilterAndIndexBlocksInCache()).
+        isTrue();
+  }
+
+  @Test
+  public void pinTopLevelIndexAndFilter() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setPinTopLevelIndexAndFilter(false);
+    assertThat(blockBasedTableConfig.pinTopLevelIndexAndFilter()).
+        isFalse();
+  }
+
+  @Test
+  public void indexType() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    assertThat(IndexType.values().length).isEqualTo(3);
+    blockBasedTableConfig.setIndexType(IndexType.kHashSearch);
+    assertThat(blockBasedTableConfig.indexType().equals(
+        IndexType.kHashSearch));
+    assertThat(IndexType.valueOf("kBinarySearch")).isNotNull();
+    blockBasedTableConfig.setIndexType(IndexType.valueOf("kBinarySearch"));
+    assertThat(blockBasedTableConfig.indexType().equals(
+        IndexType.kBinarySearch));
+  }
+
+  @Test
+  public void dataBlockIndexType() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setDataBlockIndexType(DataBlockIndexType.kDataBlockBinaryAndHash);
+    assertThat(blockBasedTableConfig.dataBlockIndexType().equals(
+        DataBlockIndexType.kDataBlockBinaryAndHash));
+    blockBasedTableConfig.setDataBlockIndexType(DataBlockIndexType.kDataBlockBinarySearch);
+    assertThat(blockBasedTableConfig.dataBlockIndexType().equals(
+        DataBlockIndexType.kDataBlockBinarySearch));
+  }
+
+  @Test
+  public void checksumType() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    assertThat(ChecksumType.values().length).isEqualTo(3);
+    assertThat(ChecksumType.valueOf("kxxHash")).
+        isEqualTo(ChecksumType.kxxHash);
+    blockBasedTableConfig.setChecksumType(ChecksumType.kNoChecksum);
+    blockBasedTableConfig.setChecksumType(ChecksumType.kxxHash);
+    assertThat(blockBasedTableConfig.checksumType().equals(
+        ChecksumType.kxxHash));
+  }
+
   @Test
   public void noBlockCache() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
     blockBasedTableConfig.setNoBlockCache(true);
     assertThat(blockBasedTableConfig.noBlockCache()).isTrue();
   }
 
   @Test
-  public void blockCacheSize() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setBlockCacheSize(8 * 1024);
-    assertThat(blockBasedTableConfig.blockCacheSize()).
-        isEqualTo(8 * 1024);
+  public void blockCache() {
+    try (
+        final Cache cache = new LRUCache(17 * 1024 * 1024);
+        final Options options = new Options().setTableFormatConfig(
+            new BlockBasedTableConfig().setBlockCache(cache))) {
+      assertThat(options.tableFactoryName()).isEqualTo("BlockBasedTable");
+    }
   }
 
   @Test
-  public void sharedBlockCache() throws RocksDBException {
+  public void blockCacheIntegration() throws RocksDBException {
     try (final Cache cache = new LRUCache(8 * 1024 * 1024);
          final Statistics statistics = new Statistics()) {
       for (int shard = 0; shard < 8; shard++) {
@@ -63,148 +135,259 @@ public class BlockBasedTableConfigTest {
   }
 
   @Test
-  public void blockSizeDeviation() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setBlockSizeDeviation(12);
-    assertThat(blockBasedTableConfig.blockSizeDeviation()).
-        isEqualTo(12);
+  public void persistentCache() throws RocksDBException {
+    try (final DBOptions dbOptions = new DBOptions().
+        setInfoLogLevel(InfoLogLevel.INFO_LEVEL).
+        setCreateIfMissing(true);
+        final Logger logger = new Logger(dbOptions) {
+      @Override
+      protected void log(final InfoLogLevel infoLogLevel, final String logMsg) {
+        System.out.println(infoLogLevel.name() + ": " + logMsg);
+      }
+    }) {
+      try (final PersistentCache persistentCache =
+               new PersistentCache(Env.getDefault(), dbFolder.getRoot().getPath(), 1024 * 1024 * 100, logger, false);
+           final Options options = new Options().setTableFormatConfig(
+               new BlockBasedTableConfig().setPersistentCache(persistentCache))) {
+        assertThat(options.tableFactoryName()).isEqualTo("BlockBasedTable");
+      }
+    }
   }
 
   @Test
-  public void blockRestartInterval() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setBlockRestartInterval(15);
-    assertThat(blockBasedTableConfig.blockRestartInterval()).
-        isEqualTo(15);
+  public void blockCacheCompressed() {
+    try (final Cache cache = new LRUCache(17 * 1024 * 1024);
+         final Options options = new Options().setTableFormatConfig(
+        new BlockBasedTableConfig().setBlockCacheCompressed(cache))) {
+      assertThat(options.tableFactoryName()).isEqualTo("BlockBasedTable");
+    }
   }
 
+  @Ignore("See issue: https://github.com/facebook/rocksdb/issues/4822")
   @Test
-  public void wholeKeyFiltering() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setWholeKeyFiltering(false);
-    assertThat(blockBasedTableConfig.wholeKeyFiltering()).
-        isFalse();
-  }
+  public void blockCacheCompressedIntegration() throws RocksDBException {
+    final byte[] key1 = "some-key1".getBytes(StandardCharsets.UTF_8);
+    final byte[] key2 = "some-key1".getBytes(StandardCharsets.UTF_8);
+    final byte[] key3 = "some-key1".getBytes(StandardCharsets.UTF_8);
+    final byte[] key4 = "some-key1".getBytes(StandardCharsets.UTF_8);
+    final byte[] value = "some-value".getBytes(StandardCharsets.UTF_8);
 
-  @Test
-  public void cacheIndexAndFilterBlocks() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setCacheIndexAndFilterBlocks(true);
-    assertThat(blockBasedTableConfig.cacheIndexAndFilterBlocks()).
-        isTrue();
+    try (final Cache compressedCache = new LRUCache(8 * 1024 * 1024);
+         final Statistics statistics = new Statistics()) {
+
+      final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig()
+          .setNoBlockCache(true)
+          .setBlockCache(null)
+          .setBlockCacheCompressed(compressedCache)
+          .setFormatVersion(4);
 
+      try (final Options options = new Options()
+             .setCreateIfMissing(true)
+             .setStatistics(statistics)
+             .setTableFormatConfig(blockBasedTableConfig)) {
+
+        for (int shard = 0; shard < 8; shard++) {
+          try (final FlushOptions flushOptions = new FlushOptions();
+               final WriteOptions writeOptions = new WriteOptions();
+               final ReadOptions readOptions = new ReadOptions();
+               final RocksDB db =
+                   RocksDB.open(options, dbFolder.getRoot().getAbsolutePath() + "/" + shard)) {
+
+            db.put(writeOptions, key1, value);
+            db.put(writeOptions, key2, value);
+            db.put(writeOptions, key3, value);
+            db.put(writeOptions, key4, value);
+            db.flush(flushOptions);
+
+            db.get(readOptions, key1);
+            db.get(readOptions, key2);
+            db.get(readOptions, key3);
+            db.get(readOptions, key4);
+
+            assertThat(statistics.getTickerCount(TickerType.BLOCK_CACHE_COMPRESSED_ADD)).isEqualTo(shard + 1);
+          }
+        }
+      }
+    }
   }
 
   @Test
-  public void hashIndexAllowCollision() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setHashIndexAllowCollision(false);
-    assertThat(blockBasedTableConfig.hashIndexAllowCollision()).
-        isFalse();
+  public void blockSize() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setBlockSize(10);
+    assertThat(blockBasedTableConfig.blockSize()).isEqualTo(10);
   }
 
   @Test
-  public void blockCacheCompressedSize() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setBlockCacheCompressedSize(40);
-    assertThat(blockBasedTableConfig.blockCacheCompressedSize()).
-        isEqualTo(40);
+  public void blockSizeDeviation() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setBlockSizeDeviation(12);
+    assertThat(blockBasedTableConfig.blockSizeDeviation()).
+        isEqualTo(12);
   }
 
   @Test
-  public void checksumType() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    assertThat(ChecksumType.values().length).isEqualTo(3);
-    assertThat(ChecksumType.valueOf("kxxHash")).
-        isEqualTo(ChecksumType.kxxHash);
-    blockBasedTableConfig.setChecksumType(ChecksumType.kNoChecksum);
-    blockBasedTableConfig.setChecksumType(ChecksumType.kxxHash);
-    assertThat(blockBasedTableConfig.checksumType().equals(
-        ChecksumType.kxxHash));
+  public void blockRestartInterval() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setBlockRestartInterval(15);
+    assertThat(blockBasedTableConfig.blockRestartInterval()).
+        isEqualTo(15);
   }
 
   @Test
-  public void indexType() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    assertThat(IndexType.values().length).isEqualTo(3);
-    blockBasedTableConfig.setIndexType(IndexType.kHashSearch);
-    assertThat(blockBasedTableConfig.indexType().equals(
-        IndexType.kHashSearch));
-    assertThat(IndexType.valueOf("kBinarySearch")).isNotNull();
-    blockBasedTableConfig.setIndexType(IndexType.valueOf("kBinarySearch"));
-    assertThat(blockBasedTableConfig.indexType().equals(
-        IndexType.kBinarySearch));
+  public void indexBlockRestartInterval() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setIndexBlockRestartInterval(15);
+    assertThat(blockBasedTableConfig.indexBlockRestartInterval()).
+        isEqualTo(15);
   }
 
   @Test
-  public void blockCacheCompressedNumShardBits() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setBlockCacheCompressedNumShardBits(4);
-    assertThat(blockBasedTableConfig.blockCacheCompressedNumShardBits()).
-        isEqualTo(4);
+  public void metadataBlockSize() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setMetadataBlockSize(1024);
+    assertThat(blockBasedTableConfig.metadataBlockSize()).
+        isEqualTo(1024);
   }
 
   @Test
-  public void cacheNumShardBits() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setCacheNumShardBits(5);
-    assertThat(blockBasedTableConfig.cacheNumShardBits()).
-        isEqualTo(5);
+  public void partitionFilters() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setPartitionFilters(true);
+    assertThat(blockBasedTableConfig.partitionFilters()).
+        isTrue();
   }
 
   @Test
-  public void blockSize() {
-    BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
-    blockBasedTableConfig.setBlockSize(10);
-    assertThat(blockBasedTableConfig.blockSize()).isEqualTo(10);
+  public void useDeltaEncoding() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setUseDeltaEncoding(false);
+    assertThat(blockBasedTableConfig.useDeltaEncoding()).
+        isFalse();
   }
 
-
   @Test
-  public void blockBasedTableWithFilter() {
+  public void blockBasedTableWithFilterPolicy() {
     try(final Options options = new Options()
         .setTableFormatConfig(new BlockBasedTableConfig()
-        .setFilter(new BloomFilter(10)))) {
+            .setFilterPolicy(new BloomFilter(10)))) {
       assertThat(options.tableFactoryName()).
           isEqualTo("BlockBasedTable");
     }
   }
 
   @Test
-  public void blockBasedTableWithoutFilter() {
+  public void blockBasedTableWithoutFilterPolicy() {
     try(final Options options = new Options().setTableFormatConfig(
-        new BlockBasedTableConfig().setFilter(null))) {
+        new BlockBasedTableConfig().setFilterPolicy(null))) {
       assertThat(options.tableFactoryName()).
           isEqualTo("BlockBasedTable");
     }
   }
 
   @Test
-  public void blockBasedTableWithBlockCache() {
-    try (final Options options = new Options().setTableFormatConfig(
-             new BlockBasedTableConfig().setBlockCache(new LRUCache(17 * 1024 * 1024)))) {
-      assertThat(options.tableFactoryName()).isEqualTo("BlockBasedTable");
-    }
+  public void wholeKeyFiltering() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setWholeKeyFiltering(false);
+    assertThat(blockBasedTableConfig.wholeKeyFiltering()).
+        isFalse();
+  }
+
+  @Test
+  public void verifyCompression() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setVerifyCompression(true);
+    assertThat(blockBasedTableConfig.verifyCompression()).
+        isTrue();
+  }
+
+  @Test
+  public void readAmpBytesPerBit() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setReadAmpBytesPerBit(2);
+    assertThat(blockBasedTableConfig.readAmpBytesPerBit()).
+        isEqualTo(2);
   }
 
   @Test
-  public void blockBasedTableFormatVersion() {
-    BlockBasedTableConfig config = new BlockBasedTableConfig();
-    for (int version=0; version<=2; version++) {
-      config.setFormatVersion(version);
-      assertThat(config.formatVersion()).isEqualTo(version);
+  public void formatVersion() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    for (int version = 0; version < 5; version++) {
+      blockBasedTableConfig.setFormatVersion(version);
+      assertThat(blockBasedTableConfig.formatVersion()).isEqualTo(version);
     }
   }
 
   @Test(expected = AssertionError.class)
-  public void blockBasedTableFormatVersionFailNegative() {
-    BlockBasedTableConfig config = new BlockBasedTableConfig();
-    config.setFormatVersion(-1);
+  public void formatVersionFailNegative() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setFormatVersion(-1);
   }
 
   @Test(expected = AssertionError.class)
-  public void blockBasedTableFormatVersionFailIllegalVersion() {
-    BlockBasedTableConfig config = new BlockBasedTableConfig();
-    config.setFormatVersion(3);
+  public void formatVersionFailIllegalVersion() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setFormatVersion(99);
+  }
+
+  @Test
+  public void enableIndexCompression() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setEnableIndexCompression(false);
+    assertThat(blockBasedTableConfig.enableIndexCompression()).
+        isFalse();
+  }
+
+  @Test
+  public void blockAlign() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setBlockAlign(true);
+    assertThat(blockBasedTableConfig.blockAlign()).
+        isTrue();
+  }
+
+  @Deprecated
+  @Test
+  public void hashIndexAllowCollision() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setHashIndexAllowCollision(false);
+    assertThat(blockBasedTableConfig.hashIndexAllowCollision()).
+        isTrue();  // NOTE: setHashIndexAllowCollision should do nothing!
+  }
+
+  @Deprecated
+  @Test
+  public void blockCacheSize() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setBlockCacheSize(8 * 1024);
+    assertThat(blockBasedTableConfig.blockCacheSize()).
+        isEqualTo(8 * 1024);
+  }
+
+  @Deprecated
+  @Test
+  public void blockCacheNumShardBits() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setCacheNumShardBits(5);
+    assertThat(blockBasedTableConfig.cacheNumShardBits()).
+        isEqualTo(5);
+  }
+
+  @Deprecated
+  @Test
+  public void blockCacheCompressedSize() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setBlockCacheCompressedSize(40);
+    assertThat(blockBasedTableConfig.blockCacheCompressedSize()).
+        isEqualTo(40);
+  }
+
+  @Deprecated
+  @Test
+  public void blockCacheCompressedNumShardBits() {
+    final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
+    blockBasedTableConfig.setBlockCacheCompressedNumShardBits(4);
+    assertThat(blockBasedTableConfig.blockCacheCompressedNumShardBits()).
+        isEqualTo(4);
   }
 }