]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
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 | package org.rocksdb; | |
6 | ||
7 | import static java.nio.charset.StandardCharsets.UTF_8; | |
8 | import static org.assertj.core.api.Assertions.assertThat; | |
9 | ||
10 | import java.util.ArrayList; | |
11 | import java.util.Collections; | |
12 | import java.util.List; | |
13 | import org.junit.Rule; | |
14 | import org.junit.Test; | |
15 | import org.junit.rules.TemporaryFolder; | |
16 | ||
17 | public class MutableOptionsGetSetTest { | |
18 | final int minBlobSize = 65536; | |
19 | ||
20 | @Rule public TemporaryFolder dbFolder = new TemporaryFolder(); | |
21 | ||
22 | /** | |
23 | * Validate the round-trip of blob options into and out of the C++ core of RocksDB | |
24 | * From CF options on CF Creation to {RocksDB#getOptions} | |
25 | * Uses 2x column families with different values for their options. | |
26 | * NOTE that some constraints are applied to the options in the C++ core, | |
27 | * e.g. on {ColumnFamilyOptions#setMemtablePrefixBloomSizeRatio} | |
28 | * | |
29 | * @throws RocksDBException if the database throws an exception | |
30 | */ | |
31 | @Test | |
32 | public void testGetMutableBlobOptionsAfterCreate() throws RocksDBException { | |
33 | final ColumnFamilyOptions columnFamilyOptions0 = new ColumnFamilyOptions(); | |
34 | final ColumnFamilyDescriptor columnFamilyDescriptor0 = | |
35 | new ColumnFamilyDescriptor("default".getBytes(UTF_8), columnFamilyOptions0); | |
36 | final List<ColumnFamilyDescriptor> columnFamilyDescriptors = | |
37 | Collections.singletonList(columnFamilyDescriptor0); | |
38 | final List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>(); | |
39 | ||
40 | try (final DBOptions dbOptions = new DBOptions().setCreateIfMissing(true); | |
41 | final RocksDB db = RocksDB.open(dbOptions, dbFolder.getRoot().getAbsolutePath(), | |
42 | columnFamilyDescriptors, columnFamilyHandles)) { | |
43 | try (final ColumnFamilyOptions columnFamilyOptions1 = | |
44 | new ColumnFamilyOptions() | |
45 | .setMinBlobSize(minBlobSize) | |
46 | .setEnableBlobFiles(true) | |
47 | .setBlobGarbageCollectionAgeCutoff(0.25) | |
48 | .setBlobGarbageCollectionForceThreshold(0.80) | |
49 | .setBlobCompactionReadaheadSize(262144) | |
50 | .setBlobFileStartingLevel(2) | |
51 | .setArenaBlockSize(42) | |
52 | .setMemtablePrefixBloomSizeRatio(0.17) | |
53 | .setExperimentalMempurgeThreshold(0.005) | |
54 | .setMemtableWholeKeyFiltering(false) | |
55 | .setMemtableHugePageSize(3) | |
56 | .setMaxSuccessiveMerges(4) | |
57 | .setMaxWriteBufferNumber(12) | |
58 | .setInplaceUpdateNumLocks(16) | |
59 | .setDisableAutoCompactions(false) | |
60 | .setSoftPendingCompactionBytesLimit(112) | |
61 | .setHardPendingCompactionBytesLimit(280) | |
62 | .setLevel0FileNumCompactionTrigger(200) | |
63 | .setLevel0SlowdownWritesTrigger(312) | |
64 | .setLevel0StopWritesTrigger(584) | |
65 | .setMaxCompactionBytes(12) | |
66 | .setTargetFileSizeBase(99) | |
67 | .setTargetFileSizeMultiplier(112) | |
68 | .setMaxSequentialSkipInIterations(50) | |
69 | .setReportBgIoStats(true); | |
70 | ||
71 | final ColumnFamilyOptions columnFamilyOptions2 = | |
72 | new ColumnFamilyOptions() | |
73 | .setMinBlobSize(minBlobSize) | |
74 | .setEnableBlobFiles(false) | |
75 | .setArenaBlockSize(42) | |
76 | .setMemtablePrefixBloomSizeRatio(0.236) | |
77 | .setExperimentalMempurgeThreshold(0.247) | |
78 | .setMemtableWholeKeyFiltering(true) | |
79 | .setMemtableHugePageSize(8) | |
80 | .setMaxSuccessiveMerges(12) | |
81 | .setMaxWriteBufferNumber(22) | |
82 | .setInplaceUpdateNumLocks(160) | |
83 | .setDisableAutoCompactions(true) | |
84 | .setSoftPendingCompactionBytesLimit(1124) | |
85 | .setHardPendingCompactionBytesLimit(2800) | |
86 | .setLevel0FileNumCompactionTrigger(2000) | |
87 | .setLevel0SlowdownWritesTrigger(5840) | |
88 | .setLevel0StopWritesTrigger(31200) | |
89 | .setMaxCompactionBytes(112) | |
90 | .setTargetFileSizeBase(999) | |
91 | .setTargetFileSizeMultiplier(1120) | |
92 | .setMaxSequentialSkipInIterations(24) | |
93 | .setReportBgIoStats(true)) { | |
94 | final ColumnFamilyDescriptor columnFamilyDescriptor1 = | |
95 | new ColumnFamilyDescriptor("column_family_1".getBytes(UTF_8), columnFamilyOptions1); | |
96 | final ColumnFamilyDescriptor columnFamilyDescriptor2 = | |
97 | new ColumnFamilyDescriptor("column_family_2".getBytes(UTF_8), columnFamilyOptions2); | |
98 | ||
99 | // Create the column family with blob options | |
100 | final ColumnFamilyHandle columnFamilyHandle1 = | |
101 | db.createColumnFamily(columnFamilyDescriptor1); | |
102 | final ColumnFamilyHandle columnFamilyHandle2 = | |
103 | db.createColumnFamily(columnFamilyDescriptor2); | |
104 | ||
105 | // Check the getOptions() brings back the creation options for CF1 | |
106 | final MutableColumnFamilyOptions.MutableColumnFamilyOptionsBuilder builder1 = | |
107 | db.getOptions(columnFamilyHandle1); | |
108 | assertThat(builder1.enableBlobFiles()).isEqualTo(true); | |
109 | assertThat(builder1.blobGarbageCollectionAgeCutoff()).isEqualTo(0.25); | |
110 | assertThat(builder1.blobGarbageCollectionForceThreshold()).isEqualTo(0.80); | |
111 | assertThat(builder1.blobCompactionReadaheadSize()).isEqualTo(262144); | |
112 | assertThat(builder1.blobFileStartingLevel()).isEqualTo(2); | |
113 | assertThat(builder1.minBlobSize()).isEqualTo(minBlobSize); | |
114 | assertThat(builder1.arenaBlockSize()).isEqualTo(42); | |
115 | assertThat(builder1.memtablePrefixBloomSizeRatio()).isEqualTo(0.17); | |
116 | assertThat(builder1.experimentalMempurgeThreshold()).isEqualTo(0.005); | |
117 | assertThat(builder1.memtableWholeKeyFiltering()).isEqualTo(false); | |
118 | assertThat(builder1.memtableHugePageSize()).isEqualTo(3); | |
119 | assertThat(builder1.maxSuccessiveMerges()).isEqualTo(4); | |
120 | assertThat(builder1.maxWriteBufferNumber()).isEqualTo(12); | |
121 | assertThat(builder1.inplaceUpdateNumLocks()).isEqualTo(16); | |
122 | assertThat(builder1.disableAutoCompactions()).isEqualTo(false); | |
123 | assertThat(builder1.softPendingCompactionBytesLimit()).isEqualTo(112); | |
124 | assertThat(builder1.hardPendingCompactionBytesLimit()).isEqualTo(280); | |
125 | assertThat(builder1.level0FileNumCompactionTrigger()).isEqualTo(200); | |
126 | assertThat(builder1.level0SlowdownWritesTrigger()).isEqualTo(312); | |
127 | assertThat(builder1.level0StopWritesTrigger()).isEqualTo(584); | |
128 | assertThat(builder1.maxCompactionBytes()).isEqualTo(12); | |
129 | assertThat(builder1.targetFileSizeBase()).isEqualTo(99); | |
130 | assertThat(builder1.targetFileSizeMultiplier()).isEqualTo(112); | |
131 | assertThat(builder1.maxSequentialSkipInIterations()).isEqualTo(50); | |
132 | assertThat(builder1.reportBgIoStats()).isEqualTo(true); | |
133 | ||
134 | // Check the getOptions() brings back the creation options for CF2 | |
135 | final MutableColumnFamilyOptions.MutableColumnFamilyOptionsBuilder builder2 = | |
136 | db.getOptions(columnFamilyHandle2); | |
137 | assertThat(builder2.enableBlobFiles()).isEqualTo(false); | |
138 | assertThat(builder2.minBlobSize()).isEqualTo(minBlobSize); | |
139 | assertThat(builder2.arenaBlockSize()).isEqualTo(42); | |
140 | assertThat(builder2.memtablePrefixBloomSizeRatio()).isEqualTo(0.236); | |
141 | assertThat(builder2.experimentalMempurgeThreshold()).isEqualTo(0.247); | |
142 | assertThat(builder2.memtableWholeKeyFiltering()).isEqualTo(true); | |
143 | assertThat(builder2.memtableHugePageSize()).isEqualTo(8); | |
144 | assertThat(builder2.maxSuccessiveMerges()).isEqualTo(12); | |
145 | assertThat(builder2.maxWriteBufferNumber()).isEqualTo(22); | |
146 | assertThat(builder2.inplaceUpdateNumLocks()).isEqualTo(160); | |
147 | assertThat(builder2.disableAutoCompactions()).isEqualTo(true); | |
148 | assertThat(builder2.softPendingCompactionBytesLimit()).isEqualTo(1124); | |
149 | assertThat(builder2.hardPendingCompactionBytesLimit()).isEqualTo(2800); | |
150 | assertThat(builder2.level0FileNumCompactionTrigger()).isEqualTo(2000); | |
151 | assertThat(builder2.level0SlowdownWritesTrigger()).isEqualTo(5840); | |
152 | assertThat(builder2.level0StopWritesTrigger()).isEqualTo(31200); | |
153 | assertThat(builder2.maxCompactionBytes()).isEqualTo(112); | |
154 | assertThat(builder2.targetFileSizeBase()).isEqualTo(999); | |
155 | assertThat(builder2.targetFileSizeMultiplier()).isEqualTo(1120); | |
156 | assertThat(builder2.maxSequentialSkipInIterations()).isEqualTo(24); | |
157 | assertThat(builder2.reportBgIoStats()).isEqualTo(true); | |
158 | } | |
159 | } | |
160 | } | |
161 | ||
162 | /** | |
163 | * Validate the round-trip of blob options into and out of the C++ core of RocksDB | |
164 | * From {RocksDB#setOptions} to {RocksDB#getOptions} | |
165 | * Uses 2x column families with different values for their options. | |
166 | * NOTE that some constraints are applied to the options in the C++ core, | |
167 | * e.g. on {ColumnFamilyOptions#setMemtablePrefixBloomSizeRatio} | |
168 | * | |
169 | * @throws RocksDBException if a database access has an error | |
170 | */ | |
171 | @Test | |
172 | public void testGetMutableBlobOptionsAfterSetCF() throws RocksDBException { | |
173 | final ColumnFamilyOptions columnFamilyOptions0 = new ColumnFamilyOptions(); | |
174 | final ColumnFamilyDescriptor columnFamilyDescriptor0 = | |
175 | new ColumnFamilyDescriptor("default".getBytes(UTF_8), columnFamilyOptions0); | |
176 | final List<ColumnFamilyDescriptor> columnFamilyDescriptors = | |
177 | Collections.singletonList(columnFamilyDescriptor0); | |
178 | final List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>(); | |
179 | ||
180 | try (final DBOptions dbOptions = new DBOptions().setCreateIfMissing(true); | |
181 | final RocksDB db = RocksDB.open(dbOptions, dbFolder.getRoot().getAbsolutePath(), | |
182 | columnFamilyDescriptors, columnFamilyHandles)) { | |
183 | try (final ColumnFamilyOptions columnFamilyOptions1 = new ColumnFamilyOptions(); | |
184 | ||
185 | final ColumnFamilyOptions columnFamilyOptions2 = new ColumnFamilyOptions()) { | |
186 | final ColumnFamilyDescriptor columnFamilyDescriptor1 = | |
187 | new ColumnFamilyDescriptor("column_family_1".getBytes(UTF_8), columnFamilyOptions1); | |
188 | final ColumnFamilyDescriptor columnFamilyDescriptor2 = | |
189 | new ColumnFamilyDescriptor("column_family_2".getBytes(UTF_8), columnFamilyOptions2); | |
190 | ||
191 | // Create the column family with blob options | |
192 | final ColumnFamilyHandle columnFamilyHandle1 = | |
193 | db.createColumnFamily(columnFamilyDescriptor1); | |
194 | final ColumnFamilyHandle columnFamilyHandle2 = | |
195 | db.createColumnFamily(columnFamilyDescriptor2); | |
196 | db.flush(new FlushOptions().setWaitForFlush(true)); | |
197 | ||
198 | final MutableColumnFamilyOptions | |
199 | .MutableColumnFamilyOptionsBuilder mutableColumnFamilyOptions1 = | |
200 | MutableColumnFamilyOptions.builder() | |
201 | .setMinBlobSize(minBlobSize) | |
202 | .setEnableBlobFiles(true) | |
203 | .setBlobGarbageCollectionAgeCutoff(0.25) | |
204 | .setBlobGarbageCollectionForceThreshold(0.80) | |
205 | .setBlobCompactionReadaheadSize(262144) | |
206 | .setBlobFileStartingLevel(3) | |
207 | .setArenaBlockSize(42) | |
208 | .setMemtablePrefixBloomSizeRatio(0.17) | |
209 | .setExperimentalMempurgeThreshold(0.005) | |
210 | .setMemtableWholeKeyFiltering(false) | |
211 | .setMemtableHugePageSize(3) | |
212 | .setMaxSuccessiveMerges(4) | |
213 | .setMaxWriteBufferNumber(12) | |
214 | .setInplaceUpdateNumLocks(16) | |
215 | .setDisableAutoCompactions(false) | |
216 | .setSoftPendingCompactionBytesLimit(112) | |
217 | .setHardPendingCompactionBytesLimit(280) | |
218 | .setLevel0FileNumCompactionTrigger(200) | |
219 | .setLevel0SlowdownWritesTrigger(312) | |
220 | .setLevel0StopWritesTrigger(584) | |
221 | .setMaxCompactionBytes(12) | |
222 | .setTargetFileSizeBase(99) | |
223 | .setTargetFileSizeMultiplier(112); | |
224 | db.setOptions(columnFamilyHandle1, mutableColumnFamilyOptions1.build()); | |
225 | ||
226 | // Check the getOptions() brings back the creation options for CF1 | |
227 | final MutableColumnFamilyOptions.MutableColumnFamilyOptionsBuilder builder1 = | |
228 | db.getOptions(columnFamilyHandle1); | |
229 | assertThat(builder1.enableBlobFiles()).isEqualTo(true); | |
230 | assertThat(builder1.blobGarbageCollectionAgeCutoff()).isEqualTo(0.25); | |
231 | assertThat(builder1.blobGarbageCollectionForceThreshold()).isEqualTo(0.80); | |
232 | assertThat(builder1.blobCompactionReadaheadSize()).isEqualTo(262144); | |
233 | assertThat(builder1.blobFileStartingLevel()).isEqualTo(3); | |
234 | assertThat(builder1.minBlobSize()).isEqualTo(minBlobSize); | |
235 | assertThat(builder1.arenaBlockSize()).isEqualTo(42); | |
236 | assertThat(builder1.memtablePrefixBloomSizeRatio()).isEqualTo(0.17); | |
237 | assertThat(builder1.experimentalMempurgeThreshold()).isEqualTo(0.005); | |
238 | assertThat(builder1.memtableWholeKeyFiltering()).isEqualTo(false); | |
239 | assertThat(builder1.memtableHugePageSize()).isEqualTo(3); | |
240 | assertThat(builder1.maxSuccessiveMerges()).isEqualTo(4); | |
241 | assertThat(builder1.maxWriteBufferNumber()).isEqualTo(12); | |
242 | assertThat(builder1.inplaceUpdateNumLocks()).isEqualTo(16); | |
243 | assertThat(builder1.disableAutoCompactions()).isEqualTo(false); | |
244 | assertThat(builder1.softPendingCompactionBytesLimit()).isEqualTo(112); | |
245 | assertThat(builder1.hardPendingCompactionBytesLimit()).isEqualTo(280); | |
246 | assertThat(builder1.level0FileNumCompactionTrigger()).isEqualTo(200); | |
247 | assertThat(builder1.level0SlowdownWritesTrigger()).isEqualTo(312); | |
248 | assertThat(builder1.level0StopWritesTrigger()).isEqualTo(584); | |
249 | assertThat(builder1.maxCompactionBytes()).isEqualTo(12); | |
250 | assertThat(builder1.targetFileSizeBase()).isEqualTo(99); | |
251 | assertThat(builder1.targetFileSizeMultiplier()).isEqualTo(112); | |
252 | ||
253 | final MutableColumnFamilyOptions | |
254 | .MutableColumnFamilyOptionsBuilder mutableColumnFamilyOptions2 = | |
255 | MutableColumnFamilyOptions.builder() | |
256 | .setMinBlobSize(minBlobSize) | |
257 | .setEnableBlobFiles(false) | |
258 | .setArenaBlockSize(42) | |
259 | .setMemtablePrefixBloomSizeRatio(0.236) | |
260 | .setExperimentalMempurgeThreshold(0.247) | |
261 | .setMemtableWholeKeyFiltering(true) | |
262 | .setMemtableHugePageSize(8) | |
263 | .setMaxSuccessiveMerges(12) | |
264 | .setMaxWriteBufferNumber(22) | |
265 | .setInplaceUpdateNumLocks(160) | |
266 | .setDisableAutoCompactions(true) | |
267 | .setSoftPendingCompactionBytesLimit(1124) | |
268 | .setHardPendingCompactionBytesLimit(2800) | |
269 | .setLevel0FileNumCompactionTrigger(2000) | |
270 | .setLevel0SlowdownWritesTrigger(5840) | |
271 | .setLevel0StopWritesTrigger(31200) | |
272 | .setMaxCompactionBytes(112) | |
273 | .setTargetFileSizeBase(999) | |
274 | .setTargetFileSizeMultiplier(1120); | |
275 | db.setOptions(columnFamilyHandle2, mutableColumnFamilyOptions2.build()); | |
276 | ||
277 | // Check the getOptions() brings back the creation options for CF2 | |
278 | final MutableColumnFamilyOptions.MutableColumnFamilyOptionsBuilder builder2 = | |
279 | db.getOptions(columnFamilyHandle2); | |
280 | assertThat(builder2.enableBlobFiles()).isEqualTo(false); | |
281 | assertThat(builder2.minBlobSize()).isEqualTo(minBlobSize); | |
282 | assertThat(builder2.arenaBlockSize()).isEqualTo(42); | |
283 | assertThat(builder2.memtablePrefixBloomSizeRatio()).isEqualTo(0.236); | |
284 | assertThat(builder2.experimentalMempurgeThreshold()).isEqualTo(0.247); | |
285 | assertThat(builder2.memtableWholeKeyFiltering()).isEqualTo(true); | |
286 | assertThat(builder2.memtableHugePageSize()).isEqualTo(8); | |
287 | assertThat(builder2.maxSuccessiveMerges()).isEqualTo(12); | |
288 | assertThat(builder2.maxWriteBufferNumber()).isEqualTo(22); | |
289 | assertThat(builder2.inplaceUpdateNumLocks()).isEqualTo(160); | |
290 | assertThat(builder2.disableAutoCompactions()).isEqualTo(true); | |
291 | assertThat(builder2.softPendingCompactionBytesLimit()).isEqualTo(1124); | |
292 | assertThat(builder2.hardPendingCompactionBytesLimit()).isEqualTo(2800); | |
293 | assertThat(builder2.level0FileNumCompactionTrigger()).isEqualTo(2000); | |
294 | assertThat(builder2.level0SlowdownWritesTrigger()).isEqualTo(5840); | |
295 | assertThat(builder2.level0StopWritesTrigger()).isEqualTo(31200); | |
296 | assertThat(builder2.maxCompactionBytes()).isEqualTo(112); | |
297 | assertThat(builder2.targetFileSizeBase()).isEqualTo(999); | |
298 | assertThat(builder2.targetFileSizeMultiplier()).isEqualTo(1120); | |
299 | } | |
300 | } | |
301 | } | |
302 | ||
303 | /** | |
304 | * Validate the round-trip of blob options into and out of the C++ core of RocksDB | |
305 | * From {RocksDB#setOptions} to {RocksDB#getOptions} | |
306 | * Uses 2x column families with different values for their options. | |
307 | * NOTE that some constraints are applied to the options in the C++ core, | |
308 | * e.g. on {ColumnFamilyOptions#setMemtablePrefixBloomSizeRatio} | |
309 | * | |
310 | * @throws RocksDBException if a database access has an error | |
311 | */ | |
312 | @Test | |
313 | public void testGetMutableBlobOptionsAfterSet() throws RocksDBException { | |
314 | final ColumnFamilyOptions columnFamilyOptions0 = new ColumnFamilyOptions(); | |
315 | final ColumnFamilyDescriptor columnFamilyDescriptor0 = | |
316 | new ColumnFamilyDescriptor("default".getBytes(UTF_8), columnFamilyOptions0); | |
317 | final List<ColumnFamilyDescriptor> columnFamilyDescriptors = | |
318 | Collections.singletonList(columnFamilyDescriptor0); | |
319 | final List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>(); | |
320 | ||
321 | try (final DBOptions dbOptions = new DBOptions().setCreateIfMissing(true); | |
322 | final RocksDB db = RocksDB.open(dbOptions, dbFolder.getRoot().getAbsolutePath(), | |
323 | columnFamilyDescriptors, columnFamilyHandles)) { | |
324 | final MutableColumnFamilyOptions | |
325 | .MutableColumnFamilyOptionsBuilder mutableColumnFamilyOptions = | |
326 | MutableColumnFamilyOptions.builder() | |
327 | .setMinBlobSize(minBlobSize) | |
328 | .setEnableBlobFiles(true) | |
329 | .setBlobGarbageCollectionAgeCutoff(0.25) | |
330 | .setBlobGarbageCollectionForceThreshold(0.80) | |
331 | .setBlobCompactionReadaheadSize(131072) | |
332 | .setBlobFileStartingLevel(4) | |
333 | .setArenaBlockSize(42) | |
334 | .setMemtablePrefixBloomSizeRatio(0.17) | |
335 | .setExperimentalMempurgeThreshold(0.005) | |
336 | .setMemtableWholeKeyFiltering(false) | |
337 | .setMemtableHugePageSize(3) | |
338 | .setMaxSuccessiveMerges(4) | |
339 | .setMaxWriteBufferNumber(12) | |
340 | .setInplaceUpdateNumLocks(16) | |
341 | .setDisableAutoCompactions(false) | |
342 | .setSoftPendingCompactionBytesLimit(112) | |
343 | .setHardPendingCompactionBytesLimit(280) | |
344 | .setLevel0FileNumCompactionTrigger(200) | |
345 | .setLevel0SlowdownWritesTrigger(312) | |
346 | .setLevel0StopWritesTrigger(584) | |
347 | .setMaxCompactionBytes(12) | |
348 | .setTargetFileSizeBase(99) | |
349 | .setTargetFileSizeMultiplier(112); | |
350 | db.setOptions(mutableColumnFamilyOptions.build()); | |
351 | ||
352 | // Check the getOptions() brings back the creation options for CF1 | |
353 | final MutableColumnFamilyOptions.MutableColumnFamilyOptionsBuilder builder1 = db.getOptions(); | |
354 | assertThat(builder1.enableBlobFiles()).isEqualTo(true); | |
355 | assertThat(builder1.blobGarbageCollectionAgeCutoff()).isEqualTo(0.25); | |
356 | assertThat(builder1.blobGarbageCollectionForceThreshold()).isEqualTo(0.80); | |
357 | assertThat(builder1.blobCompactionReadaheadSize()).isEqualTo(131072); | |
358 | assertThat(builder1.blobFileStartingLevel()).isEqualTo(4); | |
359 | assertThat(builder1.minBlobSize()).isEqualTo(minBlobSize); | |
360 | assertThat(builder1.arenaBlockSize()).isEqualTo(42); | |
361 | assertThat(builder1.memtablePrefixBloomSizeRatio()).isEqualTo(0.17); | |
362 | assertThat(builder1.experimentalMempurgeThreshold()).isEqualTo(0.005); | |
363 | assertThat(builder1.memtableWholeKeyFiltering()).isEqualTo(false); | |
364 | assertThat(builder1.memtableHugePageSize()).isEqualTo(3); | |
365 | assertThat(builder1.maxSuccessiveMerges()).isEqualTo(4); | |
366 | assertThat(builder1.maxWriteBufferNumber()).isEqualTo(12); | |
367 | assertThat(builder1.inplaceUpdateNumLocks()).isEqualTo(16); | |
368 | assertThat(builder1.disableAutoCompactions()).isEqualTo(false); | |
369 | assertThat(builder1.softPendingCompactionBytesLimit()).isEqualTo(112); | |
370 | assertThat(builder1.hardPendingCompactionBytesLimit()).isEqualTo(280); | |
371 | assertThat(builder1.level0FileNumCompactionTrigger()).isEqualTo(200); | |
372 | assertThat(builder1.level0SlowdownWritesTrigger()).isEqualTo(312); | |
373 | assertThat(builder1.level0StopWritesTrigger()).isEqualTo(584); | |
374 | assertThat(builder1.maxCompactionBytes()).isEqualTo(12); | |
375 | assertThat(builder1.targetFileSizeBase()).isEqualTo(99); | |
376 | assertThat(builder1.targetFileSizeMultiplier()).isEqualTo(112); | |
377 | } | |
378 | } | |
379 | ||
380 | @Test | |
381 | public void testGetMutableDBOptionsAfterSet() throws RocksDBException { | |
382 | final ColumnFamilyOptions columnFamilyOptions0 = new ColumnFamilyOptions(); | |
383 | final ColumnFamilyDescriptor columnFamilyDescriptor0 = | |
384 | new ColumnFamilyDescriptor("default".getBytes(UTF_8), columnFamilyOptions0); | |
385 | final List<ColumnFamilyDescriptor> columnFamilyDescriptors = | |
386 | Collections.singletonList(columnFamilyDescriptor0); | |
387 | final List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>(); | |
388 | ||
389 | try (final DBOptions dbOptions = new DBOptions().setCreateIfMissing(true); | |
390 | final RocksDB db = RocksDB.open(dbOptions, dbFolder.getRoot().getAbsolutePath(), | |
391 | columnFamilyDescriptors, columnFamilyHandles)) { | |
392 | final MutableDBOptions.MutableDBOptionsBuilder mutableDBOptions = | |
393 | MutableDBOptions.builder() | |
394 | .setMaxBackgroundJobs(16) | |
395 | .setAvoidFlushDuringShutdown(true) | |
396 | .setWritableFileMaxBufferSize(2097152) | |
397 | .setDelayedWriteRate(67108864) | |
398 | .setMaxTotalWalSize(16777216) | |
399 | .setDeleteObsoleteFilesPeriodMicros(86400000000L) | |
400 | .setStatsDumpPeriodSec(1200) | |
401 | .setStatsPersistPeriodSec(7200) | |
402 | .setStatsHistoryBufferSize(6291456) | |
403 | .setMaxOpenFiles(8) | |
404 | .setBytesPerSync(4194304) | |
405 | .setWalBytesPerSync(1048576) | |
406 | .setStrictBytesPerSync(true) | |
407 | .setCompactionReadaheadSize(1024); | |
408 | ||
409 | db.setDBOptions(mutableDBOptions.build()); | |
410 | ||
411 | final MutableDBOptions.MutableDBOptionsBuilder getBuilder = db.getDBOptions(); | |
412 | assertThat(getBuilder.maxBackgroundJobs()).isEqualTo(16); // 4 | |
413 | assertThat(getBuilder.avoidFlushDuringShutdown()).isEqualTo(true); // false | |
414 | assertThat(getBuilder.writableFileMaxBufferSize()).isEqualTo(2097152); // 1048576 | |
415 | assertThat(getBuilder.delayedWriteRate()).isEqualTo(67108864); // 16777216 | |
416 | assertThat(getBuilder.maxTotalWalSize()).isEqualTo(16777216); | |
417 | assertThat(getBuilder.deleteObsoleteFilesPeriodMicros()) | |
418 | .isEqualTo(86400000000L); // 21600000000 | |
419 | assertThat(getBuilder.statsDumpPeriodSec()).isEqualTo(1200); // 600 | |
420 | assertThat(getBuilder.statsPersistPeriodSec()).isEqualTo(7200); // 600 | |
421 | assertThat(getBuilder.statsHistoryBufferSize()).isEqualTo(6291456); // 1048576 | |
422 | assertThat(getBuilder.maxOpenFiles()).isEqualTo(8); //-1 | |
423 | assertThat(getBuilder.bytesPerSync()).isEqualTo(4194304); // 1048576 | |
424 | assertThat(getBuilder.walBytesPerSync()).isEqualTo(1048576); // 0 | |
425 | assertThat(getBuilder.strictBytesPerSync()).isEqualTo(true); // false | |
426 | assertThat(getBuilder.compactionReadaheadSize()).isEqualTo(1024); // 0 | |
427 | } | |
428 | } | |
429 | } |