@nxtedition/rocksdb 8.1.4 → 8.1.5

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
@@ -66,10 +66,10 @@ TEST_F(StatsHistoryTest, RunStatsDumpPeriodSec) {
66
66
 
67
67
  // Wait for the first stats persist to finish, as the initial delay could be
68
68
  // different.
69
- dbfull()->TEST_WaitForPeridicTaskRun(
69
+ dbfull()->TEST_WaitForPeriodicTaskRun(
70
70
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
71
71
 
72
- dbfull()->TEST_WaitForPeridicTaskRun(
72
+ dbfull()->TEST_WaitForPeriodicTaskRun(
73
73
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
74
74
  ASSERT_GE(counter, 1);
75
75
 
@@ -98,17 +98,17 @@ TEST_F(StatsHistoryTest, StatsPersistScheduling) {
98
98
 
99
99
  // Wait for the first stats persist to finish, as the initial delay could be
100
100
  // different.
101
- dbfull()->TEST_WaitForPeridicTaskRun(
101
+ dbfull()->TEST_WaitForPeriodicTaskRun(
102
102
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
103
103
 
104
- dbfull()->TEST_WaitForPeridicTaskRun(
104
+ dbfull()->TEST_WaitForPeriodicTaskRun(
105
105
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
106
106
  ASSERT_GE(counter, 1);
107
107
 
108
108
  // Test cancel job through SetOptions
109
109
  ASSERT_OK(dbfull()->SetDBOptions({{"stats_persist_period_sec", "0"}}));
110
110
  int old_val = counter;
111
- dbfull()->TEST_WaitForPeridicTaskRun(
111
+ dbfull()->TEST_WaitForPeriodicTaskRun(
112
112
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec * 2); });
113
113
  ASSERT_EQ(counter, old_val);
114
114
 
@@ -130,7 +130,7 @@ TEST_F(StatsHistoryTest, PersistentStatsFreshInstall) {
130
130
  {{"stats_persist_period_sec", std::to_string(kPeriodSec)}}));
131
131
  ASSERT_EQ(kPeriodSec, dbfull()->GetDBOptions().stats_persist_period_sec);
132
132
 
133
- dbfull()->TEST_WaitForPeridicTaskRun(
133
+ dbfull()->TEST_WaitForPeriodicTaskRun(
134
134
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
135
135
  ASSERT_GE(counter, 1);
136
136
  Close();
@@ -149,11 +149,11 @@ TEST_F(StatsHistoryTest, GetStatsHistoryInMemory) {
149
149
  ReopenWithColumnFamilies({"default", "pikachu"}, options);
150
150
 
151
151
  // make sure the first stats persist to finish
152
- dbfull()->TEST_WaitForPeridicTaskRun(
152
+ dbfull()->TEST_WaitForPeriodicTaskRun(
153
153
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
154
154
 
155
155
  // Wait for stats persist to finish
156
- dbfull()->TEST_WaitForPeridicTaskRun(
156
+ dbfull()->TEST_WaitForPeriodicTaskRun(
157
157
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
158
158
 
159
159
  std::unique_ptr<StatsHistoryIterator> stats_iter;
@@ -171,7 +171,7 @@ TEST_F(StatsHistoryTest, GetStatsHistoryInMemory) {
171
171
  ASSERT_GT(stats_count, 0);
172
172
  // Wait a bit and verify no more stats are found
173
173
  for (int i = 0; i < 10; ++i) {
174
- dbfull()->TEST_WaitForPeridicTaskRun(
174
+ dbfull()->TEST_WaitForPeriodicTaskRun(
175
175
  [&] { mock_clock_->MockSleepForSeconds(1); });
176
176
  }
177
177
  ASSERT_OK(db_->GetStatsHistory(0, mock_clock_->NowSeconds(), &stats_iter));
@@ -226,7 +226,7 @@ TEST_F(StatsHistoryTest, InMemoryStatsHistoryPurging) {
226
226
 
227
227
  const int kIterations = 10;
228
228
  for (int i = 0; i < kIterations; ++i) {
229
- dbfull()->TEST_WaitForPeridicTaskRun(
229
+ dbfull()->TEST_WaitForPeriodicTaskRun(
230
230
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
231
231
  }
232
232
 
@@ -250,7 +250,7 @@ TEST_F(StatsHistoryTest, InMemoryStatsHistoryPurging) {
250
250
 
251
251
  // Wait for stats persist to finish
252
252
  for (int i = 0; i < kIterations; ++i) {
253
- dbfull()->TEST_WaitForPeridicTaskRun(
253
+ dbfull()->TEST_WaitForPeriodicTaskRun(
254
254
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
255
255
  }
256
256
 
@@ -299,11 +299,11 @@ TEST_F(StatsHistoryTest, GetStatsHistoryFromDisk) {
299
299
 
300
300
  // Wait for the first stats persist to finish, as the initial delay could be
301
301
  // different.
302
- dbfull()->TEST_WaitForPeridicTaskRun(
302
+ dbfull()->TEST_WaitForPeriodicTaskRun(
303
303
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
304
304
 
305
305
  // Wait for stats persist to finish
306
- dbfull()->TEST_WaitForPeridicTaskRun(
306
+ dbfull()->TEST_WaitForPeriodicTaskRun(
307
307
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
308
308
 
309
309
  auto iter =
@@ -311,14 +311,14 @@ TEST_F(StatsHistoryTest, GetStatsHistoryFromDisk) {
311
311
  int key_count1 = countkeys(iter);
312
312
  delete iter;
313
313
 
314
- dbfull()->TEST_WaitForPeridicTaskRun(
314
+ dbfull()->TEST_WaitForPeriodicTaskRun(
315
315
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
316
316
  iter =
317
317
  db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
318
318
  int key_count2 = countkeys(iter);
319
319
  delete iter;
320
320
 
321
- dbfull()->TEST_WaitForPeridicTaskRun(
321
+ dbfull()->TEST_WaitForPeriodicTaskRun(
322
322
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
323
323
  iter =
324
324
  db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
@@ -392,32 +392,32 @@ TEST_F(StatsHistoryTest, PersitentStatsVerifyValue) {
392
392
 
393
393
  // Wait for the first stats persist to finish, as the initial delay could be
394
394
  // different.
395
- dbfull()->TEST_WaitForPeridicTaskRun(
395
+ dbfull()->TEST_WaitForPeriodicTaskRun(
396
396
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
397
397
 
398
398
  // Wait for stats persist to finish
399
- dbfull()->TEST_WaitForPeridicTaskRun(
399
+ dbfull()->TEST_WaitForPeriodicTaskRun(
400
400
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
401
401
  auto iter =
402
402
  db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
403
403
  countkeys(iter);
404
404
  delete iter;
405
405
 
406
- dbfull()->TEST_WaitForPeridicTaskRun(
406
+ dbfull()->TEST_WaitForPeriodicTaskRun(
407
407
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
408
408
  iter =
409
409
  db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
410
410
  countkeys(iter);
411
411
  delete iter;
412
412
 
413
- dbfull()->TEST_WaitForPeridicTaskRun(
413
+ dbfull()->TEST_WaitForPeriodicTaskRun(
414
414
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
415
415
  iter =
416
416
  db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
417
417
  countkeys(iter);
418
418
  delete iter;
419
419
 
420
- dbfull()->TEST_WaitForPeridicTaskRun(
420
+ dbfull()->TEST_WaitForPeriodicTaskRun(
421
421
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
422
422
 
423
423
  std::map<std::string, uint64_t> stats_map_after;
@@ -481,10 +481,10 @@ TEST_F(StatsHistoryTest, PersistentStatsCreateColumnFamilies) {
481
481
  ASSERT_EQ(Get(2, "foo"), "bar");
482
482
 
483
483
  // make sure the first stats persist to finish
484
- dbfull()->TEST_WaitForPeridicTaskRun(
484
+ dbfull()->TEST_WaitForPeriodicTaskRun(
485
485
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
486
486
 
487
- dbfull()->TEST_WaitForPeridicTaskRun(
487
+ dbfull()->TEST_WaitForPeriodicTaskRun(
488
488
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
489
489
  auto iter =
490
490
  db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
@@ -581,7 +581,7 @@ TEST_F(StatsHistoryTest, ForceManualFlushStatsCF) {
581
581
 
582
582
  // Wait for the first stats persist to finish, as the initial delay could be
583
583
  // different.
584
- dbfull()->TEST_WaitForPeridicTaskRun(
584
+ dbfull()->TEST_WaitForPeriodicTaskRun(
585
585
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
586
586
 
587
587
  ColumnFamilyData* cfd_default =
@@ -600,7 +600,7 @@ TEST_F(StatsHistoryTest, ForceManualFlushStatsCF) {
600
600
  ASSERT_OK(Put(1, "Eevee", "v0"));
601
601
  ASSERT_EQ("v0", Get(1, "Eevee"));
602
602
 
603
- dbfull()->TEST_WaitForPeridicTaskRun(
603
+ dbfull()->TEST_WaitForPeriodicTaskRun(
604
604
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
605
605
  // writing to all three cf, flush default cf
606
606
  // LogNumbers: default: 16, stats: 10, pikachu: 5
@@ -629,7 +629,7 @@ TEST_F(StatsHistoryTest, ForceManualFlushStatsCF) {
629
629
  ASSERT_EQ("v2", Get("bar2"));
630
630
  ASSERT_EQ("v2", Get("foo2"));
631
631
 
632
- dbfull()->TEST_WaitForPeridicTaskRun(
632
+ dbfull()->TEST_WaitForPeriodicTaskRun(
633
633
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
634
634
  // writing to default and stats cf, flushing default cf
635
635
  // LogNumbers: default: 19, stats: 19, pikachu: 19
@@ -644,7 +644,7 @@ TEST_F(StatsHistoryTest, ForceManualFlushStatsCF) {
644
644
  ASSERT_OK(Put(1, "Jolteon", "v3"));
645
645
  ASSERT_EQ("v3", Get(1, "Jolteon"));
646
646
 
647
- dbfull()->TEST_WaitForPeridicTaskRun(
647
+ dbfull()->TEST_WaitForPeriodicTaskRun(
648
648
  [&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
649
649
  // writing to all three cf, flushing test cf
650
650
  // LogNumbers: default: 19, stats: 19, pikachu: 22
@@ -1324,13 +1324,14 @@ class TestSecondaryCache : public SecondaryCache {
1324
1324
  public:
1325
1325
  static const char* kClassName() { return "Test"; }
1326
1326
  const char* Name() const override { return kClassName(); }
1327
- Status Insert(const Slice& /*key*/, void* /*value*/,
1327
+ Status Insert(const Slice& /*key*/, Cache::ObjectPtr /*value*/,
1328
1328
  const Cache::CacheItemHelper* /*helper*/) override {
1329
1329
  return Status::NotSupported();
1330
1330
  }
1331
1331
  std::unique_ptr<SecondaryCacheResultHandle> Lookup(
1332
- const Slice& /*key*/, const Cache::CreateCallback& /*create_cb*/,
1333
- bool /*wait*/, bool /*advise_erase*/, bool& is_in_sec_cache) override {
1332
+ const Slice& /*key*/, const Cache::CacheItemHelper* /*helper*/,
1333
+ Cache::CreateContext* /*create_context*/, bool /*wait*/,
1334
+ bool /*advise_erase*/, bool& is_in_sec_cache) override {
1334
1335
  is_in_sec_cache = true;
1335
1336
  return nullptr;
1336
1337
  }
@@ -0,0 +1,98 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+
6
+ #include "port/mmap.h"
7
+
8
+ #include <cassert>
9
+ #include <cstdio>
10
+ #include <cstring>
11
+ #include <new>
12
+ #include <utility>
13
+
14
+ #include "util/hash.h"
15
+
16
+ namespace ROCKSDB_NAMESPACE {
17
+
18
+ MemMapping::~MemMapping() {
19
+ #ifdef OS_WIN
20
+ if (addr_ != nullptr) {
21
+ (void)::UnmapViewOfFile(addr_);
22
+ }
23
+ if (page_file_handle_ != NULL) {
24
+ (void)::CloseHandle(page_file_handle_);
25
+ }
26
+ #else // OS_WIN -> !OS_WIN
27
+ if (addr_ != nullptr) {
28
+ auto status = munmap(addr_, length_);
29
+ assert(status == 0);
30
+ if (status != 0) {
31
+ // TODO: handle error?
32
+ }
33
+ }
34
+ #endif // OS_WIN
35
+ }
36
+
37
+ MemMapping::MemMapping(MemMapping&& other) noexcept {
38
+ *this = std::move(other);
39
+ }
40
+
41
+ MemMapping& MemMapping::operator=(MemMapping&& other) noexcept {
42
+ if (&other == this) {
43
+ return *this;
44
+ }
45
+ this->~MemMapping();
46
+ std::memcpy(this, &other, sizeof(*this));
47
+ new (&other) MemMapping();
48
+ return *this;
49
+ }
50
+
51
+ MemMapping MemMapping::AllocateAnonymous(size_t length, bool huge) {
52
+ MemMapping mm;
53
+ mm.length_ = length;
54
+ assert(mm.addr_ == nullptr);
55
+ if (length == 0) {
56
+ // OK to leave addr as nullptr
57
+ return mm;
58
+ }
59
+ int huge_flag = 0;
60
+ #ifdef OS_WIN
61
+ if (huge) {
62
+ #ifdef FILE_MAP_LARGE_PAGES
63
+ huge_flag = FILE_MAP_LARGE_PAGES;
64
+ #endif // FILE_MAP_LARGE_PAGES
65
+ }
66
+ mm.page_file_handle_ = ::CreateFileMapping(
67
+ INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE | SEC_COMMIT,
68
+ Upper32of64(length), Lower32of64(length), nullptr);
69
+ if (mm.page_file_handle_ == NULL) {
70
+ // Failure
71
+ return mm;
72
+ }
73
+ mm.addr_ = ::MapViewOfFile(mm.page_file_handle_, FILE_MAP_WRITE | huge_flag,
74
+ 0, 0, length);
75
+ #else // OS_WIN -> !OS_WIN
76
+ if (huge) {
77
+ #ifdef MAP_HUGETLB
78
+ huge_flag = MAP_HUGETLB;
79
+ #endif // MAP_HUGE_TLB
80
+ }
81
+ mm.addr_ = mmap(nullptr, length, PROT_READ | PROT_WRITE,
82
+ MAP_PRIVATE | MAP_ANONYMOUS | huge_flag, -1, 0);
83
+ if (mm.addr_ == MAP_FAILED) {
84
+ mm.addr_ = nullptr;
85
+ }
86
+ #endif // OS_WIN
87
+ return mm;
88
+ }
89
+
90
+ MemMapping MemMapping::AllocateHuge(size_t length) {
91
+ return AllocateAnonymous(length, /*huge*/ true);
92
+ }
93
+
94
+ MemMapping MemMapping::AllocateLazyZeroed(size_t length) {
95
+ return AllocateAnonymous(length, /*huge*/ false);
96
+ }
97
+
98
+ } // namespace ROCKSDB_NAMESPACE
@@ -0,0 +1,70 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+
6
+ #pragma once
7
+
8
+ #ifdef OS_WIN
9
+ #include "port/win/port_win.h"
10
+ // ^^^ For proper/safe inclusion of windows.h. Must come first.
11
+ #include <memoryapi.h>
12
+ #else
13
+ #include <sys/mman.h>
14
+ #endif // OS_WIN
15
+
16
+ #include <cstdint>
17
+
18
+ #include "rocksdb/rocksdb_namespace.h"
19
+
20
+ namespace ROCKSDB_NAMESPACE {
21
+
22
+ // An RAII wrapper for mmaped memory
23
+ class MemMapping {
24
+ public:
25
+ static constexpr bool kHugePageSupported =
26
+ #if defined(MAP_HUGETLB) || defined(FILE_MAP_LARGE_PAGES)
27
+ true;
28
+ #else
29
+ false;
30
+ #endif
31
+
32
+ // Allocate memory requesting to be backed by huge pages
33
+ static MemMapping AllocateHuge(size_t length);
34
+
35
+ // Allocate memory that is only lazily mapped to resident memory and
36
+ // guaranteed to be zero-initialized. Note that some platforms like
37
+ // Linux allow memory over-commit, where only the used portion of memory
38
+ // matters, while other platforms require enough swap space (page file) to
39
+ // back the full mapping.
40
+ static MemMapping AllocateLazyZeroed(size_t length);
41
+
42
+ // No copies
43
+ MemMapping(const MemMapping&) = delete;
44
+ MemMapping& operator=(const MemMapping&) = delete;
45
+ // Move
46
+ MemMapping(MemMapping&&) noexcept;
47
+ MemMapping& operator=(MemMapping&&) noexcept;
48
+
49
+ // Releases the mapping
50
+ ~MemMapping();
51
+
52
+ inline void* Get() const { return addr_; }
53
+ inline size_t Length() const { return length_; }
54
+
55
+ private:
56
+ MemMapping() {}
57
+
58
+ // The mapped memory, or nullptr on failure / not supported
59
+ void* addr_ = nullptr;
60
+ // The known usable number of bytes starting at that address
61
+ size_t length_ = 0;
62
+
63
+ #ifdef OS_WIN
64
+ HANDLE page_file_handle_ = NULL;
65
+ #endif // OS_WIN
66
+
67
+ static MemMapping AllocateAnonymous(size_t length, bool huge);
68
+ };
69
+
70
+ } // namespace ROCKSDB_NAMESPACE
@@ -169,6 +169,8 @@ static inline void AsmVolatilePause() {
169
169
  asm volatile("isb");
170
170
  #elif defined(__powerpc64__)
171
171
  asm volatile("or 27,27,27");
172
+ #elif defined(__loongarch64)
173
+ asm volatile("dbar 0");
172
174
  #endif
173
175
  // it's okay for other platforms to be no-ops
174
176
  }
@@ -3,6 +3,7 @@ LIB_SOURCES = \
3
3
  cache/cache.cc \
4
4
  cache/cache_entry_roles.cc \
5
5
  cache/cache_key.cc \
6
+ cache/cache_helpers.cc \
6
7
  cache/cache_reservation_manager.cc \
7
8
  cache/charged_cache.cc \
8
9
  cache/clock_cache.cc \
@@ -154,6 +155,7 @@ LIB_SOURCES = \
154
155
  options/options.cc \
155
156
  options/options_helper.cc \
156
157
  options/options_parser.cc \
158
+ port/mmap.cc \
157
159
  port/port_posix.cc \
158
160
  port/win/env_default.cc \
159
161
  port/win/env_win.cc \
@@ -170,6 +172,7 @@ LIB_SOURCES = \
170
172
  table/block_based/block_based_table_iterator.cc \
171
173
  table/block_based/block_based_table_reader.cc \
172
174
  table/block_based/block_builder.cc \
175
+ table/block_based/block_cache.cc \
173
176
  table/block_based/block_prefetcher.cc \
174
177
  table/block_based/block_prefix_index.cc \
175
178
  table/block_based/data_block_hash_index.cc \
@@ -48,8 +48,9 @@ Status AdaptiveTableFactory::NewTableReader(
48
48
  bool prefetch_index_and_filter_in_cache) const {
49
49
  Footer footer;
50
50
  IOOptions opts;
51
- auto s = ReadFooterFromFile(opts, file.get(), nullptr /* prefetch_buffer */,
52
- file_size, &footer);
51
+ auto s =
52
+ ReadFooterFromFile(opts, file.get(), *table_reader_options.ioptions.fs,
53
+ nullptr /* prefetch_buffer */, file_size, &footer);
53
54
  if (!s.ok()) {
54
55
  return s;
55
56
  }
@@ -236,6 +236,9 @@ class Block {
236
236
  // Report an approximation of how much memory has been used.
237
237
  size_t ApproximateMemoryUsage() const;
238
238
 
239
+ // For TypedCacheInterface
240
+ const Slice& ContentSlice() const { return contents_.data; }
241
+
239
242
  private:
240
243
  BlockContents contents_;
241
244
  const char* data_; // contents_.data.data()
@@ -21,6 +21,7 @@
21
21
  #include <unordered_map>
22
22
  #include <utility>
23
23
 
24
+ #include "block_cache.h"
24
25
  #include "cache/cache_entry_roles.h"
25
26
  #include "cache/cache_helpers.h"
26
27
  #include "cache/cache_key.h"
@@ -41,7 +42,6 @@
41
42
  #include "table/block_based/block_based_table_factory.h"
42
43
  #include "table/block_based/block_based_table_reader.h"
43
44
  #include "table/block_based/block_builder.h"
44
- #include "table/block_based/block_like_traits.h"
45
45
  #include "table/block_based/filter_block.h"
46
46
  #include "table/block_based/filter_policy_internal.h"
47
47
  #include "table/block_based/full_filter_block.h"
@@ -335,6 +335,7 @@ struct BlockBasedTableBuilder::Rep {
335
335
  std::vector<std::unique_ptr<IntTblPropCollector>> table_properties_collectors;
336
336
 
337
337
  std::unique_ptr<ParallelCompressionRep> pc_rep;
338
+ BlockCreateContext create_context;
338
339
 
339
340
  uint64_t get_offset() { return offset.load(std::memory_order_relaxed); }
340
341
  void set_offset(uint64_t o) { offset.store(o, std::memory_order_relaxed); }
@@ -443,6 +444,9 @@ struct BlockBasedTableBuilder::Rep {
443
444
  flush_block_policy(
444
445
  table_options.flush_block_policy_factory->NewFlushBlockPolicy(
445
446
  table_options, data_block)),
447
+ create_context(&table_options, ioptions.stats,
448
+ compression_type == kZSTD ||
449
+ compression_type == kZSTDNotFinalCompression),
446
450
  status_ok(true),
447
451
  io_status_ok(true) {
448
452
  if (tbo.target_file_size == 0) {
@@ -1240,6 +1244,10 @@ void BlockBasedTableBuilder::WriteMaybeCompressedBlock(
1240
1244
  handle->set_size(block_contents.size());
1241
1245
  assert(status().ok());
1242
1246
  assert(io_status().ok());
1247
+ if (uncompressed_block_data == nullptr) {
1248
+ uncompressed_block_data = &block_contents;
1249
+ assert(type == kNoCompression);
1250
+ }
1243
1251
 
1244
1252
  {
1245
1253
  IOStatus io_s = r->file->Append(block_contents);
@@ -1291,12 +1299,8 @@ void BlockBasedTableBuilder::WriteMaybeCompressedBlock(
1291
1299
  warm_cache = false;
1292
1300
  }
1293
1301
  if (warm_cache) {
1294
- if (type == kNoCompression) {
1295
- s = InsertBlockInCacheHelper(block_contents, handle, block_type);
1296
- } else if (uncompressed_block_data != nullptr) {
1297
- s = InsertBlockInCacheHelper(*uncompressed_block_data, handle,
1298
- block_type);
1299
- }
1302
+ s = InsertBlockInCacheHelper(*uncompressed_block_data, handle,
1303
+ block_type);
1300
1304
  if (!s.ok()) {
1301
1305
  r->SetStatus(s);
1302
1306
  return;
@@ -1425,13 +1429,14 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
1425
1429
  const Slice& block_contents, const CompressionType type,
1426
1430
  const BlockHandle* handle) {
1427
1431
  Rep* r = rep_;
1428
- Cache* block_cache_compressed = r->table_options.block_cache_compressed.get();
1432
+ CompressedBlockCacheInterface block_cache_compressed{
1433
+ r->table_options.block_cache_compressed.get()};
1429
1434
  Status s;
1430
- if (type != kNoCompression && block_cache_compressed != nullptr) {
1435
+ if (type != kNoCompression && block_cache_compressed) {
1431
1436
  size_t size = block_contents.size();
1432
1437
 
1433
- auto ubuf =
1434
- AllocateBlock(size + 1, block_cache_compressed->memory_allocator());
1438
+ auto ubuf = AllocateBlock(size + 1,
1439
+ block_cache_compressed.get()->memory_allocator());
1435
1440
  memcpy(ubuf.get(), block_contents.data(), size);
1436
1441
  ubuf[size] = type;
1437
1442
 
@@ -1443,10 +1448,9 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
1443
1448
 
1444
1449
  CacheKey key = BlockBasedTable::GetCacheKey(rep_->base_cache_key, *handle);
1445
1450
 
1446
- s = block_cache_compressed->Insert(
1451
+ s = block_cache_compressed.Insert(
1447
1452
  key.AsSlice(), block_contents_to_cache,
1448
- block_contents_to_cache->ApproximateMemoryUsage(),
1449
- &DeleteCacheEntry<BlockContents>);
1453
+ block_contents_to_cache->ApproximateMemoryUsage());
1450
1454
  if (s.ok()) {
1451
1455
  RecordTick(rep_->ioptions.stats, BLOCK_CACHE_COMPRESSED_ADD);
1452
1456
  } else {
@@ -1462,65 +1466,19 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
1462
1466
  Status BlockBasedTableBuilder::InsertBlockInCacheHelper(
1463
1467
  const Slice& block_contents, const BlockHandle* handle,
1464
1468
  BlockType block_type) {
1465
- Status s;
1466
- switch (block_type) {
1467
- case BlockType::kData:
1468
- case BlockType::kIndex:
1469
- case BlockType::kFilterPartitionIndex:
1470
- s = InsertBlockInCache<Block>(block_contents, handle, block_type);
1471
- break;
1472
- case BlockType::kFilter:
1473
- s = InsertBlockInCache<ParsedFullFilterBlock>(block_contents, handle,
1474
- block_type);
1475
- break;
1476
- case BlockType::kCompressionDictionary:
1477
- s = InsertBlockInCache<UncompressionDict>(block_contents, handle,
1478
- block_type);
1479
- break;
1480
- default:
1481
- // no-op / not cached
1482
- break;
1483
- }
1484
- return s;
1485
- }
1486
1469
 
1487
- template <typename TBlocklike>
1488
- Status BlockBasedTableBuilder::InsertBlockInCache(const Slice& block_contents,
1489
- const BlockHandle* handle,
1490
- BlockType block_type) {
1491
- // Uncompressed regular block cache
1492
1470
  Cache* block_cache = rep_->table_options.block_cache.get();
1493
1471
  Status s;
1494
- if (block_cache != nullptr) {
1495
- size_t size = block_contents.size();
1496
- auto buf = AllocateBlock(size, block_cache->memory_allocator());
1497
- memcpy(buf.get(), block_contents.data(), size);
1498
- BlockContents results(std::move(buf), size);
1499
-
1472
+ auto helper =
1473
+ GetCacheItemHelper(block_type, rep_->ioptions.lowest_used_cache_tier);
1474
+ if (block_cache && helper && helper->create_cb) {
1500
1475
  CacheKey key = BlockBasedTable::GetCacheKey(rep_->base_cache_key, *handle);
1501
-
1502
- const size_t read_amp_bytes_per_bit =
1503
- rep_->table_options.read_amp_bytes_per_bit;
1504
-
1505
- // TODO akanksha:: Dedup below code by calling
1506
- // BlockBasedTable::PutDataBlockToCache.
1507
- std::unique_ptr<TBlocklike> block_holder(
1508
- BlocklikeTraits<TBlocklike>::Create(
1509
- std::move(results), read_amp_bytes_per_bit,
1510
- rep_->ioptions.statistics.get(),
1511
- false /*rep_->blocks_definitely_zstd_compressed*/,
1512
- rep_->table_options.filter_policy.get()));
1513
-
1514
- assert(block_holder->own_bytes());
1515
- size_t charge = block_holder->ApproximateMemoryUsage();
1516
- s = block_cache->Insert(
1517
- key.AsSlice(), block_holder.get(),
1518
- BlocklikeTraits<TBlocklike>::GetCacheItemHelper(block_type), charge,
1519
- nullptr, Cache::Priority::LOW);
1476
+ size_t charge;
1477
+ s = WarmInCache(block_cache, key.AsSlice(), block_contents,
1478
+ &rep_->create_context, helper, Cache::Priority::LOW,
1479
+ &charge);
1520
1480
 
1521
1481
  if (s.ok()) {
1522
- // Release ownership of block_holder.
1523
- block_holder.release();
1524
1482
  BlockBasedTable::UpdateCacheInsertionMetrics(
1525
1483
  block_type, nullptr /*get_context*/, charge, s.IsOkOverwritten(),
1526
1484
  rep_->ioptions.stats);
@@ -122,9 +122,9 @@ class BlockBasedTableBuilder : public TableBuilder {
122
122
  void WriteBlock(const Slice& block_contents, BlockHandle* handle,
123
123
  BlockType block_type);
124
124
  // Directly write data to the file.
125
- void WriteMaybeCompressedBlock(const Slice& data, CompressionType,
126
- BlockHandle* handle, BlockType block_type,
127
- const Slice* raw_data = nullptr);
125
+ void WriteMaybeCompressedBlock(
126
+ const Slice& block_contents, CompressionType, BlockHandle* handle,
127
+ BlockType block_type, const Slice* uncompressed_block_data = nullptr);
128
128
 
129
129
  void SetupCacheKeyPrefix(const TableBuilderOptions& tbo);
130
130