@nxtedition/rocksdb 9.0.0 → 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 (304) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -9
  3. package/deps/rocksdb/rocksdb/Makefile +15 -6
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +17 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +74 -15
  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 +16 -4
  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 +2024 -14
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +349 -23
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +126 -51
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -0
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +182 -7
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +31 -14
  19. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -33
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +293 -17
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +21 -5
  22. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +10 -0
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -3
  24. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  27. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  28. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +25 -11
  29. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  30. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  31. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -1
  32. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  33. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  34. package/deps/rocksdb/rocksdb/db/builder.cc +3 -3
  35. package/deps/rocksdb/rocksdb/db/c.cc +64 -0
  36. package/deps/rocksdb/rocksdb/db/c_test.c +36 -0
  37. package/deps/rocksdb/rocksdb/db/column_family.cc +23 -15
  38. package/deps/rocksdb/rocksdb/db/column_family.h +9 -0
  39. package/deps/rocksdb/rocksdb/db/column_family_test.cc +101 -5
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +36 -23
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +3 -5
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -18
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +7 -3
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -6
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +146 -64
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +13 -39
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  53. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -7
  54. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +8 -3
  55. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +59 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +186 -2
  58. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +17 -5
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +519 -240
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +104 -43
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +169 -66
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -1
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +12 -4
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -14
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +85 -53
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -7
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +99 -82
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +4 -14
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +24 -21
  71. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  72. package/deps/rocksdb/rocksdb/db/db_iter.cc +83 -55
  73. package/deps/rocksdb/rocksdb/db/db_iter.h +10 -2
  74. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  75. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  76. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  77. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +187 -1
  78. package/deps/rocksdb/rocksdb/db/db_options_test.cc +258 -0
  79. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +258 -0
  80. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  82. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  83. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  84. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -1
  85. package/deps/rocksdb/rocksdb/db/db_test.cc +134 -30
  86. package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
  87. package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -6
  88. package/deps/rocksdb/rocksdb/db/db_test_util.h +5 -2
  89. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -0
  90. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +12 -0
  91. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +337 -1
  92. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  93. package/deps/rocksdb/rocksdb/db/error_handler.cc +51 -34
  94. package/deps/rocksdb/rocksdb/db/error_handler.h +7 -6
  95. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +58 -0
  96. package/deps/rocksdb/rocksdb/db/flush_job.cc +17 -19
  97. package/deps/rocksdb/rocksdb/db/flush_job.h +3 -3
  98. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -1
  99. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +2 -0
  100. package/deps/rocksdb/rocksdb/db/memtable.cc +18 -70
  101. package/deps/rocksdb/rocksdb/db/memtable_list.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/memtable_list.h +11 -1
  103. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -1
  104. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  105. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  106. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  107. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  108. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +3 -0
  109. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  110. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +2 -0
  111. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  112. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  113. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  114. package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
  115. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +454 -70
  116. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  117. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  118. package/deps/rocksdb/rocksdb/db/table_cache.cc +32 -19
  119. package/deps/rocksdb/rocksdb/db/table_cache.h +12 -6
  120. package/deps/rocksdb/rocksdb/db/version_edit.h +10 -4
  121. package/deps/rocksdb/rocksdb/db/version_set.cc +75 -73
  122. package/deps/rocksdb/rocksdb/db/version_set.h +8 -8
  123. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  124. package/deps/rocksdb/rocksdb/db/version_set_test.cc +22 -11
  125. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  126. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  127. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  128. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  129. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  130. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  131. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +44 -20
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +15 -10
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +108 -58
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +36 -14
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -1
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +195 -130
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -2
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +12 -12
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +14 -11
  149. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +44 -38
  150. package/deps/rocksdb/rocksdb/env/env.cc +5 -0
  151. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +1 -0
  152. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +50 -29
  153. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +32 -2
  154. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +513 -30
  155. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +38 -13
  157. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +14 -7
  158. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +42 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +65 -12
  160. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +26 -0
  162. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +37 -4
  163. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +2 -0
  164. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -0
  165. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  166. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  167. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +4 -0
  168. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  169. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  170. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -5
  171. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  173. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +79 -8
  174. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +16 -0
  175. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  176. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  177. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +14 -3
  178. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +2 -0
  179. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +9 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +0 -2
  186. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -2
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  188. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  189. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  190. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
  191. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  192. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +4 -0
  193. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -0
  194. package/deps/rocksdb/rocksdb/options/db_options.cc +47 -2
  195. package/deps/rocksdb/rocksdb/options/db_options.h +3 -0
  196. package/deps/rocksdb/rocksdb/options/options_helper.cc +12 -0
  197. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
  198. package/deps/rocksdb/rocksdb/options/options_test.cc +6 -1
  199. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  200. package/deps/rocksdb/rocksdb/port/README +10 -0
  201. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  202. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  203. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  204. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -0
  205. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  206. package/deps/rocksdb/rocksdb/src.mk +7 -1
  207. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
  208. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +3 -1
  209. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +275 -61
  210. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +96 -4
  211. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +179 -62
  212. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +35 -22
  213. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  214. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +14 -9
  215. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  216. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  217. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -12
  218. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +10 -5
  219. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +39 -18
  220. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  221. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  222. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  223. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  224. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +10 -8
  225. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -2
  226. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  228. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +3 -2
  229. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  230. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +6 -2
  231. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  232. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  233. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  234. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  235. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +12 -0
  236. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +33 -6
  237. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +2 -4
  239. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  240. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  241. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  242. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  243. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -43
  244. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +213 -28
  245. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  246. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +0 -1
  247. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -10
  248. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  249. package/deps/rocksdb/rocksdb/util/cast_util.h +10 -0
  250. package/deps/rocksdb/rocksdb/util/comparator.cc +26 -1
  251. package/deps/rocksdb/rocksdb/util/compression.h +9 -3
  252. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  253. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  254. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  255. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  256. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  257. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  258. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  259. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  260. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  261. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  262. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -0
  263. package/deps/rocksdb/rocksdb/util/udt_util.cc +42 -0
  264. package/deps/rocksdb/rocksdb/util/udt_util.h +19 -0
  265. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +14 -0
  266. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  267. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  268. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2 -1
  269. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  270. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +19 -15
  271. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  272. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +5 -0
  273. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  274. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +9 -0
  275. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  276. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  277. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +41 -0
  278. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  279. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -0
  280. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +155 -0
  281. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  282. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +81 -1
  283. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -6
  284. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +7 -5
  285. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +2 -1
  286. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +3 -2
  287. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -27
  288. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  289. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  290. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +105 -8
  291. package/deps/rocksdb/rocksdb.gyp +4 -2
  292. package/index.js +0 -8
  293. package/package.json +1 -1
  294. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  295. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  296. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  297. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  298. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  299. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  300. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  301. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  302. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  303. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  304. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
