@nxtedition/rocksdb 8.2.0 → 8.2.2

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 (321) hide show
  1. package/binding.cc +3 -3
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
  3. package/deps/rocksdb/rocksdb/Makefile +10 -5
  4. package/deps/rocksdb/rocksdb/TARGETS +8 -345
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
  15. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
  17. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
  25. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
  26. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
  29. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
  30. package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
  31. package/deps/rocksdb/rocksdb/db/builder.h +2 -2
  32. package/deps/rocksdb/rocksdb/db/c.cc +76 -5
  33. package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
  34. package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
  50. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
  51. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  52. package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
  53. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
  54. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
  55. package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
  58. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
  71. package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
  72. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
  73. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
  74. package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
  75. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
  76. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
  77. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
  78. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
  79. package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
  80. package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
  81. package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
  82. package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
  83. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
  84. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
  85. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
  86. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
  87. package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
  88. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
  90. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
  91. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
  92. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
  93. package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
  94. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
  95. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
  96. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
  97. package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
  98. package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
  99. package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
  100. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
  101. package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
  102. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
  103. package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
  104. package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
  105. package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
  106. package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
  107. package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
  108. package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
  109. package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
  110. package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
  111. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
  112. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
  113. package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
  114. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
  115. package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
  116. package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
  117. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
  118. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
  119. package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
  120. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  121. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
  122. package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
  123. package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
  124. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
  125. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
  126. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
  127. package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
  128. package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
  129. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
  130. package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
  131. package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
  144. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
  145. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
  146. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
  149. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
  150. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
  151. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
  152. package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
  153. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  154. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
  155. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
  156. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
  157. package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
  158. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  159. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
  160. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
  161. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
  162. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
  163. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
  164. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
  165. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
  166. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
  167. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
  168. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
  169. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
  170. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
  171. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
  173. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
  174. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
  175. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
  176. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
  177. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
  178. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
  179. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
  184. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
  186. package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
  188. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
  189. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
  192. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
  193. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  194. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
  195. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
  196. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
  197. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
  198. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
  199. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
  200. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
  201. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  202. package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
  203. package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
  204. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
  205. package/deps/rocksdb/rocksdb/options/options.cc +12 -53
  206. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
  207. package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
  208. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
  209. package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
  210. package/deps/rocksdb/rocksdb/port/lang.h +27 -0
  211. package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
  212. package/deps/rocksdb/rocksdb/src.mk +2 -0
  213. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
  214. package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
  215. package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
  216. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
  217. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
  218. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
  219. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
  220. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
  221. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
  222. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
  223. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
  224. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
  225. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
  226. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
  228. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
  229. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
  230. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
  232. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
  233. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
  234. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
  235. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
  236. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
  237. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
  238. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
  239. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
  240. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
  241. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
  242. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
  243. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
  244. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
  245. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
  247. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
  248. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
  249. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
  250. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
  251. package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
  252. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
  253. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
  254. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
  255. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
  256. package/deps/rocksdb/rocksdb/table/format.cc +4 -4
  257. package/deps/rocksdb/rocksdb/table/format.h +1 -1
  258. package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
  259. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
  260. package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
  261. package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
  262. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
  264. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
  266. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
  267. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
  268. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
  269. package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
  270. package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
  271. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
  272. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
  275. package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
  277. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
  278. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
  279. package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
  280. package/deps/rocksdb/rocksdb/util/compression.h +1 -1
  281. package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
  282. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
  283. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
  284. package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
  285. package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
  286. package/deps/rocksdb/rocksdb/util/math.h +12 -7
  287. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
  288. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
  289. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
  290. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
  291. package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
  292. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
  293. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  294. package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
  295. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
  296. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
  297. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
  298. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
  299. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
  300. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
  301. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
  302. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
  303. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
  304. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
  305. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
  306. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
  307. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
  308. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
  309. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
  310. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
  311. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
  312. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
  313. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
  314. package/package.json +1 -1
  315. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  316. package/prebuilds/linux-x64/node.napi.node +0 -0
  317. /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
  318. /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
  319. /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
  320. /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
  321. /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
@@ -16,7 +16,7 @@
16
16
  #include "cache/secondary_cache_adapter.h"
17
17
  #include "logging/logging.h"
18
18
  #include "monitoring/perf_context_imp.h"
19
- #include "monitoring/statistics.h"
19
+ #include "monitoring/statistics_impl.h"
20
20
  #include "port/lang.h"
21
21
  #include "rocksdb/env.h"
22
22
  #include "util/hash.h"
@@ -130,7 +130,8 @@ HyperClockTable::HyperClockTable(
130
130
  size_t capacity, bool /*strict_capacity_limit*/,
131
131
  CacheMetadataChargePolicy metadata_charge_policy,
132
132
  MemoryAllocator* allocator,
133
- const Cache::EvictionCallback* eviction_callback, const Opts& opts)
133
+ const Cache::EvictionCallback* eviction_callback, const uint32_t* hash_seed,
134
+ const Opts& opts)
134
135
  : length_bits_(CalcHashBits(capacity, opts.estimated_value_size,
135
136
  metadata_charge_policy)),
136
137
  length_bits_mask_((size_t{1} << length_bits_) - 1),
@@ -138,7 +139,8 @@ HyperClockTable::HyperClockTable(
138
139
  kStrictLoadFactor)),
