@nxtedition/rocksdb 7.0.23 → 7.0.26

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 (146) hide show
  1. package/binding.cc +3 -1
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +5 -0
  3. package/deps/rocksdb/rocksdb/Makefile +6 -2
  4. package/deps/rocksdb/rocksdb/TARGETS +14 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +4 -1
  6. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +20 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +2 -2
  8. package/deps/rocksdb/rocksdb/cache/cache_test.cc +44 -31
  9. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +491 -722
  10. package/deps/rocksdb/rocksdb/cache/clock_cache.h +468 -2
  11. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -1
  12. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +51 -52
  13. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +28 -16
  14. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +12 -1
  15. package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -0
  16. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +170 -36
  17. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +63 -36
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +4 -6
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +57 -38
  21. package/deps/rocksdb/rocksdb/db/blob/blob_read_request.h +58 -0
  22. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +164 -74
  23. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +42 -29
  24. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +419 -62
  25. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +208 -8
  26. package/deps/rocksdb/rocksdb/db/c.cc +68 -0
  27. package/deps/rocksdb/rocksdb/db/c_test.c +95 -2
  28. package/deps/rocksdb/rocksdb/db/column_family.cc +12 -3
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +92 -15
  30. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +76 -4
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +52 -1
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +30 -1
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +126 -0
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +203 -1584
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +93 -26
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +87 -1
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +314 -0
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +328 -0
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +4 -1
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +174 -33
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +474 -7
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +5 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +825 -0
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +46 -0
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +42 -0
  48. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +223 -0
  49. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +255 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +1253 -0
  51. package/deps/rocksdb/rocksdb/db/corruption_test.cc +32 -8
  52. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +3 -1
  53. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -8
  54. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +376 -0
  55. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +103 -78
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +4 -6
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +0 -8
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +10 -3
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +21 -6
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +19 -1
  61. package/deps/rocksdb/rocksdb/db/db_iter.cc +91 -14
  62. package/deps/rocksdb/rocksdb/db/db_iter.h +5 -0
  63. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +33 -0
  64. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +79 -0
  65. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +2 -0
  66. package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
  67. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +5 -2
  68. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +185 -0
  69. package/deps/rocksdb/rocksdb/db/dbformat.cc +1 -4
  70. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -8
  71. package/deps/rocksdb/rocksdb/db/internal_stats.cc +71 -29
  72. package/deps/rocksdb/rocksdb/db/internal_stats.h +160 -5
  73. package/deps/rocksdb/rocksdb/db/log_reader.cc +29 -3
  74. package/deps/rocksdb/rocksdb/db/log_reader.h +12 -3
  75. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -3
  76. package/deps/rocksdb/rocksdb/db/version_edit.cc +6 -0
  77. package/deps/rocksdb/rocksdb/db/version_set.cc +93 -129
  78. package/deps/rocksdb/rocksdb/db/version_set.h +4 -4
  79. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -2
  80. package/deps/rocksdb/rocksdb/db/version_set_test.cc +42 -35
  81. package/deps/rocksdb/rocksdb/db/write_batch.cc +10 -2
  82. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -1
  83. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +10 -4
  84. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -3
  85. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -2
  86. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
  87. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +5 -1
  88. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +140 -8
  89. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +12 -0
  90. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +46 -7
  91. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +7 -0
  92. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +27 -7
  93. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +8 -0
  94. package/deps/rocksdb/rocksdb/env/env_posix.cc +14 -0
  95. package/deps/rocksdb/rocksdb/env/env_test.cc +130 -1
  96. package/deps/rocksdb/rocksdb/env/fs_posix.cc +7 -1
  97. package/deps/rocksdb/rocksdb/env/io_posix.cc +18 -50
  98. package/deps/rocksdb/rocksdb/env/io_posix.h +53 -6
  99. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +8 -10
  100. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +3 -7
  101. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +239 -259
  102. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +84 -19
  103. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +24 -4
  104. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +1 -1
  105. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +31 -1
  106. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +11 -7
  107. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +2 -0
  108. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +14 -0
  109. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +20 -0
  110. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +37 -13
  111. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +7 -0
  112. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +14 -0
  113. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +9 -0
  114. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +13 -13
  115. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +12 -2
  116. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +38 -0
  117. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +7 -1
  118. package/deps/rocksdb/rocksdb/port/win/env_win.cc +17 -0
  119. package/deps/rocksdb/rocksdb/port/win/env_win.h +8 -0
  120. package/deps/rocksdb/rocksdb/port/win/io_win.cc +6 -3
  121. package/deps/rocksdb/rocksdb/src.mk +5 -0
  122. package/deps/rocksdb/rocksdb/table/block_based/block.h +1 -2
  123. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
  124. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +5 -2
  125. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +1 -1
  126. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +15 -12
  127. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +5 -4
  128. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  129. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +1 -1
  130. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -4
  131. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +1 -2
  132. package/deps/rocksdb/rocksdb/table/get_context.cc +1 -0
  133. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -2
  134. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +24 -4
  135. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
  136. package/deps/rocksdb/rocksdb/util/compression.h +2 -0
  137. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +18 -1
  138. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +67 -4
  139. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +8 -0
  140. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +15 -12
  141. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -2
  142. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
  143. package/deps/rocksdb/rocksdb.gyp +5 -1
  144. package/package.json +1 -1
  145. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  146. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -864,33 +864,24 @@ TEST_P(PrefetchTest, PrefetchWhenReseekwithCache) {
864
864
  Close();
865
865
  }
