@nxtedition/rocksdb 13.5.9 → 13.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/deps/rocksdb/rocksdb/BUCK +2 -1
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +2 -1
  3. package/deps/rocksdb/rocksdb/Makefile +1 -1
  4. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +4 -5
  5. package/deps/rocksdb/rocksdb/db/c.cc +13 -0
  6. package/deps/rocksdb/rocksdb/db/c_test.c +0 -12
  7. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +8 -8
  8. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +2 -3
  9. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +5 -4
  10. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -1
  11. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +10 -10
  12. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +11 -6
  13. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +10 -16
  14. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +2 -4
  15. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -17
  16. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +164 -0
  17. package/deps/rocksdb/rocksdb/db/corruption_test.cc +74 -3
  18. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +39 -4
  19. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +2 -83
  20. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +0 -4
  21. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +11 -11
  22. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +0 -3
  23. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +0 -9
  24. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +16 -54
  25. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +0 -6
  26. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +186 -0
  27. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +3 -40
  28. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -54
  29. package/deps/rocksdb/rocksdb/db/db_test.cc +0 -292
  30. package/deps/rocksdb/rocksdb/db/db_test2.cc +0 -1235
  31. package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -0
  32. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +11 -4
  33. package/deps/rocksdb/rocksdb/db/log_reader.cc +11 -11
  34. package/deps/rocksdb/rocksdb/db/merge_helper.h +1 -1
  35. package/deps/rocksdb/rocksdb/db/multi_scan.cc +70 -0
  36. package/deps/rocksdb/rocksdb/db/version_set.cc +15 -8
  37. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +4 -0
  38. package/deps/rocksdb/rocksdb/env/composite_env.cc +4 -0
  39. package/deps/rocksdb/rocksdb/env/env.cc +4 -0
  40. package/deps/rocksdb/rocksdb/env/env_encryption.cc +38 -3
  41. package/deps/rocksdb/rocksdb/env/env_test.cc +36 -1
  42. package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -4
  43. package/deps/rocksdb/rocksdb/env/io_posix.cc +16 -0
  44. package/deps/rocksdb/rocksdb/env/io_posix.h +3 -0
  45. package/deps/rocksdb/rocksdb/env/mock_env.cc +5 -0
  46. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +4 -0
  47. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +33 -6
  48. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +5 -0
  49. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +25 -1
  50. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +10 -0
  51. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -0
  52. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +12 -0
  53. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +12 -8
  54. package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +29 -28
  55. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +26 -6
  56. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +9 -0
  57. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +3 -0
  58. package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +142 -0
  59. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +2 -0
  60. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +2 -2
  61. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +2 -0
  62. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  63. package/deps/rocksdb/rocksdb/options/options_helper.h +3 -0
  64. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -0
  65. package/deps/rocksdb/rocksdb/port/win/io_win.cc +20 -0
  66. package/deps/rocksdb/rocksdb/port/win/io_win.h +4 -0
  67. package/deps/rocksdb/rocksdb/src.mk +2 -1
  68. package/deps/rocksdb/rocksdb/table/block_based/block.cc +31 -34
  69. package/deps/rocksdb/rocksdb/table/block_based/block.h +2 -4
  70. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +43 -7
  71. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -0
  72. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +367 -2
  73. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +69 -23
  74. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +54 -6
  75. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +27 -5
  76. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +167 -3
  77. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +6 -2
  78. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +6 -0
  79. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +12 -0
  80. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +1 -0
  81. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -3
  82. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +10 -7
  83. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +244 -0
  84. package/deps/rocksdb/rocksdb/table/external_table.cc +1 -1
  85. package/deps/rocksdb/rocksdb/table/format.cc +51 -33
  86. package/deps/rocksdb/rocksdb/table/format.h +1 -1
  87. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +13 -8
  88. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -3
  89. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +5 -1
  90. package/deps/rocksdb/rocksdb/table/table_test.cc +629 -1
  91. package/deps/rocksdb/rocksdb/test_util/testutil.cc +0 -1
  92. package/deps/rocksdb/rocksdb/test_util/testutil.h +5 -0
  93. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +183 -94
  94. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +71 -0
  95. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +37 -22
  96. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +308 -0
  97. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +189 -0
  98. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -11
  99. package/deps/rocksdb/rocksdb/util/coding.h +4 -3
  100. package/deps/rocksdb/rocksdb/util/compression.cc +2 -0
  101. package/deps/rocksdb/rocksdb/util/compression.h +16 -6
  102. package/deps/rocksdb/rocksdb/util/compression_test.cc +1679 -15
  103. package/deps/rocksdb/rocksdb/util/stop_watch.h +17 -7
  104. package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +17 -3
  105. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +10 -0
  106. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +5 -0
  107. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +2 -0
  108. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +18 -2
  109. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +22 -3
  110. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +5 -0
  111. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +22 -2
  112. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +15 -4
  113. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +61 -0
  114. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +18 -0
  115. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +3 -0
  116. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +3 -0
  117. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +9 -3
  118. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +9 -0
  119. package/deps/rocksdb/rocksdb.gyp +15 -1
  120. package/package.json +1 -1
  121. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  122. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  123. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +0 -131
  124. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +0 -90