139
140
  array_(new HandleImpl[size_t{1} << length_bits_]),
140
141
  allocator_(allocator),
141
- eviction_callback_(*eviction_callback) {
142
+ eviction_callback_(*eviction_callback),
143
+ hash_seed_(*hash_seed) {
142
144
  if (metadata_charge_policy ==
143
145
  CacheMetadataChargePolicy::kFullChargeCacheMetadata) {
144
146
  usage_ += size_t{GetTableSize()} * sizeof(HandleImpl);
@@ -1010,7 +1012,7 @@ inline void HyperClockTable::Evict(size_t requested_charge,
1010
1012
  if (eviction_callback_) {
1011
1013
  took_ownership =
1012
1014
  eviction_callback_(ClockCacheShard<HyperClockTable>::ReverseHash(
1013
- h.GetHash(), &unhashed),
1015
+ h.GetHash(), &unhashed, hash_seed_),
1014
1016
  reinterpret_cast<Cache::Handle*>(&h));
1015
1017
  }
1016
1018
  if (!took_ownership) {
@@ -1039,11 +1041,11 @@ ClockCacheShard<Table>::ClockCacheShard(
1039
1041
  size_t capacity, bool strict_capacity_limit,
1040
1042
  CacheMetadataChargePolicy metadata_charge_policy,
1041
1043
  MemoryAllocator* allocator,
1042
- const Cache::EvictionCallback* eviction_callback,
1044
+ const Cache::EvictionCallback* eviction_callback, const uint32_t* hash_seed,
1043
1045
  const typename Table::Opts& opts)
1044
1046
  : CacheShardBase(metadata_charge_policy),
1045
1047
  table_(capacity, strict_capacity_limit, metadata_charge_policy, allocator,
1046
- eviction_callback, opts),
1048
+ eviction_callback, hash_seed, opts),
1047
1049
  capacity_(capacity),
1048
1050
  strict_capacity_limit_(strict_capacity_limit) {
1049
1051
  // Initial charge metadata should not exceed capacity
@@ -1082,10 +1084,11 @@ void ClockCacheShard<Table>::ApplyToSomeEntries(
1082
1084
  *state = index_end << (sizeof(size_t) * 8u - length_bits);
1083
1085
  }
1084
1086
 
1087
+ auto hash_seed = table_.GetHashSeed();
1085
1088
  table_.ConstApplyToEntriesRange(
1086
- [callback](const HandleImpl& h) {
1089
+ [callback, hash_seed](const HandleImpl& h) {
1087
1090
  UniqueId64x2 unhashed;
1088
- callback(ReverseHash(h.hashed_key, &unhashed), h.value,
1091
+ callback(ReverseHash(h.hashed_key, &unhashed, hash_seed), h.value,
1089
1092
  h.GetTotalCharge(), h.helper);
1090
1093
  },
1091
1094
  index_begin, index_end, false);
@@ -1282,25 +1285,20 @@ size_t ClockCacheShard<Table>::GetTableAddressCount() const {
1282
1285
  // Explicit instantiation
1283
1286
  template class ClockCacheShard<HyperClockTable>;
1284
1287
 
1285
- HyperClockCache::HyperClockCache(
1286
- size_t capacity, size_t estimated_value_size, int num_shard_bits,
1287
- bool strict_capacity_limit,
1288
- CacheMetadataChargePolicy metadata_charge_policy,
1289
- std::shared_ptr<MemoryAllocator> memory_allocator)
1290
- : ShardedCache(capacity, num_shard_bits, strict_capacity_limit,
1291
- std::move(memory_allocator)) {
1292
- assert(estimated_value_size > 0 ||
1293
- metadata_charge_policy != kDontChargeCacheMetadata);
1288
+ HyperClockCache::HyperClockCache(const HyperClockCacheOptions& opts)
1289
+ : ShardedCache(opts) {
1290
+ assert(opts.estimated_entry_charge > 0 ||
1291
+ opts.metadata_charge_policy != kDontChargeCacheMetadata);
1294
1292
  // TODO: should not need to go through two levels of pointer indirection to
1295
1293
  // get to table entries
1296
1294
  size_t per_shard = GetPerShardCapacity();
1297
1295
  MemoryAllocator* alloc = this->memory_allocator();
1298
- const Cache::EvictionCallback* eviction_callback = &eviction_callback_;
1299
- InitShards([=](Shard* cs) {
1300
- HyperClockTable::Opts opts;
1301
- opts.estimated_value_size = estimated_value_size;
1302
- new (cs) Shard(per_shard, strict_capacity_limit, metadata_charge_policy,
1303
- alloc, eviction_callback, opts);
1296
+ InitShards([&](Shard* cs) {
1297
+ HyperClockTable::Opts table_opts;
1298
+ table_opts.estimated_value_size = opts.estimated_entry_charge;
1299
+ new (cs) Shard(per_shard, opts.strict_capacity_limit,
1300
+ opts.metadata_charge_policy, alloc, &eviction_callback_,
1301
+ &hash_seed_, table_opts);
1304
1302
  });
1305
1303
  }
1306
1304
 
@@ -1460,21 +1458,23 @@ std::shared_ptr<Cache> NewClockCache(
1460
1458
  }
1461
1459
 
1462
1460
  std::shared_ptr<Cache> HyperClockCacheOptions::MakeSharedCache() const {
1463
- auto my_num_shard_bits = num_shard_bits;
1464
- if (my_num_shard_bits >= 20) {
1461
+ // For sanitized options
1462
+ HyperClockCacheOptions opts = *this;
1463
+ if (opts.num_shard_bits >= 20) {
1465
1464
  return nullptr; // The cache cannot be sharded into too many fine pieces.
1466
1465
  }
1467
- if (my_num_shard_bits < 0) {
1466
+ if (opts.num_shard_bits < 0) {
1468
1467
  // Use larger shard size to reduce risk of large entries clustering
1469
1468
  // or skewing individual shards.
1470
1469
  constexpr size_t min_shard_size = 32U * 1024U * 1024U;
1471
- my_num_shard_bits = GetDefaultCacheShardBits(capacity, min_shard_size);
1470
+ opts.num_shard_bits =
1471
+ GetDefaultCacheShardBits(opts.capacity, min_shard_size);
1472
1472
  }
1473
- std::shared_ptr<Cache> cache = std::make_shared<clock_cache::HyperClockCache>(
1474
- capacity, estimated_entry_charge, my_num_shard_bits,
1475
- strict_capacity_limit, metadata_charge_policy, memory_allocator);
1476
- if (secondary_cache) {
1477
- cache = std::make_shared<CacheWithSecondaryAdapter>(cache, secondary_cache);
1473
+ std::shared_ptr<Cache> cache =
1474
+ std::make_shared<clock_cache::HyperClockCache>(opts);
1475
+ if (opts.secondary_cache) {
1476
+ cache = std::make_shared<CacheWithSecondaryAdapter>(cache,
1477
+ opts.secondary_cache);
1478
1478
  }
1479
1479
  return cache;
1480
1480
  }
@@ -407,7 +407,7 @@ class HyperClockTable {
407
407
  CacheMetadataChargePolicy metadata_charge_policy,
408
408
  MemoryAllocator* allocator,
409
409
  const Cache::EvictionCallback* eviction_callback,
410
- const Opts& opts);
410
+ const uint32_t* hash_seed, const Opts& opts);
411
411
  ~HyperClockTable();
412
412
 
413
413
  Status Insert(const ClockHandleBasicData& proto, HandleImpl** handle,
@@ -448,6 +448,8 @@ class HyperClockTable {
448
448
  return standalone_usage_.load(std::memory_order_relaxed);
449
449
  }
450
450
 
451
+ uint32_t GetHashSeed() const { return hash_seed_; }
452
+
451
453
  // Acquire/release N references
452
454
  void TEST_RefN(HandleImpl& handle, size_t n);
453
455
  void TEST_ReleaseN(HandleImpl* handle, size_t n);
@@ -546,6 +548,9 @@ class HyperClockTable {
546
548
  // A reference to Cache::eviction_callback_
547
549
  const Cache::EvictionCallback& eviction_callback_;
548
550
 
551
+ // A reference to ShardedCacheBase::hash_seed_
552
+ const uint32_t& hash_seed_;
553
+
549
554
  // We partition the following members into different cache lines
550
555
  // to avoid false sharing among Lookup, Release, Erase and Insert
551
556
  // operations in ClockCacheShard.
@@ -573,7 +578,7 @@ class ALIGN_AS(CACHE_LINE_SIZE) ClockCacheShard final : public CacheShardBase {
573
578
  CacheMetadataChargePolicy metadata_charge_policy,
574
579
  MemoryAllocator* allocator,
575
580
  const Cache::EvictionCallback* eviction_callback,
576
- const typename Table::Opts& opts);
581
+ const uint32_t* hash_seed, const typename Table::Opts& opts);
577
582
 
578
583
  // For CacheShard concept
579
584
  using HandleImpl = typename Table::HandleImpl;
@@ -583,22 +588,23 @@ class ALIGN_AS(CACHE_LINE_SIZE) ClockCacheShard final : public CacheShardBase {
583
588
  static inline uint32_t HashPieceForSharding(HashCref hash) {
584
589
  return Upper32of64(hash[0]);
585
590
  }
586
- static inline HashVal ComputeHash(const Slice& key) {
591
+ static inline HashVal ComputeHash(const Slice& key, uint32_t seed) {
587
592
  assert(key.size() == kCacheKeySize);
588
593
  HashVal in;
589
594
  HashVal out;
590
595
  // NOTE: endian dependence
591
596
  // TODO: use GetUnaligned?
592
597
  std::memcpy(&in, key.data(), kCacheKeySize);
593
- BijectiveHash2x64(in[1], in[0], &out[1], &out[0]);
598
+ BijectiveHash2x64(in[1], in[0] ^ seed, &out[1], &out[0]);
594
599
  return out;
595
600
  }
596
601
 
597
602
  // For reconstructing key from hashed_key. Requires the caller to provide
598
603
  // backing storage for the Slice in `unhashed`
599
604
  static inline Slice ReverseHash(const UniqueId64x2& hashed,
600
- UniqueId64x2* unhashed) {
605
+ UniqueId64x2* unhashed, uint32_t seed) {
601
606
  BijectiveUnhash2x64(hashed[1], hashed[0], &(*unhashed)[1], &(*unhashed)[0]);
607
+ (*unhashed)[0] ^= seed;
602
608
  // NOTE: endian dependence
603
609
  return Slice(reinterpret_cast<const char*>(unhashed), kCacheKeySize);
604
610
  }
@@ -682,10 +688,7 @@ class HyperClockCache
682
688
  public:
683
689
  using Shard = ClockCacheShard<HyperClockTable>;
684
690
 
685
- HyperClockCache(size_t capacity, size_t estimated_value_size,
686
- int num_shard_bits, bool strict_capacity_limit,
687
- CacheMetadataChargePolicy metadata_charge_policy,
688
- std::shared_ptr<MemoryAllocator> memory_allocator);
691
+ explicit HyperClockCache(const HyperClockCacheOptions& opts);
689
692
 
690
693
  const char* Name() const override { return "HyperClockCache"; }
691
694
 
@@ -9,7 +9,7 @@
9
9
  #include <cstdint>
10
10
  #include <memory>
11
11
 
12
- #include "memory/memory_allocator.h"
12
+ #include "memory/memory_allocator_impl.h"
13
13
  #include "monitoring/perf_context_imp.h"
14
14
  #include "util/compression.h"
15
15
  #include "util/string_util.h"
@@ -17,23 +17,8 @@
17
17
  namespace ROCKSDB_NAMESPACE {
18
18
 
19
19
  CompressedSecondaryCache::CompressedSecondaryCache(
20
- size_t capacity, int num_shard_bits, bool strict_capacity_limit,
21
- double high_pri_pool_ratio, double low_pri_pool_ratio,
22
- std::shared_ptr<MemoryAllocator> memory_allocator, bool use_adaptive_mutex,
23
- CacheMetadataChargePolicy metadata_charge_policy,
24
- CompressionType compression_type, uint32_t compress_format_version,
25
- bool enable_custom_split_merge,
26
- const CacheEntryRoleSet& do_not_compress_roles)
27
- : cache_options_(capacity, num_shard_bits, strict_capacity_limit,
28
- high_pri_pool_ratio, low_pri_pool_ratio, memory_allocator,
29
- use_adaptive_mutex, metadata_charge_policy,
30
- compression_type, compress_format_version,
31
- enable_custom_split_merge, do_not_compress_roles) {
32
- cache_ =
33
- NewLRUCache(capacity, num_shard_bits, strict_capacity_limit,
34
- high_pri_pool_ratio, memory_allocator, use_adaptive_mutex,
35
- metadata_charge_policy, low_pri_pool_ratio);
36
- }
20
+ const CompressedSecondaryCacheOptions& opts)
21
+ : cache_(opts.LRUCacheOptions::MakeSharedCache()), cache_options_(opts) {}
37
22
 
38
23
  CompressedSecondaryCache::~CompressedSecondaryCache() { cache_.reset(); }
39
24
 
@@ -311,31 +296,9 @@ const Cache::CacheItemHelper* CompressedSecondaryCache::GetHelper(
311
296
  }
312
297
  }
313
298
 
314
- std::shared_ptr<SecondaryCache> NewCompressedSecondaryCache(
315
- size_t capacity, int num_shard_bits, bool strict_capacity_limit,
316
- double high_pri_pool_ratio, double low_pri_pool_ratio,
317
- std::shared_ptr<MemoryAllocator> memory_allocator, bool use_adaptive_mutex,
318
- CacheMetadataChargePolicy metadata_charge_policy,
319
- CompressionType compression_type, uint32_t compress_format_version,
320
- bool enable_custom_split_merge,
321
- const CacheEntryRoleSet& do_not_compress_roles) {
322
- return std::make_shared<CompressedSecondaryCache>(
323
- capacity, num_shard_bits, strict_capacity_limit, high_pri_pool_ratio,
324
- low_pri_pool_ratio, memory_allocator, use_adaptive_mutex,
325
- metadata_charge_policy, compression_type, compress_format_version,
326
- enable_custom_split_merge, do_not_compress_roles);
327
- }
328
-
329
- std::shared_ptr<SecondaryCache> NewCompressedSecondaryCache(
330
- const CompressedSecondaryCacheOptions& opts) {
331
- // The secondary_cache is disabled for this LRUCache instance.
332
- assert(opts.secondary_cache == nullptr);
333
- return NewCompressedSecondaryCache(
334
- opts.capacity, opts.num_shard_bits, opts.strict_capacity_limit,
335
- opts.high_pri_pool_ratio, opts.low_pri_pool_ratio, opts.memory_allocator,
336
- opts.use_adaptive_mutex, opts.metadata_charge_policy,
337
- opts.compression_type, opts.compress_format_version,
338
- opts.enable_custom_split_merge, opts.do_not_compress_roles);
299
+ std::shared_ptr<SecondaryCache>
300
+ CompressedSecondaryCacheOptions::MakeSharedSecondaryCache() const {
301
+ return std::make_shared<CompressedSecondaryCache>(*this);
339
302
  }
340
303
 
341
304
  } // namespace ROCKSDB_NAMESPACE
@@ -10,7 +10,7 @@
10
10
  #include <memory>
11
11
 
12
12
  #include "cache/lru_cache.h"
13
- #include "memory/memory_allocator.h"
13
+ #include "memory/memory_allocator_impl.h"
14
14
  #include "rocksdb/secondary_cache.h"
15
15
  #include "rocksdb/slice.h"
16
16
  #include "rocksdb/status.h"
@@ -69,18 +69,8 @@ class CompressedSecondaryCacheResultHandle : public SecondaryCacheResultHandle {
69
69
 
70
70
  class CompressedSecondaryCache : public SecondaryCache {
71
71
  public:
72
- CompressedSecondaryCache(
73
- size_t capacity, int num_shard_bits, bool strict_capacity_limit,
74
- double high_pri_pool_ratio, double low_pri_pool_ratio,
75
- std::shared_ptr<MemoryAllocator> memory_allocator = nullptr,
76
- bool use_adaptive_mutex = kDefaultToAdaptiveMutex,
77
- CacheMetadataChargePolicy metadata_charge_policy =
78
- kDefaultCacheMetadataChargePolicy,
79
- CompressionType compression_type = CompressionType::kLZ4Compression,
80
- uint32_t compress_format_version = 2,
81
- bool enable_custom_split_merge = false,
82
- const CacheEntryRoleSet& do_not_compress_roles = {
83
- CacheEntryRole::kFilterBlock});
72
+ explicit CompressedSecondaryCache(
73
+ const CompressedSecondaryCacheOptions& opts);
84
74
  ~CompressedSecondaryCache() override;
85
75
 
86
76
  const char* Name() const override { return "CompressedSecondaryCache"; }
@@ -626,8 +626,9 @@ class CompressedSecondaryCacheTestBase : public testing::Test,
626
626
 
627
627
  using CacheValueChunk = CompressedSecondaryCache::CacheValueChunk;
628
628
  std::unique_ptr<CompressedSecondaryCache> sec_cache =
629
- std::make_unique<CompressedSecondaryCache>(1000, 0, true, 0.5, 0.0,
630
- allocator);
629
+ std::make_unique<CompressedSecondaryCache>(
630
+ CompressedSecondaryCacheOptions(1000, 0, true, 0.5, 0.0,
631
+ allocator));
631
632
  Random rnd(301);
632
633
  // 8500 = 8169 + 233 + 98, so there should be 3 chunks after split.
633
634
  size_t str_size{8500};
@@ -678,7 +679,8 @@ class CompressedSecondaryCacheTestBase : public testing::Test,
678
679
  std::string str = str1 + str2 + str3;
679
680
 
680
681
  std::unique_ptr<CompressedSecondaryCache> sec_cache =
681
- std::make_unique<CompressedSecondaryCache>(1000, 0, true, 0.5, 0.0);
682
+ std::make_unique<CompressedSecondaryCache>(
683
+ CompressedSecondaryCacheOptions(1000, 0, true, 0.5, 0.0));
682
684
  size_t charge{0};
683
685
  CacheAllocationPtr value =
684
686
  sec_cache->MergeChunksIntoValue(chunks_head, charge);
@@ -708,8 +710,9 @@ class CompressedSecondaryCacheTestBase : public testing::Test,
708
710
 
709
711
  using CacheValueChunk = CompressedSecondaryCache::CacheValueChunk;
710
712
  std::unique_ptr<CompressedSecondaryCache> sec_cache =
711
- std::make_unique<CompressedSecondaryCache>(1000, 0, true, 0.5, 0.0,
712
- allocator);
713
+ std::make_unique<CompressedSecondaryCache>(
714
+ CompressedSecondaryCacheOptions(1000, 0, true, 0.5, 0.0,
715
+ allocator));
713
716
  Random rnd(301);
714
717
  // 8500 = 8169 + 233 + 98, so there should be 3 chunks after split.
715
718
  size_t str_size{8500};
@@ -16,7 +16,7 @@
16
16
 
17
17
  #include "cache/secondary_cache_adapter.h"
18
18
  #include "monitoring/perf_context_imp.h"
19
- #include "monitoring/statistics.h"
19
+ #include "monitoring/statistics_impl.h"
20
20
  #include "port/lang.h"
21
21
  #include "util/distributed_mutex.h"
22
22
 
@@ -646,23 +646,15 @@ void LRUCacheShard::AppendPrintableOptions(std::string& str) const {
646
646
  str.append(buffer);
647
647
  }
648
648
 
649
- LRUCache::LRUCache(size_t capacity, int num_shard_bits,
650
- bool strict_capacity_limit, double high_pri_pool_ratio,
651
- double low_pri_pool_ratio,
652
- std::shared_ptr<MemoryAllocator> allocator,
653
- bool use_adaptive_mutex,
654
- CacheMetadataChargePolicy metadata_charge_policy)
655
- : ShardedCache(capacity, num_shard_bits, strict_capacity_limit,
656
- std::move(allocator)) {
649
+ LRUCache::LRUCache(const LRUCacheOptions& opts) : ShardedCache(opts) {
657
650
  size_t per_shard = GetPerShardCapacity();
658
651
  MemoryAllocator* alloc = memory_allocator();
659
- const EvictionCallback* eviction_callback = &eviction_callback_;
660
- InitShards([=](LRUCacheShard* cs) {
661
- new (cs) LRUCacheShard(per_shard, strict_capacity_limit,
662
- high_pri_pool_ratio, low_pri_pool_ratio,
663
- use_adaptive_mutex, metadata_charge_policy,
664
- /* max_upper_hash_bits */ 32 - num_shard_bits, alloc,
665
- eviction_callback);
652
+ InitShards([&](LRUCacheShard* cs) {
653
+ new (cs) LRUCacheShard(per_shard, opts.strict_capacity_limit,
654
+ opts.high_pri_pool_ratio, opts.low_pri_pool_ratio,
655
+ opts.use_adaptive_mutex, opts.metadata_charge_policy,
656
+ /* max_upper_hash_bits */ 32 - opts.num_shard_bits,
657
+ alloc, &eviction_callback_);
666
658
  });
667
659
  }
668
660
 
@@ -692,13 +684,7 @@ double LRUCache::GetHighPriPoolRatio() {
692
684
 
693
685
  } // namespace lru_cache
694
686
 
695
- std::shared_ptr<Cache> NewLRUCache(
696
- size_t capacity, int num_shard_bits, bool strict_capacity_limit,
697
- double high_pri_pool_ratio,
698
- std::shared_ptr<MemoryAllocator> memory_allocator, bool use_adaptive_mutex,
699
- CacheMetadataChargePolicy metadata_charge_policy,
700
- const std::shared_ptr<SecondaryCache>& secondary_cache,
701
- double low_pri_pool_ratio) {
687
+ std::shared_ptr<Cache> LRUCacheOptions::MakeSharedCache() const {
702
688
  if (num_shard_bits >= 20) {
703
689
  return nullptr; // The cache cannot be sharded into too many fine pieces.
704
690
  }
@@ -714,36 +700,24 @@ std::shared_ptr<Cache> NewLRUCache(
714
700
  // Invalid high_pri_pool_ratio and low_pri_pool_ratio combination
715
701
  return nullptr;
716
702
  }
717
- if (num_shard_bits < 0) {
718
- num_shard_bits = GetDefaultCacheShardBits(capacity);
703
+ // For sanitized options
704
+ LRUCacheOptions opts = *this;
705
+ if (opts.num_shard_bits < 0) {
706
+ opts.num_shard_bits = GetDefaultCacheShardBits(capacity);
719
707
  }
720
- std::shared_ptr<Cache> cache = std::make_shared<LRUCache>(
721
- capacity, num_shard_bits, strict_capacity_limit, high_pri_pool_ratio,
722
- low_pri_pool_ratio, std::move(memory_allocator), use_adaptive_mutex,
723
- metadata_charge_policy);
708
+ std::shared_ptr<Cache> cache = std::make_shared<LRUCache>(opts);
724
709
  if (secondary_cache) {
725
710
  cache = std::make_shared<CacheWithSecondaryAdapter>(cache, secondary_cache);
726
711
  }
727
712
  return cache;
728
713
  }
729
714
 
730
- std::shared_ptr<Cache> NewLRUCache(const LRUCacheOptions& cache_opts) {
731
- return NewLRUCache(cache_opts.capacity, cache_opts.num_shard_bits,
732
- cache_opts.strict_capacity_limit,
733
- cache_opts.high_pri_pool_ratio,
734
- cache_opts.memory_allocator, cache_opts.use_adaptive_mutex,
735
- cache_opts.metadata_charge_policy,
736
- cache_opts.secondary_cache, cache_opts.low_pri_pool_ratio);
737
- }
738
-
739
- std::shared_ptr<Cache> NewLRUCache(
740
- size_t capacity, int num_shard_bits, bool strict_capacity_limit,
741
- double high_pri_pool_ratio,
742
- std::shared_ptr<MemoryAllocator> memory_allocator, bool use_adaptive_mutex,
743
- CacheMetadataChargePolicy metadata_charge_policy,
744
- double low_pri_pool_ratio) {
745
- return NewLRUCache(capacity, num_shard_bits, strict_capacity_limit,
746
- high_pri_pool_ratio, memory_allocator, use_adaptive_mutex,
747
- metadata_charge_policy, nullptr, low_pri_pool_ratio);
715
+ std::shared_ptr<GeneralCache> LRUCacheOptions::MakeSharedGeneralCache() const {
716
+ if (secondary_cache) {
717
+ // Not allowed for a GeneralCache
718
+ return nullptr;
719
+ }
720
+ // Works while GeneralCache is an alias for Cache
721
+ return MakeSharedCache();
748
722
  }
749
723
  } // namespace ROCKSDB_NAMESPACE
@@ -279,8 +279,8 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
279
279
  using HashCref = uint32_t;
280
280
 
281
281
  public: // Function definitions expected as parameter to ShardedCache
282
- static inline HashVal ComputeHash(const Slice& key) {
283
- return Lower32of64(GetSliceNPHash64(key));
282
+ static inline HashVal ComputeHash(const Slice& key, uint32_t seed) {
283
+ return Lower32of64(GetSliceNPHash64(key, seed));
284
284
  }
285
285
 
286
286
  // Separate from constructor so caller can easily make an array of LRUCache
@@ -446,12 +446,7 @@ class LRUCache
446
446
  #endif
447
447
  : public ShardedCache<LRUCacheShard> {
448
448
  public:
449
- LRUCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit,
450
- double high_pri_pool_ratio, double low_pri_pool_ratio,
451
- std::shared_ptr<MemoryAllocator> memory_allocator = nullptr,
452
- bool use_adaptive_mutex = kDefaultToAdaptiveMutex,
453
- CacheMetadataChargePolicy metadata_charge_policy =
454
- kDontChargeCacheMetadata);
449
+ explicit LRUCache(const LRUCacheOptions& opts);
455
450
  const char* Name() const override { return "LRUCache"; }
456
451
  ObjectPtr Value(Handle* handle) override;
457
452
  size_t GetCharge(Handle* handle) const override;
@@ -397,7 +397,7 @@ class ClockCacheTest : public testing::Test {
397
397
  opts.estimated_value_size = 1;
398
398
  new (shard_)
399
399
  Shard(capacity, strict_capacity_limit, kDontChargeCacheMetadata,
400
- /*allocator*/ nullptr, &eviction_callback_, opts);
400
+ /*allocator*/ nullptr, &eviction_callback_, &hash_seed_, opts);
401
401
  }
402
402
 
403
403
  Status Insert(const UniqueId64x2& hashed_key,
@@ -455,6 +455,7 @@ class ClockCacheTest : public testing::Test {
455
455
 
456
456
  private:
457
457
  Cache::EvictionCallback eviction_callback_;
458
+ uint32_t hash_seed_ = 0;
458
459
  };
459
460
 
460
461
  TEST_F(ClockCacheTest, Misc) {
@@ -95,8 +95,7 @@ Cache::Handle* CacheWithSecondaryAdapter::Promote(
95
95
  PERF_COUNTER_ADD(secondary_cache_hit_count, 1);
96
96
  RecordTick(stats, SECONDARY_CACHE_HITS);
97
97
 
98
- // FIXME? using charge=Size() is suspicious but inherited from older
99
- // implementation
98
+ // Note: SecondaryCache::Size() is really charge (from the CreateCallback)
100
99
  size_t charge = secondary_handle->Size();
101
100
  Handle* result = nullptr;
102
101
  // Insert into primary cache, possibly as a standalone+dummy entries.
@@ -13,20 +13,57 @@
13
13
  #include <cstdint>
14
14
  #include <memory>
15
15
 
16
+ #include "env/unique_id_gen.h"
17
+ #include "rocksdb/env.h"
16
18
  #include "util/hash.h"
17
19
  #include "util/math.h"
18
20
  #include "util/mutexlock.h"
19
21
 
20
22
  namespace ROCKSDB_NAMESPACE {
23
+ namespace {
24
+ // The generated seeds must fit in 31 bits so that
25
+ // ShardedCacheOptions::hash_seed can be set to it explicitly, for
26
+ // diagnostic/debugging purposes.
27
+ constexpr uint32_t kSeedMask = 0x7fffffff;
28
+ uint32_t DetermineSeed(int32_t hash_seed_option) {
29
+ if (hash_seed_option >= 0) {
30
+ // User-specified exact seed
31
+ return static_cast<uint32_t>(hash_seed_option);
32
+ }
33
+ static SemiStructuredUniqueIdGen gen;
34
+ if (hash_seed_option == ShardedCacheOptions::kHostHashSeed) {
35
+ std::string hostname;
36
+ Status s = Env::Default()->GetHostNameString(&hostname);
37
+ if (s.ok()) {
38
+ return GetSliceHash(hostname) & kSeedMask;
39
+ } else {
40
+ // Fall back on something stable within the process.
41
+ return static_cast<uint32_t>(gen.GetBaseUpper()) & kSeedMask;
42
+ }
43
+ } else {
44
+ // for kQuasiRandomHashSeed and fallback
45
+ uint32_t val = gen.GenerateNext<uint32_t>() & kSeedMask;
46
+ // Perform some 31-bit bijective transformations so that we get
47
+ // quasirandom, not just incrementing. (An incrementing seed from a
48
+ // random starting point would be fine, but hard to describe in a name.)
49
+ // See https://en.wikipedia.org/wiki/Quasirandom and using a murmur-like
50
+ // transformation here for our bijection in the lower 31 bits.
51
+ // See https://en.wikipedia.org/wiki/MurmurHash
52
+ val *= /*31-bit prime*/ 1150630961;
53
+ val ^= (val & kSeedMask) >> 17;
54
+ val *= /*31-bit prime*/ 1320603883;
55
+ return val & kSeedMask;
56
+ }
57
+ }
58
+ } // namespace
21
59
 
22
- ShardedCacheBase::ShardedCacheBase(size_t capacity, int num_shard_bits,
23
- bool strict_capacity_limit,
24
- std::shared_ptr<MemoryAllocator> allocator)
25
- : Cache(std::move(allocator)),
60
+ ShardedCacheBase::ShardedCacheBase(const ShardedCacheOptions& opts)
61
+ : Cache(opts.memory_allocator),
26
62
  last_id_(1),
27
- shard_mask_((uint32_t{1} << num_shard_bits) - 1),
28
- strict_capacity_limit_(strict_capacity_limit),
29
- capacity_(capacity) {}
63
+ shard_mask_((uint32_t{1} << opts.num_shard_bits) - 1),
64
+ hash_seed_(DetermineSeed(opts.hash_seed)),
65
+ strict_capacity_limit_(opts.strict_capacity_limit),
66
+ capacity_(opts.capacity) {}
30
67
 
31
68
  size_t ShardedCacheBase::ComputePerShardCapacity(size_t capacity) const {
32
69
  uint32_t num_shards = GetNumShards();
@@ -34,8 +34,8 @@ class CacheShardBase {
34
34
  std::string GetPrintableOptions() const { return ""; }
35
35
  using HashVal = uint64_t;
36
36
  using HashCref = uint64_t;
37
- static inline HashVal ComputeHash(const Slice& key) {
38
- return GetSliceNPHash64(key);
37
+ static inline HashVal ComputeHash(const Slice& key, uint32_t seed) {
38
+ return GetSliceNPHash64(key, seed);
39
39
  }
40
40
  static inline uint32_t HashPieceForSharding(HashCref hash) {
41
41
  return Lower32of64(hash);
@@ -89,9 +89,7 @@ class CacheShardBase {
89
89
  // Portions of ShardedCache that do not depend on the template parameter
90
90
  class ShardedCacheBase : public Cache {
91
91
  public:
92
- ShardedCacheBase(size_t capacity, int num_shard_bits,
93
- bool strict_capacity_limit,
94
- std::shared_ptr<MemoryAllocator> memory_allocator);
92
+ explicit ShardedCacheBase(const ShardedCacheOptions& opts);
95
93
  virtual ~ShardedCacheBase() = default;
96
94
 
97
95
  int GetNumShardBits() const;
@@ -106,6 +104,8 @@ class ShardedCacheBase : public Cache {
106
104
  size_t GetUsage(Handle* handle) const override;
107
105
  std::string GetPrintableOptions() const override;
108
106
 
107
+ uint32_t GetHashSeed() const override { return hash_seed_; }
108
+
109
109
  protected: // fns
110
110
  virtual void AppendPrintableOptions(std::string& str) const = 0;
111
111
  size_t GetPerShardCapacity() const;
@@ -114,6 +114,7 @@ class ShardedCacheBase : public Cache {
114
114
  protected: // data
115
115
  std::atomic<uint64_t> last_id_; // For NewId
116
116
  const uint32_t shard_mask_;
117
+ const uint32_t hash_seed_;
117
118
 
118
119
  // Dynamic configuration parameters, guarded by config_mutex_
119
120
  bool strict_capacity_limit_;
@@ -134,10 +135,8 @@ class ShardedCache : public ShardedCacheBase {
134
135
  using HashCref = typename CacheShard::HashCref;
135
136
  using HandleImpl = typename CacheShard::HandleImpl;
136
137
 
137
- ShardedCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit,
138
- std::shared_ptr<MemoryAllocator> allocator)
139
- : ShardedCacheBase(capacity, num_shard_bits, strict_capacity_limit,
140
- allocator),
138
+ explicit ShardedCache(const ShardedCacheOptions& opts)
139
+ : ShardedCacheBase(opts),
141
140
  shards_(reinterpret_cast<CacheShard*>(port::cacheline_aligned_alloc(
142
141
  sizeof(CacheShard) * GetNumShards()))),
143
142
  destroy_shards_in_dtor_(false) {}
@@ -175,7 +174,7 @@ class ShardedCache : public ShardedCacheBase {
175
174
  size_t charge, Handle** handle = nullptr,
176
175
  Priority priority = Priority::LOW) override {
177
176
  assert(helper);
178
- HashVal hash = CacheShard::ComputeHash(key);
177
+ HashVal hash = CacheShard::ComputeHash(key, hash_seed_);
179
178
  auto h_out = reinterpret_cast<HandleImpl**>(handle);
180
179
  return GetShard(hash).Insert(key, hash, obj, helper, charge, h_out,
181
180
  priority);
@@ -185,7 +184,7 @@ class ShardedCache : public ShardedCacheBase {
185
184
  const CacheItemHelper* helper, size_t charge,
186
185
  bool allow_uncharged) override {
187
186
  assert(helper);
188
- HashVal hash = CacheShard::ComputeHash(key);
187
+ HashVal hash = CacheShard::ComputeHash(key, hash_seed_);
189
188
  HandleImpl* result = GetShard(hash).CreateStandalone(
190
189
  key, hash, obj, helper, charge, allow_uncharged);
191
190
  return reinterpret_cast<Handle*>(result);
@@ -195,14 +194,14 @@ class ShardedCache : public ShardedCacheBase {
195
194
  CreateContext* create_context = nullptr,
196
195
  Priority priority = Priority::LOW,
197
196
  Statistics* stats = nullptr) override {
198
- HashVal hash = CacheShard::ComputeHash(key);
197
+ HashVal hash = CacheShard::ComputeHash(key, hash_seed_);
199
198
  HandleImpl* result = GetShard(hash).Lookup(key, hash, helper,
200
199
  create_context, priority, stats);
201
200
  return reinterpret_cast<Handle*>(result);
202
201
  }
203
202
 
204
203
  void Erase(const Slice& key) override {
205
- HashVal hash = CacheShard::ComputeHash(key);
204
+ HashVal hash = CacheShard::ComputeHash(key, hash_seed_);
206
205
  GetShard(hash).Erase(key, hash);
207
206
  }
208
207
 
@@ -226,7 +225,7 @@ class ShardedCache : public ShardedCacheBase {
226
225
  return SumOverShards2(&CacheShard::GetPinnedUsage);
227
226
  }
228
227
  size_t GetOccupancyCount() const override {
229
- return SumOverShards2(&CacheShard::GetPinnedUsage);
228
+ return SumOverShards2(&CacheShard::GetOccupancyCount);
230
229
  }
231
230
  size_t GetTableAddressCount() const override {
232
231
  return SumOverShards2(&CacheShard::GetTableAddressCount);