]> git.proxmox.com Git - ceph.git/blame - 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
CommitLineData
7c673cae 1// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
11fdf7f2
TL
2// This source code is licensed under both the GPLv2 (found in the
3// COPYING file in the root directory) and Apache 2.0 License
4// (found in the LICENSE.Apache file in the root directory).
7c673cae
FG
5
6package org.rocksdb;
7
8import org.junit.ClassRule;
494da23a 9import org.junit.Ignore;
11fdf7f2 10import org.junit.Rule;
7c673cae 11import org.junit.Test;
11fdf7f2
TL
12import org.junit.rules.TemporaryFolder;
13
14import java.nio.charset.StandardCharsets;
7c673cae
FG
15
16import static org.assertj.core.api.Assertions.assertThat;
17
18public class BlockBasedTableConfigTest {
19
20 @ClassRule
21 public static final RocksMemoryResource rocksMemoryResource =
22 new RocksMemoryResource();
23
11fdf7f2
TL
24 @Rule public TemporaryFolder dbFolder = new TemporaryFolder();
25
494da23a
TL
26 @Test
27 public void cacheIndexAndFilterBlocks() {
28 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
29 blockBasedTableConfig.setCacheIndexAndFilterBlocks(true);
30 assertThat(blockBasedTableConfig.cacheIndexAndFilterBlocks()).
31 isTrue();
32
33 }
34
35 @Test
36 public void cacheIndexAndFilterBlocksWithHighPriority() {
37 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
38 blockBasedTableConfig.setCacheIndexAndFilterBlocksWithHighPriority(true);
39 assertThat(blockBasedTableConfig.cacheIndexAndFilterBlocksWithHighPriority()).
40 isTrue();
41 }
42
43 @Test
44 public void pinL0FilterAndIndexBlocksInCache() {
45 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
46 blockBasedTableConfig.setPinL0FilterAndIndexBlocksInCache(true);
47 assertThat(blockBasedTableConfig.pinL0FilterAndIndexBlocksInCache()).
48 isTrue();
49 }
50
51 @Test
52 public void pinTopLevelIndexAndFilter() {
53 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
54 blockBasedTableConfig.setPinTopLevelIndexAndFilter(false);
55 assertThat(blockBasedTableConfig.pinTopLevelIndexAndFilter()).
56 isFalse();
57 }
58
59 @Test
60 public void indexType() {
61 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
62 assertThat(IndexType.values().length).isEqualTo(3);
63 blockBasedTableConfig.setIndexType(IndexType.kHashSearch);
64 assertThat(blockBasedTableConfig.indexType().equals(
65 IndexType.kHashSearch));
66 assertThat(IndexType.valueOf("kBinarySearch")).isNotNull();
67 blockBasedTableConfig.setIndexType(IndexType.valueOf("kBinarySearch"));
68 assertThat(blockBasedTableConfig.indexType().equals(
69 IndexType.kBinarySearch));
70 }
71
72 @Test
73 public void dataBlockIndexType() {
74 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
75 blockBasedTableConfig.setDataBlockIndexType(DataBlockIndexType.kDataBlockBinaryAndHash);
76 assertThat(blockBasedTableConfig.dataBlockIndexType().equals(
77 DataBlockIndexType.kDataBlockBinaryAndHash));
78 blockBasedTableConfig.setDataBlockIndexType(DataBlockIndexType.kDataBlockBinarySearch);
79 assertThat(blockBasedTableConfig.dataBlockIndexType().equals(
80 DataBlockIndexType.kDataBlockBinarySearch));
81 }
82
83 @Test
84 public void checksumType() {
85 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
86 assertThat(ChecksumType.values().length).isEqualTo(3);
87 assertThat(ChecksumType.valueOf("kxxHash")).
88 isEqualTo(ChecksumType.kxxHash);
89 blockBasedTableConfig.setChecksumType(ChecksumType.kNoChecksum);
90 blockBasedTableConfig.setChecksumType(ChecksumType.kxxHash);
91 assertThat(blockBasedTableConfig.checksumType().equals(
92 ChecksumType.kxxHash));
93 }
94
7c673cae
FG
95 @Test
96 public void noBlockCache() {
494da23a 97 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
7c673cae
FG
98 blockBasedTableConfig.setNoBlockCache(true);
99 assertThat(blockBasedTableConfig.noBlockCache()).isTrue();
100 }
101
102 @Test
494da23a
TL
103 public void blockCache() {
104 try (
105 final Cache cache = new LRUCache(17 * 1024 * 1024);
106 final Options options = new Options().setTableFormatConfig(
107 new BlockBasedTableConfig().setBlockCache(cache))) {
108 assertThat(options.tableFactoryName()).isEqualTo("BlockBasedTable");
109 }
7c673cae
FG
110 }
111
11fdf7f2 112 @Test
494da23a 113 public void blockCacheIntegration() throws RocksDBException {
11fdf7f2
TL
114 try (final Cache cache = new LRUCache(8 * 1024 * 1024);
115 final Statistics statistics = new Statistics()) {
116 for (int shard = 0; shard < 8; shard++) {
117 try (final Options options =
118 new Options()
119 .setCreateIfMissing(true)
120 .setStatistics(statistics)
121 .setTableFormatConfig(new BlockBasedTableConfig().setBlockCache(cache));
122 final RocksDB db =
123 RocksDB.open(options, dbFolder.getRoot().getAbsolutePath() + "/" + shard)) {
124 final byte[] key = "some-key".getBytes(StandardCharsets.UTF_8);
125 final byte[] value = "some-value".getBytes(StandardCharsets.UTF_8);
126
127 db.put(key, value);
128 db.flush(new FlushOptions());
129 db.get(key);
130
131 assertThat(statistics.getTickerCount(TickerType.BLOCK_CACHE_ADD)).isEqualTo(shard + 1);
132 }
133 }
134 }
135 }
136
7c673cae 137 @Test
494da23a
TL
138 public void persistentCache() throws RocksDBException {
139 try (final DBOptions dbOptions = new DBOptions().
140 setInfoLogLevel(InfoLogLevel.INFO_LEVEL).
141 setCreateIfMissing(true);
142 final Logger logger = new Logger(dbOptions) {
143 @Override
144 protected void log(final InfoLogLevel infoLogLevel, final String logMsg) {
145 System.out.println(infoLogLevel.name() + ": " + logMsg);
146 }
147 }) {
148 try (final PersistentCache persistentCache =
149 new PersistentCache(Env.getDefault(), dbFolder.getRoot().getPath(), 1024 * 1024 * 100, logger, false);
150 final Options options = new Options().setTableFormatConfig(
151 new BlockBasedTableConfig().setPersistentCache(persistentCache))) {
152 assertThat(options.tableFactoryName()).isEqualTo("BlockBasedTable");
153 }
154 }
7c673cae
FG
155 }
156
157 @Test
494da23a
TL
158 public void blockCacheCompressed() {
159 try (final Cache cache = new LRUCache(17 * 1024 * 1024);
160 final Options options = new Options().setTableFormatConfig(
161 new BlockBasedTableConfig().setBlockCacheCompressed(cache))) {
162 assertThat(options.tableFactoryName()).isEqualTo("BlockBasedTable");
163 }
7c673cae
FG
164 }
165
494da23a 166 @Ignore("See issue: https://github.com/facebook/rocksdb/issues/4822")
7c673cae 167 @Test
494da23a
TL
168 public void blockCacheCompressedIntegration() throws RocksDBException {
169 final byte[] key1 = "some-key1".getBytes(StandardCharsets.UTF_8);
170 final byte[] key2 = "some-key1".getBytes(StandardCharsets.UTF_8);
171 final byte[] key3 = "some-key1".getBytes(StandardCharsets.UTF_8);
172 final byte[] key4 = "some-key1".getBytes(StandardCharsets.UTF_8);
173 final byte[] value = "some-value".getBytes(StandardCharsets.UTF_8);
7c673cae 174
494da23a
TL
175 try (final Cache compressedCache = new LRUCache(8 * 1024 * 1024);
176 final Statistics statistics = new Statistics()) {
177
178 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig()
179 .setNoBlockCache(true)
180 .setBlockCache(null)
181 .setBlockCacheCompressed(compressedCache)
182 .setFormatVersion(4);
7c673cae 183
494da23a
TL
184 try (final Options options = new Options()
185 .setCreateIfMissing(true)
186 .setStatistics(statistics)
187 .setTableFormatConfig(blockBasedTableConfig)) {
188
189 for (int shard = 0; shard < 8; shard++) {
190 try (final FlushOptions flushOptions = new FlushOptions();
191 final WriteOptions writeOptions = new WriteOptions();
192 final ReadOptions readOptions = new ReadOptions();
193 final RocksDB db =
194 RocksDB.open(options, dbFolder.getRoot().getAbsolutePath() + "/" + shard)) {
195
196 db.put(writeOptions, key1, value);
197 db.put(writeOptions, key2, value);
198 db.put(writeOptions, key3, value);
199 db.put(writeOptions, key4, value);
200 db.flush(flushOptions);
201
202 db.get(readOptions, key1);
203 db.get(readOptions, key2);
204 db.get(readOptions, key3);
205 db.get(readOptions, key4);
206
207 assertThat(statistics.getTickerCount(TickerType.BLOCK_CACHE_COMPRESSED_ADD)).isEqualTo(shard + 1);
208 }
209 }
210 }
211 }
7c673cae
FG
212 }
213
214 @Test
494da23a
TL
215 public void blockSize() {
216 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
217 blockBasedTableConfig.setBlockSize(10);
218 assertThat(blockBasedTableConfig.blockSize()).isEqualTo(10);
7c673cae
FG
219 }
220
221 @Test
494da23a
TL
222 public void blockSizeDeviation() {
223 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
224 blockBasedTableConfig.setBlockSizeDeviation(12);
225 assertThat(blockBasedTableConfig.blockSizeDeviation()).
226 isEqualTo(12);
7c673cae
FG
227 }
228
229 @Test
494da23a
TL
230 public void blockRestartInterval() {
231 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
232 blockBasedTableConfig.setBlockRestartInterval(15);
233 assertThat(blockBasedTableConfig.blockRestartInterval()).
234 isEqualTo(15);
7c673cae
FG
235 }
236
237 @Test
494da23a
TL
238 public void indexBlockRestartInterval() {
239 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
240 blockBasedTableConfig.setIndexBlockRestartInterval(15);
241 assertThat(blockBasedTableConfig.indexBlockRestartInterval()).
242 isEqualTo(15);
7c673cae
FG
243 }
244
245 @Test
494da23a
TL
246 public void metadataBlockSize() {
247 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
248 blockBasedTableConfig.setMetadataBlockSize(1024);
249 assertThat(blockBasedTableConfig.metadataBlockSize()).
250 isEqualTo(1024);
7c673cae
FG
251 }
252
253 @Test
494da23a
TL
254 public void partitionFilters() {
255 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
256 blockBasedTableConfig.setPartitionFilters(true);
257 assertThat(blockBasedTableConfig.partitionFilters()).
258 isTrue();
7c673cae
FG
259 }
260
261 @Test
494da23a
TL
262 public void useDeltaEncoding() {
263 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
264 blockBasedTableConfig.setUseDeltaEncoding(false);
265 assertThat(blockBasedTableConfig.useDeltaEncoding()).
266 isFalse();
7c673cae
FG
267 }
268
7c673cae 269 @Test
494da23a 270 public void blockBasedTableWithFilterPolicy() {
7c673cae
FG
271 try(final Options options = new Options()
272 .setTableFormatConfig(new BlockBasedTableConfig()
494da23a 273 .setFilterPolicy(new BloomFilter(10)))) {
7c673cae
FG
274 assertThat(options.tableFactoryName()).
275 isEqualTo("BlockBasedTable");
276 }
277 }
278
279 @Test
494da23a 280 public void blockBasedTableWithoutFilterPolicy() {
7c673cae 281 try(final Options options = new Options().setTableFormatConfig(
494da23a 282 new BlockBasedTableConfig().setFilterPolicy(null))) {
7c673cae
FG
283 assertThat(options.tableFactoryName()).
284 isEqualTo("BlockBasedTable");
285 }
286 }
287
11fdf7f2 288 @Test
494da23a
TL
289 public void wholeKeyFiltering() {
290 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
291 blockBasedTableConfig.setWholeKeyFiltering(false);
292 assertThat(blockBasedTableConfig.wholeKeyFiltering()).
293 isFalse();
294 }
295
296 @Test
297 public void verifyCompression() {
298 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
299 blockBasedTableConfig.setVerifyCompression(true);
300 assertThat(blockBasedTableConfig.verifyCompression()).
301 isTrue();
302 }
303
304 @Test
305 public void readAmpBytesPerBit() {
306 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
307 blockBasedTableConfig.setReadAmpBytesPerBit(2);
308 assertThat(blockBasedTableConfig.readAmpBytesPerBit()).
309 isEqualTo(2);
11fdf7f2
TL
310 }
311
7c673cae 312 @Test
494da23a
TL
313 public void formatVersion() {
314 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
315 for (int version = 0; version < 5; version++) {
316 blockBasedTableConfig.setFormatVersion(version);
317 assertThat(blockBasedTableConfig.formatVersion()).isEqualTo(version);
7c673cae
FG
318 }
319 }
320
321 @Test(expected = AssertionError.class)
494da23a
TL
322 public void formatVersionFailNegative() {
323 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
324 blockBasedTableConfig.setFormatVersion(-1);
7c673cae
FG
325 }
326
327 @Test(expected = AssertionError.class)
494da23a
TL
328 public void formatVersionFailIllegalVersion() {
329 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
330 blockBasedTableConfig.setFormatVersion(99);
331 }
332
333 @Test
334 public void enableIndexCompression() {
335 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
336 blockBasedTableConfig.setEnableIndexCompression(false);
337 assertThat(blockBasedTableConfig.enableIndexCompression()).
338 isFalse();
339 }
340
341 @Test
342 public void blockAlign() {
343 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
344 blockBasedTableConfig.setBlockAlign(true);
345 assertThat(blockBasedTableConfig.blockAlign()).
346 isTrue();
347 }
348
349 @Deprecated
350 @Test
351 public void hashIndexAllowCollision() {
352 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
353 blockBasedTableConfig.setHashIndexAllowCollision(false);
354 assertThat(blockBasedTableConfig.hashIndexAllowCollision()).
355 isTrue(); // NOTE: setHashIndexAllowCollision should do nothing!
356 }
357
358 @Deprecated
359 @Test
360 public void blockCacheSize() {
361 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
362 blockBasedTableConfig.setBlockCacheSize(8 * 1024);
363 assertThat(blockBasedTableConfig.blockCacheSize()).
364 isEqualTo(8 * 1024);
365 }
366
367 @Deprecated
368 @Test
369 public void blockCacheNumShardBits() {
370 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
371 blockBasedTableConfig.setCacheNumShardBits(5);
372 assertThat(blockBasedTableConfig.cacheNumShardBits()).
373 isEqualTo(5);
374 }
375
376 @Deprecated
377 @Test
378 public void blockCacheCompressedSize() {
379 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
380 blockBasedTableConfig.setBlockCacheCompressedSize(40);
381 assertThat(blockBasedTableConfig.blockCacheCompressedSize()).
382 isEqualTo(40);
383 }
384
385 @Deprecated
386 @Test
387 public void blockCacheCompressedNumShardBits() {
388 final BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
389 blockBasedTableConfig.setBlockCacheCompressedNumShardBits(4);
390 assertThat(blockBasedTableConfig.blockCacheCompressedNumShardBits()).
391 isEqualTo(4);
7c673cae
FG
392 }
393}