@nxtedition/rocksdb 8.2.8 → 9.0.1

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 (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -9,36 +9,4 @@
9
9
 
10
10
  namespace ROCKSDB_NAMESPACE {
11
11
 
12
- namespace {
13
-
14
- void NoopDelete(Cache::ObjectPtr, MemoryAllocator*) {}
15
-
16
- size_t SliceSize(Cache::ObjectPtr obj) {
17
- return static_cast<Slice*>(obj)->size();
18
- }
19
-
20
- Status SliceSaveTo(Cache::ObjectPtr from_obj, size_t from_offset, size_t length,
21
- char* out) {
22
- const Slice& slice = *static_cast<Slice*>(from_obj);
23
- std::memcpy(out, slice.data() + from_offset, length);
24
- return Status::OK();
25
- }
26
-
27
- Status FailCreate(const Slice&, Cache::CreateContext*, MemoryAllocator*,
28
- Cache::ObjectPtr*, size_t*) {
29
- return Status::NotSupported("Only for dumping data into SecondaryCache");
30
- }
31
-
32
- } // namespace
33
-
34
- Status SecondaryCache::InsertSaved(const Slice& key, const Slice& saved) {
35
- static Cache::CacheItemHelper helper_no_secondary{CacheEntryRole::kMisc,
36
- &NoopDelete};
37
- static Cache::CacheItemHelper helper{
38
- CacheEntryRole::kMisc, &NoopDelete, &SliceSize,
39
- &SliceSaveTo, &FailCreate, &helper_no_secondary};
40
- // NOTE: depends on Insert() being synchronous, not keeping pointer `&saved`
41
- return Insert(key, const_cast<Slice*>(&saved), &helper);
42
- }
43
-
44
12
  } // namespace ROCKSDB_NAMESPACE
@@ -5,7 +5,12 @@
5
5
 
6
6
  #include "cache/secondary_cache_adapter.h"
7
7
 
8
+ #include <atomic>
9
+
10
+ #include "cache/tiered_secondary_cache.h"
8
11
  #include "monitoring/perf_context_imp.h"
12
+ #include "test_util/sync_point.h"
13
+ #include "util/cast_util.h"
9
14
 
10
15
  namespace ROCKSDB_NAMESPACE {
11
16
 
@@ -16,33 +21,121 @@ struct Dummy {
16
21
  };
17
22
  const Dummy kDummy{};
18
23
  Cache::ObjectPtr const kDummyObj = const_cast<Dummy*>(&kDummy);
24
+ const char* kTieredCacheName = "TieredCache";
19
25
  } // namespace
20
26
 
27
+ // When CacheWithSecondaryAdapter is constructed with the distribute_cache_res
28
+ // parameter set to true, it manages the entire memory budget across the
29
+ // primary and secondary cache. The secondary cache is assumed to be in
30
+ // memory, such as the CompressedSecondaryCache. When a placeholder entry
31
+ // is inserted by a CacheReservationManager instance to reserve memory,
32
+ // the CacheWithSecondaryAdapter ensures that the reservation is distributed
33
+ // proportionally across the primary/secondary caches.
34
+ //
35
+ // The primary block cache is initially sized to the sum of the primary cache
36
+ // budget + teh secondary cache budget, as follows -
37
+ // |--------- Primary Cache Configured Capacity -----------|
38
+ // |---Secondary Cache Budget----|----Primary Cache Budget-----|
39
+ //
40
+ // A ConcurrentCacheReservationManager member in the CacheWithSecondaryAdapter,
41
+ // pri_cache_res_,
42
+ // is used to help with tracking the distribution of memory reservations.
43
+ // Initially, it accounts for the entire secondary cache budget as a
44
+ // reservation against the primary cache. This shrinks the usable capacity of
45
+ // the primary cache to the budget that the user originally desired.
46
+ //
47
+ // |--Reservation for Sec Cache--|-Pri Cache Usable Capacity---|
48
+ //
49
+ // When a reservation placeholder is inserted into the adapter, it is inserted
50
+ // directly into the primary cache. This means the entire charge of the
51
+ // placeholder is counted against the primary cache. To compensate and count
52
+ // a portion of it against the secondary cache, the secondary cache Deflate()
53
+ // method is called to shrink it. Since the Deflate() causes the secondary
54
+ // actual usage to shrink, it is refelcted here by releasing an equal amount
55
+ // from the pri_cache_res_ reservation. The Deflate() in the secondary cache
56
+ // can be, but is not required to be, implemented using its own cache
57
+ // reservation manager.
58
+ //
59
+ // For example, if the pri/sec ratio is 70/30, and the combined capacity is
60
+ // 100MB, the intermediate and final state after inserting a reservation
61
+ // placeholder for 10MB would be as follows -
62
+ //
63
+ // |-Reservation for Sec Cache-|-Pri Cache Usable Capacity-|---R---|
64
+ // 1. After inserting the placeholder in primary
65
+ // |------- 30MB -------------|------- 60MB -------------|-10MB--|
66
+ // 2. After deflating the secondary and adjusting the reservation for
67
+ // secondary against the primary
68
+ // |------- 27MB -------------|------- 63MB -------------|-10MB--|
69
+ //
70
+ // Likewise, when the user inserted placeholder is released, the secondary
71
+ // cache Inflate() method is called to grow it, and the pri_cache_res_
72
+ // reservation is increased by an equal amount.
73
+ //
74
+ // Another way of implementing this would have been to simply split the user
75
+ // reservation into primary and seconary components. However, this would
76
+ // require allocating a structure to track the associated secondary cache
77
+ // reservation, which adds some complexity and overhead.
78
+ //
21
79
  CacheWithSecondaryAdapter::CacheWithSecondaryAdapter(
22
80
  std::shared_ptr<Cache> target,
23
- std::shared_ptr<SecondaryCache> secondary_cache)
81
+ std::shared_ptr<SecondaryCache> secondary_cache,
82
+ TieredAdmissionPolicy adm_policy, bool distribute_cache_res)
24
83
  : CacheWrapper(std::move(target)),
