@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
@@ -5,6 +5,8 @@
5
5
 
6
6
  #include "table/block_based/block_cache.h"
7
7
 
8
+ #include "table/block_based/block_based_table_reader.h"
9
+
8
10
  namespace ROCKSDB_NAMESPACE {
9
11
 
10
12
  void BlockCreateContext::Create(std::unique_ptr<Block_kData>* parsed_out,
@@ -96,7 +98,7 @@ const std::array<const Cache::CacheItemHelper*,
96
98
 
97
99
  const Cache::CacheItemHelper* GetCacheItemHelper(
98
100
  BlockType block_type, CacheTier lowest_used_cache_tier) {
99
- if (lowest_used_cache_tier == CacheTier::kNonVolatileBlockTier) {
101
+ if (lowest_used_cache_tier > CacheTier::kVolatileTier) {
100
102
  return kCacheItemFullHelperForBlockType[static_cast<unsigned>(block_type)];
101
103
  } else {
102
104
  return kCacheItemBasicHelperForBlockType[static_cast<unsigned>(block_type)];
@@ -70,24 +70,28 @@ class Block_kMetaIndex : public Block {
70
70
  struct BlockCreateContext : public Cache::CreateContext {
71
71
  BlockCreateContext() {}
72
72
  BlockCreateContext(const BlockBasedTableOptions* _table_options,
73
- Statistics* _statistics, bool _using_zstd,
74
- uint8_t _protection_bytes_per_key,
73
+ const ImmutableOptions* _ioptions, Statistics* _statistics,
74
+ bool _using_zstd, uint8_t _protection_bytes_per_key,
75
75
  const Comparator* _raw_ucmp,
76
76
  bool _index_value_is_full = false,
77
77
  bool _index_has_first_key = false)
78
78
  : table_options(_table_options),
79
+ ioptions(_ioptions),
79
80
  statistics(_statistics),
81
+ raw_ucmp(_raw_ucmp),
80
82
  using_zstd(_using_zstd),
81
83
  protection_bytes_per_key(_protection_bytes_per_key),
82
- raw_ucmp(_raw_ucmp),
83
84
  index_value_is_full(_index_value_is_full),
84
85
  index_has_first_key(_index_has_first_key) {}
85
86
 
86
87
  const BlockBasedTableOptions* table_options = nullptr;
88
+ const ImmutableOptions* ioptions = nullptr;
87
89
  Statistics* statistics = nullptr;
90
+ const Comparator* raw_ucmp = nullptr;
91
+ const UncompressionDict* dict = nullptr;
92
+ uint32_t format_version;
88
93
  bool using_zstd = false;
89
94
  uint8_t protection_bytes_per_key = 0;
90
- const Comparator* raw_ucmp = nullptr;
91
95
  bool index_value_is_full;
92
96
  bool index_has_first_key;
93
97
 
@@ -95,9 +99,24 @@ struct BlockCreateContext : public Cache::CreateContext {
95
99
  template <typename TBlocklike>
96
100
  inline void Create(std::unique_ptr<TBlocklike>* parsed_out,
97
101
  size_t* charge_out, const Slice& data,
98
- MemoryAllocator* alloc) {
99
- Create(parsed_out,
100
- BlockContents(AllocateAndCopyBlock(data, alloc), data.size()));
102
+ CompressionType type, MemoryAllocator* alloc) {
103
+ BlockContents uncompressed_block_contents;
104
+ if (type != CompressionType::kNoCompression) {
105
+ assert(dict != nullptr);
106
+ UncompressionContext context(type);
107
+ UncompressionInfo info(context, *dict, type);
108
+ Status s = UncompressBlockData(
109
+ info, data.data(), data.size(), &uncompressed_block_contents,
110
+ table_options->format_version, *ioptions, alloc);
111
+ if (!s.ok()) {
112
+ parsed_out->reset();
113
+ return;
114
+ }
115
+ } else {
116
+ uncompressed_block_contents =
117
+ BlockContents(AllocateAndCopyBlock(data, alloc), data.size());
118
+ }
119
+ Create(parsed_out, std::move(uncompressed_block_contents));
101
120
  *charge_out = parsed_out->get()->ApproximateMemoryUsage();
102
121
  }
103
122
 
@@ -12,15 +12,13 @@
12
12
  #include "table/block_based/block_based_table_reader.h"
13
13
 
14
14
  namespace ROCKSDB_NAMESPACE {
15
- void BlockPrefetcher::PrefetchIfNeeded(const BlockBasedTable::Rep* rep,
16
- const BlockHandle& handle,
17
- const size_t readahead_size,
18
- bool is_for_compaction,
19
- const bool no_sequential_checking,
20
- const ReadOptions& read_options) {
15
+ void BlockPrefetcher::PrefetchIfNeeded(
16
+ const BlockBasedTable::Rep* rep, const BlockHandle& handle,
17
+ const size_t readahead_size, bool is_for_compaction,
18
+ const bool no_sequential_checking, const ReadOptions& read_options,
19
+ const std::function<void(uint64_t, size_t, size_t&)>& readaheadsize_cb) {
21
20
  const size_t len = BlockBasedTable::BlockSizeWithTrailer(handle);
22
21
  const size_t offset = handle.offset();
23
-
24
22
  if (is_for_compaction) {
25
23
  if (!rep->file->use_direct_io() && compaction_readahead_size_ > 0) {
26
24
  // If FS supports prefetching (readahead_limit_ will be non zero in that
@@ -50,7 +48,7 @@ void BlockPrefetcher::PrefetchIfNeeded(const BlockBasedTable::Rep* rep,
50
48
  compaction_readahead_size_, compaction_readahead_size_,
51
49
  &prefetch_buffer_, /*implicit_auto_readahead=*/false,
52
50
  /*num_file_reads=*/0, /*num_file_reads_for_auto_readahead=*/0,
53
- /*upper_bound_offset=*/0);
51
+ /*upper_bound_offset=*/0, /*readaheadsize_cb=*/nullptr);
54
52
  return;
55
53
  }
56
54
 
@@ -59,7 +57,9 @@ void BlockPrefetcher::PrefetchIfNeeded(const BlockBasedTable::Rep* rep,
59
57
  rep->CreateFilePrefetchBufferIfNotExists(
60
58
  readahead_size, readahead_size, &prefetch_buffer_,
61
59
  /*implicit_auto_readahead=*/false, /*num_file_reads=*/0,
62
- /*num_file_reads_for_auto_readahead=*/0, upper_bound_offset_);
60
+ /*num_file_reads_for_auto_readahead=*/0, upper_bound_offset_,
61
+ readaheadsize_cb,
62
+ /*usage=*/FilePrefetchBufferUsage::kUserScanPrefetch);
63
63
  return;
64
64
  }
65
65
 
@@ -84,7 +84,8 @@ void BlockPrefetcher::PrefetchIfNeeded(const BlockBasedTable::Rep* rep,
84
84
  &prefetch_buffer_, /*implicit_auto_readahead=*/true,
85
85
  /*num_file_reads=*/0,
86
86
  rep->table_options.num_file_reads_for_auto_readahead,
87
- upper_bound_offset_);
87
+ upper_bound_offset_, readaheadsize_cb,
88
+ /*usage=*/FilePrefetchBufferUsage::kUserScanPrefetch);
88
89
  return;
89
90
  }
90
91
 
@@ -115,7 +116,8 @@ void BlockPrefetcher::PrefetchIfNeeded(const BlockBasedTable::Rep* rep,
115
116
  initial_auto_readahead_size_, max_auto_readahead_size,
116
117
  &prefetch_buffer_, /*implicit_auto_readahead=*/true, num_file_reads_,
117
118
  rep->table_options.num_file_reads_for_auto_readahead,
118
- upper_bound_offset_);
119
+ upper_bound_offset_, readaheadsize_cb,
120
+ /*usage=*/FilePrefetchBufferUsage::kUserScanPrefetch);
119
121
  return;
120
122
  }
121
123
 
@@ -137,7 +139,8 @@ void BlockPrefetcher::PrefetchIfNeeded(const BlockBasedTable::Rep* rep,
137
139
  initial_auto_readahead_size_, max_auto_readahead_size,
138
140
  &prefetch_buffer_, /*implicit_auto_readahead=*/true, num_file_reads_,
139
141
  rep->table_options.num_file_reads_for_auto_readahead,
140
- upper_bound_offset_);
142
+ upper_bound_offset_, readaheadsize_cb,
143
+ /*usage=*/FilePrefetchBufferUsage::kUserScanPrefetch);
141
144
  return;
142
145
  }
143
146
 
@@ -18,11 +18,11 @@ class BlockPrefetcher {
18
18
  readahead_size_(initial_auto_readahead_size),
19
19
  initial_auto_readahead_size_(initial_auto_readahead_size) {}
20
20
 
21
- void PrefetchIfNeeded(const BlockBasedTable::Rep* rep,
22
- const BlockHandle& handle, size_t readahead_size,
23
- bool is_for_compaction,
24
- const bool no_sequential_checking,
25
- const ReadOptions& read_options);
21
+ void PrefetchIfNeeded(
22
+ const BlockBasedTable::Rep* rep, const BlockHandle& handle,
23
+ size_t readahead_size, bool is_for_compaction,
24
+ const bool no_sequential_checking, const ReadOptions& read_options,
25
+ const std::function<void(uint64_t, size_t, size_t&)>& readaheadsize_cb);
26
26
  FilePrefetchBuffer* prefetch_buffer() { return prefetch_buffer_.get(); }
27
27
 
28
28
  void UpdateReadPattern(const uint64_t& offset, const size_t& len) {
@@ -55,6 +55,11 @@ class BlockPrefetcher {
55
55
 
56
56
  void SetUpperBoundOffset(uint64_t upper_bound_offset) {
57
57
  upper_bound_offset_ = upper_bound_offset;
58
+ if (prefetch_buffer() != nullptr) {
59
+ // Upper bound can be changed on reseek. So update that in
60
+ // FilePrefetchBuffer.
61
+ prefetch_buffer()->ResetUpperBoundOffset(upper_bound_offset);
62
+ }
58
63
  }
59
64
 
60
65
  private:
@@ -848,9 +848,12 @@ TEST_F(BlockPerKVChecksumTest, EmptyBlock) {
848
848
  Options options = Options();
849
849
  BlockBasedTableOptions tbo;
850
850
  uint8_t protection_bytes_per_key = 8;
851
- BlockCreateContext create_context{
852
- &tbo, nullptr /* statistics */, false /* using_zstd */,
853
- protection_bytes_per_key, options.comparator};
851
+ BlockCreateContext create_context{&tbo,
852
+ nullptr,
853
+ nullptr /* statistics */,
854
+ false /* using_zstd */,
855
+ protection_bytes_per_key,
856
+ options.comparator};
854
857
  create_context.Create(&data_block, std::move(contents));
855
858
  std::unique_ptr<DataBlockIter> biter{data_block->NewDataIterator(
856
859
  options.comparator, kDisableGlobalSequenceNumber)};
@@ -885,9 +888,12 @@ TEST_F(BlockPerKVChecksumTest, InitializeProtectionInfo) {
885
888
  Options options = Options();
886
889
  BlockBasedTableOptions tbo;
887
890
  uint8_t protection_bytes_per_key = 8;
888
- BlockCreateContext create_context{
889
- &tbo, nullptr /* statistics */, false /* using_zstd */,
890
- protection_bytes_per_key, options.comparator};
891
+ BlockCreateContext create_context{&tbo,
892
+ nullptr /* ioptions */,
893
+ nullptr /* statistics */,
894
+ false /* using_zstd */,
895
+ protection_bytes_per_key,
896
+ options.comparator};
891
897
 
892
898
  {
893
899
  std::string invalid_content = "1";
@@ -949,14 +955,19 @@ TEST_F(BlockPerKVChecksumTest, ApproximateMemory) {
949
955
  uint8_t protection_bytes_per_key = 8;
950
956
  BlockCreateContext with_checksum_create_context{
951
957
  &tbo,
958
+ nullptr /* ioptions */,
952
959
  nullptr /* statistics */,
953
960
  false /* using_zstd */,
954
961
  protection_bytes_per_key,
955
962
  options.comparator,
956
963
  true /* index_value_is_full */};
957
- BlockCreateContext create_context{
958
- &tbo, nullptr /* statistics */, false /* using_zstd */,
959
- 0, options.comparator, true /* index_value_is_full */};
964
+ BlockCreateContext create_context{&tbo,
965
+ nullptr /* ioptions */,
966
+ nullptr /* statistics */,
967
+ false /* using_zstd */,
968
+ 0,
969
+ options.comparator,
970
+ true /* index_value_is_full */};
960
971
 
961
972
  {
962
973
  std::unique_ptr<Block_kData> data_block;
@@ -1045,8 +1056,11 @@ class DataBlockKVChecksumTest
1045
1056
  std::vector<std::string> &keys, std::vector<std::string> &values,
1046
1057
  int num_record) {
1047
1058
  BlockBasedTableOptions tbo;
1048
- BlockCreateContext create_context{&tbo, nullptr /* statistics */,
1049
- false /* using_zstd */, GetChecksumLen(),
1059
+ BlockCreateContext create_context{&tbo,
1060
+ nullptr /* statistics */,
1061
+ nullptr /* ioptions */,
1062
+ false /* using_zstd */,
1063
+ GetChecksumLen(),
1050
1064
  Options().comparator};
1051
1065
  builder_ = std::make_unique<BlockBuilder>(
1052
1066
  static_cast<int>(GetRestartInterval()),
@@ -1172,6 +1186,7 @@ class IndexBlockKVChecksumTest
1172
1186
  uint8_t protection_bytes_per_key = GetChecksumLen();
1173
1187
  BlockCreateContext create_context{
1174
1188
  &tbo,
1189
+ nullptr /* ioptions */,
1175
1190
  nullptr /* statistics */,
1176
1191
  false /* _using_zstd */,
1177
1192
  protection_bytes_per_key,
@@ -1312,9 +1327,12 @@ class MetaIndexBlockKVChecksumTest
1312
1327
  Options options = Options();
1313
1328
  BlockBasedTableOptions tbo;
1314
1329
  uint8_t protection_bytes_per_key = GetChecksumLen();
1315
- BlockCreateContext create_context{
1316
- &tbo, nullptr /* statistics */, false /* using_zstd */,
1317
- protection_bytes_per_key, options.comparator};
1330
+ BlockCreateContext create_context{&tbo,
1331
+ nullptr /* ioptions */,
1332
+ nullptr /* statistics */,
1333
+ false /* using_zstd */,
1334
+ protection_bytes_per_key,
1335
+ options.comparator};
1318
1336
  builder_ =
1319
1337
  std::make_unique<BlockBuilder>(static_cast<int>(GetRestartInterval()));
1320
1338
  // add a bunch of records to a block
@@ -1344,9 +1362,12 @@ TEST_P(MetaIndexBlockKVChecksumTest, ChecksumConstructionAndVerification) {
1344
1362
  Options options = Options();
1345
1363
  BlockBasedTableOptions tbo;
1346
1364
  uint8_t protection_bytes_per_key = GetChecksumLen();
1347
- BlockCreateContext create_context{
1348
- &tbo, nullptr /* statistics */, false /* using_zstd */,
1349
- protection_bytes_per_key, options.comparator};
1365
+ BlockCreateContext create_context{&tbo,
1366
+ nullptr /* ioptions */,
1367
+ nullptr /* statistics */,
1368
+ false /* using_zstd */,
1369
+ protection_bytes_per_key,
1370
+ options.comparator};
1350
1371
  std::vector<int> num_restart_intervals = {1, 16};
1351
1372
  for (const auto num_restart_interval : num_restart_intervals) {
1352
1373
  const int kNumRecords = num_restart_interval * GetRestartInterval();
@@ -1680,4 +1701,4 @@ int main(int argc, char **argv) {
1680
1701
  ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
1681
1702
  ::testing::InitGoogleTest(&argc, argv);
1682
1703
  return RUN_ALL_TESTS();
1683
- }
1704
+ }
@@ -28,12 +28,12 @@ Status FilterBlockReaderCommon<TBlocklike>::ReadFilterBlock(
28
28
  const BlockBasedTable::Rep* const rep = table->get_rep();
29
29
  assert(rep);
30
30
 
31
- const Status s =
32
- table->RetrieveBlock(prefetch_buffer, read_options, rep->filter_handle,
33
- UncompressionDict::GetEmptyDict(), filter_block,
34
- get_context, lookup_context,
35
- /* for_compaction */ false, use_cache,
36
- /* async_read */ false);
31
+ const Status s = table->RetrieveBlock(
32
+ prefetch_buffer, read_options, rep->filter_handle,
33
+ UncompressionDict::GetEmptyDict(), filter_block, get_context,
34
+ lookup_context,
35
+ /* for_compaction */ false, use_cache,
36
+ /* async_read */ false, /* use_block_cache_for_lookup */ true);
37
37
 
38
38
  return s;
39
39
  }
@@ -10,6 +10,7 @@
10
10
  #include "rocksdb/filter_policy.h"
11
11
 
12
12
  #include <array>
13
+ #include <atomic>
13
14
  #include <climits>
14
15
  #include <cstring>
15
16
  #include <deque>
@@ -24,6 +25,7 @@
24
25
  #include "rocksdb/rocksdb_namespace.h"
25
26
  #include "rocksdb/slice.h"
26
27
  #include "rocksdb/utilities/object_registry.h"
28
+ #include "rocksdb/utilities/options_type.h"
27
29
  #include "table/block_based/block_based_table_reader.h"
28
30
  #include "table/block_based/filter_policy_internal.h"
29
31
  #include "table/block_based/full_filter_block.h"
@@ -1730,7 +1732,15 @@ const FilterPolicy* NewBloomFilterPolicy(double bits_per_key,
1730
1732
  RibbonFilterPolicy::RibbonFilterPolicy(double bloom_equivalent_bits_per_key,
1731
1733
  int bloom_before_level)
1732
1734
  : BloomLikeFilterPolicy(bloom_equivalent_bits_per_key),
1733
- bloom_before_level_(bloom_before_level) {}
1735
+ bloom_before_level_(bloom_before_level) {
1736
+ static const std::unordered_map<std::string, OptionTypeInfo> type_info = {
1737
+ {"bloom_before_level",
1738
+ {offsetof(class RibbonFilterPolicy, bloom_before_level_),
1739
+ OptionType::kAtomicInt, OptionVerificationType::kNormal,
1740
+ OptionTypeFlags::kMutable}},
1741
+ };
1742
+ RegisterOptions(this, &type_info);
1743
+ }
1734
1744
 
1735
1745
  FilterBitsBuilder* RibbonFilterPolicy::GetBuilderWithContext(
1736
1746
  const FilterBuildingContext& context) const {
@@ -1738,31 +1748,38 @@ FilterBitsBuilder* RibbonFilterPolicy::GetBuilderWithContext(
1738
1748
  // "No filter" special case
1739
1749
  return nullptr;
1740
1750
  }
1741
- // Treat unknown same as bottommost
1742
- int levelish = INT_MAX;
1743
-
1744
- switch (context.compaction_style) {
1745
- case kCompactionStyleLevel:
1746
- case kCompactionStyleUniversal: {
1747
- if (context.reason == TableFileCreationReason::kFlush) {
1748
- // Treat flush as level -1
1749
- assert(context.level_at_creation == 0);
1750
- levelish = -1;
1751
- } else if (context.level_at_creation == -1) {
1752
- // Unknown level
1753
- assert(levelish == INT_MAX);
1754
- } else {
1755
- levelish = context.level_at_creation;
1751
+ // Treat unknown same as bottommost, INT_MAX - 1.
1752
+ // INT_MAX is reserved for "always use Bloom".
1753
+ int levelish = INT_MAX - 1;
1754
+
1755
+ int bloom_before_level = bloom_before_level_.load(std::memory_order_relaxed);
1756
+ if (bloom_before_level < INT_MAX) {
1757
+ switch (context.compaction_style) {
1758
+ case kCompactionStyleLevel:
1759
+ case kCompactionStyleUniversal: {
1760
+ if (context.reason == TableFileCreationReason::kFlush) {
1761
+ // Treat flush as level -1
1762
+ assert(context.level_at_creation == 0);
1763
+ levelish = -1;
1764
+ } else if (context.level_at_creation == -1) {
1765
+ // Unknown level
1766
+ assert(levelish == INT_MAX - 1);
1767
+ } else {
1768
+ levelish = context.level_at_creation;
1769
+ }
1770
+ break;
1756
1771
  }
1757
- break;
1772
+ case kCompactionStyleFIFO:
1773
+ case kCompactionStyleNone:
1774
+ // Treat as bottommost
1775
+ assert(levelish == INT_MAX - 1);
1776
+ break;
1758
1777
  }
1759
- case kCompactionStyleFIFO:
1760
- case kCompactionStyleNone:
1761
- // Treat as bottommost
1762
- assert(levelish == INT_MAX);
1763
- break;
1778
+ } else {
1779
+ // INT_MAX == always Bloom
1780
+ assert(levelish < bloom_before_level);
1764
1781
  }
1765
- if (levelish < bloom_before_level_) {
1782
+ if (levelish < bloom_before_level) {
1766
1783
  return GetFastLocalBloomBuilderWithContext(context);
1767
1784
  } else {
1768
1785
  return GetStandard128RibbonBuilderWithContext(context);
@@ -1771,14 +1788,15 @@ FilterBitsBuilder* RibbonFilterPolicy::GetBuilderWithContext(
1771
1788
 
1772
1789
  const char* RibbonFilterPolicy::kClassName() { return "ribbonfilter"; }
1773
1790
  const char* RibbonFilterPolicy::kNickName() { return "rocksdb.RibbonFilter"; }
1791
+ const char* RibbonFilterPolicy::kName() { return "RibbonFilterPolicy"; }
1774
1792
 
1775
1793
  std::string RibbonFilterPolicy::GetId() const {
1776
1794
  return BloomLikeFilterPolicy::GetId() + ":" +
1777
- std::to_string(bloom_before_level_);
1795
+ std::to_string(bloom_before_level_.load(std::memory_order_acquire));
1778
1796
  }
1779
1797
 
1780
- const FilterPolicy* NewRibbonFilterPolicy(double bloom_equivalent_bits_per_key,
1781
- int bloom_before_level) {
1798
+ FilterPolicy* NewRibbonFilterPolicy(double bloom_equivalent_bits_per_key,
1799
+ int bloom_before_level) {
1782
1800
  return new RibbonFilterPolicy(bloom_equivalent_bits_per_key,
1783
1801
  bloom_before_level);
1784
1802
  }
@@ -290,10 +290,11 @@ class RibbonFilterPolicy : public BloomLikeFilterPolicy {
290
290
  const char* Name() const override { return kClassName(); }
291
291
  static const char* kNickName();
292
292
  const char* NickName() const override { return kNickName(); }
293
+ static const char* kName();
293
294
  std::string GetId() const override;
294
295
 
295
296
  private:
296
- const int bloom_before_level_;
297
+ std::atomic<int> bloom_before_level_;
297
298
  };
298
299
 
299
300
  // For testing only, but always constructable with internal names
@@ -29,7 +29,7 @@ Status BlockBasedTable::IndexReaderCommon::ReadIndexBlock(
29
29
  prefetch_buffer, read_options, rep->index_handle,
30
30
  UncompressionDict::GetEmptyDict(), &index_block->As<Block_kIndex>(),
31
31
  get_context, lookup_context, /* for_compaction */ false, use_cache,
32
- /* async_read */ false);
32
+ /* async_read */ false, /* use_block_cache_for_lookup */ true);
33
33
 
34
34
  return s;
35
35
  }
@@ -317,12 +317,12 @@ Status PartitionedFilterBlockReader::GetFilterPartitionBlock(
317
317
  read_options.read_tier = kBlockCacheTier;
318
318
  }
319
319
 
320
- const Status s =
321
- table()->RetrieveBlock(prefetch_buffer, read_options, fltr_blk_handle,
322
- UncompressionDict::GetEmptyDict(), filter_block,
323
- get_context, lookup_context,
324
- /* for_compaction */ false, /* use_cache */ true,
325
- /* async_read */ false);
320
+ const Status s = table()->RetrieveBlock(
321
+ prefetch_buffer, read_options, fltr_blk_handle,
322
+ UncompressionDict::GetEmptyDict(), filter_block, get_context,
323
+ lookup_context,
324
+ /* for_compaction */ false, /* use_cache */ true,
325
+ /* async_read */ false, /* use_block_cache_for_lookup */ true);
326
326
 
327
327
  return s;
328
328
  }
@@ -498,7 +498,8 @@ Status PartitionedFilterBlockReader::CacheDependencies(
498
498
  rep->CreateFilePrefetchBuffer(
499
499
  0, 0, &prefetch_buffer, false /* Implicit autoreadahead */,
500
500
  0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/,
501
- /*upper_bound_offset*/ 0);
501
+ /*upper_bound_offset*/ 0, /*readaheadsize_cb*/ nullptr,
502
+ /*usage=*/FilePrefetchBufferUsage::kUnknown);
502
503
 
503
504
  IOOptions opts;
504
505
  s = rep->file->PrepareIOOptions(ro, opts);
@@ -521,7 +522,8 @@ Status PartitionedFilterBlockReader::CacheDependencies(
521
522
  prefetch_buffer ? prefetch_buffer.get() : tail_prefetch_buffer, ro,
522
523
  handle, UncompressionDict::GetEmptyDict(),
523
524
  /* for_compaction */ false, &block, nullptr /* get_context */,
524
- &lookup_context, nullptr /* contents */, false);
525
+ &lookup_context, nullptr /* contents */, false,
526
+ /* use_block_cache_for_lookup */ true);
525
527
  if (!s.ok()) {
526
528
  return s;
527
529
  }
@@ -91,14 +91,16 @@ void PartitionedIndexIterator::InitPartitionedIndexBlock() {
91
91
  // Enabled from the very first IO when ReadOptions.readahead_size is set.
92
92
  block_prefetcher_.PrefetchIfNeeded(
93
93
  rep, partitioned_index_handle, read_options_.readahead_size,
94
- is_for_compaction, /*no_sequential_checking=*/false, read_options_);
94
+ is_for_compaction, /*no_sequential_checking=*/false, read_options_,
95
+ /*readaheadsize_cb=*/nullptr);
95
96
  Status s;
96
97
  table_->NewDataBlockIterator<IndexBlockIter>(
97
98
  read_options_, partitioned_index_handle, &block_iter_,
98
99
  BlockType::kIndex,
99
100
  /*get_context=*/nullptr, &lookup_context_,
100
101
  block_prefetcher_.prefetch_buffer(),
101
- /*for_compaction=*/is_for_compaction, /*async_read=*/false, s);
102
+ /*for_compaction=*/is_for_compaction, /*async_read=*/false, s,
103
+ /*use_block_cache_for_lookup=*/true);
102
104
  block_iter_points_to_real_block_ = true;
103
105
  // We could check upper bound here but it is complicated to reason about
104
106
  // upper bound in index iterator. On the other than, in large scans, index
@@ -170,7 +170,8 @@ Status PartitionIndexReader::CacheDependencies(
170
170
  rep->CreateFilePrefetchBuffer(
171
171
  0, 0, &prefetch_buffer, false /*Implicit auto readahead*/,
172
172
  0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/,
173
- /*upper_bound_offset*/ 0);
173
+ /*upper_bound_offset*/ 0, /*readaheadsize_cb*/ nullptr,
174
+ /*usage=*/FilePrefetchBufferUsage::kUnknown);
174
175
  IOOptions opts;
175
176
  {
176
177
  Status s = rep->file->PrepareIOOptions(ro, opts);
@@ -200,7 +201,7 @@ Status PartitionIndexReader::CacheDependencies(
200
201
  handle, UncompressionDict::GetEmptyDict(),
201
202
  /*for_compaction=*/false, &block.As<Block_kIndex>(),
202
203
  /*get_context=*/nullptr, &lookup_context, /*contents=*/nullptr,
203
- /*async_read=*/false);
204
+ /*async_read=*/false, /*use_block_cache_for_lookup=*/true);
204
205
 
205
206
  if (!s.ok()) {
206
207
  return s;
@@ -63,7 +63,7 @@ Status UncompressionDictReader::ReadUncompressionDictionary(
63
63
  UncompressionDict::GetEmptyDict(), uncompression_dict, get_context,
64
64
  lookup_context,
65
65
  /* for_compaction */ false, use_cache,
66
- /* async_read */ false);
66
+ /* async_read */ false, /* use_block_cache_for_lookup */ true);
67
67
 
68
68
  if (!s.ok()) {
69
69
  ROCKS_LOG_WARN(
@@ -336,9 +336,11 @@ IOStatus BlockFetcher::ReadBlockContents() {
336
336
  #ifndef NDEBUG
337
337
  num_heap_buf_memcpy_++;
338
338
  #endif
339
- compression_type_ = kNoCompression;
339
+ // Save the compressed block without trailer
340
+ slice_ = Slice(slice_.data(), block_size_);
340
341
  } else {
341
342
  GetBlockContents();
343
+ slice_ = Slice();
342
344
  }
343
345
 
344
346
  InsertUncompressedBlockToPersistentCacheIfNeeded();
@@ -387,7 +389,6 @@ IOStatus BlockFetcher::ReadAsyncBlockContents() {
387
389
  #ifndef NDEBUG
388
390
  num_heap_buf_memcpy_++;
389
391
  #endif
390
- compression_type_ = kNoCompression;
391
392
  } else {
392
393
  GetBlockContents();
393
394
  }
@@ -79,6 +79,10 @@ class BlockFetcher {
79
79
  inline size_t GetBlockSizeWithTrailer() const {
80
80
  return block_size_with_trailer_;
81
81
  }
82
+ inline Slice& GetCompressedBlock() {
83
+ assert(compression_type_ != kNoCompression);
84
+ return slice_;
85
+ }
82
86
 
83
87
  #ifndef NDEBUG
84
88
  int TEST_GetNumStackBufMemcpy() const { return num_stack_buf_memcpy_; }
@@ -299,7 +299,7 @@ class BlockFetcherTest : public testing::Test {
299
299
  MemoryAllocator* heap_buf_allocator,
300
300
  MemoryAllocator* compressed_buf_allocator,
301
301
  BlockContents* contents, MemcpyStats* stats,
302
- CompressionType* compresstion_type) {
302
+ CompressionType* compression_type) {
303
303
  ImmutableOptions ioptions(options_);
304
304
  ReadOptions roptions;
305
305
  PersistentCacheOptions persistent_cache_options;
@@ -318,7 +318,11 @@ class BlockFetcherTest : public testing::Test {
318
318
  stats->num_compressed_buf_memcpy =
319
319
  fetcher->TEST_GetNumCompressedBufMemcpy();
320
320
 
321
- *compresstion_type = fetcher->get_compression_type();
321
+ if (do_uncompress) {
322
+ *compression_type = kNoCompression;
323
+ } else {
324
+ *compression_type = fetcher->get_compression_type();
325
+ }
322
326
  }
323
327
 
324
328
  // NOTE: expected_compression_type is the expected compression