package/binding.cc CHANGED
@@ -1563,26 +1563,6 @@ NAPI_METHOD(batch_iterate) {
1563
1563
  return result;
1564
1564
  }
1565
1565
 
1566
- NAPI_METHOD(db_flush_wal) {
1567
- NAPI_ARGV(3);
1568
-
1569
- Database* database;
1570
- NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
1571
-
1572
- auto options = argv[1];
1573
-
1574
- bool sync = false;
1575
- NAPI_STATUS_THROWS(GetProperty(env, options, "sync", sync));
1576
-
1577
- auto callback = argv[2];
1578
-
1579
- runAsync<bool>(
1580
- "leveldown.flushWal", env, callback, [=](auto& state) { return database->db->FlushWAL(sync); },
1581
- [=](auto& state, auto env, auto& argv) { return napi_ok; });
1582
-
1583
- return 0;
1584
- }
1585
-
1586
1566
  NAPI_INIT() {
1587
1567
  NAPI_EXPORT_FUNCTION(db_init);
1588
1568
  NAPI_EXPORT_FUNCTION(db_open);
@@ -1592,7 +1572,6 @@ NAPI_INIT() {
1592
1572
  NAPI_EXPORT_FUNCTION(db_clear);
1593
1573
  NAPI_EXPORT_FUNCTION(db_get_property);
1594
1574
  NAPI_EXPORT_FUNCTION(db_get_latest_sequence);
1595
- NAPI_EXPORT_FUNCTION(db_flush_wal);
1596
1575
  NAPI_EXPORT_FUNCTION(db_get_merge_operands);
1597
1576
 
1598
1577
  NAPI_EXPORT_FUNCTION(iterator_init);
@@ -254,7 +254,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
254
254
  endif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
255
255
 
256
256
  set(PORTABLE 0 CACHE STRING "Minimum CPU arch to support, or 0 = current CPU, 1 = baseline CPU")
257
- if(PORTABLE STREQUAL 1)
257
+ if(PORTABLE MATCHES "1|ON|YES|TRUE|Y")
258
258
  # Usually nothing to do; compiler default is typically the most general
259
259
  if(NOT MSVC)
260
260
  if(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390x")
@@ -264,14 +264,7 @@ if(PORTABLE STREQUAL 1)
264
264
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=loongarch64")
265
265
  endif()
266
266
  endif()
267
- elseif(PORTABLE MATCHES [^0]+)
268
- # Name of a CPU arch spec or feature set to require
269
- if(MSVC)
270
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:${PORTABLE}")
271
- else()
272
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${PORTABLE}")
273
- endif()
274
- else()
267
+ elseif(PORTABLE MATCHES "0|OFF|NO|FALSE|N")
275
268
  if(MSVC)
276
269
  # NOTE: No auto-detection of current CPU, but instead assume some useful
277
270
  # level of optimization is supported
@@ -285,6 +278,13 @@ else()
285
278
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
286
279
  endif()
287
280
  endif()
281
+ else()
282
+ # Name of a CPU arch spec or feature set to require
283
+ if(MSVC)
284
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:${PORTABLE}")
285
+ else()
286
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${PORTABLE}")
287
+ endif()
288
288
  endif()
289
289
 
290
290
  include(CheckCXXSourceCompiles)
@@ -632,6 +632,7 @@ set(SOURCES
632
632
  cache/secondary_cache.cc
633
633
  cache/secondary_cache_adapter.cc
634
634
  cache/sharded_cache.cc
635
+ cache/tiered_secondary_cache.cc
635
636
  db/arena_wrapped_db_iter.cc
636
637
  db/blob/blob_contents.cc
637
638
  db/blob/blob_fetcher.cc
@@ -714,6 +715,7 @@ set(SOURCES
714
715
  db/wal_manager.cc
715
716
  db/wide/wide_column_serialization.cc
716
717
  db/wide/wide_columns.cc
718
+ db/wide/wide_columns_helper.cc
717
719
  db/write_batch.cc
718
720
  db/write_batch_base.cc
719
721
  db/write_controller.cc
@@ -1262,6 +1264,7 @@ if(WITH_TESTS)
1262
1264
  cache/cache_test.cc
1263
1265
  cache/compressed_secondary_cache_test.cc
1264
1266
  cache/lru_cache_test.cc
1267
+ cache/tiered_secondary_cache_test.cc
1265
1268
  db/blob/blob_counting_iterator_test.cc
1266
1269
  db/blob/blob_file_addition_test.cc
1267
1270
  db/blob/blob_file_builder_test.cc
@@ -1357,6 +1360,7 @@ if(WITH_TESTS)
1357
1360
  db/wal_edit_test.cc
1358
1361
  db/wide/db_wide_basic_test.cc
1359
1362
  db/wide/wide_column_serialization_test.cc
1363
+ db/wide/wide_columns_helper_test.cc
1360
1364
  db/write_batch_test.cc
1361
1365
  db/write_callback_test.cc
1362
1366
  db/write_controller_test.cc
@@ -1885,6 +1885,9 @@ compressed_secondary_cache_test: $(OBJ_DIR)/cache/compressed_secondary_cache_tes
1885
1885
  lru_cache_test: $(OBJ_DIR)/cache/lru_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1886
1886
  $(AM_LINK)
1887
1887
 
1888
+ tiered_secondary_cache_test: $(OBJ_DIR)/cache/tiered_secondary_cache_test.o $(TEST_LIBRARY) $(LIBRARY)
1889
+ $(AM_LINK)
1890
+
1888
1891
  range_del_aggregator_test: $(OBJ_DIR)/db/range_del_aggregator_test.o $(TEST_LIBRARY) $(LIBRARY)
1889
1892
  $(AM_LINK)
1890
1893
 
@@ -1984,6 +1987,9 @@ cache_reservation_manager_test: $(OBJ_DIR)/cache/cache_reservation_manager_test.
1984
1987
  wide_column_serialization_test: $(OBJ_DIR)/db/wide/wide_column_serialization_test.o $(TEST_LIBRARY) $(LIBRARY)
1985
1988
  $(AM_LINK)
1986
1989
 
1990
+ wide_columns_helper_test: $(OBJ_DIR)/db/wide/wide_columns_helper_test.o $(TEST_LIBRARY) $(LIBRARY)
1991
+ $(AM_LINK)
1992
+
1987
1993
  #-------------------------------------------------
1988
1994
  # make install related stuff
1989
1995
  PREFIX ?= /usr/local
@@ -2088,8 +2094,8 @@ ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-javadoc.jar
2088
2094
  ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_JAVA_VERSION)-sources.jar
2089
2095
  SHA256_CMD = sha256sum
2090
2096
 
2091
- ZLIB_VER ?= 1.2.13
2092
- ZLIB_SHA256 ?= b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30
2097
+ ZLIB_VER ?= 1.3
2098
+ ZLIB_SHA256 ?= ff0ba4c292013dbc27530b3a81e1f9a813cd39de01ca5e0f8bf355702efa593e
2093
2099
  ZLIB_DOWNLOAD_BASE ?= http://zlib.net
2094
2100
  BZIP2_VER ?= 1.0.8
2095
2101
  BZIP2_SHA256 ?= ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269
@@ -2097,11 +2103,11 @@ BZIP2_DOWNLOAD_BASE ?= http://sourceware.org/pub/bzip2
2097
2103
  SNAPPY_VER ?= 1.1.8
2098
2104
  SNAPPY_SHA256 ?= 16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f
2099
2105
  SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/archive
2100
- LZ4_VER ?= 1.9.3
2101
- LZ4_SHA256 ?= 030644df4611007ff7dc962d981f390361e6c97a34e5cbc393ddfbe019ffe2c1
2106
+ LZ4_VER ?= 1.9.4
2107
+ LZ4_SHA256 ?= 0b0e3aa07c8c063ddf40b082bdf7e37a1562bda40a0ff5272957f3e987e0e54b
2102
2108
  LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
2103
- ZSTD_VER ?= 1.4.9
2104
- ZSTD_SHA256 ?= acf714d98e3db7b876e5b540cbf6dee298f60eb3c0723104f6d3f065cd60d6a8
2109
+ ZSTD_VER ?= 1.5.5
2110
+ ZSTD_SHA256 ?= 98e9c3d949d1b924e28e01eccb7deed865eefebf25c2f21c702e5cd5b63b85e1
2105
2111
  ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
2106
2112
  CURL_SSL_OPTS ?= --tlsv1
2107
2113
 
@@ -2413,6 +2419,9 @@ jtest_run:
2413
2419
  jtest: rocksdbjava
2414
2420
  cd java;$(MAKE) sample test
2415
2421
 
2422
+ jpmd: rocksdbjava rocksdbjavageneratepom
2423
+ cd java;$(MAKE) pmd
2424
+
2416
2425
  jdb_bench:
2417
2426
  cd java;$(MAKE) db_bench;
2418
2427
 
@@ -0,0 +1,29 @@
1
+ ## RocksDB: A Persistent Key-Value Store for Flash and RAM Storage
2
+
3
+ [![CircleCI Status](https://circleci.com/gh/facebook/rocksdb.svg?style=svg)](https://circleci.com/gh/facebook/rocksdb)
4
+
5
+ RocksDB is developed and maintained by Facebook Database Engineering Team.
6
+ It is built on earlier work on [LevelDB](https://github.com/google/leveldb) by Sanjay Ghemawat (sanjay@google.com)
7
+ and Jeff Dean (jeff@google.com)
8
+
9
+ This code is a library that forms the core building block for a fast
10
+ key-value server, especially suited for storing data on flash drives.
11
+ It has a Log-Structured-Merge-Database (LSM) design with flexible tradeoffs
12
+ between Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF)
13
+ and Space-Amplification-Factor (SAF). It has multi-threaded compactions,
14
+ making it especially suitable for storing multiple terabytes of data in a
15
+ single database.
16
+
17
+ Start with example usage here: https://github.com/facebook/rocksdb/tree/main/examples
18
+
19
+ See the [github wiki](https://github.com/facebook/rocksdb/wiki) for more explanation.
20
+
21
+ The public interface is in `include/`. Callers should not include or
22
+ rely on the details of any other header files in this package. Those
23
+ internal APIs may be changed without warning.
24
+
25
+ Questions and discussions are welcome on the [RocksDB Developers Public](https://www.facebook.com/groups/rocksdb.dev/) Facebook group and [email list](https://groups.google.com/g/rocksdb) on Google Groups.
26
+
27
+ ## License
28
+
29
+ RocksDB is dual-licensed under both the GPLv2 (found in the COPYING file in the root directory) and Apache 2.0 License (found in the LICENSE.Apache file in the root directory). You may select, at your option, one of the above-listed licenses.
@@ -3,8 +3,6 @@
3
3
  # --> DO NOT EDIT MANUALLY <--
4
4
  # This file is a Facebook-specific integration for buck builds, so can
5
5
  # only be validated by Facebook employees.
6
- #
7
- # @noautodeps @nocodemods
8
6
  load("//rocks/buckifier:defs.bzl", "cpp_library_wrapper","rocks_cpp_library_wrapper","cpp_binary_wrapper","cpp_unittest_wrapper","fancy_bench_wrapper","add_c_test_wrapper")
9
7
 
10
8
 
@@ -21,6 +19,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
21
19
  "cache/secondary_cache.cc",
22
20
  "cache/secondary_cache_adapter.cc",
23
21
  "cache/sharded_cache.cc",
22
+ "cache/tiered_secondary_cache.cc",
24
23
  "db/arena_wrapped_db_iter.cc",
25
24
  "db/blob/blob_contents.cc",
26
25
  "db/blob/blob_fetcher.cc",
@@ -103,6 +102,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
103
102
  "db/wal_manager.cc",
104
103
  "db/wide/wide_column_serialization.cc",
105
104
  "db/wide/wide_columns.cc",
105
+ "db/wide/wide_columns_helper.cc",
106
106
  "db/write_batch.cc",
107
107
  "db/write_batch_base.cc",
108
108
  "db/write_controller.cc",
@@ -393,6 +393,7 @@ rocks_cpp_library_wrapper(name="rocksdb_stress_lib", srcs=[
393
393
  "db_stress_tool/db_stress_stat.cc",
394
394
  "db_stress_tool/db_stress_test_base.cc",
395
395
  "db_stress_tool/db_stress_tool.cc",
396
+ "db_stress_tool/db_stress_wide_merge_operator.cc",
396
397
  "db_stress_tool/expected_state.cc",
397
398
  "db_stress_tool/expected_value.cc",
398
399
  "db_stress_tool/multi_ops_txns_stress.cc",
@@ -405,6 +406,8 @@ rocks_cpp_library_wrapper(name="rocksdb_stress_lib", srcs=[
405
406
 
406
407
  cpp_binary_wrapper(name="db_stress", srcs=["db_stress_tool/db_stress.cc"], deps=[":rocksdb_stress_lib"], extra_preprocessor_flags=[], extra_bench_libs=False)
407
408
 
409
+ cpp_binary_wrapper(name="cache_bench", srcs=["cache/cache_bench.cc"], deps=[":rocksdb_cache_bench_tools_lib"], extra_preprocessor_flags=[], extra_bench_libs=False)
410
+
408
411
  cpp_binary_wrapper(name="ribbon_bench", srcs=["microbench/ribbon_bench.cc"], deps=[], extra_preprocessor_flags=[], extra_bench_libs=True)
409
412
 
410
413
  cpp_binary_wrapper(name="db_basic_bench", srcs=["microbench/db_basic_bench.cc"], deps=[], extra_preprocessor_flags=[], extra_bench_libs=True)
@@ -5474,6 +5477,12 @@ cpp_unittest_wrapper(name="tiered_compaction_test",
5474
5477
  extra_compiler_flags=[])
5475
5478
 
5476
5479
 
5480
+ cpp_unittest_wrapper(name="tiered_secondary_cache_test",
5481
+ srcs=["cache/tiered_secondary_cache_test.cc"],
5482
+ deps=[":rocksdb_test_lib"],
5483
+ extra_compiler_flags=[])
5484
+
5485
+
5477
5486
  cpp_unittest_wrapper(name="timer_queue_test",
5478
5487
  srcs=["util/timer_queue_test.cc"],
5479
5488
  deps=[":rocksdb_test_lib"],
@@ -5552,6 +5561,12 @@ cpp_unittest_wrapper(name="wide_column_serialization_test",
5552
5561
  extra_compiler_flags=[])
5553
5562
 
5554
5563
 
5564
+ cpp_unittest_wrapper(name="wide_columns_helper_test",
5565
+ srcs=["db/wide/wide_columns_helper_test.cc"],
5566
+ deps=[":rocksdb_test_lib"],
5567
+ extra_compiler_flags=[])
5568
+
5569
+
5555
5570
  cpp_unittest_wrapper(name="work_queue_test",
5556
5571
  srcs=["util/work_queue_test.cc"],
5557
5572
  deps=[":rocksdb_test_lib"],
@@ -66,6 +66,41 @@ static std::unordered_map<std::string, OptionTypeInfo>
66
66
  OptionTypeFlags::kMutable}},
67
67
  };
68
68
 
69
+ namespace {
70
+ static void NoopDelete(Cache::ObjectPtr /*obj*/,
71
+ MemoryAllocator* /*allocator*/) {
72
+ assert(false);
73
+ }
74
+
75
+ static size_t SliceSize(Cache::ObjectPtr obj) {
76
+ return static_cast<Slice*>(obj)->size();
77
+ }
78
+
79
+ static Status SliceSaveTo(Cache::ObjectPtr from_obj, size_t from_offset,
80
+ size_t length, char* out) {
81
+ const Slice& slice = *static_cast<Slice*>(from_obj);
82
+ std::memcpy(out, slice.data() + from_offset, length);
83
+ return Status::OK();
84
+ }
85
+
86
+ static Status NoopCreate(const Slice& /*data*/, CompressionType /*type*/,
87
+ CacheTier /*source*/, Cache::CreateContext* /*ctx*/,
88
+ MemoryAllocator* /*allocator*/,
89
+ Cache::ObjectPtr* /*out_obj*/,
90
+ size_t* /*out_charge*/) {
91
+ assert(false);
92
+ return Status::NotSupported();
93
+ }
94
+
95
+ static Cache::CacheItemHelper kBasicCacheItemHelper(CacheEntryRole::kMisc,
96
+ &NoopDelete);
97
+ } // namespace
98
+
99
+ const Cache::CacheItemHelper kSliceCacheItemHelper{
100
+ CacheEntryRole::kMisc, &NoopDelete, &SliceSize,
101
+ &SliceSaveTo, &NoopCreate, &kBasicCacheItemHelper,
102
+ };
103
+
69
104
  Status SecondaryCache::CreateFromString(
70
105
  const ConfigOptions& config_options, const std::string& value,
71
106
  std::shared_ptr<SecondaryCache>* result) {
@@ -3,7 +3,6 @@
3
3
  // COPYING file in the root directory) and Apache 2.0 License
4
4
  // (found in the LICENSE.Apache file in the root directory).
5
5
 
6
- #include "cache_key.h"
7
6
  #ifdef GFLAGS
8
7
  #include <cinttypes>
9
8
  #include <cstddef>
@@ -13,9 +12,12 @@
13
12
  #include <set>
14
13
  #include <sstream>
15
14
 
15
+ #include "cache/cache_key.h"
16
+ #include "cache/sharded_cache.h"
16
17
  #include "db/db_impl/db_impl.h"
17
18
  #include "monitoring/histogram.h"
18
19
  #include "port/port.h"
20
+ #include "port/stack_trace.h"
19
21
  #include "rocksdb/advanced_cache.h"
20
22
  #include "rocksdb/convenience.h"
21
23
  #include "rocksdb/db.h"
@@ -44,7 +46,8 @@ static constexpr uint64_t GiB = MiB << 10;
44
46
  DEFINE_uint32(threads, 16, "Number of concurrent threads to run.");
45
47
  DEFINE_uint64(cache_size, 1 * GiB,
46
48
  "Number of bytes to use as a cache of uncompressed data.");
47
- DEFINE_uint32(num_shard_bits, 6, "shard_bits.");
49
+ DEFINE_int32(num_shard_bits, -1,
50
+ "ShardedCacheOptions::shard_bits. Default = auto");
48
51
 
49
52
  DEFINE_double(resident_ratio, 0.25,
50
53
  "Ratio of keys fitting in cache to keyspace.");
@@ -54,6 +57,9 @@ DEFINE_uint32(value_bytes_estimate, 0,
54
57
  "If > 0, overrides estimated_entry_charge or "
55
58
  "min_avg_entry_charge depending on cache_type.");
56
59
 
60
+ DEFINE_int32(
61
+ degenerate_hash_bits, 0,
62
+ "With HCC, fix this many hash bits to increase table hash collisions");
57
63
  DEFINE_uint32(skew, 5, "Degree of skew in key selection. 0 = no skew");
58
64
  DEFINE_bool(populate_cache, true, "Populate cache before operations");
59
65
 
@@ -76,6 +82,8 @@ DEFINE_uint32(
76
82
  DEFINE_uint32(gather_stats_entries_per_lock, 256,
77
83
  "For Cache::ApplyToAllEntries");
78
84
 
85
+ DEFINE_uint32(usleep, 0, "Sleep up to this many microseconds after each op.");
86
+
79
87
  DEFINE_bool(lean, false,
80
88
  "If true, no additional computation is performed besides cache "
81
89
  "operations.");
@@ -97,6 +105,17 @@ static class std::shared_ptr<ROCKSDB_NAMESPACE::SecondaryCache> secondary_cache;
97
105
 
98
106
  DEFINE_string(cache_type, "lru_cache", "Type of block cache.");
99
107
 
108
+ DEFINE_bool(use_jemalloc_no_dump_allocator, false,
109
+ "Whether to use JemallocNoDumpAllocator");
110
+
111
+ DEFINE_uint32(jemalloc_no_dump_allocator_num_arenas,
112
+ ROCKSDB_NAMESPACE::JemallocAllocatorOptions().num_arenas,
113
+ "JemallocNodumpAllocator::num_arenas");
114
+
115
+ DEFINE_bool(jemalloc_no_dump_allocator_limit_tcache_size,
116
+ ROCKSDB_NAMESPACE::JemallocAllocatorOptions().limit_tcache_size,
117
+ "JemallocNodumpAllocator::limit_tcache_size");
118
+
100
119
  // ## BEGIN stress_cache_key sub-tool options ##
101
120
  // See class StressCacheKey below.
102
121
  DEFINE_bool(stress_cache_key, false,
@@ -226,6 +245,20 @@ struct KeyGen {
226
245
  raw = std::min(raw, rnd.Next());
227
246
  }
228
247
  uint64_t key = FastRange64(raw, max_key);
248
+ if (FLAGS_degenerate_hash_bits) {
249
+ uint64_t key_hash =
250
+ Hash64(reinterpret_cast<const char*>(&key), sizeof(key));
251
+ // HCC uses the high 64 bits and a lower bit mask for starting probe
252
+ // location, so we fix hash bits starting at the bottom of that word.
253
+ auto hi_hash = uint64_t{0x9e3779b97f4a7c13U} ^
254
+ (key_hash << 1 << (FLAGS_degenerate_hash_bits - 1));
255
+ uint64_t un_hi, un_lo;
256
+ BijectiveUnhash2x64(hi_hash, key_hash, &un_hi, &un_lo);
257
+ un_lo ^= BitwiseAnd(FLAGS_seed, INT32_MAX);
258
+ EncodeFixed64(key_data, un_lo);
259
+ EncodeFixed64(key_data + 8, un_hi);
260
+ return Slice(key_data, kCacheKeySize);
261
+ }
229
262
  // Variable size and alignment
230
263
  size_t off = key % 8;
231
264
  key_data[0] = char{42};
@@ -239,8 +272,8 @@ struct KeyGen {
239
272
  }
240
273
  };
241
274
 
242
- Cache::ObjectPtr createValue(Random64& rnd) {
243
- char* rv = new char[FLAGS_value_bytes];
275
+ Cache::ObjectPtr createValue(Random64& rnd, MemoryAllocator* alloc) {
276
+ char* rv = AllocateBlock(FLAGS_value_bytes, alloc).release();
244
277
  // Fill with some filler data, and take some CPU time
245
278
  for (uint32_t i = 0; i < FLAGS_value_bytes; i += 8) {
246
279
  EncodeFixed64(rv + i, rnd.Next());
@@ -257,7 +290,8 @@ Status SaveToFn(Cache::ObjectPtr from_obj, size_t /*from_offset*/,
257
290
  return Status::OK();
258
291
  }
259
292
 
260
- Status CreateFn(const Slice& data, Cache::CreateContext* /*context*/,
293
+ Status CreateFn(const Slice& data, CompressionType /*type*/,
294
+ CacheTier /*source*/, Cache::CreateContext* /*context*/,
261
295
  MemoryAllocator* /*allocator*/, Cache::ObjectPtr* out_obj,
262
296
  size_t* out_charge) {
263
297
  *out_obj = new char[data.size()];
@@ -266,8 +300,8 @@ Status CreateFn(const Slice& data, Cache::CreateContext* /*context*/,
266
300
  return Status::OK();
267
301
  };
268
302
 
269
- void DeleteFn(Cache::ObjectPtr value, MemoryAllocator* /*alloc*/) {
270
- delete[] static_cast<char*>(value);
303
+ void DeleteFn(Cache::ObjectPtr value, MemoryAllocator* alloc) {
304
+ CustomDeleter{alloc}(static_cast<char*>(value));
271
305
  }
272
306
 
273
307
  Cache::CacheItemHelper helper1_wos(CacheEntryRole::kDataBlock, DeleteFn);
@@ -302,6 +336,15 @@ class CacheBench {
302
336
  exit(1);
303
337
  }
304
338
 
339
+ std::shared_ptr<MemoryAllocator> allocator;
340
+ if (FLAGS_use_jemalloc_no_dump_allocator) {
341
+ JemallocAllocatorOptions opts;
342
+ opts.num_arenas = FLAGS_jemalloc_no_dump_allocator_num_arenas;
343
+ opts.limit_tcache_size =
344
+ FLAGS_jemalloc_no_dump_allocator_limit_tcache_size;
345
+ Status s = NewJemallocNodumpAllocator(opts, &allocator);
346
+ assert(s.ok());
347
+ }
305
348
  if (FLAGS_cache_type == "clock_cache") {
306
349
  fprintf(stderr, "Old clock cache implementation has been removed.\n");
307
350
  exit(1);
@@ -309,6 +352,7 @@ class CacheBench {
309
352
  HyperClockCacheOptions opts(
310
353
  FLAGS_cache_size, /*estimated_entry_charge=*/0, FLAGS_num_shard_bits);
311
354
  opts.hash_seed = BitwiseAnd(FLAGS_seed, INT32_MAX);
355
+ opts.memory_allocator = allocator;
312
356
  if (FLAGS_cache_type == "fixed_hyper_clock_cache" ||
313
357
  FLAGS_cache_type == "hyper_clock_cache") {
314
358
  opts.estimated_entry_charge = FLAGS_value_bytes_estimate > 0
@@ -319,7 +363,7 @@ class CacheBench {
319
363
  opts.min_avg_entry_charge = FLAGS_value_bytes_estimate;
320
364
  }
321
365
  } else {
322
- fprintf(stderr, "Cache type not supported.");
366
+ fprintf(stderr, "Cache type not supported.\n");
323
367
  exit(1);
324
368
  }
325
369
  cache_ = opts.MakeSharedCache();
@@ -328,6 +372,7 @@ class CacheBench {
328
372
  false /* strict_capacity_limit */,
329
373
  0.5 /* high_pri_pool_ratio */);
330
374
  opts.hash_seed = BitwiseAnd(FLAGS_seed, INT32_MAX);
375
+ opts.memory_allocator = allocator;
331
376
  if (!FLAGS_secondary_cache_uri.empty()) {
332
377
  Status s = SecondaryCache::CreateFromString(
333
378
  ConfigOptions(), FLAGS_secondary_cache_uri, &secondary_cache);
@@ -343,7 +388,7 @@ class CacheBench {
343
388
 
344
389
  cache_ = NewLRUCache(opts);
345
390
  } else {
346
- fprintf(stderr, "Cache type not supported.");
391
+ fprintf(stderr, "Cache type not supported.\n");
347
392
  exit(1);
348
393
  }
349
394
  }
@@ -373,7 +418,8 @@ class CacheBench {
373
418
  keys_since_last_not_found = 0;
374
419
 
375
420
  Status s =
376
- cache_->Insert(key, createValue(rnd), &helper1, FLAGS_value_bytes);
421
+ cache_->Insert(key, createValue(rnd, cache_->memory_allocator()),
422
+ &helper1, FLAGS_value_bytes);
377
423
  assert(s.ok());
378
424
 
379
425
  handle = cache_->Lookup(key);
@@ -610,6 +656,7 @@ class CacheBench {
610
656
  const auto clock = SystemClock::Default().get();
611
657
  uint64_t start_time = clock->NowMicros();
612
658
  StopWatchNano timer(clock);
659
+ auto system_clock = SystemClock::Default();
613
660
 
614
661
  for (uint64_t i = 0; i < FLAGS_ops_per_thread; i++) {
615
662
  Slice key = gen.GetRand(thread->rnd, max_key_, FLAGS_skew);
@@ -637,8 +684,9 @@ class CacheBench {
637
684
  } else {
638
685
  ++lookup_misses;
639
686
  // do insert
640
- Status s = cache_->Insert(key, createValue(thread->rnd), &helper2,
641
- FLAGS_value_bytes, &handle);
687
+ Status s = cache_->Insert(
688
+ key, createValue(thread->rnd, cache_->memory_allocator()),
689
+ &helper2, FLAGS_value_bytes, &handle);
642
690
  assert(s.ok());
643
691
  }
644
692
  } else if (random_op < insert_threshold_) {
@@ -647,8 +695,9 @@ class CacheBench {
647
695
  handle = nullptr;
648
696
  }
649
697
  // do insert
650
- Status s = cache_->Insert(key, createValue(thread->rnd), &helper3,
651
- FLAGS_value_bytes, &handle);
698
+ Status s = cache_->Insert(
699
+ key, createValue(thread->rnd, cache_->memory_allocator()), &helper3,
700
+ FLAGS_value_bytes, &handle);
652
701
  assert(s.ok());
653
702
  } else if (random_op < lookup_threshold_) {
654
703
  if (handle) {
@@ -679,6 +728,13 @@ class CacheBench {
679
728
  thread->latency_ns_hist.Add(timer.ElapsedNanos());
680
729
  }
681
730
  thread->shared->AddLookupStats(lookup_hits, lookup_misses);
731
+ if (FLAGS_usleep > 0) {
732
+ unsigned us =
733
+ static_cast<unsigned>(thread->rnd.Uniform(FLAGS_usleep + 1));
734
+ if (us > 0) {
735
+ system_clock->SleepForMicroseconds(us);
736
+ }
737
+ }
682
738
  }
683
739
  if (FLAGS_early_exit) {
684
740
  MutexLock l(thread->shared->GetMutex());
@@ -712,7 +768,9 @@ class CacheBench {
712
768
  printf("Ops per thread : %" PRIu64 "\n", FLAGS_ops_per_thread);
713
769
  printf("Cache size : %s\n",
714
770
  BytesToHumanString(FLAGS_cache_size).c_str());
715
- printf("Num shard bits : %u\n", FLAGS_num_shard_bits);
771
+ printf("Num shard bits : %d\n",
772
+ static_cast_with_check<ShardedCacheBase>(cache_.get())
773
+ ->GetNumShardBits());
716
774
  printf("Max key : %" PRIu64 "\n", max_key_);
717
775
  printf("Resident ratio : %g\n", FLAGS_resident_ratio);
718
776
  printf("Skew degree : %u\n", FLAGS_skew);
@@ -1032,6 +1090,7 @@ class StressCacheKey {
1032
1090
  };
1033
1091
 
1034
1092
  int cache_bench_tool(int argc, char** argv) {
1093
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
1035
1094
  ParseCommandLineFlags(&argc, &argv, true);
1036
1095
 
1037
1096
  if (FLAGS_stress_cache_key) {
@@ -25,7 +25,8 @@ Status WarmInCache(Cache* cache, const Slice& key, const Slice& saved,
25
25
  assert(helper->create_cb);
26
26
  Cache::ObjectPtr value;
27
27
  size_t charge;
28
- Status st = helper->create_cb(saved, create_context,
28
+ Status st = helper->create_cb(saved, CompressionType::kNoCompression,
29
+ CacheTier::kVolatileTier, create_context,
29
30
  cache->memory_allocator(), &value, &charge);
30
31
  if (st.ok()) {
31
32
  st =
@@ -273,9 +273,10 @@ class ConcurrentCacheReservationManager
273
273
  std::size_t total_mem_used = cache_res_mgr_->GetTotalMemoryUsed();
274
274
  Status s;
275
275
  if (!increase) {
276
- assert(total_mem_used >= memory_used_delta);
277
- s = cache_res_mgr_->UpdateCacheReservation(total_mem_used -
278
- memory_used_delta);
276
+ s = cache_res_mgr_->UpdateCacheReservation(
277
+ (total_mem_used > memory_used_delta)
278
+ ? (total_mem_used - memory_used_delta)
279
+ : 0);
279
280
  } else {
280
281
  s = cache_res_mgr_->UpdateCacheReservation(total_mem_used +
281
282
  memory_used_delta);
@@ -175,7 +175,7 @@ class LRUCacheTest : public CacheTest {};
175
175
  TEST_P(CacheTest, UsageTest) {
176
176
  // cache is std::shared_ptr and will be automatically cleaned up.
177
177
  const size_t kCapacity = 100000;
178
- auto cache = NewCache(kCapacity, 8, false, kDontChargeCacheMetadata);
178
+ auto cache = NewCache(kCapacity, 6, false, kDontChargeCacheMetadata);
179
179
  auto precise_cache = NewCache(kCapacity, 0, false, kFullChargeCacheMetadata);
180
180
  ASSERT_EQ(0, cache->GetUsage());
181
181
  size_t baseline_meta_usage = precise_cache->GetUsage();
@@ -193,9 +193,13 @@ TEST_P(CacheTest, UsageTest) {
193
193
  ASSERT_OK(precise_cache->Insert(key, value, &kDumbHelper, kv_size));
194
194
  usage += kv_size;
195
195
  ASSERT_EQ(usage, cache->GetUsage());
196
- if (IsHyperClock()) {
196
+ if (GetParam() == kFixedHyperClock) {
197
197
  ASSERT_EQ(baseline_meta_usage + usage, precise_cache->GetUsage());
198
198
  } else {
199
+ // AutoHyperClockCache meta usage grows in proportion to lifetime
200
+ // max number of entries. LRUCache in proportion to resident number of
201
+ // entries, though there is an untracked component proportional to
202
+ // lifetime max number of entries.
199
203
  ASSERT_LT(usage, precise_cache->GetUsage());
200
204
  }
201
205
  }
@@ -203,7 +207,11 @@ TEST_P(CacheTest, UsageTest) {
203
207
  cache->EraseUnRefEntries();
204
208
  precise_cache->EraseUnRefEntries();
205
209
  ASSERT_EQ(0, cache->GetUsage());
206
- ASSERT_EQ(baseline_meta_usage, precise_cache->GetUsage());
210
+ if (GetParam() != kAutoHyperClock) {
211
+ // NOTE: AutoHyperClockCache meta usage grows in proportion to lifetime
212
+ // max number of entries.
213
+ ASSERT_EQ(baseline_meta_usage, precise_cache->GetUsage());
214
+ }
207
215
 
208
216
  // make sure the cache will be overloaded
209
217
  for (size_t i = 1; i < kCapacity; ++i) {
@@ -318,7 +326,11 @@ TEST_P(CacheTest, PinnedUsageTest) {
318
326
  cache->EraseUnRefEntries();
319
327
  precise_cache->EraseUnRefEntries();
320
328
  ASSERT_EQ(0, cache->GetUsage());
321
- ASSERT_EQ(baseline_meta_usage, precise_cache->GetUsage());
329
+ if (GetParam() != kAutoHyperClock) {
330
+ // NOTE: AutoHyperClockCache meta usage grows in proportion to lifetime
331
+ // max number of entries.
332
+ ASSERT_EQ(baseline_meta_usage, precise_cache->GetUsage());
333
+ }
322
334
  }
323
335
 
324
336
  TEST_P(CacheTest, HitAndMiss) {
@@ -19,8 +19,10 @@ ChargedCache::ChargedCache(std::shared_ptr<Cache> cache,
19
19
 
20
20
  Status ChargedCache::Insert(const Slice& key, ObjectPtr obj,
21
21
  const CacheItemHelper* helper, size_t charge,
22
- Handle** handle, Priority priority) {
23
- Status s = target_->Insert(key, obj, helper, charge, handle, priority);
22
+ Handle** handle, Priority priority,
23
+ const Slice& compressed_val, CompressionType type) {
24
+ Status s = target_->Insert(key, obj, helper, charge, handle, priority,
25
+ compressed_val, type);
24
26
  if (s.ok()) {
25
27
  // Insert may cause the cache entry eviction if the cache is full. So we
26
28
  // directly call the reservation manager to update the total memory used
@@ -22,9 +22,11 @@ class ChargedCache : public CacheWrapper {
22
22
  ChargedCache(std::shared_ptr<Cache> cache,
23
23
  std::shared_ptr<Cache> block_cache);
24
24
 
25
- Status Insert(const Slice& key, ObjectPtr obj, const CacheItemHelper* helper,
26
- size_t charge, Handle** handle = nullptr,
27
- Priority priority = Priority::LOW) override;
25
+ Status Insert(
26
+ const Slice& key, ObjectPtr obj, const CacheItemHelper* helper,
27
+ size_t charge, Handle** handle = nullptr,
28
+ Priority priority = Priority::LOW, const Slice& compressed_val = Slice(),
29
+ CompressionType type = CompressionType::kNoCompression) override;
28
30
 
29
31
  Cache::Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
30
32
  CreateContext* create_context,