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 static org.assertj.core.api.Assertions.assertThat; 9 import static org.junit.Assert.*; 10 11 import java.io.IOException; 12 import java.nio.file.Files; 13 import java.nio.file.Paths; 14 import java.util.*; 15 import java.util.concurrent.atomic.AtomicBoolean; 16 import org.junit.ClassRule; 17 import org.junit.Test; 18 import org.rocksdb.test.RemoveEmptyValueCompactionFilterFactory; 19 20 public class OptionsTest { 21 22 @ClassRule 23 public static final RocksNativeLibraryResource ROCKS_NATIVE_LIBRARY_RESOURCE = 24 new RocksNativeLibraryResource(); 25 26 public static final Random rand = PlatformRandomHelper. 27 getPlatformSpecificRandomFactory(); 28 29 @Test copyConstructor()30 public void copyConstructor() { 31 Options origOpts = new Options(); 32 origOpts.setNumLevels(rand.nextInt(8)); 33 origOpts.setTargetFileSizeMultiplier(rand.nextInt(100)); 34 origOpts.setLevel0StopWritesTrigger(rand.nextInt(50)); 35 Options copyOpts = new Options(origOpts); 36 assertThat(origOpts.numLevels()).isEqualTo(copyOpts.numLevels()); 37 assertThat(origOpts.targetFileSizeMultiplier()).isEqualTo(copyOpts.targetFileSizeMultiplier()); 38 assertThat(origOpts.level0StopWritesTrigger()).isEqualTo(copyOpts.level0StopWritesTrigger()); 39 } 40 41 @Test setIncreaseParallelism()42 public void setIncreaseParallelism() { 43 try (final Options opt = new Options()) { 44 final int threads = Runtime.getRuntime().availableProcessors() * 2; 45 opt.setIncreaseParallelism(threads); 46 } 47 } 48 49 @Test writeBufferSize()50 public void writeBufferSize() throws RocksDBException { 51 try (final Options opt = new Options()) { 52 final long longValue = rand.nextLong(); 53 opt.setWriteBufferSize(longValue); 54 assertThat(opt.writeBufferSize()).isEqualTo(longValue); 55 } 56 } 57 58 @Test maxWriteBufferNumber()59 public void maxWriteBufferNumber() { 60 try (final Options opt = new Options()) { 61 final int intValue = rand.nextInt(); 62 opt.setMaxWriteBufferNumber(intValue); 63 assertThat(opt.maxWriteBufferNumber()).isEqualTo(intValue); 64 } 65 } 66 67 @Test minWriteBufferNumberToMerge()68 public void minWriteBufferNumberToMerge() { 69 try (final Options opt = new Options()) { 70 final int intValue = rand.nextInt(); 71 opt.setMinWriteBufferNumberToMerge(intValue); 72 assertThat(opt.minWriteBufferNumberToMerge()).isEqualTo(intValue); 73 } 74 } 75 76 @Test numLevels()77 public void numLevels() { 78 try (final Options opt = new Options()) { 79 final int intValue = rand.nextInt(); 80 opt.setNumLevels(intValue); 81 assertThat(opt.numLevels()).isEqualTo(intValue); 82 } 83 } 84 85 @Test levelZeroFileNumCompactionTrigger()86 public void levelZeroFileNumCompactionTrigger() { 87 try (final Options opt = new Options()) { 88 final int intValue = rand.nextInt(); 89 opt.setLevelZeroFileNumCompactionTrigger(intValue); 90 assertThat(opt.levelZeroFileNumCompactionTrigger()).isEqualTo(intValue); 91 } 92 } 93 94 @Test levelZeroSlowdownWritesTrigger()95 public void levelZeroSlowdownWritesTrigger() { 96 try (final Options opt = new Options()) { 97 final int intValue = rand.nextInt(); 98 opt.setLevelZeroSlowdownWritesTrigger(intValue); 99 assertThat(opt.levelZeroSlowdownWritesTrigger()).isEqualTo(intValue); 100 } 101 } 102 103 @Test levelZeroStopWritesTrigger()104 public void levelZeroStopWritesTrigger() { 105 try (final Options opt = new Options()) { 106 final int intValue = rand.nextInt(); 107 opt.setLevelZeroStopWritesTrigger(intValue); 108 assertThat(opt.levelZeroStopWritesTrigger()).isEqualTo(intValue); 109 } 110 } 111 112 @Test targetFileSizeBase()113 public void targetFileSizeBase() { 114 try (final Options opt = new Options()) { 115 final long longValue = rand.nextLong(); 116 opt.setTargetFileSizeBase(longValue); 117 assertThat(opt.targetFileSizeBase()).isEqualTo(longValue); 118 } 119 } 120 121 @Test targetFileSizeMultiplier()122 public void targetFileSizeMultiplier() { 123 try (final Options opt = new Options()) { 124 final int intValue = rand.nextInt(); 125 opt.setTargetFileSizeMultiplier(intValue); 126 assertThat(opt.targetFileSizeMultiplier()).isEqualTo(intValue); 127 } 128 } 129 130 @Test maxBytesForLevelBase()131 public void maxBytesForLevelBase() { 132 try (final Options opt = new Options()) { 133 final long longValue = rand.nextLong(); 134 opt.setMaxBytesForLevelBase(longValue); 135 assertThat(opt.maxBytesForLevelBase()).isEqualTo(longValue); 136 } 137 } 138 139 @Test levelCompactionDynamicLevelBytes()140 public void levelCompactionDynamicLevelBytes() { 141 try (final Options opt = new Options()) { 142 final boolean boolValue = rand.nextBoolean(); 143 opt.setLevelCompactionDynamicLevelBytes(boolValue); 144 assertThat(opt.levelCompactionDynamicLevelBytes()) 145 .isEqualTo(boolValue); 146 } 147 } 148 149 @Test maxBytesForLevelMultiplier()150 public void maxBytesForLevelMultiplier() { 151 try (final Options opt = new Options()) { 152 final double doubleValue = rand.nextDouble(); 153 opt.setMaxBytesForLevelMultiplier(doubleValue); 154 assertThat(opt.maxBytesForLevelMultiplier()).isEqualTo(doubleValue); 155 } 156 } 157 158 @Test maxBytesForLevelMultiplierAdditional()159 public void maxBytesForLevelMultiplierAdditional() { 160 try (final Options opt = new Options()) { 161 final int intValue1 = rand.nextInt(); 162 final int intValue2 = rand.nextInt(); 163 final int[] ints = new int[]{intValue1, intValue2}; 164 opt.setMaxBytesForLevelMultiplierAdditional(ints); 165 assertThat(opt.maxBytesForLevelMultiplierAdditional()).isEqualTo(ints); 166 } 167 } 168 169 @Test maxCompactionBytes()170 public void maxCompactionBytes() { 171 try (final Options opt = new Options()) { 172 final long longValue = rand.nextLong(); 173 opt.setMaxCompactionBytes(longValue); 174 assertThat(opt.maxCompactionBytes()).isEqualTo(longValue); 175 } 176 } 177 178 @Test softPendingCompactionBytesLimit()179 public void softPendingCompactionBytesLimit() { 180 try (final Options opt = new Options()) { 181 final long longValue = rand.nextLong(); 182 opt.setSoftPendingCompactionBytesLimit(longValue); 183 assertThat(opt.softPendingCompactionBytesLimit()).isEqualTo(longValue); 184 } 185 } 186 187 @Test hardPendingCompactionBytesLimit()188 public void hardPendingCompactionBytesLimit() { 189 try (final Options opt = new Options()) { 190 final long longValue = rand.nextLong(); 191 opt.setHardPendingCompactionBytesLimit(longValue); 192 assertThat(opt.hardPendingCompactionBytesLimit()).isEqualTo(longValue); 193 } 194 } 195 196 @Test level0FileNumCompactionTrigger()197 public void level0FileNumCompactionTrigger() { 198 try (final Options opt = new Options()) { 199 final int intValue = rand.nextInt(); 200 opt.setLevel0FileNumCompactionTrigger(intValue); 201 assertThat(opt.level0FileNumCompactionTrigger()).isEqualTo(intValue); 202 } 203 } 204 205 @Test level0SlowdownWritesTrigger()206 public void level0SlowdownWritesTrigger() { 207 try (final Options opt = new Options()) { 208 final int intValue = rand.nextInt(); 209 opt.setLevel0SlowdownWritesTrigger(intValue); 210 assertThat(opt.level0SlowdownWritesTrigger()).isEqualTo(intValue); 211 } 212 } 213 214 @Test level0StopWritesTrigger()215 public void level0StopWritesTrigger() { 216 try (final Options opt = new Options()) { 217 final int intValue = rand.nextInt(); 218 opt.setLevel0StopWritesTrigger(intValue); 219 assertThat(opt.level0StopWritesTrigger()).isEqualTo(intValue); 220 } 221 } 222 223 @Test arenaBlockSize()224 public void arenaBlockSize() throws RocksDBException { 225 try (final Options opt = new Options()) { 226 final long longValue = rand.nextLong(); 227 opt.setArenaBlockSize(longValue); 228 assertThat(opt.arenaBlockSize()).isEqualTo(longValue); 229 } 230 } 231 232 @Test disableAutoCompactions()233 public void disableAutoCompactions() { 234 try (final Options opt = new Options()) { 235 final boolean boolValue = rand.nextBoolean(); 236 opt.setDisableAutoCompactions(boolValue); 237 assertThat(opt.disableAutoCompactions()).isEqualTo(boolValue); 238 } 239 } 240 241 @Test maxSequentialSkipInIterations()242 public void maxSequentialSkipInIterations() { 243 try (final Options opt = new Options()) { 244 final long longValue = rand.nextLong(); 245 opt.setMaxSequentialSkipInIterations(longValue); 246 assertThat(opt.maxSequentialSkipInIterations()).isEqualTo(longValue); 247 } 248 } 249 250 @Test inplaceUpdateSupport()251 public void inplaceUpdateSupport() { 252 try (final Options opt = new Options()) { 253 final boolean boolValue = rand.nextBoolean(); 254 opt.setInplaceUpdateSupport(boolValue); 255 assertThat(opt.inplaceUpdateSupport()).isEqualTo(boolValue); 256 } 257 } 258 259 @Test inplaceUpdateNumLocks()260 public void inplaceUpdateNumLocks() throws RocksDBException { 261 try (final Options opt = new Options()) { 262 final long longValue = rand.nextLong(); 263 opt.setInplaceUpdateNumLocks(longValue); 264 assertThat(opt.inplaceUpdateNumLocks()).isEqualTo(longValue); 265 } 266 } 267 268 @Test memtablePrefixBloomSizeRatio()269 public void memtablePrefixBloomSizeRatio() { 270 try (final Options opt = new Options()) { 271 final double doubleValue = rand.nextDouble(); 272 opt.setMemtablePrefixBloomSizeRatio(doubleValue); 273 assertThat(opt.memtablePrefixBloomSizeRatio()).isEqualTo(doubleValue); 274 } 275 } 276 277 @Test memtableHugePageSize()278 public void memtableHugePageSize() { 279 try (final Options opt = new Options()) { 280 final long longValue = rand.nextLong(); 281 opt.setMemtableHugePageSize(longValue); 282 assertThat(opt.memtableHugePageSize()).isEqualTo(longValue); 283 } 284 } 285 286 @Test bloomLocality()287 public void bloomLocality() { 288 try (final Options opt = new Options()) { 289 final int intValue = rand.nextInt(); 290 opt.setBloomLocality(intValue); 291 assertThat(opt.bloomLocality()).isEqualTo(intValue); 292 } 293 } 294 295 @Test maxSuccessiveMerges()296 public void maxSuccessiveMerges() throws RocksDBException { 297 try (final Options opt = new Options()) { 298 final long longValue = rand.nextLong(); 299 opt.setMaxSuccessiveMerges(longValue); 300 assertThat(opt.maxSuccessiveMerges()).isEqualTo(longValue); 301 } 302 } 303 304 @Test optimizeFiltersForHits()305 public void optimizeFiltersForHits() { 306 try (final Options opt = new Options()) { 307 final boolean aBoolean = rand.nextBoolean(); 308 opt.setOptimizeFiltersForHits(aBoolean); 309 assertThat(opt.optimizeFiltersForHits()).isEqualTo(aBoolean); 310 } 311 } 312 313 @Test createIfMissing()314 public void createIfMissing() { 315 try (final Options opt = new Options()) { 316 final boolean boolValue = rand.nextBoolean(); 317 opt.setCreateIfMissing(boolValue); 318 assertThat(opt.createIfMissing()). 319 isEqualTo(boolValue); 320 } 321 } 322 323 @Test createMissingColumnFamilies()324 public void createMissingColumnFamilies() { 325 try (final Options opt = new Options()) { 326 final boolean boolValue = rand.nextBoolean(); 327 opt.setCreateMissingColumnFamilies(boolValue); 328 assertThat(opt.createMissingColumnFamilies()). 329 isEqualTo(boolValue); 330 } 331 } 332 333 @Test errorIfExists()334 public void errorIfExists() { 335 try (final Options opt = new Options()) { 336 final boolean boolValue = rand.nextBoolean(); 337 opt.setErrorIfExists(boolValue); 338 assertThat(opt.errorIfExists()).isEqualTo(boolValue); 339 } 340 } 341 342 @Test paranoidChecks()343 public void paranoidChecks() { 344 try (final Options opt = new Options()) { 345 final boolean boolValue = rand.nextBoolean(); 346 opt.setParanoidChecks(boolValue); 347 assertThat(opt.paranoidChecks()). 348 isEqualTo(boolValue); 349 } 350 } 351 352 @Test maxTotalWalSize()353 public void maxTotalWalSize() { 354 try (final Options opt = new Options()) { 355 final long longValue = rand.nextLong(); 356 opt.setMaxTotalWalSize(longValue); 357 assertThat(opt.maxTotalWalSize()). 358 isEqualTo(longValue); 359 } 360 } 361 362 @Test maxOpenFiles()363 public void maxOpenFiles() { 364 try (final Options opt = new Options()) { 365 final int intValue = rand.nextInt(); 366 opt.setMaxOpenFiles(intValue); 367 assertThat(opt.maxOpenFiles()).isEqualTo(intValue); 368 } 369 } 370 371 @Test maxFileOpeningThreads()372 public void maxFileOpeningThreads() { 373 try (final Options opt = new Options()) { 374 final int intValue = rand.nextInt(); 375 opt.setMaxFileOpeningThreads(intValue); 376 assertThat(opt.maxFileOpeningThreads()).isEqualTo(intValue); 377 } 378 } 379 380 @Test useFsync()381 public void useFsync() { 382 try (final Options opt = new Options()) { 383 final boolean boolValue = rand.nextBoolean(); 384 opt.setUseFsync(boolValue); 385 assertThat(opt.useFsync()).isEqualTo(boolValue); 386 } 387 } 388 389 @Test dbPaths()390 public void dbPaths() { 391 final List<DbPath> dbPaths = new ArrayList<>(); 392 dbPaths.add(new DbPath(Paths.get("/a"), 10)); 393 dbPaths.add(new DbPath(Paths.get("/b"), 100)); 394 dbPaths.add(new DbPath(Paths.get("/c"), 1000)); 395 396 try (final Options opt = new Options()) { 397 assertThat(opt.dbPaths()).isEqualTo(Collections.emptyList()); 398 399 opt.setDbPaths(dbPaths); 400 401 assertThat(opt.dbPaths()).isEqualTo(dbPaths); 402 } 403 } 404 405 @Test dbLogDir()406 public void dbLogDir() { 407 try (final Options opt = new Options()) { 408 final String str = "path/to/DbLogDir"; 409 opt.setDbLogDir(str); 410 assertThat(opt.dbLogDir()).isEqualTo(str); 411 } 412 } 413 414 @Test walDir()415 public void walDir() { 416 try (final Options opt = new Options()) { 417 final String str = "path/to/WalDir"; 418 opt.setWalDir(str); 419 assertThat(opt.walDir()).isEqualTo(str); 420 } 421 } 422 423 @Test deleteObsoleteFilesPeriodMicros()424 public void deleteObsoleteFilesPeriodMicros() { 425 try (final Options opt = new Options()) { 426 final long longValue = rand.nextLong(); 427 opt.setDeleteObsoleteFilesPeriodMicros(longValue); 428 assertThat(opt.deleteObsoleteFilesPeriodMicros()). 429 isEqualTo(longValue); 430 } 431 } 432 433 @SuppressWarnings("deprecated") 434 @Test baseBackgroundCompactions()435 public void baseBackgroundCompactions() { 436 try (final Options opt = new Options()) { 437 final int intValue = rand.nextInt(); 438 opt.setBaseBackgroundCompactions(intValue); 439 assertThat(opt.baseBackgroundCompactions()). 440 isEqualTo(intValue); 441 } 442 } 443 444 @SuppressWarnings("deprecated") 445 @Test maxBackgroundCompactions()446 public void maxBackgroundCompactions() { 447 try (final Options opt = new Options()) { 448 final int intValue = rand.nextInt(); 449 opt.setMaxBackgroundCompactions(intValue); 450 assertThat(opt.maxBackgroundCompactions()). 451 isEqualTo(intValue); 452 } 453 } 454 455 @Test maxSubcompactions()456 public void maxSubcompactions() { 457 try (final Options opt = new Options()) { 458 final int intValue = rand.nextInt(); 459 opt.setMaxSubcompactions(intValue); 460 assertThat(opt.maxSubcompactions()). 461 isEqualTo(intValue); 462 } 463 } 464 465 @SuppressWarnings("deprecated") 466 @Test maxBackgroundFlushes()467 public void maxBackgroundFlushes() { 468 try (final Options opt = new Options()) { 469 final int intValue = rand.nextInt(); 470 opt.setMaxBackgroundFlushes(intValue); 471 assertThat(opt.maxBackgroundFlushes()). 472 isEqualTo(intValue); 473 } 474 } 475 476 @Test maxBackgroundJobs()477 public void maxBackgroundJobs() { 478 try (final Options opt = new Options()) { 479 final int intValue = rand.nextInt(); 480 opt.setMaxBackgroundJobs(intValue); 481 assertThat(opt.maxBackgroundJobs()).isEqualTo(intValue); 482 } 483 } 484 485 @Test maxLogFileSize()486 public void maxLogFileSize() throws RocksDBException { 487 try (final Options opt = new Options()) { 488 final long longValue = rand.nextLong(); 489 opt.setMaxLogFileSize(longValue); 490 assertThat(opt.maxLogFileSize()).isEqualTo(longValue); 491 } 492 } 493 494 @Test logFileTimeToRoll()495 public void logFileTimeToRoll() throws RocksDBException { 496 try (final Options opt = new Options()) { 497 final long longValue = rand.nextLong(); 498 opt.setLogFileTimeToRoll(longValue); 499 assertThat(opt.logFileTimeToRoll()). 500 isEqualTo(longValue); 501 } 502 } 503 504 @Test keepLogFileNum()505 public void keepLogFileNum() throws RocksDBException { 506 try (final Options opt = new Options()) { 507 final long longValue = rand.nextLong(); 508 opt.setKeepLogFileNum(longValue); 509 assertThat(opt.keepLogFileNum()).isEqualTo(longValue); 510 } 511 } 512 513 @Test recycleLogFileNum()514 public void recycleLogFileNum() throws RocksDBException { 515 try (final Options opt = new Options()) { 516 final long longValue = rand.nextLong(); 517 opt.setRecycleLogFileNum(longValue); 518 assertThat(opt.recycleLogFileNum()).isEqualTo(longValue); 519 } 520 } 521 522 @Test maxManifestFileSize()523 public void maxManifestFileSize() { 524 try (final Options opt = new Options()) { 525 final long longValue = rand.nextLong(); 526 opt.setMaxManifestFileSize(longValue); 527 assertThat(opt.maxManifestFileSize()). 528 isEqualTo(longValue); 529 } 530 } 531 532 @Test tableCacheNumshardbits()533 public void tableCacheNumshardbits() { 534 try (final Options opt = new Options()) { 535 final int intValue = rand.nextInt(); 536 opt.setTableCacheNumshardbits(intValue); 537 assertThat(opt.tableCacheNumshardbits()). 538 isEqualTo(intValue); 539 } 540 } 541 542 @Test walSizeLimitMB()543 public void walSizeLimitMB() { 544 try (final Options opt = new Options()) { 545 final long longValue = rand.nextLong(); 546 opt.setWalSizeLimitMB(longValue); 547 assertThat(opt.walSizeLimitMB()).isEqualTo(longValue); 548 } 549 } 550 551 @Test walTtlSeconds()552 public void walTtlSeconds() { 553 try (final Options opt = new Options()) { 554 final long longValue = rand.nextLong(); 555 opt.setWalTtlSeconds(longValue); 556 assertThat(opt.walTtlSeconds()).isEqualTo(longValue); 557 } 558 } 559 560 @Test manifestPreallocationSize()561 public void manifestPreallocationSize() throws RocksDBException { 562 try (final Options opt = new Options()) { 563 final long longValue = rand.nextLong(); 564 opt.setManifestPreallocationSize(longValue); 565 assertThat(opt.manifestPreallocationSize()). 566 isEqualTo(longValue); 567 } 568 } 569 570 @Test useDirectReads()571 public void useDirectReads() { 572 try(final Options opt = new Options()) { 573 final boolean boolValue = rand.nextBoolean(); 574 opt.setUseDirectReads(boolValue); 575 assertThat(opt.useDirectReads()).isEqualTo(boolValue); 576 } 577 } 578 579 @Test useDirectIoForFlushAndCompaction()580 public void useDirectIoForFlushAndCompaction() { 581 try(final Options opt = new Options()) { 582 final boolean boolValue = rand.nextBoolean(); 583 opt.setUseDirectIoForFlushAndCompaction(boolValue); 584 assertThat(opt.useDirectIoForFlushAndCompaction()).isEqualTo(boolValue); 585 } 586 } 587 588 @Test allowFAllocate()589 public void allowFAllocate() { 590 try (final Options opt = new Options()) { 591 final boolean boolValue = rand.nextBoolean(); 592 opt.setAllowFAllocate(boolValue); 593 assertThat(opt.allowFAllocate()).isEqualTo(boolValue); 594 } 595 } 596 597 @Test allowMmapReads()598 public void allowMmapReads() { 599 try (final Options opt = new Options()) { 600 final boolean boolValue = rand.nextBoolean(); 601 opt.setAllowMmapReads(boolValue); 602 assertThat(opt.allowMmapReads()).isEqualTo(boolValue); 603 } 604 } 605 606 @Test allowMmapWrites()607 public void allowMmapWrites() { 608 try (final Options opt = new Options()) { 609 final boolean boolValue = rand.nextBoolean(); 610 opt.setAllowMmapWrites(boolValue); 611 assertThat(opt.allowMmapWrites()).isEqualTo(boolValue); 612 } 613 } 614 615 @Test isFdCloseOnExec()616 public void isFdCloseOnExec() { 617 try (final Options opt = new Options()) { 618 final boolean boolValue = rand.nextBoolean(); 619 opt.setIsFdCloseOnExec(boolValue); 620 assertThat(opt.isFdCloseOnExec()).isEqualTo(boolValue); 621 } 622 } 623 624 @Test statsDumpPeriodSec()625 public void statsDumpPeriodSec() { 626 try (final Options opt = new Options()) { 627 final int intValue = rand.nextInt(); 628 opt.setStatsDumpPeriodSec(intValue); 629 assertThat(opt.statsDumpPeriodSec()).isEqualTo(intValue); 630 } 631 } 632 633 @Test statsPersistPeriodSec()634 public void statsPersistPeriodSec() { 635 try (final Options opt = new Options()) { 636 final int intValue = rand.nextInt(); 637 opt.setStatsPersistPeriodSec(intValue); 638 assertThat(opt.statsPersistPeriodSec()).isEqualTo(intValue); 639 } 640 } 641 642 @Test statsHistoryBufferSize()643 public void statsHistoryBufferSize() { 644 try (final Options opt = new Options()) { 645 final long longValue = rand.nextLong(); 646 opt.setStatsHistoryBufferSize(longValue); 647 assertThat(opt.statsHistoryBufferSize()).isEqualTo(longValue); 648 } 649 } 650 651 @Test adviseRandomOnOpen()652 public void adviseRandomOnOpen() { 653 try (final Options opt = new Options()) { 654 final boolean boolValue = rand.nextBoolean(); 655 opt.setAdviseRandomOnOpen(boolValue); 656 assertThat(opt.adviseRandomOnOpen()).isEqualTo(boolValue); 657 } 658 } 659 660 @Test dbWriteBufferSize()661 public void dbWriteBufferSize() { 662 try (final Options opt = new Options()) { 663 final long longValue = rand.nextLong(); 664 opt.setDbWriteBufferSize(longValue); 665 assertThat(opt.dbWriteBufferSize()).isEqualTo(longValue); 666 } 667 } 668 669 @Test setWriteBufferManager()670 public void setWriteBufferManager() throws RocksDBException { 671 try (final Options opt = new Options(); 672 final Cache cache = new LRUCache(1 * 1024 * 1024); 673 final WriteBufferManager writeBufferManager = new WriteBufferManager(2000l, cache)) { 674 opt.setWriteBufferManager(writeBufferManager); 675 assertThat(opt.writeBufferManager()).isEqualTo(writeBufferManager); 676 } 677 } 678 679 @Test setWriteBufferManagerWithZeroBufferSize()680 public void setWriteBufferManagerWithZeroBufferSize() throws RocksDBException { 681 try (final Options opt = new Options(); 682 final Cache cache = new LRUCache(1 * 1024 * 1024); 683 final WriteBufferManager writeBufferManager = new WriteBufferManager(0l, cache)) { 684 opt.setWriteBufferManager(writeBufferManager); 685 assertThat(opt.writeBufferManager()).isEqualTo(writeBufferManager); 686 } 687 } 688 689 @Test accessHintOnCompactionStart()690 public void accessHintOnCompactionStart() { 691 try (final Options opt = new Options()) { 692 final AccessHint accessHint = AccessHint.SEQUENTIAL; 693 opt.setAccessHintOnCompactionStart(accessHint); 694 assertThat(opt.accessHintOnCompactionStart()).isEqualTo(accessHint); 695 } 696 } 697 698 @Test newTableReaderForCompactionInputs()699 public void newTableReaderForCompactionInputs() { 700 try (final Options opt = new Options()) { 701 final boolean boolValue = rand.nextBoolean(); 702 opt.setNewTableReaderForCompactionInputs(boolValue); 703 assertThat(opt.newTableReaderForCompactionInputs()).isEqualTo(boolValue); 704 } 705 } 706 707 @Test compactionReadaheadSize()708 public void compactionReadaheadSize() { 709 try (final Options opt = new Options()) { 710 final long longValue = rand.nextLong(); 711 opt.setCompactionReadaheadSize(longValue); 712 assertThat(opt.compactionReadaheadSize()).isEqualTo(longValue); 713 } 714 } 715 716 @Test randomAccessMaxBufferSize()717 public void randomAccessMaxBufferSize() { 718 try (final Options opt = new Options()) { 719 final long longValue = rand.nextLong(); 720 opt.setRandomAccessMaxBufferSize(longValue); 721 assertThat(opt.randomAccessMaxBufferSize()).isEqualTo(longValue); 722 } 723 } 724 725 @Test writableFileMaxBufferSize()726 public void writableFileMaxBufferSize() { 727 try (final Options opt = new Options()) { 728 final long longValue = rand.nextLong(); 729 opt.setWritableFileMaxBufferSize(longValue); 730 assertThat(opt.writableFileMaxBufferSize()).isEqualTo(longValue); 731 } 732 } 733 734 @Test useAdaptiveMutex()735 public void useAdaptiveMutex() { 736 try (final Options opt = new Options()) { 737 final boolean boolValue = rand.nextBoolean(); 738 opt.setUseAdaptiveMutex(boolValue); 739 assertThat(opt.useAdaptiveMutex()).isEqualTo(boolValue); 740 } 741 } 742 743 @Test bytesPerSync()744 public void bytesPerSync() { 745 try (final Options opt = new Options()) { 746 final long longValue = rand.nextLong(); 747 opt.setBytesPerSync(longValue); 748 assertThat(opt.bytesPerSync()).isEqualTo(longValue); 749 } 750 } 751 752 @Test walBytesPerSync()753 public void walBytesPerSync() { 754 try (final Options opt = new Options()) { 755 final long longValue = rand.nextLong(); 756 opt.setWalBytesPerSync(longValue); 757 assertThat(opt.walBytesPerSync()).isEqualTo(longValue); 758 } 759 } 760 761 @Test strictBytesPerSync()762 public void strictBytesPerSync() { 763 try (final Options opt = new Options()) { 764 assertThat(opt.strictBytesPerSync()).isFalse(); 765 opt.setStrictBytesPerSync(true); 766 assertThat(opt.strictBytesPerSync()).isTrue(); 767 } 768 } 769 770 @Test enableThreadTracking()771 public void enableThreadTracking() { 772 try (final Options opt = new Options()) { 773 final boolean boolValue = rand.nextBoolean(); 774 opt.setEnableThreadTracking(boolValue); 775 assertThat(opt.enableThreadTracking()).isEqualTo(boolValue); 776 } 777 } 778 779 @Test delayedWriteRate()780 public void delayedWriteRate() { 781 try (final Options opt = new Options()) { 782 final long longValue = rand.nextLong(); 783 opt.setDelayedWriteRate(longValue); 784 assertThat(opt.delayedWriteRate()).isEqualTo(longValue); 785 } 786 } 787 788 @Test enablePipelinedWrite()789 public void enablePipelinedWrite() { 790 try(final Options opt = new Options()) { 791 assertThat(opt.enablePipelinedWrite()).isFalse(); 792 opt.setEnablePipelinedWrite(true); 793 assertThat(opt.enablePipelinedWrite()).isTrue(); 794 } 795 } 796 797 @Test unordredWrite()798 public void unordredWrite() { 799 try(final Options opt = new Options()) { 800 assertThat(opt.unorderedWrite()).isFalse(); 801 opt.setUnorderedWrite(true); 802 assertThat(opt.unorderedWrite()).isTrue(); 803 } 804 } 805 806 @Test allowConcurrentMemtableWrite()807 public void allowConcurrentMemtableWrite() { 808 try (final Options opt = new Options()) { 809 final boolean boolValue = rand.nextBoolean(); 810 opt.setAllowConcurrentMemtableWrite(boolValue); 811 assertThat(opt.allowConcurrentMemtableWrite()).isEqualTo(boolValue); 812 } 813 } 814 815 @Test enableWriteThreadAdaptiveYield()816 public void enableWriteThreadAdaptiveYield() { 817 try (final Options opt = new Options()) { 818 final boolean boolValue = rand.nextBoolean(); 819 opt.setEnableWriteThreadAdaptiveYield(boolValue); 820 assertThat(opt.enableWriteThreadAdaptiveYield()).isEqualTo(boolValue); 821 } 822 } 823 824 @Test writeThreadMaxYieldUsec()825 public void writeThreadMaxYieldUsec() { 826 try (final Options opt = new Options()) { 827 final long longValue = rand.nextLong(); 828 opt.setWriteThreadMaxYieldUsec(longValue); 829 assertThat(opt.writeThreadMaxYieldUsec()).isEqualTo(longValue); 830 } 831 } 832 833 @Test writeThreadSlowYieldUsec()834 public void writeThreadSlowYieldUsec() { 835 try (final Options opt = new Options()) { 836 final long longValue = rand.nextLong(); 837 opt.setWriteThreadSlowYieldUsec(longValue); 838 assertThat(opt.writeThreadSlowYieldUsec()).isEqualTo(longValue); 839 } 840 } 841 842 @Test skipStatsUpdateOnDbOpen()843 public void skipStatsUpdateOnDbOpen() { 844 try (final Options opt = new Options()) { 845 final boolean boolValue = rand.nextBoolean(); 846 opt.setSkipStatsUpdateOnDbOpen(boolValue); 847 assertThat(opt.skipStatsUpdateOnDbOpen()).isEqualTo(boolValue); 848 } 849 } 850 851 @Test walRecoveryMode()852 public void walRecoveryMode() { 853 try (final Options opt = new Options()) { 854 for (final WALRecoveryMode walRecoveryMode : WALRecoveryMode.values()) { 855 opt.setWalRecoveryMode(walRecoveryMode); 856 assertThat(opt.walRecoveryMode()).isEqualTo(walRecoveryMode); 857 } 858 } 859 } 860 861 @Test allow2pc()862 public void allow2pc() { 863 try (final Options opt = new Options()) { 864 final boolean boolValue = rand.nextBoolean(); 865 opt.setAllow2pc(boolValue); 866 assertThat(opt.allow2pc()).isEqualTo(boolValue); 867 } 868 } 869 870 @Test rowCache()871 public void rowCache() { 872 try (final Options opt = new Options()) { 873 assertThat(opt.rowCache()).isNull(); 874 875 try(final Cache lruCache = new LRUCache(1000)) { 876 opt.setRowCache(lruCache); 877 assertThat(opt.rowCache()).isEqualTo(lruCache); 878 } 879 880 try(final Cache clockCache = new ClockCache(1000)) { 881 opt.setRowCache(clockCache); 882 assertThat(opt.rowCache()).isEqualTo(clockCache); 883 } 884 } 885 } 886 887 @Test walFilter()888 public void walFilter() { 889 try (final Options opt = new Options()) { 890 assertThat(opt.walFilter()).isNull(); 891 892 try (final AbstractWalFilter walFilter = new AbstractWalFilter() { 893 @Override 894 public void columnFamilyLogNumberMap( 895 final Map<Integer, Long> cfLognumber, 896 final Map<String, Integer> cfNameId) { 897 // no-op 898 } 899 900 @Override 901 public LogRecordFoundResult logRecordFound(final long logNumber, 902 final String logFileName, final WriteBatch batch, 903 final WriteBatch newBatch) { 904 return new LogRecordFoundResult( 905 WalProcessingOption.CONTINUE_PROCESSING, false); 906 } 907 908 @Override 909 public String name() { 910 return "test-wal-filter"; 911 } 912 }) { 913 opt.setWalFilter(walFilter); 914 assertThat(opt.walFilter()).isEqualTo(walFilter); 915 } 916 } 917 } 918 919 @Test failIfOptionsFileError()920 public void failIfOptionsFileError() { 921 try (final Options opt = new Options()) { 922 final boolean boolValue = rand.nextBoolean(); 923 opt.setFailIfOptionsFileError(boolValue); 924 assertThat(opt.failIfOptionsFileError()).isEqualTo(boolValue); 925 } 926 } 927 928 @Test dumpMallocStats()929 public void dumpMallocStats() { 930 try (final Options opt = new Options()) { 931 final boolean boolValue = rand.nextBoolean(); 932 opt.setDumpMallocStats(boolValue); 933 assertThat(opt.dumpMallocStats()).isEqualTo(boolValue); 934 } 935 } 936 937 @Test avoidFlushDuringRecovery()938 public void avoidFlushDuringRecovery() { 939 try (final Options opt = new Options()) { 940 final boolean boolValue = rand.nextBoolean(); 941 opt.setAvoidFlushDuringRecovery(boolValue); 942 assertThat(opt.avoidFlushDuringRecovery()).isEqualTo(boolValue); 943 } 944 } 945 946 @Test avoidFlushDuringShutdown()947 public void avoidFlushDuringShutdown() { 948 try (final Options opt = new Options()) { 949 final boolean boolValue = rand.nextBoolean(); 950 opt.setAvoidFlushDuringShutdown(boolValue); 951 assertThat(opt.avoidFlushDuringShutdown()).isEqualTo(boolValue); 952 } 953 } 954 955 956 @Test allowIngestBehind()957 public void allowIngestBehind() { 958 try (final Options opt = new Options()) { 959 assertThat(opt.allowIngestBehind()).isFalse(); 960 opt.setAllowIngestBehind(true); 961 assertThat(opt.allowIngestBehind()).isTrue(); 962 } 963 } 964 965 @Test preserveDeletes()966 public void preserveDeletes() { 967 try (final Options opt = new Options()) { 968 assertThat(opt.preserveDeletes()).isFalse(); 969 opt.setPreserveDeletes(true); 970 assertThat(opt.preserveDeletes()).isTrue(); 971 } 972 } 973 974 @Test twoWriteQueues()975 public void twoWriteQueues() { 976 try (final Options opt = new Options()) { 977 assertThat(opt.twoWriteQueues()).isFalse(); 978 opt.setTwoWriteQueues(true); 979 assertThat(opt.twoWriteQueues()).isTrue(); 980 } 981 } 982 983 @Test manualWalFlush()984 public void manualWalFlush() { 985 try (final Options opt = new Options()) { 986 assertThat(opt.manualWalFlush()).isFalse(); 987 opt.setManualWalFlush(true); 988 assertThat(opt.manualWalFlush()).isTrue(); 989 } 990 } 991 992 @Test atomicFlush()993 public void atomicFlush() { 994 try (final Options opt = new Options()) { 995 assertThat(opt.atomicFlush()).isFalse(); 996 opt.setAtomicFlush(true); 997 assertThat(opt.atomicFlush()).isTrue(); 998 } 999 } 1000 1001 @Test env()1002 public void env() { 1003 try (final Options options = new Options(); 1004 final Env env = Env.getDefault()) { 1005 options.setEnv(env); 1006 assertThat(options.getEnv()).isSameAs(env); 1007 } 1008 } 1009 1010 @Test linkageOfPrepMethods()1011 public void linkageOfPrepMethods() { 1012 try (final Options options = new Options()) { 1013 options.optimizeUniversalStyleCompaction(); 1014 options.optimizeUniversalStyleCompaction(4000); 1015 options.optimizeLevelStyleCompaction(); 1016 options.optimizeLevelStyleCompaction(3000); 1017 options.optimizeForPointLookup(10); 1018 options.optimizeForSmallDb(); 1019 options.prepareForBulkLoad(); 1020 } 1021 } 1022 1023 @Test compressionTypes()1024 public void compressionTypes() { 1025 try (final Options options = new Options()) { 1026 for (final CompressionType compressionType : 1027 CompressionType.values()) { 1028 options.setCompressionType(compressionType); 1029 assertThat(options.compressionType()). 1030 isEqualTo(compressionType); 1031 assertThat(CompressionType.valueOf("NO_COMPRESSION")). 1032 isEqualTo(CompressionType.NO_COMPRESSION); 1033 } 1034 } 1035 } 1036 1037 @Test compressionPerLevel()1038 public void compressionPerLevel() { 1039 try (final Options options = new Options()) { 1040 assertThat(options.compressionPerLevel()).isEmpty(); 1041 List<CompressionType> compressionTypeList = 1042 new ArrayList<>(); 1043 for (int i = 0; i < options.numLevels(); i++) { 1044 compressionTypeList.add(CompressionType.NO_COMPRESSION); 1045 } 1046 options.setCompressionPerLevel(compressionTypeList); 1047 compressionTypeList = options.compressionPerLevel(); 1048 for (final CompressionType compressionType : compressionTypeList) { 1049 assertThat(compressionType).isEqualTo( 1050 CompressionType.NO_COMPRESSION); 1051 } 1052 } 1053 } 1054 1055 @Test differentCompressionsPerLevel()1056 public void differentCompressionsPerLevel() { 1057 try (final Options options = new Options()) { 1058 options.setNumLevels(3); 1059 1060 assertThat(options.compressionPerLevel()).isEmpty(); 1061 List<CompressionType> compressionTypeList = new ArrayList<>(); 1062 1063 compressionTypeList.add(CompressionType.BZLIB2_COMPRESSION); 1064 compressionTypeList.add(CompressionType.SNAPPY_COMPRESSION); 1065 compressionTypeList.add(CompressionType.LZ4_COMPRESSION); 1066 1067 options.setCompressionPerLevel(compressionTypeList); 1068 compressionTypeList = options.compressionPerLevel(); 1069 1070 assertThat(compressionTypeList.size()).isEqualTo(3); 1071 assertThat(compressionTypeList). 1072 containsExactly( 1073 CompressionType.BZLIB2_COMPRESSION, 1074 CompressionType.SNAPPY_COMPRESSION, 1075 CompressionType.LZ4_COMPRESSION); 1076 1077 } 1078 } 1079 1080 @Test bottommostCompressionType()1081 public void bottommostCompressionType() { 1082 try (final Options options = new Options()) { 1083 assertThat(options.bottommostCompressionType()) 1084 .isEqualTo(CompressionType.DISABLE_COMPRESSION_OPTION); 1085 1086 for (final CompressionType compressionType : CompressionType.values()) { 1087 options.setBottommostCompressionType(compressionType); 1088 assertThat(options.bottommostCompressionType()) 1089 .isEqualTo(compressionType); 1090 } 1091 } 1092 } 1093 1094 @Test bottommostCompressionOptions()1095 public void bottommostCompressionOptions() { 1096 try (final Options options = new Options(); 1097 final CompressionOptions bottommostCompressionOptions = new CompressionOptions() 1098 .setMaxDictBytes(123)) { 1099 1100 options.setBottommostCompressionOptions(bottommostCompressionOptions); 1101 assertThat(options.bottommostCompressionOptions()) 1102 .isEqualTo(bottommostCompressionOptions); 1103 assertThat(options.bottommostCompressionOptions().maxDictBytes()) 1104 .isEqualTo(123); 1105 } 1106 } 1107 1108 @Test compressionOptions()1109 public void compressionOptions() { 1110 try (final Options options = new Options(); 1111 final CompressionOptions compressionOptions = new CompressionOptions() 1112 .setMaxDictBytes(123)) { 1113 1114 options.setCompressionOptions(compressionOptions); 1115 assertThat(options.compressionOptions()) 1116 .isEqualTo(compressionOptions); 1117 assertThat(options.compressionOptions().maxDictBytes()) 1118 .isEqualTo(123); 1119 } 1120 } 1121 1122 @Test compactionStyles()1123 public void compactionStyles() { 1124 try (final Options options = new Options()) { 1125 for (final CompactionStyle compactionStyle : 1126 CompactionStyle.values()) { 1127 options.setCompactionStyle(compactionStyle); 1128 assertThat(options.compactionStyle()). 1129 isEqualTo(compactionStyle); 1130 assertThat(CompactionStyle.valueOf("FIFO")). 1131 isEqualTo(CompactionStyle.FIFO); 1132 } 1133 } 1134 } 1135 1136 @Test maxTableFilesSizeFIFO()1137 public void maxTableFilesSizeFIFO() { 1138 try (final Options opt = new Options()) { 1139 long longValue = rand.nextLong(); 1140 // Size has to be positive 1141 longValue = (longValue < 0) ? -longValue : longValue; 1142 longValue = (longValue == 0) ? longValue + 1 : longValue; 1143 opt.setMaxTableFilesSizeFIFO(longValue); 1144 assertThat(opt.maxTableFilesSizeFIFO()). 1145 isEqualTo(longValue); 1146 } 1147 } 1148 1149 @Test rateLimiter()1150 public void rateLimiter() { 1151 try (final Options options = new Options(); 1152 final Options anotherOptions = new Options(); 1153 final RateLimiter rateLimiter = 1154 new RateLimiter(1000, 100 * 1000, 1)) { 1155 options.setRateLimiter(rateLimiter); 1156 // Test with parameter initialization 1157 anotherOptions.setRateLimiter( 1158 new RateLimiter(1000)); 1159 } 1160 } 1161 1162 @Test sstFileManager()1163 public void sstFileManager() throws RocksDBException { 1164 try (final Options options = new Options(); 1165 final SstFileManager sstFileManager = 1166 new SstFileManager(Env.getDefault())) { 1167 options.setSstFileManager(sstFileManager); 1168 } 1169 } 1170 1171 @Test shouldSetTestPrefixExtractor()1172 public void shouldSetTestPrefixExtractor() { 1173 try (final Options options = new Options()) { 1174 options.useFixedLengthPrefixExtractor(100); 1175 options.useFixedLengthPrefixExtractor(10); 1176 } 1177 } 1178 1179 @Test shouldSetTestCappedPrefixExtractor()1180 public void shouldSetTestCappedPrefixExtractor() { 1181 try (final Options options = new Options()) { 1182 options.useCappedPrefixExtractor(100); 1183 options.useCappedPrefixExtractor(10); 1184 } 1185 } 1186 1187 @Test shouldTestMemTableFactoryName()1188 public void shouldTestMemTableFactoryName() 1189 throws RocksDBException { 1190 try (final Options options = new Options()) { 1191 options.setMemTableConfig(new VectorMemTableConfig()); 1192 assertThat(options.memTableFactoryName()). 1193 isEqualTo("VectorRepFactory"); 1194 options.setMemTableConfig( 1195 new HashLinkedListMemTableConfig()); 1196 assertThat(options.memTableFactoryName()). 1197 isEqualTo("HashLinkedListRepFactory"); 1198 } 1199 } 1200 1201 @Test statistics()1202 public void statistics() { 1203 try(final Options options = new Options()) { 1204 final Statistics statistics = options.statistics(); 1205 assertThat(statistics).isNull(); 1206 } 1207 1208 try(final Statistics statistics = new Statistics(); 1209 final Options options = new Options().setStatistics(statistics); 1210 final Statistics stats = options.statistics()) { 1211 assertThat(stats).isNotNull(); 1212 } 1213 } 1214 1215 @Test maxWriteBufferNumberToMaintain()1216 public void maxWriteBufferNumberToMaintain() { 1217 try (final Options options = new Options()) { 1218 int intValue = rand.nextInt(); 1219 // Size has to be positive 1220 intValue = (intValue < 0) ? -intValue : intValue; 1221 intValue = (intValue == 0) ? intValue + 1 : intValue; 1222 options.setMaxWriteBufferNumberToMaintain(intValue); 1223 assertThat(options.maxWriteBufferNumberToMaintain()). 1224 isEqualTo(intValue); 1225 } 1226 } 1227 1228 @Test compactionPriorities()1229 public void compactionPriorities() { 1230 try (final Options options = new Options()) { 1231 for (final CompactionPriority compactionPriority : 1232 CompactionPriority.values()) { 1233 options.setCompactionPriority(compactionPriority); 1234 assertThat(options.compactionPriority()). 1235 isEqualTo(compactionPriority); 1236 } 1237 } 1238 } 1239 1240 @Test reportBgIoStats()1241 public void reportBgIoStats() { 1242 try (final Options options = new Options()) { 1243 final boolean booleanValue = true; 1244 options.setReportBgIoStats(booleanValue); 1245 assertThat(options.reportBgIoStats()). 1246 isEqualTo(booleanValue); 1247 } 1248 } 1249 1250 @Test ttl()1251 public void ttl() { 1252 try (final Options options = new Options()) { 1253 options.setTtl(1000 * 60); 1254 assertThat(options.ttl()). 1255 isEqualTo(1000 * 60); 1256 } 1257 } 1258 1259 @Test periodicCompactionSeconds()1260 public void periodicCompactionSeconds() { 1261 try (final Options options = new Options()) { 1262 options.setPeriodicCompactionSeconds(1000 * 60); 1263 assertThat(options.periodicCompactionSeconds()).isEqualTo(1000 * 60); 1264 } 1265 } 1266 1267 @Test compactionOptionsUniversal()1268 public void compactionOptionsUniversal() { 1269 try (final Options options = new Options(); 1270 final CompactionOptionsUniversal optUni = new CompactionOptionsUniversal() 1271 .setCompressionSizePercent(7)) { 1272 options.setCompactionOptionsUniversal(optUni); 1273 assertThat(options.compactionOptionsUniversal()). 1274 isEqualTo(optUni); 1275 assertThat(options.compactionOptionsUniversal().compressionSizePercent()) 1276 .isEqualTo(7); 1277 } 1278 } 1279 1280 @Test compactionOptionsFIFO()1281 public void compactionOptionsFIFO() { 1282 try (final Options options = new Options(); 1283 final CompactionOptionsFIFO optFifo = new CompactionOptionsFIFO() 1284 .setMaxTableFilesSize(2000)) { 1285 options.setCompactionOptionsFIFO(optFifo); 1286 assertThat(options.compactionOptionsFIFO()). 1287 isEqualTo(optFifo); 1288 assertThat(options.compactionOptionsFIFO().maxTableFilesSize()) 1289 .isEqualTo(2000); 1290 } 1291 } 1292 1293 @Test forceConsistencyChecks()1294 public void forceConsistencyChecks() { 1295 try (final Options options = new Options()) { 1296 final boolean booleanValue = true; 1297 options.setForceConsistencyChecks(booleanValue); 1298 assertThat(options.forceConsistencyChecks()). 1299 isEqualTo(booleanValue); 1300 } 1301 } 1302 1303 @Test compactionFilter()1304 public void compactionFilter() { 1305 try(final Options options = new Options(); 1306 final RemoveEmptyValueCompactionFilter cf = new RemoveEmptyValueCompactionFilter()) { 1307 options.setCompactionFilter(cf); 1308 assertThat(options.compactionFilter()).isEqualTo(cf); 1309 } 1310 } 1311 1312 @Test compactionFilterFactory()1313 public void compactionFilterFactory() { 1314 try(final Options options = new Options(); 1315 final RemoveEmptyValueCompactionFilterFactory cff = new RemoveEmptyValueCompactionFilterFactory()) { 1316 options.setCompactionFilterFactory(cff); 1317 assertThat(options.compactionFilterFactory()).isEqualTo(cff); 1318 } 1319 } 1320 1321 @Test compactionThreadLimiter()1322 public void compactionThreadLimiter() { 1323 try (final Options options = new Options(); 1324 final ConcurrentTaskLimiter compactionThreadLimiter = 1325 new ConcurrentTaskLimiterImpl("name", 3)) { 1326 options.setCompactionThreadLimiter(compactionThreadLimiter); 1327 assertThat(options.compactionThreadLimiter()).isEqualTo(compactionThreadLimiter); 1328 } 1329 } 1330 1331 @Test oldDefaults()1332 public void oldDefaults() { 1333 try (final Options options = new Options()) { 1334 options.oldDefaults(4, 6); 1335 assertThat(options.writeBufferSize()).isEqualTo(4 << 20); 1336 assertThat(options.compactionPriority()).isEqualTo(CompactionPriority.ByCompensatedSize); 1337 assertThat(options.targetFileSizeBase()).isEqualTo(2 * 1048576); 1338 assertThat(options.maxBytesForLevelBase()).isEqualTo(10 * 1048576); 1339 assertThat(options.softPendingCompactionBytesLimit()).isEqualTo(0); 1340 assertThat(options.hardPendingCompactionBytesLimit()).isEqualTo(0); 1341 assertThat(options.level0StopWritesTrigger()).isEqualTo(24); 1342 } 1343 } 1344 1345 @Test optimizeForSmallDbWithCache()1346 public void optimizeForSmallDbWithCache() { 1347 try (final Options options = new Options(); final Cache cache = new LRUCache(1024)) { 1348 assertThat(options.optimizeForSmallDb(cache)).isEqualTo(options); 1349 } 1350 } 1351 1352 @Test cfPaths()1353 public void cfPaths() { 1354 try (final Options options = new Options()) { 1355 final List<DbPath> paths = Arrays.asList( 1356 new DbPath(Paths.get("test1"), 2 << 25), new DbPath(Paths.get("/test2/path"), 2 << 25)); 1357 assertThat(options.cfPaths()).isEqualTo(Collections.emptyList()); 1358 assertThat(options.setCfPaths(paths)).isEqualTo(options); 1359 assertThat(options.cfPaths()).isEqualTo(paths); 1360 } 1361 } 1362 1363 @Test avoidUnnecessaryBlockingIO()1364 public void avoidUnnecessaryBlockingIO() { 1365 try (final Options options = new Options()) { 1366 assertThat(options.avoidUnnecessaryBlockingIO()).isEqualTo(false); 1367 assertThat(options.setAvoidUnnecessaryBlockingIO(true)).isEqualTo(options); 1368 assertThat(options.avoidUnnecessaryBlockingIO()).isEqualTo(true); 1369 } 1370 } 1371 1372 @Test persistStatsToDisk()1373 public void persistStatsToDisk() { 1374 try (final Options options = new Options()) { 1375 assertThat(options.persistStatsToDisk()).isEqualTo(false); 1376 assertThat(options.setPersistStatsToDisk(true)).isEqualTo(options); 1377 assertThat(options.persistStatsToDisk()).isEqualTo(true); 1378 } 1379 } 1380 1381 @Test writeDbidToManifest()1382 public void writeDbidToManifest() { 1383 try (final Options options = new Options()) { 1384 assertThat(options.writeDbidToManifest()).isEqualTo(false); 1385 assertThat(options.setWriteDbidToManifest(true)).isEqualTo(options); 1386 assertThat(options.writeDbidToManifest()).isEqualTo(true); 1387 } 1388 } 1389 1390 @Test logReadaheadSize()1391 public void logReadaheadSize() { 1392 try (final Options options = new Options()) { 1393 assertThat(options.logReadaheadSize()).isEqualTo(0); 1394 final int size = 1024 * 1024 * 100; 1395 assertThat(options.setLogReadaheadSize(size)).isEqualTo(options); 1396 assertThat(options.logReadaheadSize()).isEqualTo(size); 1397 } 1398 } 1399 1400 @Test bestEffortsRecovery()1401 public void bestEffortsRecovery() { 1402 try (final Options options = new Options()) { 1403 assertThat(options.bestEffortsRecovery()).isEqualTo(false); 1404 assertThat(options.setBestEffortsRecovery(true)).isEqualTo(options); 1405 assertThat(options.bestEffortsRecovery()).isEqualTo(true); 1406 } 1407 } 1408 1409 @Test maxBgerrorResumeCount()1410 public void maxBgerrorResumeCount() { 1411 try (final Options options = new Options()) { 1412 final int INT_MAX = 2147483647; 1413 assertThat(options.maxBgerrorResumeCount()).isEqualTo(INT_MAX); 1414 assertThat(options.setMaxBgErrorResumeCount(-1)).isEqualTo(options); 1415 assertThat(options.maxBgerrorResumeCount()).isEqualTo(-1); 1416 } 1417 } 1418 1419 @Test bgerrorResumeRetryInterval()1420 public void bgerrorResumeRetryInterval() { 1421 try (final Options options = new Options()) { 1422 assertThat(options.bgerrorResumeRetryInterval()).isEqualTo(1000000); 1423 final long newRetryInterval = 24 * 3600 * 1000000L; 1424 assertThat(options.setBgerrorResumeRetryInterval(newRetryInterval)).isEqualTo(options); 1425 assertThat(options.bgerrorResumeRetryInterval()).isEqualTo(newRetryInterval); 1426 } 1427 } 1428 1429 @Test maxWriteBatchGroupSizeBytes()1430 public void maxWriteBatchGroupSizeBytes() { 1431 try (final Options options = new Options()) { 1432 assertThat(options.maxWriteBatchGroupSizeBytes()).isEqualTo(1024 * 1024); 1433 final long size = 1024 * 1024 * 1024 * 10L; 1434 assertThat(options.setMaxWriteBatchGroupSizeBytes(size)).isEqualTo(options); 1435 assertThat(options.maxWriteBatchGroupSizeBytes()).isEqualTo(size); 1436 } 1437 } 1438 1439 @Test skipCheckingSstFileSizesOnDbOpen()1440 public void skipCheckingSstFileSizesOnDbOpen() { 1441 try (final Options options = new Options()) { 1442 assertThat(options.skipCheckingSstFileSizesOnDbOpen()).isEqualTo(false); 1443 assertThat(options.setSkipCheckingSstFileSizesOnDbOpen(true)).isEqualTo(options); 1444 assertThat(options.skipCheckingSstFileSizesOnDbOpen()).isEqualTo(true); 1445 } 1446 } 1447 1448 @Test eventListeners()1449 public void eventListeners() { 1450 final AtomicBoolean wasCalled1 = new AtomicBoolean(); 1451 final AtomicBoolean wasCalled2 = new AtomicBoolean(); 1452 try (final Options options = new Options(); 1453 final AbstractEventListener el1 = 1454 new AbstractEventListener() { 1455 @Override 1456 public void onTableFileDeleted(final TableFileDeletionInfo tableFileDeletionInfo) { 1457 wasCalled1.set(true); 1458 } 1459 }; 1460 final AbstractEventListener el2 = 1461 new AbstractEventListener() { 1462 @Override 1463 public void onMemTableSealed(final MemTableInfo memTableInfo) { 1464 wasCalled2.set(true); 1465 } 1466 }) { 1467 assertThat(options.setListeners(Arrays.asList(el1, el2))).isEqualTo(options); 1468 List<AbstractEventListener> listeners = options.listeners(); 1469 assertEquals(el1, listeners.get(0)); 1470 assertEquals(el2, listeners.get(1)); 1471 options.setListeners(Collections.<AbstractEventListener>emptyList()); 1472 listeners.get(0).onTableFileDeleted(null); 1473 assertTrue(wasCalled1.get()); 1474 listeners.get(1).onMemTableSealed(null); 1475 assertTrue(wasCalled2.get()); 1476 List<AbstractEventListener> listeners2 = options.listeners(); 1477 assertNotNull(listeners2); 1478 assertEquals(0, listeners2.size()); 1479 } 1480 } 1481 } 1482