@nxtedition/rocksdb 8.1.4 → 8.1.6

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 (223) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +21 -0
  2. package/deps/rocksdb/rocksdb/Makefile +15 -3
  3. package/deps/rocksdb/rocksdb/TARGETS +6 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +32 -35
  5. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +0 -30
  6. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +0 -83
  7. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +13 -14
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +40 -0
  9. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +14 -20
  10. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +8 -9
  11. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +5 -4
  12. package/deps/rocksdb/rocksdb/cache/cache_test.cc +124 -156
  13. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +10 -26
  14. package/deps/rocksdb/rocksdb/cache/charged_cache.h +11 -16
  15. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +35 -32
  16. package/deps/rocksdb/rocksdb/cache/clock_cache.h +19 -21
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +42 -30
  18. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -8
  19. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +91 -143
  20. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +54 -60
  21. package/deps/rocksdb/rocksdb/cache/lru_cache.h +37 -63
  22. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +120 -106
  23. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +14 -5
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -31
  25. package/deps/rocksdb/rocksdb/cache/typed_cache.h +339 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +0 -48
  27. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +18 -15
  28. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +5 -26
  29. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +7 -8
  30. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +6 -3
  31. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -7
  32. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +19 -47
  33. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -5
  34. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +15 -22
  35. package/deps/rocksdb/rocksdb/db/builder.cc +24 -10
  36. package/deps/rocksdb/rocksdb/db/builder.h +2 -1
  37. package/deps/rocksdb/rocksdb/db/c.cc +15 -0
  38. package/deps/rocksdb/rocksdb/db/c_test.c +3 -0
  39. package/deps/rocksdb/rocksdb/db/column_family.cc +11 -6
  40. package/deps/rocksdb/rocksdb/db/column_family.h +20 -6
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +31 -34
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +3 -0
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +21 -3
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +1 -0
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +4 -0
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +4 -2
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +9 -6
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +275 -82
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -18
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +17 -16
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +19 -6
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +5 -5
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +22 -22
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +5 -5
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +81 -52
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +5 -1
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +5 -5
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +8 -2
  60. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +3 -0
  61. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +266 -138
  62. package/deps/rocksdb/rocksdb/db/corruption_test.cc +86 -1
  63. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +98 -9
  64. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -28
  65. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +2 -3
  66. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1022 -123
  67. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +65 -4
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +32 -21
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +32 -24
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +199 -77
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +1 -1
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +3 -2
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +3 -0
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +8 -4
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +43 -23
  76. package/deps/rocksdb/rocksdb/db/db_iter.cc +8 -2
  77. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +42 -0
  78. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +155 -0
  79. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -12
  80. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +230 -2
  81. package/deps/rocksdb/rocksdb/db/db_test.cc +3 -0
  82. package/deps/rocksdb/rocksdb/db/db_test2.cc +233 -8
  83. package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -10
  84. package/deps/rocksdb/rocksdb/db/db_test_util.h +39 -24
  85. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +129 -0
  86. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +28 -0
  87. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +21 -0
  88. package/deps/rocksdb/rocksdb/db/dbformat.cc +25 -0
  89. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -0
  90. package/deps/rocksdb/rocksdb/db/experimental.cc +3 -2
  91. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +3 -0
  92. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +92 -13
  93. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +38 -1
  94. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +14 -110
  95. package/deps/rocksdb/rocksdb/db/flush_job.cc +12 -10
  96. package/deps/rocksdb/rocksdb/db/flush_job.h +3 -2
  97. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +29 -29
  98. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +56 -53
  99. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +3 -4
  100. package/deps/rocksdb/rocksdb/db/internal_stats.cc +11 -11
  101. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
  102. package/deps/rocksdb/rocksdb/db/log_reader.cc +8 -6
  103. package/deps/rocksdb/rocksdb/db/log_test.cc +35 -2
  104. package/deps/rocksdb/rocksdb/db/memtable.cc +31 -6
  105. package/deps/rocksdb/rocksdb/db/merge_helper.cc +47 -29
  106. package/deps/rocksdb/rocksdb/db/merge_helper.h +14 -6
  107. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +10 -10
  108. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/repair.cc +65 -22
  110. package/deps/rocksdb/rocksdb/db/repair_test.cc +54 -0
  111. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +26 -26
  112. package/deps/rocksdb/rocksdb/db/table_cache.cc +41 -91
  113. package/deps/rocksdb/rocksdb/db/table_cache.h +17 -19
  114. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -9
  115. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -1
  116. package/deps/rocksdb/rocksdb/db/version_builder.cc +102 -52
  117. package/deps/rocksdb/rocksdb/db/version_builder.h +20 -0
  118. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +218 -93
  119. package/deps/rocksdb/rocksdb/db/version_edit.cc +27 -1
  120. package/deps/rocksdb/rocksdb/db/version_edit.h +34 -9
  121. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +13 -6
  122. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +17 -6
  123. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +19 -17
  124. package/deps/rocksdb/rocksdb/db/version_set.cc +160 -28
  125. package/deps/rocksdb/rocksdb/db/version_set.h +34 -4
  126. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -1
  127. package/deps/rocksdb/rocksdb/db/version_set_test.cc +65 -31
  128. package/deps/rocksdb/rocksdb/db/write_batch.cc +4 -1
  129. package/deps/rocksdb/rocksdb/db/write_thread.cc +5 -2
  130. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
  131. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +31 -32
  132. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -1
  133. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +8 -6
  134. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
  135. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +11 -4
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +16 -15
  137. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +13 -1
  138. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -0
  139. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +286 -217
  140. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +8 -0
  141. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +137 -135
  142. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +6 -0
  143. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -1
  144. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +21 -0
  145. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +9 -3
  146. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +2 -1
  147. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +8 -6
  148. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +3 -0
  149. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +69 -9
  150. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  151. package/deps/rocksdb/rocksdb/memory/arena.cc +23 -87
  152. package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
  153. package/deps/rocksdb/rocksdb/memory/arena_test.cc +90 -0
  154. package/deps/rocksdb/rocksdb/memory/memory_allocator.h +9 -0
  155. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +26 -26
  156. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -3
  157. package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
  158. package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
  159. package/deps/rocksdb/rocksdb/port/port_posix.h +2 -0
  160. package/{prebuilds → deps/rocksdb/rocksdb/prebuilds}/linux-x64/node.napi.node +0 -0
  161. package/deps/rocksdb/rocksdb/src.mk +3 -0
  162. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -2
  163. package/deps/rocksdb/rocksdb/table/block_based/block.h +3 -0
  164. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +25 -67
  165. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +3 -3
  166. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +18 -13
  167. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +159 -225
  168. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +31 -50
  169. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +52 -20
  170. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +3 -3
  171. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +1 -1
  172. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +96 -0
  173. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +132 -0
  174. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -0
  175. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -5
  176. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +1 -4
  177. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +6 -7
  178. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -1
  179. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +6 -1
  180. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +19 -18
  181. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +9 -5
  182. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +3 -1
  183. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +2 -1
  184. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -2
  185. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -3
  186. package/deps/rocksdb/rocksdb/table/format.cc +24 -20
  187. package/deps/rocksdb/rocksdb/table/format.h +6 -3
  188. package/deps/rocksdb/rocksdb/table/get_context.cc +12 -3
  189. package/deps/rocksdb/rocksdb/table/internal_iterator.h +0 -2
  190. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +69 -35
  191. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  192. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -1
  193. package/deps/rocksdb/rocksdb/table/table_test.cc +7 -6
  194. package/deps/rocksdb/rocksdb/test_util/testutil.h +10 -0
  195. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +66 -1
  196. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +9 -2
  197. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +5 -0
  198. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +2 -2
  199. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +1 -1
  200. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +20 -12
  201. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -1
  202. package/deps/rocksdb/rocksdb/util/compression.cc +2 -2
  203. package/deps/rocksdb/rocksdb/util/compression.h +11 -2
  204. package/deps/rocksdb/rocksdb/util/status.cc +7 -0
  205. package/deps/rocksdb/rocksdb/util/xxhash.h +1901 -887
  206. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +250 -74
  207. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +199 -4
  208. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +35 -57
  209. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +4 -5
  210. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -0
  211. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +39 -0
  212. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -0
  213. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +11 -6
  214. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +6 -5
  215. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +0 -1
  216. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +10 -11
  217. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +31 -31
  218. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  219. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +111 -0
  220. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +1 -0
  221. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +12 -3
  222. package/package.json +1 -1
  223. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +0 -182