25
- secondary_cache_(std::move(secondary_cache)) {
26
- target_->SetEvictionCallback([this](const Slice& key, Handle* handle) {
27
- return EvictionHandler(key, handle);
28
- });
84
+ secondary_cache_(std::move(secondary_cache)),
85
+ adm_policy_(adm_policy),
86
+ distribute_cache_res_(distribute_cache_res) {
87
+ target_->SetEvictionCallback(
88
+ [this](const Slice& key, Handle* handle, bool was_hit) {
89
+ return EvictionHandler(key, handle, was_hit);
90
+ });
91
+ if (distribute_cache_res_) {
92
+ size_t sec_capacity = 0;
93
+ pri_cache_res_ = std::make_shared<ConcurrentCacheReservationManager>(
94
+ std::make_shared<CacheReservationManagerImpl<CacheEntryRole::kMisc>>(
95
+ target_));
96
+ Status s = secondary_cache_->GetCapacity(sec_capacity);
97
+ assert(s.ok());
98
+ // Initially, the primary cache is sized to uncompressed cache budget plsu
99
+ // compressed secondary cache budget. The secondary cache budget is then
100
+ // taken away from the primary cache through cache reservations. Later,
101
+ // when a placeholder entry is inserted by the caller, its inserted
102
+ // into the primary cache and the portion that should be assigned to the
103
+ // secondary cache is freed from the reservation.
104
+ s = pri_cache_res_->UpdateCacheReservation(sec_capacity);
105
+ assert(s.ok());
106
+ sec_cache_res_ratio_.store((double)sec_capacity / target_->GetCapacity(),
107
+ std::memory_order_relaxed);
108
+ }
29
109
  }
30
110
 
31
111
  CacheWithSecondaryAdapter::~CacheWithSecondaryAdapter() {
32
112
  // `*this` will be destroyed before `*target_`, so we have to prevent
33
113
  // use after free
34
114
  target_->SetEvictionCallback({});
115
+ #ifndef NDEBUG
116
+ if (distribute_cache_res_ && !ratio_changed_) {
117
+ size_t sec_capacity = 0;
118
+ Status s = secondary_cache_->GetCapacity(sec_capacity);
119
+ assert(s.ok());
120
+ assert(pri_cache_res_->GetTotalMemoryUsed() == sec_capacity);
121
+ }
122
+ #endif // NDEBUG
35
123
  }
36
124
 
37
125
  bool CacheWithSecondaryAdapter::EvictionHandler(const Slice& key,
38
- Handle* handle) {
126
+ Handle* handle, bool was_hit) {
39
127
  auto helper = GetCacheItemHelper(handle);
40
- if (helper->IsSecondaryCacheCompatible()) {
128
+ if (helper->IsSecondaryCacheCompatible() &&
129
+ adm_policy_ != TieredAdmissionPolicy::kAdmPolicyThreeQueue) {
41
130
  auto obj = target_->Value(handle);
42
131
  // Ignore dummy entry
43
132
  if (obj != kDummyObj) {
133
+ bool hit = false;
134
+ if (adm_policy_ == TieredAdmissionPolicy::kAdmPolicyAllowCacheHits) {
135
+ hit = was_hit;
136
+ }
44
137
  // Spill into secondary cache.
45
- secondary_cache_->Insert(key, obj, helper).PermitUncheckedError();
138
+ secondary_cache_->Insert(key, obj, helper, hit).PermitUncheckedError();
46
139
  }
47
140
  }
48
141
  // Never takes ownership of obj
@@ -136,6 +229,32 @@ Cache::Handle* CacheWithSecondaryAdapter::Promote(
136
229
  return result;
137
230
  }
138
231
 
232
+ Status CacheWithSecondaryAdapter::Insert(const Slice& key, ObjectPtr value,
233
+ const CacheItemHelper* helper,
234
+ size_t charge, Handle** handle,
235
+ Priority priority,
236
+ const Slice& compressed_value,
237
+ CompressionType type) {
238
+ Status s = target_->Insert(key, value, helper, charge, handle, priority);
239
+ if (s.ok() && value == nullptr && distribute_cache_res_) {
240
+ size_t sec_charge = static_cast<size_t>(
241
+ charge * (sec_cache_res_ratio_.load(std::memory_order_relaxed)));
242
+ s = secondary_cache_->Deflate(sec_charge);
243
+ assert(s.ok());
244
+ s = pri_cache_res_->UpdateCacheReservation(sec_charge, /*increase=*/false);
245
+ assert(s.ok());
246
+ }
247
+ // Warm up the secondary cache with the compressed block. The secondary
248
+ // cache may choose to ignore it based on the admission policy.
249
+ if (value != nullptr && !compressed_value.empty() &&
250
+ adm_policy_ == TieredAdmissionPolicy::kAdmPolicyThreeQueue) {
251
+ Status status = secondary_cache_->InsertSaved(key, compressed_value, type);
252
+ assert(status.ok() || status.IsNotSupported());
253
+ }
254
+
255
+ return s;
256
+ }
257
+
139
258
  Cache::Handle* CacheWithSecondaryAdapter::Lookup(const Slice& key,
140
259
  const CacheItemHelper* helper,
141
260
  CreateContext* create_context,
@@ -162,6 +281,25 @@ Cache::Handle* CacheWithSecondaryAdapter::Lookup(const Slice& key,
162
281
  return result;
163
282
  }
164
283
 
284
+ bool CacheWithSecondaryAdapter::Release(Handle* handle,
285
+ bool erase_if_last_ref) {
286
+ if (erase_if_last_ref) {
287
+ ObjectPtr v = target_->Value(handle);
288
+ if (v == nullptr && distribute_cache_res_) {
289
+ size_t charge = target_->GetCharge(handle);
290
+ size_t sec_charge = static_cast<size_t>(
291
+ charge * (sec_cache_res_ratio_.load(std::memory_order_relaxed)));
292
+ TEST_SYNC_POINT("CacheWithSecondaryAdapter::Release:ChargeSecCache1");
293
+ TEST_SYNC_POINT("CacheWithSecondaryAdapter::Release:ChargeSecCache2");
294
+ Status s = secondary_cache_->Inflate(sec_charge);
295
+ assert(s.ok());
296
+ s = pri_cache_res_->UpdateCacheReservation(sec_charge, /*increase=*/true);
297
+ assert(s.ok());
298
+ }
299
+ }
300
+ return target_->Release(handle, erase_if_last_ref);
301
+ }
302
+
165
303
  Cache::ObjectPtr CacheWithSecondaryAdapter::Value(Handle* handle) {
166
304
  ObjectPtr v = target_->Value(handle);
167
305
  // TODO with stacked secondaries: might fail in EvictionHandler
@@ -265,7 +403,7 @@ void CacheWithSecondaryAdapter::WaitAll(AsyncLookupHandle* async_handles,
265
403
  for (AsyncLookupHandle* cur : my_pending) {
266
404
  my_secondary_handles.push_back(cur->pending_handle);
267
405
  }
268
- secondary_cache_->WaitAll(my_secondary_handles);
406
+ secondary_cache_->WaitAll(std::move(my_secondary_handles));
269
407
  }
270
408
 
271
409
  // Process results
@@ -288,8 +426,297 @@ std::string CacheWithSecondaryAdapter::GetPrintableOptions() const {
288
426
  }
289
427
 
290
428
  const char* CacheWithSecondaryAdapter::Name() const {
291
- // To the user, at least for now, configure the underlying cache with
292
- // a secondary cache. So we pretend to be that cache
293
- return target_->Name();
429
+ if (distribute_cache_res_) {
430
+ return kTieredCacheName;
431
+ } else {
432
+ // To the user, at least for now, configure the underlying cache with
433
+ // a secondary cache. So we pretend to be that cache
434
+ return target_->Name();
435
+ }
436
+ }
437
+
438
+ // Update the total cache capacity. If we're distributing cache reservations
439
+ // to both primary and secondary, then update the pri_cache_res_reservation
440
+ // as well. At the moment, we don't have a good way of handling the case
441
+ // where the new capacity < total cache reservations.
442
+ void CacheWithSecondaryAdapter::SetCapacity(size_t capacity) {
443
+ size_t sec_capacity = static_cast<size_t>(
444
+ capacity * (distribute_cache_res_
445
+ ? sec_cache_res_ratio_.load(std::memory_order_relaxed)
446
+ : 0.0));
447
+ size_t old_sec_capacity = 0;
448
+
449
+ if (distribute_cache_res_) {
450
+ MutexLock m(&mutex_);
451
+
452
+ Status s = secondary_cache_->GetCapacity(old_sec_capacity);
453
+ if (!s.ok()) {
454
+ return;
455
+ }
456
+ if (old_sec_capacity > sec_capacity) {
457
+ // We're shrinking the cache. We do things in the following order to
458
+ // avoid a temporary spike in usage over the configured capacity -
459
+ // 1. Lower the secondary cache capacity
460
+ // 2. Credit an equal amount (by decreasing pri_cache_res_) to the
461
+ // primary cache
462
+ // 3. Decrease the primary cache capacity to the total budget
463
+ s = secondary_cache_->SetCapacity(sec_capacity);
464
+ if (s.ok()) {
465
+ s = pri_cache_res_->UpdateCacheReservation(
466
+ old_sec_capacity - sec_capacity,
467
+ /*increase=*/false);
468
+ assert(s.ok());
469
+ target_->SetCapacity(capacity);
470
+ }
471
+ } else {
472
+ // We're expanding the cache. Do it in the following order to avoid
473
+ // unnecessary evictions -
474
+ // 1. Increase the primary cache capacity to total budget
475
+ // 2. Reserve additional memory in primary on behalf of secondary (by
476
+ // increasing pri_cache_res_ reservation)
477
+ // 3. Increase secondary cache capacity
478
+ target_->SetCapacity(capacity);
479
+ s = pri_cache_res_->UpdateCacheReservation(
480
+ sec_capacity - old_sec_capacity,
481
+ /*increase=*/true);
482
+ assert(s.ok());
483
+ s = secondary_cache_->SetCapacity(sec_capacity);
484
+ assert(s.ok());
485
+ }
486
+ } else {
487
+ // No cache reservation distribution. Just set the primary cache capacity.
488
+ target_->SetCapacity(capacity);
489
+ }
490
+ }
491
+
492
+ Status CacheWithSecondaryAdapter::GetSecondaryCacheCapacity(
493
+ size_t& size) const {
494
+ return secondary_cache_->GetCapacity(size);
495
+ }
496
+
497
+ Status CacheWithSecondaryAdapter::GetSecondaryCachePinnedUsage(
498
+ size_t& size) const {
499
+ Status s;
500
+ if (distribute_cache_res_) {
501
+ MutexLock m(&mutex_);
502
+ size_t capacity = 0;
503
+ s = secondary_cache_->GetCapacity(capacity);
504
+ if (s.ok()) {
505
+ size = capacity - pri_cache_res_->GetTotalMemoryUsed();
506
+ } else {
507
+ size = 0;
508
+ }
509
+ } else {
510
+ size = 0;
511
+ }
512
+ return s;
513
+ }
514
+
515
+ // Update the secondary/primary allocation ratio (remember, the primary
516
+ // capacity is the total memory budget when distribute_cache_res_ is true).
517
+ // When the ratio changes, we may accumulate some error in the calculations
518
+ // for secondary cache inflate/deflate and pri_cache_res_ reservations.
519
+ // This is due to the rounding of the reservation amount.
520
+ //
521
+ // We rely on the current pri_cache_res_ total memory used to estimate the
522
+ // new secondary cache reservation after the ratio change. For this reason,
523
+ // once the ratio is lowered to 0.0 (effectively disabling the secondary
524
+ // cache and pri_cache_res_ total mem used going down to 0), we cannot
525
+ // increase the ratio and re-enable it, We might remove this limitation
526
+ // in the future.
527
+ Status CacheWithSecondaryAdapter::UpdateCacheReservationRatio(
528
+ double compressed_secondary_ratio) {
529
+ if (!distribute_cache_res_ ||
530
+ sec_cache_res_ratio_.load(std::memory_order_relaxed) == 0.0) {
531
+ return Status::NotSupported();
532
+ }
533
+
534
+ MutexLock m(&mutex_);
535
+ size_t pri_capacity = target_->GetCapacity();
536
+ size_t sec_capacity =
537
+ static_cast<size_t>(pri_capacity * compressed_secondary_ratio);
538
+ size_t old_sec_capacity;
539
+ Status s = secondary_cache_->GetCapacity(old_sec_capacity);
540
+ if (!s.ok()) {
541
+ return s;
542
+ }
543
+
544
+ TEST_SYNC_POINT(
545
+ "CacheWithSecondaryAdapter::UpdateCacheReservationRatio:Begin");
546
+
547
+ // There's a possible race condition here. Since the read of pri_cache_res_
548
+ // memory used (secondary cache usage charged to primary cache), and the
549
+ // change to sec_cache_res_ratio_ are not guarded by a mutex, its possible
550
+ // that an Insert/Release in another thread might decrease/increase the
551
+ // pri_cache_res_ reservation by the wrong amount. This should not be a
552
+ // problem because updating the sec/pri ratio is a rare operation, and
553
+ // the worst that can happen is we may over/under charge the secondary
554
+ // cache usage by a little bit. But we do need to protect against
555
+ // underflow of old_sec_reserved.
556
+ // TODO: Make the accounting more accurate by tracking the total memory
557
+ // reservation on the primary cache. This will also allow us to remove
558
+ // the restriction of not being able to change the sec/pri ratio from
559
+ // 0.0 to higher.
560
+ size_t sec_charge_to_pri = pri_cache_res_->GetTotalMemoryUsed();
561
+ size_t old_sec_reserved = (old_sec_capacity > sec_charge_to_pri)
562
+ ? (old_sec_capacity - sec_charge_to_pri)
563
+ : 0;
564
+ // Calculate the new secondary cache reservation
565
+ size_t sec_reserved = static_cast<size_t>(
566
+ old_sec_reserved *
567
+ (double)(compressed_secondary_ratio /
568
+ sec_cache_res_ratio_.load(std::memory_order_relaxed)));
569
+ sec_cache_res_ratio_.store(compressed_secondary_ratio,
570
+ std::memory_order_relaxed);
571
+ if (sec_capacity > old_sec_capacity) {
572
+ // We're increasing the ratio, thus ending up with a larger secondary
573
+ // cache and a smaller usable primary cache capacity. Similar to
574
+ // SetCapacity(), we try to avoid a temporary increase in total usage
575
+ // beyond teh configured capacity -
576
+ // 1. A higher secondary cache ratio means it gets a higher share of
577
+ // cache reservations. So first account for that by deflating the
578
+ // secondary cache
579
+ // 2. Increase pri_cache_res_ reservation to reflect the new secondary
580
+ // cache utilization (increase in capacity - increase in share of cache
581
+ // reservation)
582
+ // 3. Increase secondary cache capacity
583
+ s = secondary_cache_->Deflate(sec_reserved - old_sec_reserved);
584
+ assert(s.ok());
585
+ s = pri_cache_res_->UpdateCacheReservation(
586
+ (sec_capacity - old_sec_capacity) - (sec_reserved - old_sec_reserved),
587
+ /*increase=*/true);
588
+ assert(s.ok());
589
+ s = secondary_cache_->SetCapacity(sec_capacity);
590
+ assert(s.ok());
591
+ } else {
592
+ // We're shrinking the ratio. Try to avoid unnecessary evictions -
593
+ // 1. Lower the secondary cache capacity
594
+ // 2. Decrease pri_cache_res_ reservation to relect lower secondary
595
+ // cache utilization (decrease in capacity - decrease in share of cache
596
+ // reservations)
597
+ // 3. Inflate the secondary cache to give it back the reduction in its
598
+ // share of cache reservations
599
+ s = secondary_cache_->SetCapacity(sec_capacity);
600
+ if (s.ok()) {
601
+ s = pri_cache_res_->UpdateCacheReservation(
602
+ (old_sec_capacity - sec_capacity) - (old_sec_reserved - sec_reserved),
603
+ /*increase=*/false);
604
+ assert(s.ok());
605
+ s = secondary_cache_->Inflate(old_sec_reserved - sec_reserved);
606
+ assert(s.ok());
607
+ }
608
+ }
609
+
610
+ TEST_SYNC_POINT("CacheWithSecondaryAdapter::UpdateCacheReservationRatio:End");
611
+ #ifndef NDEBUG
612
+ // As mentioned in the function comments, we may accumulate some erros when
613
+ // the ratio is changed. We set a flag here which disables some assertions
614
+ // in the destructor
615
+ ratio_changed_ = true;
616
+ #endif
617
+ return s;
618
+ }
619
+
620
+ Status CacheWithSecondaryAdapter::UpdateAdmissionPolicy(
621
+ TieredAdmissionPolicy adm_policy) {
622
+ adm_policy_ = adm_policy;
623
+ return Status::OK();
624
+ }
625
+
626
+ std::shared_ptr<Cache> NewTieredCache(const TieredCacheOptions& _opts) {
627
+ if (!_opts.cache_opts) {
628
+ return nullptr;
629
+ }
630
+
631
+ TieredCacheOptions opts = _opts;
632
+ {
633
+ bool valid_adm_policy = true;
634
+
635
+ switch (_opts.adm_policy) {
636
+ case TieredAdmissionPolicy::kAdmPolicyAuto:
637
+ // Select an appropriate default policy
638
+ if (opts.adm_policy == TieredAdmissionPolicy::kAdmPolicyAuto) {
639
+ if (opts.nvm_sec_cache) {
640
+ opts.adm_policy = TieredAdmissionPolicy::kAdmPolicyThreeQueue;
641
+ } else {
642
+ opts.adm_policy = TieredAdmissionPolicy::kAdmPolicyPlaceholder;
643
+ }
644
+ }
645
+ break;
646
+ case TieredAdmissionPolicy::kAdmPolicyPlaceholder:
647
+ case TieredAdmissionPolicy::kAdmPolicyAllowCacheHits:
648
+ if (opts.nvm_sec_cache) {
649
+ valid_adm_policy = false;
650
+ }
651
+ break;
652
+ case TieredAdmissionPolicy::kAdmPolicyThreeQueue:
653
+ if (!opts.nvm_sec_cache) {
654
+ valid_adm_policy = false;
655
+ }
656
+ break;
657
+ default:
658
+ valid_adm_policy = false;
659
+ }
660
+ if (!valid_adm_policy) {
661
+ return nullptr;
662
+ }
663
+ }
664
+
665
+ std::shared_ptr<Cache> cache;
666
+ if (opts.cache_type == PrimaryCacheType::kCacheTypeLRU) {
667
+ LRUCacheOptions cache_opts =
668
+ *(static_cast_with_check<LRUCacheOptions, ShardedCacheOptions>(
669
+ opts.cache_opts));
670
+ cache_opts.capacity = opts.total_capacity;
671
+ cache = cache_opts.MakeSharedCache();
672
+ } else if (opts.cache_type == PrimaryCacheType::kCacheTypeHCC) {
673
+ HyperClockCacheOptions cache_opts =
674
+ *(static_cast_with_check<HyperClockCacheOptions, ShardedCacheOptions>(
675
+ opts.cache_opts));
676
+ cache_opts.capacity = opts.total_capacity;
677
+ cache = cache_opts.MakeSharedCache();
678
+ } else {
679
+ return nullptr;
680
+ }
681
+ std::shared_ptr<SecondaryCache> sec_cache;
682
+ opts.comp_cache_opts.capacity = static_cast<size_t>(
683
+ opts.total_capacity * opts.compressed_secondary_ratio);
684
+ sec_cache = NewCompressedSecondaryCache(opts.comp_cache_opts);
685
+
686
+ if (opts.nvm_sec_cache) {
687
+ if (opts.adm_policy == TieredAdmissionPolicy::kAdmPolicyThreeQueue) {
688
+ sec_cache = std::make_shared<TieredSecondaryCache>(
689
+ sec_cache, opts.nvm_sec_cache,
690
+ TieredAdmissionPolicy::kAdmPolicyThreeQueue);
691
+ } else {
692
+ return nullptr;
693
+ }
694
+ }
695
+
696
+ return std::make_shared<CacheWithSecondaryAdapter>(
697
+ cache, sec_cache, opts.adm_policy, /*distribute_cache_res=*/true);
698
+ }
699
+
700
+ Status UpdateTieredCache(const std::shared_ptr<Cache>& cache,
701
+ int64_t total_capacity,
702
+ double compressed_secondary_ratio,
703
+ TieredAdmissionPolicy adm_policy) {
704
+ if (!cache || strcmp(cache->Name(), kTieredCacheName)) {
705
+ return Status::InvalidArgument();
706
+ }
707
+ CacheWithSecondaryAdapter* tiered_cache =
708
+ static_cast<CacheWithSecondaryAdapter*>(cache.get());
709
+
710
+ Status s;
711
+ if (total_capacity > 0) {
712
+ tiered_cache->SetCapacity(total_capacity);
713
+ }
714
+ if (compressed_secondary_ratio >= 0.0 && compressed_secondary_ratio <= 1.0) {
715
+ s = tiered_cache->UpdateCacheReservationRatio(compressed_secondary_ratio);
716
+ }
717
+ if (adm_policy < TieredAdmissionPolicy::kAdmPolicyMax) {
718
+ s = tiered_cache->UpdateAdmissionPolicy(adm_policy);
719
+ }
720
+ return s;
294
721
  }
295
722
  } // namespace ROCKSDB_NAMESPACE
@@ -5,6 +5,7 @@
5
5
 
6
6
  #pragma once
7
7
 
8
+ #include "cache/cache_reservation_manager.h"
8
9
  #include "rocksdb/secondary_cache.h"
9
10
 
10
11
  namespace ROCKSDB_NAMESPACE {
@@ -13,15 +14,27 @@ class CacheWithSecondaryAdapter : public CacheWrapper {
13
14
  public:
14
15
  explicit CacheWithSecondaryAdapter(
15
16
  std::shared_ptr<Cache> target,
16
- std::shared_ptr<SecondaryCache> secondary_cache);
17
+ std::shared_ptr<SecondaryCache> secondary_cache,
18
+ TieredAdmissionPolicy adm_policy = TieredAdmissionPolicy::kAdmPolicyAuto,
19
+ bool distribute_cache_res = false);
17
20
 
18
21
  ~CacheWithSecondaryAdapter() override;
19
22
 
23
+ Status Insert(
24
+ const Slice& key, ObjectPtr value, const CacheItemHelper* helper,
25
+ size_t charge, Handle** handle = nullptr,
26
+ Priority priority = Priority::LOW,
27
+ const Slice& compressed_value = Slice(),
28
+ CompressionType type = CompressionType::kNoCompression) override;
29
+
20
30
  Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
21
31
  CreateContext* create_context,
22
32
  Priority priority = Priority::LOW,
23
33
  Statistics* stats = nullptr) override;
24
34
 
35
+ using Cache::Release;
36
+ bool Release(Handle* handle, bool erase_if_last_ref = false) override;
37
+
25
38
  ObjectPtr Value(Handle* handle) override;
26
39
 
27
40
  void StartAsyncLookup(AsyncLookupHandle& async_handle) override;
@@ -32,8 +45,22 @@ class CacheWithSecondaryAdapter : public CacheWrapper {
32
45
 
33
46
  const char* Name() const override;
34
47
 
48
+ void SetCapacity(size_t capacity) override;
49
+
50
+ Status GetSecondaryCacheCapacity(size_t& size) const override;
51
+
52
+ Status GetSecondaryCachePinnedUsage(size_t& size) const override;
53
+
54
+ Status UpdateCacheReservationRatio(double ratio);
55
+
56
+ Status UpdateAdmissionPolicy(TieredAdmissionPolicy adm_policy);
57
+
58
+ Cache* TEST_GetCache() { return target_.get(); }
59
+
60
+ SecondaryCache* TEST_GetSecondaryCache() { return secondary_cache_.get(); }
61
+
35
62
  private:
36
- bool EvictionHandler(const Slice& key, Handle* handle);
63
+ bool EvictionHandler(const Slice& key, Handle* handle, bool was_hit);
37
64
 
38
65
  void StartAsyncLookupOnMySecondary(AsyncLookupHandle& async_handle);
39
66
 
@@ -47,6 +74,21 @@ class CacheWithSecondaryAdapter : public CacheWrapper {
47
74
  void CleanupCacheObject(ObjectPtr obj, const CacheItemHelper* helper);
48
75
 
49
76
  std::shared_ptr<SecondaryCache> secondary_cache_;
77
+ TieredAdmissionPolicy adm_policy_;
78
+ // Whether to proportionally distribute cache memory reservations, i.e
79
+ // placeholder entries with null value and a non-zero charge, across
80
+ // the primary and secondary caches.
81
+ bool distribute_cache_res_;
82
+ // A cache reservation manager to keep track of secondary cache memory
83
+ // usage by reserving equivalent capacity against the primary cache
84
+ std::shared_ptr<ConcurrentCacheReservationManager> pri_cache_res_;
85
+ // Fraction of a cache memory reservation to be assigned to the secondary
86
+ // cache
87
+ std::atomic<double> sec_cache_res_ratio_;
88
+ mutable port::Mutex mutex_;
89
+ #ifndef NDEBUG
90
+ bool ratio_changed_ = false;
91
+ #endif
50
92
  };
51
93
 
52
94
  } // namespace ROCKSDB_NAMESPACE
@@ -38,7 +38,7 @@ uint32_t DetermineSeed(int32_t hash_seed_option) {
38
38
  return GetSliceHash(hostname) & kSeedMask;
39
39
  } else {
40
40
  // Fall back on something stable within the process.
41
- return static_cast<uint32_t>(gen.GetBaseUpper()) & kSeedMask;
41
+ return BitwiseAnd(gen.GetBaseUpper(), kSeedMask);
42
42
  }
43
43
  } else {
44
44
  // for kQuasiRandomHashSeed and fallback
@@ -83,6 +83,16 @@ size_t ShardedCacheBase::GetCapacity() const {
83
83
  return capacity_;
84
84
  }
85
85
 
86
+ Status ShardedCacheBase::GetSecondaryCacheCapacity(size_t& size) const {
87
+ size = 0;
88
+ return Status::OK();
89
+ }
90
+
91
+ Status ShardedCacheBase::GetSecondaryCachePinnedUsage(size_t& size) const {
92
+ size = 0;
93
+ return Status::OK();
94
+ }
95
+
86
96
  bool ShardedCacheBase::HasStrictCapacityLimit() const {
87
97
  MutexLock l(&config_mutex_);
88
98
  return strict_capacity_limit_;