1 // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
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).
5 
6 package org.rocksdb;
7 
8 import org.junit.ClassRule;
9 import org.junit.Test;
10 
11 import static org.assertj.core.api.Assertions.assertThat;
12 
13 public class MemTableTest {
14 
15   @ClassRule
16   public static final RocksNativeLibraryResource ROCKS_NATIVE_LIBRARY_RESOURCE =
17       new RocksNativeLibraryResource();
18 
19   @Test
hashSkipListMemTable()20   public void hashSkipListMemTable() throws RocksDBException {
21     try(final Options options = new Options()) {
22       // Test HashSkipListMemTableConfig
23       HashSkipListMemTableConfig memTableConfig =
24           new HashSkipListMemTableConfig();
25       assertThat(memTableConfig.bucketCount()).
26           isEqualTo(1000000);
27       memTableConfig.setBucketCount(2000000);
28       assertThat(memTableConfig.bucketCount()).
29           isEqualTo(2000000);
30       assertThat(memTableConfig.height()).
31           isEqualTo(4);
32       memTableConfig.setHeight(5);
33       assertThat(memTableConfig.height()).
34           isEqualTo(5);
35       assertThat(memTableConfig.branchingFactor()).
36           isEqualTo(4);
37       memTableConfig.setBranchingFactor(6);
38       assertThat(memTableConfig.branchingFactor()).
39           isEqualTo(6);
40       options.setMemTableConfig(memTableConfig);
41     }
42   }
43 
44   @Test
skipListMemTable()45   public void skipListMemTable() throws RocksDBException {
46     try(final Options options = new Options()) {
47       SkipListMemTableConfig skipMemTableConfig =
48           new SkipListMemTableConfig();
49       assertThat(skipMemTableConfig.lookahead()).
50           isEqualTo(0);
51       skipMemTableConfig.setLookahead(20);
52       assertThat(skipMemTableConfig.lookahead()).
53           isEqualTo(20);
54       options.setMemTableConfig(skipMemTableConfig);
55     }
56   }
57 
58   @Test
hashLinkedListMemTable()59   public void hashLinkedListMemTable() throws RocksDBException {
60     try(final Options options = new Options()) {
61       HashLinkedListMemTableConfig hashLinkedListMemTableConfig =
62           new HashLinkedListMemTableConfig();
63       assertThat(hashLinkedListMemTableConfig.bucketCount()).
64           isEqualTo(50000);
65       hashLinkedListMemTableConfig.setBucketCount(100000);
66       assertThat(hashLinkedListMemTableConfig.bucketCount()).
67           isEqualTo(100000);
68       assertThat(hashLinkedListMemTableConfig.hugePageTlbSize()).
69           isEqualTo(0);
70       hashLinkedListMemTableConfig.setHugePageTlbSize(1);
71       assertThat(hashLinkedListMemTableConfig.hugePageTlbSize()).
72           isEqualTo(1);
73       assertThat(hashLinkedListMemTableConfig.
74           bucketEntriesLoggingThreshold()).
75           isEqualTo(4096);
76       hashLinkedListMemTableConfig.
77           setBucketEntriesLoggingThreshold(200);
78       assertThat(hashLinkedListMemTableConfig.
79           bucketEntriesLoggingThreshold()).
80           isEqualTo(200);
81       assertThat(hashLinkedListMemTableConfig.
82           ifLogBucketDistWhenFlush()).isTrue();
83       hashLinkedListMemTableConfig.
84           setIfLogBucketDistWhenFlush(false);
85       assertThat(hashLinkedListMemTableConfig.
86           ifLogBucketDistWhenFlush()).isFalse();
87       assertThat(hashLinkedListMemTableConfig.
88           thresholdUseSkiplist()).
89           isEqualTo(256);
90       hashLinkedListMemTableConfig.setThresholdUseSkiplist(29);
91       assertThat(hashLinkedListMemTableConfig.
92           thresholdUseSkiplist()).
93           isEqualTo(29);
94       options.setMemTableConfig(hashLinkedListMemTableConfig);
95     }
96   }
97 
98   @Test
vectorMemTable()99   public void vectorMemTable() throws RocksDBException {
100     try(final Options options = new Options()) {
101       VectorMemTableConfig vectorMemTableConfig =
102           new VectorMemTableConfig();
103       assertThat(vectorMemTableConfig.reservedSize()).
104           isEqualTo(0);
105       vectorMemTableConfig.setReservedSize(123);
106       assertThat(vectorMemTableConfig.reservedSize()).
107           isEqualTo(123);
108       options.setMemTableConfig(vectorMemTableConfig);
109     }
110   }
111 }
112