@@ -32,6 +32,9 @@
32
32
 
33
33
  namespace ROCKSDB_NAMESPACE {
34
34
 
35
+ static bool enable_io_uring = true;
36
+ extern "C" bool RocksDbIOUringEnable() { return enable_io_uring; }
37
+
35
38
  class DBBasicTest : public DBTestBase {
36
39
  public:
37
40
  DBBasicTest() : DBTestBase("db_basic_test", /*env_do_fsync=*/false) {}
@@ -2162,6 +2165,7 @@ class DBMultiGetAsyncIOTest : public DBBasicTest,
2162
2165
  options_.disable_auto_compactions = true;
2163
2166
  options_.statistics = statistics_;
2164
2167
  options_.table_factory.reset(NewBlockBasedTableFactory(bbto));
2168
+ options_.env = Env::Default();
2165
2169
  Reopen(options_);
2166
2170
  int num_keys = 0;
2167
2171
 
@@ -2228,6 +2232,20 @@ class DBMultiGetAsyncIOTest : public DBBasicTest,
2228
2232
  const std::shared_ptr<Statistics>& statistics() { return statistics_; }
2229
2233
 
2230
2234
  protected:
2235
+ void PrepareDBForTest() {
2236
+ #ifdef ROCKSDB_IOURING_PRESENT
2237
+ Reopen(options_);
2238
+ #else // ROCKSDB_IOURING_PRESENT
2239
+ // Warm up the block cache so we don't need to use the IO uring
2240
+ Iterator* iter = dbfull()->NewIterator(ReadOptions());
2241
+ for (iter->SeekToFirst(); iter->Valid() && iter->status().ok();
2242
+ iter->Next())
2243
+ ;
2244
+ EXPECT_OK(iter->status());
2245
+ delete iter;
2246
+ #endif // ROCKSDB_IOURING_PRESENT
2247
+ }
2248
+
2231
2249
  void ReopenDB() { Reopen(options_); }
2232
2250
 
2233
2251
  private:
@@ -2242,6 +2260,8 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL0) {
2242
2260
  std::vector<PinnableSlice> values(key_strs.size());
2243
2261
  std::vector<Status> statuses(key_strs.size());
2244
2262
 
2263
+ PrepareDBForTest();
2264
+
2245
2265
  ReadOptions ro;
2246
2266
  ro.async_io = true;
2247
2267
  ro.optimize_multiget_for_io = GetParam();
@@ -2260,6 +2280,7 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL0) {
2260
2280
  statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
2261
2281
 
2262
2282
  // With async IO, lookups will happen in parallel for each key
2283
+ #ifdef ROCKSDB_IOURING_PRESENT
2263
2284
  if (GetParam()) {
2264
2285
  ASSERT_EQ(multiget_io_batch_size.count, 1);
2265
2286
  ASSERT_EQ(multiget_io_batch_size.max, 3);
@@ -2269,6 +2290,11 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL0) {
2269
2290
  // L0 file
2270
2291
  ASSERT_EQ(multiget_io_batch_size.count, 3);
2271
2292
  }
2293
+ #else // ROCKSDB_IOURING_PRESENT
2294
+ if (GetParam()) {
2295
+ ASSERT_EQ(statistics()->getTickerCount(MULTIGET_COROUTINE_COUNT), 3);
2296
+ }
2297
+ #endif // ROCKSDB_IOURING_PRESENT
2272
2298
  }
2273
2299
 
2274
2300
  TEST_P(DBMultiGetAsyncIOTest, GetFromL1) {
@@ -2286,6 +2312,8 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1) {
2286
2312
  values.resize(keys.size());
2287
2313
  statuses.resize(keys.size());
2288
2314
 
2315
+ PrepareDBForTest();
2316
+
2289
2317
  ReadOptions ro;
2290
2318
  ro.async_io = true;
2291
2319
  ro.optimize_multiget_for_io = GetParam();
@@ -2299,6 +2327,7 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1) {
2299
2327
  ASSERT_EQ(values[1], "val_l1_" + std::to_string(54));
2300
2328
  ASSERT_EQ(values[2], "val_l1_" + std::to_string(102));
2301
2329
 
2330
+ #ifdef ROCKSDB_IOURING_PRESENT
2302
2331
  HistogramData multiget_io_batch_size;
2303
2332
 
2304
2333
  statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
@@ -2306,9 +2335,11 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1) {
2306
2335
  // A batch of 3 async IOs is expected, one for each overlapping file in L1
2307
2336
  ASSERT_EQ(multiget_io_batch_size.count, 1);
2308
2337
  ASSERT_EQ(multiget_io_batch_size.max, 3);
2338
+ #endif // ROCKSDB_IOURING_PRESENT
2309
2339
  ASSERT_EQ(statistics()->getTickerCount(MULTIGET_COROUTINE_COUNT), 3);
2310
2340
  }
2311
2341
 
2342
+ #ifdef ROCKSDB_IOURING_PRESENT
2312
2343
  TEST_P(DBMultiGetAsyncIOTest, GetFromL1Error) {
2313
2344
  std::vector<std::string> key_strs;
2314
2345
  std::vector<Slice> keys;
@@ -2324,9 +2355,9 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1Error) {
2324
2355
  values.resize(keys.size());
2325
2356
  statuses.resize(keys.size());
2326
2357
 
2358
+ int count = 0;
2327
2359
  SyncPoint::GetInstance()->SetCallBack(
2328
2360
  "TableCache::GetTableReader:BeforeOpenFile", [&](void* status) {
2329
- static int count = 0;
2330
2361
  count++;
2331
2362
  // Fail the last table reader open, which is the 6th SST file
2332
2363
  // since 3 overlapping L0 files + 3 L1 files containing the keys
@@ -2349,7 +2380,7 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1Error) {
2349
2380
  });
2350
2381
  SyncPoint::GetInstance()->EnableProcessing();
2351
2382
 
2352
- ReopenDB();
2383
+ PrepareDBForTest();
2353
2384
 
2354
2385
  ReadOptions ro;
2355
2386
  ro.async_io = true;
@@ -2371,6 +2402,7 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1Error) {
2371
2402
  ASSERT_EQ(multiget_io_batch_size.max, 2);
2372
2403
  ASSERT_EQ(statistics()->getTickerCount(MULTIGET_COROUTINE_COUNT), 2);
2373
2404
  }
2405
+ #endif // ROCKSDB_IOURING_PRESENT
2374
2406
 
2375
2407
  TEST_P(DBMultiGetAsyncIOTest, LastKeyInFile) {
2376
2408
  std::vector<std::string> key_strs;
@@ -2388,6 +2420,8 @@ TEST_P(DBMultiGetAsyncIOTest, LastKeyInFile) {
2388
2420
  values.resize(keys.size());
2389
2421
  statuses.resize(keys.size());
2390
2422
 
2423
+ PrepareDBForTest();
2424
+
2391
2425
  ReadOptions ro;
2392
2426
  ro.async_io = true;
2393
2427
  ro.optimize_multiget_for_io = GetParam();
@@ -2401,6 +2435,7 @@ TEST_P(DBMultiGetAsyncIOTest, LastKeyInFile) {
2401
2435
  ASSERT_EQ(values[1], "val_l1_" + std::to_string(54));
2402
2436
  ASSERT_EQ(values[2], "val_l1_" + std::to_string(102));
2403
2437
 
2438
+ #ifdef ROCKSDB_IOURING_PRESENT
2404
2439
  HistogramData multiget_io_batch_size;
2405
2440
 
2406
2441
  statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
@@ -2411,6 +2446,7 @@ TEST_P(DBMultiGetAsyncIOTest, LastKeyInFile) {
2411
2446
  // will lookup 2 files in parallel and issue 2 async reads
2412
2447
  ASSERT_EQ(multiget_io_batch_size.count, 2);
2413
2448
  ASSERT_EQ(multiget_io_batch_size.max, 2);
2449
+ #endif // ROCKSDB_IOURING_PRESENT
2414
2450
  }
2415
2451
 
2416
2452
  TEST_P(DBMultiGetAsyncIOTest, GetFromL1AndL2) {
@@ -2429,6 +2465,8 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1AndL2) {
2429
2465
  values.resize(keys.size());
2430
2466
  statuses.resize(keys.size());
2431
2467
 
2468
+ PrepareDBForTest();
2469
+
2432
2470
  ReadOptions ro;
2433
2471
  ro.async_io = true;
2434
2472
  ro.optimize_multiget_for_io = GetParam();
@@ -2442,6 +2480,7 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1AndL2) {
2442
2480
  ASSERT_EQ(values[1], "val_l2_" + std::to_string(56));
2443
2481
  ASSERT_EQ(values[2], "val_l1_" + std::to_string(102));
2444
2482
 
2483
+ #ifdef ROCKSDB_IOURING_PRESENT
2445
2484
  HistogramData multiget_io_batch_size;
2446
2485
 
2447
2486
  statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
@@ -2451,6 +2490,7 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1AndL2) {
2451
2490
  // Otherwise, the L2 lookup will happen after L1.
2452
2491
  ASSERT_EQ(multiget_io_batch_size.count, GetParam() ? 1 : 2);
2453
2492
  ASSERT_EQ(multiget_io_batch_size.max, GetParam() ? 3 : 2);
2493
+ #endif // ROCKSDB_IOURING_PRESENT
2454
2494
  }
2455
2495
 
2456
2496
  TEST_P(DBMultiGetAsyncIOTest, GetFromL2WithRangeOverlapL0L1) {
@@ -2467,6 +2507,8 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL2WithRangeOverlapL0L1) {
2467
2507
  values.resize(keys.size());
2468
2508
  statuses.resize(keys.size());
2469
2509
 
2510
+ PrepareDBForTest();
2511
+
2470
2512
  ReadOptions ro;
2471
2513
  ro.async_io = true;
2472
2514
  ro.optimize_multiget_for_io = GetParam();
@@ -2482,6 +2524,7 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL2WithRangeOverlapL0L1) {
2482
2524
  ASSERT_EQ(statistics()->getTickerCount(MULTIGET_COROUTINE_COUNT), 2);
2483
2525
  }
2484
2526
 
2527
+ #ifdef ROCKSDB_IOURING_PRESENT
2485
2528
  TEST_P(DBMultiGetAsyncIOTest, GetFromL2WithRangeDelInL1) {
2486
2529
  std::vector<std::string> key_strs;
2487
2530
  std::vector<Slice> keys;
@@ -2496,6 +2539,8 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL2WithRangeDelInL1) {
2496
2539
  values.resize(keys.size());
2497
2540
  statuses.resize(keys.size());
2498
2541
 
2542
+ PrepareDBForTest();
2543
+
2499
2544
  ReadOptions ro;
2500
2545
  ro.async_io = true;
2501
2546
  ro.optimize_multiget_for_io = GetParam();
@@ -2525,6 +2570,8 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1AndL2WithRangeDelInL1) {
2525
2570
  values.resize(keys.size());
2526
2571
  statuses.resize(keys.size());
2527
2572
 
2573
+ PrepareDBForTest();
2574
+
2528
2575
  ReadOptions ro;
2529
2576
  ro.async_io = true;
2530
2577
  ro.optimize_multiget_for_io = GetParam();
@@ -2539,6 +2586,45 @@ TEST_P(DBMultiGetAsyncIOTest, GetFromL1AndL2WithRangeDelInL1) {
2539
2586
  // Bloom filters in L0/L1 will avoid the coroutine calls in those levels
2540
2587
  ASSERT_EQ(statistics()->getTickerCount(MULTIGET_COROUTINE_COUNT), 3);
2541
2588
  }
2589
+ #endif // ROCKSDB_IOURING_PRESENT
2590
+
2591
+ TEST_P(DBMultiGetAsyncIOTest, GetNoIOUring) {
2592
+ std::vector<std::string> key_strs;
2593
+ std::vector<Slice> keys;
2594
+ std::vector<PinnableSlice> values;
2595
+ std::vector<Status> statuses;
2596
+
2597
+ key_strs.push_back(Key(33));
2598
+ key_strs.push_back(Key(54));
2599
+ key_strs.push_back(Key(102));
2600
+ keys.push_back(key_strs[0]);
2601
+ keys.push_back(key_strs[1]);
2602
+ keys.push_back(key_strs[2]);
2603
+ values.resize(keys.size());
2604
+ statuses.resize(keys.size());
2605
+
2606
+ enable_io_uring = false;
2607
+ ReopenDB();
2608
+
2609
+ ReadOptions ro;
2610
+ ro.async_io = true;
2611
+ ro.optimize_multiget_for_io = GetParam();
2612
+ dbfull()->MultiGet(ro, dbfull()->DefaultColumnFamily(), keys.size(),
2613
+ keys.data(), values.data(), statuses.data());
2614
+ ASSERT_EQ(values.size(), 3);
2615
+ ASSERT_EQ(statuses[0], Status::NotSupported());
2616
+ ASSERT_EQ(statuses[1], Status::NotSupported());
2617
+ ASSERT_EQ(statuses[2], Status::NotSupported());
2618
+
2619
+ HistogramData multiget_io_batch_size;
2620
+
2621
+ statistics()->histogramData(MULTIGET_IO_BATCH_SIZE, &multiget_io_batch_size);
2622
+
2623
+ // A batch of 3 async IOs is expected, one for each overlapping file in L1
2624
+ ASSERT_EQ(multiget_io_batch_size.count, 1);
2625
+ ASSERT_EQ(multiget_io_batch_size.max, 3);
2626
+ ASSERT_EQ(statistics()->getTickerCount(MULTIGET_COROUTINE_COUNT), 3);
2627
+ }
2542
2628
 
2543
2629
  INSTANTIATE_TEST_CASE_P(DBMultiGetAsyncIOTest, DBMultiGetAsyncIOTest,
2544
2630
  testing::Bool());
@@ -3537,24 +3623,27 @@ class DBBasicTestMultiGet : public DBTestBase {
3537
3623
 
3538
3624
  const char* Name() const override { return "MyBlockCache"; }
3539
3625
 
3540
- using Cache::Insert;
3541
- Status Insert(const Slice& key, void* value, size_t charge,
3542
- void (*deleter)(const Slice& key, void* value),
3626
+ Status Insert(const Slice& key, Cache::ObjectPtr value,
3627
+ const CacheItemHelper* helper, size_t charge,
3543
3628
  Handle** handle = nullptr,
3544
3629
  Priority priority = Priority::LOW) override {
3545
3630
  num_inserts_++;
3546
- return target_->Insert(key, value, charge, deleter, handle, priority);
3631
+ return target_->Insert(key, value, helper, charge, handle, priority);
3547
3632
  }
3548
3633
 
3549
- using Cache::Lookup;
3550
- Handle* Lookup(const Slice& key, Statistics* stats = nullptr) override {
3634
+ Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
3635
+ CreateContext* create_context,
3636
+ Priority priority = Priority::LOW, bool wait = true,
3637
+ Statistics* stats = nullptr) override {
3551
3638
  num_lookups_++;
3552
- Handle* handle = target_->Lookup(key, stats);
3639
+ Handle* handle =
3640
+ target_->Lookup(key, helper, create_context, priority, wait, stats);
3553
3641
  if (handle != nullptr) {
3554
3642
  num_found_++;
3555
3643
  }
3556
3644
  return handle;
3557
3645
  }
3646
+
3558
3647
  int num_lookups() { return num_lookups_; }
3559
3648
 
3560
3649
  int num_found() { return num_found_; }
@@ -14,6 +14,7 @@
14
14
  #include "cache/cache_entry_roles.h"
15
15
  #include "cache/cache_key.h"
16
16
  #include "cache/lru_cache.h"
17
+ #include "cache/typed_cache.h"
17
18
  #include "db/column_family.h"
18
19
  #include "db/db_impl/db_impl.h"
19
20
  #include "db/db_test_util.h"
@@ -365,9 +366,7 @@ class PersistentCacheFromCache : public PersistentCache {
365
366
  }
366
367
  std::unique_ptr<char[]> copy{new char[size]};
367
368
  std::copy_n(data, size, copy.get());
368
- Status s = cache_->Insert(
369
- key, copy.get(), size,
370
- GetCacheEntryDeleterForRole<char[], CacheEntryRole::kMisc>());
369
+ Status s = cache_.Insert(key, copy.get(), size);
371
370
  if (s.ok()) {
372
371
  copy.release();
373
372
  }
@@ -376,13 +375,13 @@ class PersistentCacheFromCache : public PersistentCache {
376
375
 
377
376
  Status Lookup(const Slice& key, std::unique_ptr<char[]>* data,
378
377
  size_t* size) override {
379
- auto handle = cache_->Lookup(key);
378
+ auto handle = cache_.Lookup(key);
380
379
  if (handle) {
381
- char* ptr = static_cast<char*>(cache_->Value(handle));
382
- *size = cache_->GetCharge(handle);
380
+ char* ptr = cache_.Value(handle);
381
+ *size = cache_.get()->GetCharge(handle);
383
382
  data->reset(new char[*size]);
384
383
  std::copy_n(ptr, *size, data->get());
385
- cache_->Release(handle);
384
+ cache_.Release(handle);
386
385
  return Status::OK();
387
386
  } else {
388
387
  return Status::NotFound();
@@ -395,10 +394,10 @@ class PersistentCacheFromCache : public PersistentCache {
395
394
 
396
395
  std::string GetPrintableOptions() const override { return ""; }
397
396
 
398
- uint64_t NewId() override { return cache_->NewId(); }
397
+ uint64_t NewId() override { return cache_.get()->NewId(); }
399
398
 
400
399
  private:
401
- std::shared_ptr<Cache> cache_;
400
+ BasicTypedSharedCacheInterface<char[], CacheEntryRole::kMisc> cache_;
402
401
  bool read_only_;
403
402
  };
404
403
 
@@ -406,8 +405,8 @@ class ReadOnlyCacheWrapper : public CacheWrapper {
406
405
  using CacheWrapper::CacheWrapper;
407
406
 
408
407
  using Cache::Insert;
409
- Status Insert(const Slice& /*key*/, void* /*value*/, size_t /*charge*/,
410
- void (*)(const Slice& key, void* value) /*deleter*/,
408
+ Status Insert(const Slice& /*key*/, Cache::ObjectPtr /*value*/,
409
+ const CacheItemHelper* /*helper*/, size_t /*charge*/,
411
410
  Handle** /*handle*/, Priority /*priority*/) override {
412
411
  return Status::NotSupported();
413
412
  }
@@ -827,16 +826,15 @@ class MockCache : public LRUCache {
827
826
 
828
827
  using ShardedCache::Insert;
829
828
 
830
- Status Insert(const Slice& key, void* value,
831
- const Cache::CacheItemHelper* helper_cb, size_t charge,
829
+ Status Insert(const Slice& key, Cache::ObjectPtr value,
830
+ const Cache::CacheItemHelper* helper, size_t charge,
832
831
  Handle** handle, Priority priority) override {
833
- DeleterFn delete_cb = helper_cb->del_cb;
834
832
  if (priority == Priority::LOW) {
835
833
  low_pri_insert_count++;
836
834
  } else {
837
835
  high_pri_insert_count++;
838
836
  }
839
- return LRUCache::Insert(key, value, charge, delete_cb, handle, priority);
837
+ return LRUCache::Insert(key, value, helper, charge, handle, priority);
840
838
  }
841
839
  };
842
840
 
@@ -916,7 +914,10 @@ class LookupLiarCache : public CacheWrapper {
916
914
  : CacheWrapper(std::move(target)) {}
917
915
 
918
916
  using Cache::Lookup;
919
- Handle* Lookup(const Slice& key, Statistics* stats) override {
917
+ Handle* Lookup(const Slice& key, const CacheItemHelper* helper = nullptr,
918
+ CreateContext* create_context = nullptr,
919
+ Priority priority = Priority::LOW, bool wait = true,
920
+ Statistics* stats = nullptr) override {
920
921
  if (nth_lookup_not_found_ == 1) {
921
922
  nth_lookup_not_found_ = 0;
922
923
  return nullptr;
@@ -924,7 +925,8 @@ class LookupLiarCache : public CacheWrapper {
924
925
  if (nth_lookup_not_found_ > 1) {
925
926
  --nth_lookup_not_found_;
926
927
  }
927
- return CacheWrapper::Lookup(key, stats);
928
+ return CacheWrapper::Lookup(key, helper, create_context, priority, wait,
929
+ stats);
928
930
  }
929
931
 
930
932
  // 1 == next lookup, 2 == after next, etc.
@@ -1275,12 +1277,11 @@ TEST_F(DBBlockCacheTest, CacheCompressionDict) {
1275
1277
  }
1276
1278
 
1277
1279
  static void ClearCache(Cache* cache) {
1278
- auto roles = CopyCacheDeleterRoleMap();
1279
1280
  std::deque<std::string> keys;
1280
1281
  Cache::ApplyToAllEntriesOptions opts;
1281
- auto callback = [&](const Slice& key, void* /*value*/, size_t /*charge*/,
1282
- Cache::DeleterFn deleter) {
1283
- if (roles.find(deleter) == roles.end()) {
1282
+ auto callback = [&](const Slice& key, Cache::ObjectPtr, size_t /*charge*/,
1283
+ const Cache::CacheItemHelper* helper) {
1284
+ if (helper && helper->role == CacheEntryRole::kMisc) {
1284
1285
  // Keep the stats collector
1285
1286
  return;
1286
1287
  }
@@ -1450,14 +1451,13 @@ TEST_F(DBBlockCacheTest, CacheEntryRoleStats) {
1450
1451
  ClearCache(cache.get());
1451
1452
  Cache::Handle* h = nullptr;
1452
1453
  if (strcmp(cache->Name(), "LRUCache") == 0) {
1453
- ASSERT_OK(cache->Insert("Fill-it-up", nullptr, capacity + 1,
1454
- GetNoopDeleterForRole<CacheEntryRole::kMisc>(),
1455
- &h, Cache::Priority::HIGH));
1454
+ ASSERT_OK(cache->Insert("Fill-it-up", nullptr, &kNoopCacheItemHelper,
1455
+ capacity + 1, &h, Cache::Priority::HIGH));
1456
1456
  } else {
1457
1457
  // For ClockCache we use a 16-byte key.
1458
- ASSERT_OK(cache->Insert("Fill-it-up-xxxxx", nullptr, capacity + 1,
1459
- GetNoopDeleterForRole<CacheEntryRole::kMisc>(),
1460
- &h, Cache::Priority::HIGH));
1458
+ ASSERT_OK(cache->Insert("Fill-it-up-xxxxx", nullptr,
1459
+ &kNoopCacheItemHelper, capacity + 1, &h,
1460
+ Cache::Priority::HIGH));
1461
1461
  }
1462
1462
  ASSERT_GT(cache->GetUsage(), cache->GetCapacity());
1463
1463
  expected = {};
@@ -1548,7 +1548,7 @@ void DummyFillCache(Cache& cache, size_t entry_size,
1548
1548
  size_t charge = std::min(entry_size, capacity - my_usage);
1549
1549
  Cache::Handle* handle;
1550
1550
  Status st = cache.Insert(ck.WithOffset(my_usage).AsSlice(), fake_value,
1551
- charge, /*deleter*/ nullptr, &handle);
1551
+ &kNoopCacheItemHelper, charge, &handle);
1552
1552
  ASSERT_OK(st);
1553
1553
  handles.emplace_back(&cache, handle);
1554
1554
  my_usage += charge;
@@ -1229,7 +1229,7 @@ TEST_P(ChargeFilterConstructionTestWithParam, Basic) {
1229
1229
  *
1230
1230
  * The test is designed in a way such that the reservation for (p1 - b')
1231
1231
  * will trigger at least another dummy entry insertion
1232
- * (or equivelantly to saying, creating another peak).
1232
+ * (or equivalently to saying, creating another peak).
1233
1233
  *
1234
1234
  * kStandard128Ribbon + FullFilter +
1235
1235
  * detect_filter_construct_corruption
@@ -2618,8 +2618,7 @@ TEST_F(DBBloomFilterTest, OptimizeFiltersForHits) {
2618
2618
  BottommostLevelCompaction::kSkip;
2619
2619
  compact_options.change_level = true;
2620
2620
  compact_options.target_level = 7;
2621
- ASSERT_TRUE(db_->CompactRange(compact_options, handles_[1], nullptr, nullptr)
2622
- .IsNotSupported());
2621
+ ASSERT_OK(db_->CompactRange(compact_options, handles_[1], nullptr, nullptr));
2623
2622
 
2624
2623
  ASSERT_EQ(trivial_move, 1);
2625
2624
  ASSERT_EQ(non_trivial_move, 0);