@@ -605,6 +605,9 @@ class TraceFileEnv : public EnvWrapper {
605
605
  char* scratch) const override {
606
606
  return target_->Read(offset, n, result, scratch);
607
607
  }
608
+ Status GetFileSize(uint64_t* file_size) override {
609
+ return target_->GetFileSize(file_size);
610
+ }
608
611
 
609
612
  private:
610
613
  std::unique_ptr<RandomAccessFile> target_;
@@ -1291,46 +1294,6 @@ TEST_F(DBSecondaryTest, CatchUpAfterFlush) {
1291
1294
  ASSERT_OK(iter3->status());
1292
1295
  }
1293
1296
 
1294
- TEST_F(DBSecondaryTest, CheckConsistencyWhenOpen) {
1295
- bool called = false;
1296
- Options options;
1297
- options.env = env_;
1298
- options.disable_auto_compactions = true;
1299
- Reopen(options);
1300
- SyncPoint::GetInstance()->DisableProcessing();
1301
- SyncPoint::GetInstance()->ClearAllCallBacks();
1302
- SyncPoint::GetInstance()->SetCallBack(
1303
- "DBImplSecondary::CheckConsistency:AfterFirstAttempt", [&](void* arg) {
1304
- ASSERT_NE(nullptr, arg);
1305
- called = true;
1306
- auto* s = static_cast<Status*>(arg);
1307
- ASSERT_NOK(*s);
1308
- });
1309
- SyncPoint::GetInstance()->LoadDependency(
1310
- {{"DBImpl::CheckConsistency:AfterGetLiveFilesMetaData",
1311
- "BackgroundCallCompaction:0"},
1312
- {"DBImpl::BackgroundCallCompaction:PurgedObsoleteFiles",
1313
- "DBImpl::CheckConsistency:BeforeGetFileSize"}});
1314
- SyncPoint::GetInstance()->EnableProcessing();
1315
-
1316
- ASSERT_OK(Put("a", "value0"));
1317
- ASSERT_OK(Put("c", "value0"));
1318
- ASSERT_OK(Flush());
1319
- ASSERT_OK(Put("b", "value1"));
1320
- ASSERT_OK(Put("d", "value1"));
1321
- ASSERT_OK(Flush());
1322
- port::Thread thread([this]() {
1323
- Options opts;
1324
- opts.env = env_;
1325
- opts.max_open_files = -1;
1326
- OpenSecondary(opts);
1327
- });
1328
- ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
1329
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
1330
- thread.join();
1331
- ASSERT_TRUE(called);
1332
- }
1333
-
1334
1297
  TEST_F(DBSecondaryTest, StartFromInconsistent) {
1335
1298
  Options options = CurrentOptions();
1336
1299
  DestroyAndReopen(options);
@@ -135,21 +135,6 @@ TEST_F(DBSSTTest, SSTsWithLdbSuffixHandling) {
135
135
  Destroy(options);
136
136
  }
137
137
 
138
- // Check that we don't crash when opening DB with
139
- // DBOptions::skip_checking_sst_file_sizes_on_db_open = true.
140
- TEST_F(DBSSTTest, SkipCheckingSSTFileSizesOnDBOpen) {
141
- ASSERT_OK(Put("pika", "choo"));
142
- ASSERT_OK(Flush());
143
-
144
- // Just open the DB with the option set to true and check that we don't crash.
145
- Options options;
146
- options.env = env_;
147
- options.skip_checking_sst_file_sizes_on_db_open = true;
148
- Reopen(options);
149
-
150
- ASSERT_EQ("choo", Get("pika"));
151
- }
152
-
153
138
  TEST_F(DBSSTTest, DontDeleteMovedFile) {
154
139
  // This test triggers move compaction and verifies that the file is not
155
140
  // deleted when it's part of move compaction
@@ -1748,45 +1733,6 @@ TEST_F(DBSSTTest, GetTotalSstFilesSize) {
1748
1733
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
1749
1734
  }
1750
1735
 
1751
- TEST_F(DBSSTTest, OpenDBWithoutGetFileSizeInvocations) {
1752
- Options options = CurrentOptions();
1753
- std::unique_ptr<MockEnv> env{MockEnv::Create(Env::Default())};
1754
- options.env = env.get();
1755
- options.disable_auto_compactions = true;
1756
- options.compression = kNoCompression;
1757
- options.enable_blob_files = true;
1758
- options.blob_file_size = 32; // create one blob per file
1759
- options.skip_checking_sst_file_sizes_on_db_open = true;
1760
-
1761
- DestroyAndReopen(options);
1762
- // Generate 5 files in L0
1763
- for (int i = 0; i < 5; i++) {
1764
- for (int j = 0; j < 10; j++) {
1765
- std::string val = "val_file_" + std::to_string(i);
1766
- ASSERT_OK(Put(Key(j), val));
1767
- }
1768
- ASSERT_OK(Flush());
1769
- }
1770
- Close();
1771
-
1772
- bool is_get_file_size_called = false;
1773
- SyncPoint::GetInstance()->SetCallBack(
1774
- "MockFileSystem::GetFileSize:CheckFileType", [&](void* arg) {
1775
- std::string* filename = static_cast<std::string*>(arg);
1776
- if (filename->find(".blob") != std::string::npos) {
1777
- is_get_file_size_called = true;
1778
- }
1779
- });
1780
-
1781
- SyncPoint::GetInstance()->EnableProcessing();
1782
- Reopen(options);
1783
- ASSERT_FALSE(is_get_file_size_called);
1784
- SyncPoint::GetInstance()->DisableProcessing();
1785
- SyncPoint::GetInstance()->ClearAllCallBacks();
1786
-
1787
- Destroy(options);
1788
- }
1789
-
1790
1736
  TEST_F(DBSSTTest, GetTotalSstFilesSizeVersionsFilesShared) {
1791
1737
  Options options = CurrentOptions();
1792
1738
  options.disable_auto_compactions = true;
@@ -1278,12 +1278,6 @@ class DelayFilterFactory : public CompactionFilterFactory {
1278
1278
  };
1279
1279
  } // anonymous namespace
1280
1280
 
1281
- static std::string CompressibleString(Random* rnd, int len) {
1282
- std::string r;
1283
- test::CompressibleString(rnd, 0.8, len, &r);
1284
- return r;
1285
- }
1286
-
1287
1281
  TEST_F(DBTest, FailMoreDbPaths) {
1288
1282
  Options options = CurrentOptions();
1289
1283
  options.db_paths.emplace_back(dbname_, 10000000);
@@ -5407,271 +5401,6 @@ TEST_F(DBTest, FlushOnDestroy) {
5407
5401
  CancelAllBackgroundWork(db_);
5408
5402
  }
5409
5403
 
5410
- TEST_F(DBTest, DynamicLevelCompressionPerLevel) {
5411
- if (!Snappy_Supported()) {
5412
- return;
5413
- }
5414
- const int kNKeys = 120;
5415
- int keys[kNKeys];
5416
- for (int i = 0; i < kNKeys; i++) {
5417
- keys[i] = i;
5418
- }
5419
-
5420
- Random rnd(301);
5421
- Options options;
5422
- options.env = env_;
5423
- options.create_if_missing = true;
5424
- options.db_write_buffer_size = 20480;
5425
- options.write_buffer_size = 20480;
5426
- options.max_write_buffer_number = 2;
5427
- options.level0_file_num_compaction_trigger = 2;
5428
- options.level0_slowdown_writes_trigger = 2;
5429
- options.level0_stop_writes_trigger = 2;
5430
- options.target_file_size_base = 20480;
5431
- options.level_compaction_dynamic_level_bytes = true;
5432
- options.max_bytes_for_level_base = 102400;
5433
- options.max_bytes_for_level_multiplier = 4;
5434
- options.max_background_compactions = 1;
5435
- options.num_levels = 5;
5436
- options.statistics = CreateDBStatistics();
5437
-
5438
- options.compression_per_level.resize(3);
5439
- // No compression for L0
5440
- options.compression_per_level[0] = kNoCompression;
5441
- // No compression for the Ln whre L0 is compacted to
5442
- options.compression_per_level[1] = kNoCompression;
5443
- // Snappy compression for Ln+1
5444
- options.compression_per_level[2] = kSnappyCompression;
5445
-
5446
- OnFileDeletionListener* listener = new OnFileDeletionListener();
5447
- options.listeners.emplace_back(listener);
5448
-
5449
- DestroyAndReopen(options);
5450
-
5451
- // Insert more than 80K. L4 should be base level. Neither L0 nor L4 should
5452
- // be compressed, so there shouldn't be any compression.
5453
- for (int i = 0; i < 20; i++) {
5454
- ASSERT_OK(Put(Key(keys[i]), CompressibleString(&rnd, 4000)));
5455
- ASSERT_OK(dbfull()->TEST_WaitForBackgroundWork());
5456
- }
5457
- ASSERT_OK(Flush());
5458
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
5459
-
5460
- ASSERT_EQ(NumTableFilesAtLevel(1), 0);
5461
- ASSERT_EQ(NumTableFilesAtLevel(2), 0);
5462
- ASSERT_EQ(NumTableFilesAtLevel(3), 0);
5463
- ASSERT_TRUE(NumTableFilesAtLevel(0) > 0 || NumTableFilesAtLevel(4) > 0);
5464
-
5465
- // Verify there was no compression
5466
- auto num_block_compressed =
5467
- options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED);
5468
- ASSERT_EQ(num_block_compressed, 0);
5469
-
5470
- // Insert 400KB and there will be some files end up in L3. According to the
5471
- // above compression settings for each level, there will be some compression.
5472
- ASSERT_OK(options.statistics->Reset());
5473
- ASSERT_EQ(num_block_compressed, 0);
5474
- for (int i = 20; i < 120; i++) {
5475
- ASSERT_OK(Put(Key(keys[i]), CompressibleString(&rnd, 4000)));
5476
- ASSERT_OK(dbfull()->TEST_WaitForBackgroundWork());
5477
- }
5478
- ASSERT_OK(Flush());
5479
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
5480
- ASSERT_EQ(NumTableFilesAtLevel(1), 0);
5481
- ASSERT_EQ(NumTableFilesAtLevel(2), 0);
5482
- ASSERT_GE(NumTableFilesAtLevel(3), 1);
5483
- ASSERT_GE(NumTableFilesAtLevel(4), 1);
5484
-
5485
- // Verify there was compression
5486
- num_block_compressed =
5487
- options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED);
5488
- ASSERT_GT(num_block_compressed, 0);
5489
-
5490
- // Make sure data in files in L3 is not compacted by removing all files
5491
- // in L4 and calculate number of rows
5492
- ASSERT_OK(dbfull()->SetOptions({
5493
- {"disable_auto_compactions", "true"},
5494
- }));
5495
- ColumnFamilyMetaData cf_meta;
5496
- db_->GetColumnFamilyMetaData(&cf_meta);
5497
-
5498
- // Ensure that L1+ files are non-overlapping and together with L0 encompass
5499
- // full key range between smallestkey and largestkey from CF file metadata.
5500
- int largestkey_in_prev_level = -1;
5501
- int keys_found = 0;
5502
- for (int level = (int)cf_meta.levels.size() - 1; level >= 0; level--) {
5503
- int files_in_level = (int)cf_meta.levels[level].files.size();
5504
- int largestkey_in_prev_file = -1;
5505
- for (int j = 0; j < files_in_level; j++) {
5506
- int smallestkey = IdFromKey(cf_meta.levels[level].files[j].smallestkey);
5507
- int largestkey = IdFromKey(cf_meta.levels[level].files[j].largestkey);
5508
- int num_entries = (int)cf_meta.levels[level].files[j].num_entries;
5509
- ASSERT_EQ(num_entries, largestkey - smallestkey + 1);
5510
- keys_found += num_entries;
5511
- if (level > 0) {
5512
- if (j == 0) {
5513
- ASSERT_GT(smallestkey, largestkey_in_prev_level);
5514
- }
5515
- if (j > 0) {
5516
- ASSERT_GT(smallestkey, largestkey_in_prev_file);
5517
- }
5518
- if (j == files_in_level - 1) {
5519
- largestkey_in_prev_level = largestkey;
5520
- }
5521
- }
5522
- largestkey_in_prev_file = largestkey;
5523
- }
5524
- }
5525
- ASSERT_EQ(keys_found, kNKeys);
5526
-
5527
- for (const auto& file : cf_meta.levels[4].files) {
5528
- listener->SetExpectedFileName(dbname_ + file.name);
5529
- const RangeOpt ranges(file.smallestkey, file.largestkey);
5530
- // Given verification from above, we're guaranteed that by deleting all the
5531
- // files in [<smallestkey>, <largestkey>] range, we're effectively deleting
5532
- // that very single file and nothing more.
5533
- EXPECT_OK(dbfull()->DeleteFilesInRanges(dbfull()->DefaultColumnFamily(),
5534
- &ranges, true /* include_end */));
5535
- }
5536
- listener->VerifyMatchedCount(cf_meta.levels[4].files.size());
5537
-
5538
- int num_keys = 0;
5539
- std::unique_ptr<Iterator> iter(db_->NewIterator(ReadOptions()));
5540
- for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
5541
- num_keys++;
5542
- }
5543
- ASSERT_OK(iter->status());
5544
-
5545
- ASSERT_EQ(NumTableFilesAtLevel(1), 0);
5546
- ASSERT_EQ(NumTableFilesAtLevel(2), 0);
5547
- ASSERT_GE(NumTableFilesAtLevel(3), 1);
5548
- ASSERT_EQ(NumTableFilesAtLevel(4), 0);
5549
-
5550
- ASSERT_GT(SizeAtLevel(0) + SizeAtLevel(3), num_keys * 4000U + num_keys * 10U);
5551
- }
5552
-
5553
- TEST_F(DBTest, DynamicLevelCompressionPerLevel2) {
5554
- if (!Snappy_Supported() || !LZ4_Supported() || !Zlib_Supported()) {
5555
- return;
5556
- }
5557
- const int kNKeys = 500;
5558
- int keys[kNKeys];
5559
- for (int i = 0; i < kNKeys; i++) {
5560
- keys[i] = i;
5561
- }
5562
- RandomShuffle(std::begin(keys), std::end(keys));
5563
-
5564
- Random rnd(301);
5565
- Options options;
5566
- options.create_if_missing = true;
5567
- options.db_write_buffer_size = 6000000;
5568
- options.write_buffer_size = 600000;
5569
- options.max_write_buffer_number = 2;
5570
- options.level0_file_num_compaction_trigger = 2;
5571
- options.level0_slowdown_writes_trigger = 2;
5572
- options.level0_stop_writes_trigger = 2;
5573
- options.soft_pending_compaction_bytes_limit = 1024 * 1024;
5574
- options.target_file_size_base = 20;
5575
- options.env = env_;
5576
- options.level_compaction_dynamic_level_bytes = true;
5577
- options.max_bytes_for_level_base = 200;
5578
- options.max_bytes_for_level_multiplier = 8;
5579
- options.max_background_compactions = 1;
5580
- options.num_levels = 5;
5581
- std::shared_ptr<mock::MockTableFactory> mtf(new mock::MockTableFactory);
5582
- options.table_factory = mtf;
5583
-
5584
- options.compression_per_level.resize(3);
5585
- options.compression_per_level[0] = kNoCompression;
5586
- options.compression_per_level[1] = kLZ4Compression;
5587
- options.compression_per_level[2] = kZlibCompression;
5588
-
5589
- DestroyAndReopen(options);
5590
- // When base level is L4, L4 is LZ4.
5591
- std::atomic<int> num_zlib(0);
5592
- std::atomic<int> num_lz4(0);
5593
- std::atomic<int> num_no(0);
5594
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
5595
- "LevelCompactionPicker::PickCompaction:Return", [&](void* arg) {
5596
- Compaction* compaction = static_cast<Compaction*>(arg);
5597
- if (compaction->output_level() == 4) {
5598
- ASSERT_TRUE(compaction->output_compression() == kLZ4Compression);
5599
- num_lz4.fetch_add(1);
5600
- }
5601
- });
5602
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
5603
- "FlushJob::WriteLevel0Table:output_compression", [&](void* arg) {
5604
- auto* compression = static_cast<CompressionType*>(arg);
5605
- ASSERT_TRUE(*compression == kNoCompression);
5606
- num_no.fetch_add(1);
5607
- });
5608
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
5609
-
5610
- for (int i = 0; i < 100; i++) {
5611
- std::string value = rnd.RandomString(200);
5612
- ASSERT_OK(Put(Key(keys[i]), value));
5613
- if (i % 25 == 24) {
5614
- ASSERT_OK(Flush());
5615
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
5616
- }
5617
- }
5618
-
5619
- ASSERT_OK(Flush());
5620
- ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
5621
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
5622
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
5623
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
5624
-
5625
- ASSERT_EQ(NumTableFilesAtLevel(1), 0);
5626
- ASSERT_EQ(NumTableFilesAtLevel(2), 0);
5627
- ASSERT_EQ(NumTableFilesAtLevel(3), 0);
5628
- ASSERT_GT(NumTableFilesAtLevel(4), 0);
5629
- ASSERT_GT(num_no.load(), 2);
5630
- ASSERT_GT(num_lz4.load(), 0);
5631
- int prev_num_files_l4 = NumTableFilesAtLevel(4);
5632
-
5633
- // After base level turn L4->L3, L3 becomes LZ4 and L4 becomes Zlib
5634
- num_lz4.store(0);
5635
- num_no.store(0);
5636
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
5637
- "LevelCompactionPicker::PickCompaction:Return", [&](void* arg) {
5638
- Compaction* compaction = static_cast<Compaction*>(arg);
5639
- if (compaction->output_level() == 4 && compaction->start_level() == 3) {
5640
- ASSERT_TRUE(compaction->output_compression() == kZlibCompression);
5641
- num_zlib.fetch_add(1);
5642
- } else {
5643
- ASSERT_TRUE(compaction->output_compression() == kLZ4Compression);
5644
- num_lz4.fetch_add(1);
5645
- }
5646
- });
5647
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
5648
- "FlushJob::WriteLevel0Table:output_compression", [&](void* arg) {
5649
- auto* compression = static_cast<CompressionType*>(arg);
5650
- ASSERT_TRUE(*compression == kNoCompression);
5651
- num_no.fetch_add(1);
5652
- });
5653
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
5654
-
5655
- for (int i = 101; i < 500; i++) {
5656
- std::string value = rnd.RandomString(200);
5657
- ASSERT_OK(Put(Key(keys[i]), value));
5658
- if (i % 100 == 99) {
5659
- ASSERT_OK(Flush());
5660
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
5661
- }
5662
- }
5663
-
5664
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
5665
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
5666
- ASSERT_EQ(NumTableFilesAtLevel(1), 0);
5667
- ASSERT_EQ(NumTableFilesAtLevel(2), 0);
5668
- ASSERT_GT(NumTableFilesAtLevel(3), 0);
5669
- ASSERT_GT(NumTableFilesAtLevel(4), prev_num_files_l4);
5670
- ASSERT_GT(num_no.load(), 2);
5671
- ASSERT_GT(num_lz4.load(), 0);
5672
- ASSERT_GT(num_zlib.load(), 0);
5673
- }
5674
-
5675
5404
  TEST_F(DBTest, DynamicCompactionOptions) {
5676
5405
  // minimum write buffer size is enforced at 64KB
5677
5406
  const uint64_t k32KB = 1 << 15;
@@ -7349,27 +7078,6 @@ TEST_F(DBTest, LastWriteBufferDelay) {
7349
7078
  }
7350
7079
  #endif // !defined(ROCKSDB_DISABLE_STALL_NOTIFICATION)
7351
7080
 
7352
- TEST_F(DBTest, FailWhenCompressionNotSupportedTest) {
7353
- CompressionType compressions[] = {kZlibCompression, kBZip2Compression,
7354
- kLZ4Compression, kLZ4HCCompression,
7355
- kXpressCompression};
7356
- for (auto comp : compressions) {
7357
- if (!CompressionTypeSupported(comp)) {
7358
- // not supported, we should fail the Open()
7359
- Options options = CurrentOptions();
7360
- options.compression = comp;
7361
- ASSERT_TRUE(!TryReopen(options).ok());
7362
- // Try if CreateColumnFamily also fails
7363
- options.compression = kNoCompression;
7364
- ASSERT_OK(TryReopen(options));
7365
- ColumnFamilyOptions cf_options(options);
7366
- cf_options.compression = comp;
7367
- ColumnFamilyHandle* handle;
7368
- ASSERT_TRUE(!db_->CreateColumnFamily(cf_options, "name", &handle).ok());
7369
- }
7370
- }
7371
- }
7372
-
7373
7081
  TEST_F(DBTest, CreateColumnFamilyShouldFailOnIncompatibleOptions) {
7374
7082
  Options options = CurrentOptions();
7375
7083
  options.max_open_files = 100;