866
866
 
867
- class PrefetchTest1
868
- : public DBTestBase,
869
- public ::testing::WithParamInterface<std::tuple<bool, bool>> {
870
- public:
871
- PrefetchTest1() : DBTestBase("prefetch_test1", true) {}
872
- };
873
-
874
- INSTANTIATE_TEST_CASE_P(PrefetchTest1, PrefetchTest1,
875
- ::testing::Combine(::testing::Bool(),
876
- ::testing::Bool()));
877
-
878
867
  #ifndef ROCKSDB_LITE
879
- TEST_P(PrefetchTest1, DBIterLevelReadAhead) {
868
+ TEST_P(PrefetchTest, DBIterLevelReadAhead) {
880
869
  const int kNumKeys = 1000;
881
870
  // Set options
882
871
  std::shared_ptr<MockFS> fs =
883
872
  std::make_shared<MockFS>(env_->GetFileSystem(), false);
884
873
  std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
885
874
 
875
+ bool use_direct_io = std::get<0>(GetParam());
886
876
  bool is_adaptive_readahead = std::get<1>(GetParam());
877
+
887
878
  Options options = CurrentOptions();
888
879
  options.write_buffer_size = 1024;
889
880
  options.create_if_missing = true;
890
881
  options.compression = kNoCompression;
891
882
  options.statistics = CreateDBStatistics();
892
883
  options.env = env.get();
893
- bool use_direct_io = std::get<0>(GetParam());
884
+
894
885
  if (use_direct_io) {
895
886
  options.use_direct_reads = true;
896
887
  options.use_direct_io_for_flush_and_compaction = true;
@@ -987,7 +978,7 @@ TEST_P(PrefetchTest1, DBIterLevelReadAhead) {
987
978
  {
988
979
  HistogramData async_read_bytes;
989
980
  options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
990
- if (ro.async_io && !use_direct_io) {
981
+ if (ro.async_io) {
991
982
  ASSERT_GT(async_read_bytes.count, 0);
992
983
  } else {
993
984
  ASSERT_EQ(async_read_bytes.count, 0);
@@ -1001,16 +992,16 @@ TEST_P(PrefetchTest1, DBIterLevelReadAhead) {
1001
992
  }
1002
993
  #endif //! ROCKSDB_LITE
1003
994
 
1004
- class PrefetchTest2 : public DBTestBase,
995
+ class PrefetchTest1 : public DBTestBase,
1005
996
  public ::testing::WithParamInterface<bool> {
1006
997
  public:
1007
- PrefetchTest2() : DBTestBase("prefetch_test2", true) {}
998
+ PrefetchTest1() : DBTestBase("prefetch_test1", true) {}
1008
999
  };
1009
1000
 
1010
- INSTANTIATE_TEST_CASE_P(PrefetchTest2, PrefetchTest2, ::testing::Bool());
1001
+ INSTANTIATE_TEST_CASE_P(PrefetchTest1, PrefetchTest1, ::testing::Bool());
1011
1002
 
1012
1003
  #ifndef ROCKSDB_LITE
1013
- TEST_P(PrefetchTest2, NonSequentialReadsWithAdaptiveReadahead) {
1004
+ TEST_P(PrefetchTest1, NonSequentialReadsWithAdaptiveReadahead) {
1014
1005
  const int kNumKeys = 1000;
1015
1006
  // Set options
1016
1007
  std::shared_ptr<MockFS> fs =
@@ -1103,7 +1094,7 @@ TEST_P(PrefetchTest2, NonSequentialReadsWithAdaptiveReadahead) {
1103
1094
  }
1104
1095
  #endif //! ROCKSDB_LITE
1105
1096
 
1106
- TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
1097
+ TEST_P(PrefetchTest1, DecreaseReadAheadIfInCache) {
1107
1098
  const int kNumKeys = 2000;
1108
1099
  // Set options
1109
1100
  std::shared_ptr<MockFS> fs =
@@ -1167,7 +1158,6 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
1167
1158
  SyncPoint::GetInstance()->EnableProcessing();
1168
1159
  ReadOptions ro;
1169
1160
  ro.adaptive_readahead = true;
1170
- // ro.async_io = true;
1171
1161
  {
1172
1162
  /*
1173
1163
  * Reseek keys from sequential Data Blocks within same partitioned
@@ -1248,7 +1238,7 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
1248
1238
  Close();
1249
1239
  }
1250
1240
 
1251
- TEST_P(PrefetchTest2, SeekParallelizationTest) {
1241
+ TEST_P(PrefetchTest1, SeekParallelizationTest) {
1252
1242
  const int kNumKeys = 2000;
1253
1243
  // Set options
1254
1244
  std::shared_ptr<MockFS> fs =
@@ -1341,12 +1331,8 @@ TEST_P(PrefetchTest2, SeekParallelizationTest) {
1341
1331
  {
1342
1332
  HistogramData async_read_bytes;
1343
1333
  options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
1344
- if (GetParam()) {
1345
- ASSERT_EQ(async_read_bytes.count, 0);
1346
- } else {
1347
- ASSERT_GT(async_read_bytes.count, 0);
1348
- ASSERT_GT(get_perf_context()->number_async_seek, 0);
1349
- }
1334
+ ASSERT_GT(async_read_bytes.count, 0);
1335
+ ASSERT_GT(get_perf_context()->number_async_seek, 0);
1350
1336
  }
1351
1337
 
1352
1338
  buff_prefetch_count = 0;
@@ -1356,11 +1342,7 @@ TEST_P(PrefetchTest2, SeekParallelizationTest) {
1356
1342
 
1357
1343
  extern "C" bool RocksDbIOUringEnable() { return true; }
1358
1344
 
1359
- class PrefetchTestWithPosix : public DBTestBase,
1360
- public ::testing::WithParamInterface<bool> {
1361
- public:
1362
- PrefetchTestWithPosix() : DBTestBase("prefetch_test_with_posix", true) {}
1363
-
1345
+ namespace {
1364
1346
  #ifndef ROCKSDB_LITE
1365
1347
  #ifdef GFLAGS
1366
1348
  const int kMaxArgCount = 100;
@@ -1387,144 +1369,95 @@ class PrefetchTestWithPosix : public DBTestBase,
1387
1369
  }
1388
1370
  #endif // GFLAGS
1389
1371
  #endif // ROCKSDB_LITE
1390
- };
1391
-
1392
- INSTANTIATE_TEST_CASE_P(PrefetchTestWithPosix, PrefetchTestWithPosix,
1393
- ::testing::Bool());
1372
+ } // namespace
1394
1373
 
1395
1374
  // Tests the default implementation of ReadAsync API with PosixFileSystem.
1396
- TEST_P(PrefetchTestWithPosix, ReadAsyncWithPosixFS) {
1397
- if (mem_env_ || encrypted_env_) {
1398
- ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
1399
- return;
1400
- }
1401
-
1402
- const int kNumKeys = 1000;
1403
- std::shared_ptr<MockFS> fs = std::make_shared<MockFS>(
1404
- FileSystem::Default(), /*support_prefetch=*/false);
1405
- std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
1406
-
1407
- bool use_direct_io = false;
1408
- Options options = CurrentOptions();
1409
- options.write_buffer_size = 1024;
1410
- options.create_if_missing = true;
1411
- options.compression = kNoCompression;
1412
- options.env = env.get();
1413
- options.statistics = CreateDBStatistics();
1414
- if (use_direct_io) {
1415
- options.use_direct_reads = true;
1416
- options.use_direct_io_for_flush_and_compaction = true;
1417
- }
1418
- BlockBasedTableOptions table_options;
1419
- table_options.no_block_cache = true;
1420
- table_options.cache_index_and_filter_blocks = false;
1421
- table_options.metadata_block_size = 1024;
1422
- table_options.index_type =
1423
- BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
1424
- options.table_factory.reset(NewBlockBasedTableFactory(table_options));
1375
+ TEST_P(PrefetchTest, ReadAsyncWithPosixFS) {
1376
+ if (mem_env_ || encrypted_env_) {
1377
+ ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
1378
+ return;
1379
+ }
1425
1380
 
1426
- Status s = TryReopen(options);
1427
- if (use_direct_io && (s.IsNotSupported() || s.IsInvalidArgument())) {
1428
- // If direct IO is not supported, skip the test
1429
- return;
1430
- } else {
1431
- ASSERT_OK(s);
1432
- }
1381
+ const int kNumKeys = 1000;
1382
+ std::shared_ptr<MockFS> fs = std::make_shared<MockFS>(
1383
+ FileSystem::Default(), /*support_prefetch=*/false);
1384
+ std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
1385
+
1386
+ bool use_direct_io = std::get<0>(GetParam());
1387
+ Options options = CurrentOptions();
1388
+ options.write_buffer_size = 1024;
1389
+ options.create_if_missing = true;
1390
+ options.compression = kNoCompression;
1391
+ options.env = env.get();
1392
+ options.statistics = CreateDBStatistics();
1393
+ if (use_direct_io) {
1394
+ options.use_direct_reads = true;
1395
+ options.use_direct_io_for_flush_and_compaction = true;
1396
+ }
1397
+ BlockBasedTableOptions table_options;
1398
+ table_options.no_block_cache = true;
1399
+ table_options.cache_index_and_filter_blocks = false;
1400
+ table_options.metadata_block_size = 1024;
1401
+ table_options.index_type =
1402
+ BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
1403
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
1404
+
1405
+ Status s = TryReopen(options);
1406
+ if (use_direct_io && (s.IsNotSupported() || s.IsInvalidArgument())) {
1407
+ // If direct IO is not supported, skip the test
1408
+ return;
1409
+ } else {
1410
+ ASSERT_OK(s);
1411
+ }
1433
1412
 
1434
- int total_keys = 0;
1435
- // Write the keys.
1436
- {
1437
- WriteBatch batch;
1438
- Random rnd(309);
1439
- for (int j = 0; j < 5; j++) {
1440
- for (int i = j * kNumKeys; i < (j + 1) * kNumKeys; i++) {
1441
- ASSERT_OK(batch.Put(BuildKey(i), rnd.RandomString(1000)));
1442
- total_keys++;
1413
+ int total_keys = 0;
1414
+ // Write the keys.
1415
+ {
1416
+ WriteBatch batch;
1417
+ Random rnd(309);
1418
+ for (int j = 0; j < 5; j++) {
1419
+ for (int i = j * kNumKeys; i < (j + 1) * kNumKeys; i++) {
1420
+ ASSERT_OK(batch.Put(BuildKey(i), rnd.RandomString(1000)));
1421
+ total_keys++;
1422
+ }
1423
+ ASSERT_OK(db_->Write(WriteOptions(), &batch));
1424
+ ASSERT_OK(Flush());
1443
1425
  }
1444
- ASSERT_OK(db_->Write(WriteOptions(), &batch));
1445
- ASSERT_OK(Flush());
1426
+ MoveFilesToLevel(2);
1446
1427
  }
1447
- MoveFilesToLevel(2);
1448
- }
1449
-
1450
- int buff_prefetch_count = 0;
1451
- bool read_async_called = false;
1452
- ReadOptions ro;
1453
- ro.adaptive_readahead = true;
1454
- ro.async_io = true;
1455
-
1456
- if (GetParam()) {
1457
- ro.readahead_size = 16 * 1024;
1458
- }
1459
-
1460
- SyncPoint::GetInstance()->SetCallBack(
1461
- "FilePrefetchBuffer::PrefetchAsyncInternal:Start",
1462
- [&](void*) { buff_prefetch_count++; });
1463
1428
 
1464
- SyncPoint::GetInstance()->SetCallBack(
1465
- "UpdateResults::io_uring_result",
1466
- [&](void* /*arg*/) { read_async_called = true; });
1467
- SyncPoint::GetInstance()->EnableProcessing();
1468
-
1469
- // Read the keys.
1470
- {
1471
- ASSERT_OK(options.statistics->Reset());
1472
- get_perf_context()->Reset();
1429
+ int buff_prefetch_count = 0;
1430
+ bool read_async_called = false;
1431
+ ReadOptions ro;
1432
+ ro.adaptive_readahead = true;
1433
+ ro.async_io = true;
1473
1434
 
1474
- auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1475
- int num_keys = 0;
1476
- for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
1477
- ASSERT_OK(iter->status());
1478
- num_keys++;
1435
+ if (std::get<1>(GetParam())) {
1436
+ ro.readahead_size = 16 * 1024;
1479
1437
  }
1480
1438
 
1481
- ASSERT_EQ(num_keys, total_keys);
1482
- ASSERT_GT(buff_prefetch_count, 0);
1483
-
1484
- // Check stats to make sure async prefetch is done.
1485
- {
1486
- HistogramData async_read_bytes;
1487
- options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
1488
- HistogramData prefetched_bytes_discarded;
1489
- options.statistics->histogramData(PREFETCHED_BYTES_DISCARDED,
1490
- &prefetched_bytes_discarded);
1439
+ SyncPoint::GetInstance()->SetCallBack(
1440
+ "FilePrefetchBuffer::PrefetchAsyncInternal:Start",
1441
+ [&](void*) { buff_prefetch_count++; });
1491
1442
 
1492
- // Not all platforms support iouring. In that case, ReadAsync in posix
1493
- // won't submit async requests.
1494
- if (read_async_called) {
1495
- ASSERT_GT(async_read_bytes.count, 0);
1496
- } else {
1497
- ASSERT_EQ(async_read_bytes.count, 0);
1498
- }
1499
- ASSERT_GT(prefetched_bytes_discarded.count, 0);
1500
- }
1501
- ASSERT_EQ(get_perf_context()->number_async_seek, 0);
1502
- }
1443
+ SyncPoint::GetInstance()->SetCallBack(
1444
+ "UpdateResults::io_uring_result",
1445
+ [&](void* /*arg*/) { read_async_called = true; });
1446
+ SyncPoint::GetInstance()->EnableProcessing();
1503
1447
 
1504
- {
1505
- // Read the keys using seek.
1448
+ // Read the keys.
1506
1449
  {
1507
1450
  ASSERT_OK(options.statistics->Reset());
1508
1451
  get_perf_context()->Reset();
1509
1452
 
1510
1453
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1511
1454
  int num_keys = 0;
1512
- iter->Seek(BuildKey(450));
1513
- while (iter->Valid()) {
1514
- ASSERT_OK(iter->status());
1515
- num_keys++;
1516
- iter->Next();
1517
- }
1518
- ASSERT_OK(iter->status());
1519
-
1520
- iter->Seek(BuildKey(450));
1521
- while (iter->Valid()) {
1455
+ for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
1522
1456
  ASSERT_OK(iter->status());
1523
1457
  num_keys++;
1524
- iter->Prev();
1525
1458
  }
1526
1459
 
1527
- ASSERT_EQ(num_keys, total_keys + 1);
1460
+ ASSERT_EQ(num_keys, total_keys);
1528
1461
  ASSERT_GT(buff_prefetch_count, 0);
1529
1462
 
1530
1463
  // Check stats to make sure async prefetch is done.
@@ -1539,146 +1472,193 @@ TEST_P(PrefetchTestWithPosix, ReadAsyncWithPosixFS) {
1539
1472
  // won't submit async requests.
1540
1473
  if (read_async_called) {
1541
1474
  ASSERT_GT(async_read_bytes.count, 0);
1542
- ASSERT_GT(get_perf_context()->number_async_seek, 0);
1543
1475
  } else {
1544
1476
  ASSERT_EQ(async_read_bytes.count, 0);
1545
- ASSERT_EQ(get_perf_context()->number_async_seek, 0);
1546
1477
  }
1547
1478
  ASSERT_GT(prefetched_bytes_discarded.count, 0);
1548
1479
  }
1480
+ ASSERT_EQ(get_perf_context()->number_async_seek, 0);
1549
1481
  }
1550
- }
1551
1482
 
1552
- SyncPoint::GetInstance()->DisableProcessing();
1553
- SyncPoint::GetInstance()->ClearAllCallBacks();
1483
+ {
1484
+ // Read the keys using seek.
1485
+ {
1486
+ ASSERT_OK(options.statistics->Reset());
1487
+ get_perf_context()->Reset();
1488
+
1489
+ auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1490
+ int num_keys = 0;
1491
+ iter->Seek(BuildKey(450));
1492
+ while (iter->Valid()) {
1493
+ ASSERT_OK(iter->status());
1494
+ num_keys++;
1495
+ iter->Next();
1496
+ }
1497
+ ASSERT_OK(iter->status());
1554
1498
 
1555
- Close();
1556
- }
1499
+ iter->Seek(BuildKey(450));
1500
+ while (iter->Valid()) {
1501
+ ASSERT_OK(iter->status());
1502
+ num_keys++;
1503
+ iter->Prev();
1504
+ }
1557
1505
 
1558
- #ifndef ROCKSDB_LITE
1559
- #ifdef GFLAGS
1560
- TEST_P(PrefetchTestWithPosix, TraceReadAsyncWithCallbackWrapper) {
1561
- if (mem_env_ || encrypted_env_) {
1562
- ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
1563
- return;
1564
- }
1506
+ ASSERT_EQ(num_keys, total_keys + 1);
1507
+ ASSERT_GT(buff_prefetch_count, 0);
1508
+
1509
+ // Check stats to make sure async prefetch is done.
1510
+ {
1511
+ HistogramData async_read_bytes;
1512
+ options.statistics->histogramData(ASYNC_READ_BYTES,
1513
+ &async_read_bytes);
1514
+ HistogramData prefetched_bytes_discarded;
1515
+ options.statistics->histogramData(PREFETCHED_BYTES_DISCARDED,
1516
+ &prefetched_bytes_discarded);
1517
+
1518
+ // Not all platforms support iouring. In that case, ReadAsync in posix
1519
+ // won't submit async requests.
1520
+ if (read_async_called) {
1521
+ ASSERT_GT(async_read_bytes.count, 0);
1522
+ ASSERT_GT(get_perf_context()->number_async_seek, 0);
1523
+ } else {
1524
+ ASSERT_EQ(async_read_bytes.count, 0);
1525
+ ASSERT_EQ(get_perf_context()->number_async_seek, 0);
1526
+ }
1527
+ ASSERT_GT(prefetched_bytes_discarded.count, 0);
1528
+ }
1529
+ }
1530
+ }
1565
1531
 
1566
- const int kNumKeys = 1000;
1567
- std::shared_ptr<MockFS> fs = std::make_shared<MockFS>(
1568
- FileSystem::Default(), /*support_prefetch=*/false);
1569
- std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
1532
+ SyncPoint::GetInstance()->DisableProcessing();
1533
+ SyncPoint::GetInstance()->ClearAllCallBacks();
1570
1534
 
1571
- bool use_direct_io = false;
1572
- Options options = CurrentOptions();
1573
- options.write_buffer_size = 1024;
1574
- options.create_if_missing = true;
1575
- options.compression = kNoCompression;
1576
- options.env = env.get();
1577
- options.statistics = CreateDBStatistics();
1578
- if (use_direct_io) {
1579
- options.use_direct_reads = true;
1580
- options.use_direct_io_for_flush_and_compaction = true;
1535
+ Close();
1581
1536
  }
1582
- BlockBasedTableOptions table_options;
1583
- table_options.no_block_cache = true;
1584
- table_options.cache_index_and_filter_blocks = false;
1585
- table_options.metadata_block_size = 1024;
1586
- table_options.index_type =
1587
- BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
1588
- options.table_factory.reset(NewBlockBasedTableFactory(table_options));
1589
1537
 
1590
- Status s = TryReopen(options);
1591
- if (use_direct_io && (s.IsNotSupported() || s.IsInvalidArgument())) {
1592
- // If direct IO is not supported, skip the test
1593
- return;
1594
- } else {
1595
- ASSERT_OK(s);
1596
- }
1538
+ #ifndef ROCKSDB_LITE
1539
+ #ifdef GFLAGS
1540
+ TEST_P(PrefetchTest, TraceReadAsyncWithCallbackWrapper) {
1541
+ if (mem_env_ || encrypted_env_) {
1542
+ ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
1543
+ return;
1544
+ }
1597
1545
 
1598
- int total_keys = 0;
1599
- // Write the keys.
1600
- {
1601
- WriteBatch batch;
1602
- Random rnd(309);
1603
- for (int j = 0; j < 5; j++) {
1604
- for (int i = j * kNumKeys; i < (j + 1) * kNumKeys; i++) {
1605
- ASSERT_OK(batch.Put(BuildKey(i), rnd.RandomString(1000)));
1606
- total_keys++;
1546
+ const int kNumKeys = 1000;
1547
+ std::shared_ptr<MockFS> fs = std::make_shared<MockFS>(
1548
+ FileSystem::Default(), /*support_prefetch=*/false);
1549
+ std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
1550
+
1551
+ bool use_direct_io = std::get<0>(GetParam());
1552
+ Options options = CurrentOptions();
1553
+ options.write_buffer_size = 1024;
1554
+ options.create_if_missing = true;
1555
+ options.compression = kNoCompression;
1556
+ options.env = env.get();
1557
+ options.statistics = CreateDBStatistics();
1558
+ if (use_direct_io) {
1559
+ options.use_direct_reads = true;
1560
+ options.use_direct_io_for_flush_and_compaction = true;
1561
+ }
1562
+ BlockBasedTableOptions table_options;
1563
+ table_options.no_block_cache = true;
1564
+ table_options.cache_index_and_filter_blocks = false;
1565
+ table_options.metadata_block_size = 1024;
1566
+ table_options.index_type =
1567
+ BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
1568
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
1569
+
1570
+ Status s = TryReopen(options);
1571
+ if (use_direct_io && (s.IsNotSupported() || s.IsInvalidArgument())) {
1572
+ // If direct IO is not supported, skip the test
1573
+ return;
1574
+ } else {
1575
+ ASSERT_OK(s);
1576
+ }
1577
+
1578
+ int total_keys = 0;
1579
+ // Write the keys.
1580
+ {
1581
+ WriteBatch batch;
1582
+ Random rnd(309);
1583
+ for (int j = 0; j < 5; j++) {
1584
+ for (int i = j * kNumKeys; i < (j + 1) * kNumKeys; i++) {
1585
+ ASSERT_OK(batch.Put(BuildKey(i), rnd.RandomString(1000)));
1586
+ total_keys++;
1587
+ }
1588
+ ASSERT_OK(db_->Write(WriteOptions(), &batch));
1589
+ ASSERT_OK(Flush());
1607
1590
  }
1608
- ASSERT_OK(db_->Write(WriteOptions(), &batch));
1609
- ASSERT_OK(Flush());
1591
+ MoveFilesToLevel(2);
1610
1592
  }
1611
- MoveFilesToLevel(2);
1612
- }
1613
1593
 
1614
- int buff_prefetch_count = 0;
1615
- bool read_async_called = false;
1616
- ReadOptions ro;
1617
- ro.adaptive_readahead = true;
1618
- ro.async_io = true;
1594
+ int buff_prefetch_count = 0;
1595
+ bool read_async_called = false;
1596
+ ReadOptions ro;
1597
+ ro.adaptive_readahead = true;
1598
+ ro.async_io = true;
1619
1599
 
1620
- if (GetParam()) {
1621
- ro.readahead_size = 16 * 1024;
1622
- }
1600
+ if (std::get<1>(GetParam())) {
1601
+ ro.readahead_size = 16 * 1024;
1602
+ }
1623
1603
 
1624
- SyncPoint::GetInstance()->SetCallBack(
1625
- "FilePrefetchBuffer::PrefetchAsyncInternal:Start",
1626
- [&](void*) { buff_prefetch_count++; });
1604
+ SyncPoint::GetInstance()->SetCallBack(
1605
+ "FilePrefetchBuffer::PrefetchAsyncInternal:Start",
1606
+ [&](void*) { buff_prefetch_count++; });
1627
1607
 
1628
- SyncPoint::GetInstance()->SetCallBack(
1629
- "UpdateResults::io_uring_result",
1630
- [&](void* /*arg*/) { read_async_called = true; });
1631
- SyncPoint::GetInstance()->EnableProcessing();
1608
+ SyncPoint::GetInstance()->SetCallBack(
1609
+ "UpdateResults::io_uring_result",
1610
+ [&](void* /*arg*/) { read_async_called = true; });
1611
+ SyncPoint::GetInstance()->EnableProcessing();
1632
1612
 
1633
- // Read the keys.
1634
- {
1635
- // Start io_tracing.
1636
- WriteOptions write_opt;
1637
- TraceOptions trace_opt;
1638
- std::unique_ptr<TraceWriter> trace_writer;
1639
- std::string trace_file_path = dbname_ + "/io_trace_file";
1640
-
1641
- ASSERT_OK(
1642
- NewFileTraceWriter(env_, EnvOptions(), trace_file_path, &trace_writer));
1643
- ASSERT_OK(db_->StartIOTrace(trace_opt, std::move(trace_writer)));
1644
- ASSERT_OK(options.statistics->Reset());
1613
+ // Read the keys.
1614
+ {
1615
+ // Start io_tracing.
1616
+ WriteOptions write_opt;
1617
+ TraceOptions trace_opt;
1618
+ std::unique_ptr<TraceWriter> trace_writer;
1619
+ std::string trace_file_path = dbname_ + "/io_trace_file";
1620
+
1621
+ ASSERT_OK(NewFileTraceWriter(env_, EnvOptions(), trace_file_path,
1622
+ &trace_writer));
1623
+ ASSERT_OK(db_->StartIOTrace(trace_opt, std::move(trace_writer)));
1624
+ ASSERT_OK(options.statistics->Reset());
1645
1625
 
1646
- auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1647
- int num_keys = 0;
1648
- for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
1649
- ASSERT_OK(iter->status());
1650
- num_keys++;
1651
- }
1626
+ auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1627
+ int num_keys = 0;
1628
+ for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
1629
+ ASSERT_OK(iter->status());
1630
+ num_keys++;
1631
+ }
1652
1632
 
1653
- // End the tracing.
1654
- ASSERT_OK(db_->EndIOTrace());
1655
- ASSERT_OK(env_->FileExists(trace_file_path));
1633
+ // End the tracing.
1634
+ ASSERT_OK(db_->EndIOTrace());
1635
+ ASSERT_OK(env_->FileExists(trace_file_path));
1656
1636
 
1657
- ASSERT_EQ(num_keys, total_keys);
1658
- ASSERT_GT(buff_prefetch_count, 0);
1637
+ ASSERT_EQ(num_keys, total_keys);
1638
+ ASSERT_GT(buff_prefetch_count, 0);
1659
1639
 
1660
- // Check stats to make sure async prefetch is done.
1661
- {
1662
- HistogramData async_read_bytes;
1663
- options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
1664
- // Not all platforms support iouring. In that case, ReadAsync in posix
1665
- // won't submit async requests.
1666
- if (read_async_called) {
1667
- ASSERT_GT(async_read_bytes.count, 0);
1668
- } else {
1669
- ASSERT_EQ(async_read_bytes.count, 0);
1640
+ // Check stats to make sure async prefetch is done.
1641
+ {
1642
+ HistogramData async_read_bytes;
1643
+ options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
1644
+ // Not all platforms support iouring. In that case, ReadAsync in posix
1645
+ // won't submit async requests.
1646
+ if (read_async_called) {
1647
+ ASSERT_GT(async_read_bytes.count, 0);
1648
+ } else {
1649
+ ASSERT_EQ(async_read_bytes.count, 0);
1650
+ }
1670
1651
  }
1671
- }
1672
1652
 
1673
- // Check the file to see if ReadAsync is logged.
1674
- RunIOTracerParserTool(trace_file_path);
1675
- }
1653
+ // Check the file to see if ReadAsync is logged.
1654
+ RunIOTracerParserTool(trace_file_path);
1655
+ }
1676
1656
 
1677
- SyncPoint::GetInstance()->DisableProcessing();
1678
- SyncPoint::GetInstance()->ClearAllCallBacks();
1657
+ SyncPoint::GetInstance()->DisableProcessing();
1658
+ SyncPoint::GetInstance()->ClearAllCallBacks();
1679
1659
 
1680
- Close();
1681
- }
1660
+ Close();
1661
+ }
1682
1662
  #endif // GFLAGS
1683
1663
  #endif // ROCKSDB_LITE
1684
1664
  } // namespace ROCKSDB_NAMESPACE