@nxtedition/rocksdb 8.2.0 → 8.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/binding.cc +3 -3
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
  3. package/deps/rocksdb/rocksdb/Makefile +10 -5
  4. package/deps/rocksdb/rocksdb/TARGETS +8 -345
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
  15. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
  17. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
  25. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
  26. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
  29. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
  30. package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
  31. package/deps/rocksdb/rocksdb/db/builder.h +2 -2
  32. package/deps/rocksdb/rocksdb/db/c.cc +76 -5
  33. package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
  34. package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
  50. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
  51. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  52. package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
  53. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
  54. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
  55. package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
  58. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
  71. package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
  72. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
  73. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
  74. package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
  75. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
  76. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
  77. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
  78. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
  79. package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
  80. package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
  81. package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
  82. package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
  83. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
  84. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
  85. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
  86. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
  87. package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
  88. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
  90. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
  91. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
  92. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
  93. package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
  94. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
  95. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
  96. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
  97. package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
  98. package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
  99. package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
  100. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
  101. package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
  102. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
  103. package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
  104. package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
  105. package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
  106. package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
  107. package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
  108. package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
  109. package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
  110. package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
  111. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
  112. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
  113. package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
  114. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
  115. package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
  116. package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
  117. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
  118. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
  119. package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
  120. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  121. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
  122. package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
  123. package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
  124. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
  125. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
  126. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
  127. package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
  128. package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
  129. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
  130. package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
  131. package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
  144. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
  145. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
  146. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
  149. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
  150. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
  151. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
  152. package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
  153. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  154. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
  155. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
  156. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
  157. package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
  158. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  159. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
  160. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
  161. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
  162. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
  163. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
  164. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
  165. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
  166. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
  167. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
  168. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
  169. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
  170. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
  171. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
  173. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
  174. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
  175. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
  176. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
  177. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
  178. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
  179. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
  184. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
  186. package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
  188. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
  189. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
  192. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
  193. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  194. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
  195. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
  196. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
  197. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
  198. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
  199. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
  200. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
  201. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  202. package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
  203. package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
  204. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
  205. package/deps/rocksdb/rocksdb/options/options.cc +12 -53
  206. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
  207. package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
  208. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
  209. package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
  210. package/deps/rocksdb/rocksdb/port/lang.h +27 -0
  211. package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
  212. package/deps/rocksdb/rocksdb/src.mk +2 -0
  213. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
  214. package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
  215. package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
  216. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
  217. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
  218. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
  219. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
  220. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
  221. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
  222. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
  223. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
  224. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
  225. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
  226. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
  228. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
  229. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
  230. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
  232. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
  233. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
  234. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
  235. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
  236. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
  237. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
  238. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
  239. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
  240. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
  241. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
  242. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
  243. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
  244. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
  245. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
  247. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
  248. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
  249. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
  250. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
  251. package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
  252. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
  253. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
  254. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
  255. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
  256. package/deps/rocksdb/rocksdb/table/format.cc +4 -4
  257. package/deps/rocksdb/rocksdb/table/format.h +1 -1
  258. package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
  259. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
  260. package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
  261. package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
  262. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
  264. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
  266. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
  267. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
  268. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
  269. package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
  270. package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
  271. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
  272. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
  275. package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
  277. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
  278. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
  279. package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
  280. package/deps/rocksdb/rocksdb/util/compression.h +1 -1
  281. package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
  282. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
  283. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
  284. package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
  285. package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
  286. package/deps/rocksdb/rocksdb/util/math.h +12 -7
  287. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
  288. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
  289. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
  290. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
  291. package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
  292. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
  293. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  294. package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
  295. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
  296. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
  297. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
  298. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
  299. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
  300. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
  301. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
  302. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
  303. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
  304. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
  305. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
  306. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
  307. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
  308. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
  309. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
  310. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
  311. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
  312. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
  313. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
  314. package/package.json +1 -1
  315. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  316. package/prebuilds/linux-x64/node.napi.node +0 -0
  317. /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
  318. /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
  319. /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
  320. /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
  321. /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
@@ -220,45 +220,43 @@ std::unique_ptr<FilterBlockReader> PartitionedFilterBlockReader::Create(
220
220
  bool PartitionedFilterBlockReader::KeyMayMatch(
221
221
  const Slice& key, const bool no_io, const Slice* const const_ikey_ptr,
222
222
  GetContext* get_context, BlockCacheLookupContext* lookup_context,
223
- Env::IOPriority rate_limiter_priority) {
223
+ const ReadOptions& read_options) {
224
224
  assert(const_ikey_ptr != nullptr);
225
225
  if (!whole_key_filtering()) {
226
226
  return true;
227
227
  }
228
228
 
229
229
  return MayMatch(key, no_io, const_ikey_ptr, get_context, lookup_context,
230
- rate_limiter_priority, &FullFilterBlockReader::KeyMayMatch);
230
+ read_options, &FullFilterBlockReader::KeyMayMatch);
231
231
  }
232
232
 
233
233
  void PartitionedFilterBlockReader::KeysMayMatch(
234
234
  MultiGetRange* range, const bool no_io,
235
- BlockCacheLookupContext* lookup_context,
236
- Env::IOPriority rate_limiter_priority) {
235
+ BlockCacheLookupContext* lookup_context, const ReadOptions& read_options) {
237
236
  if (!whole_key_filtering()) {
238
237
  return; // Any/all may match
239
238
  }
240
239
 
241
- MayMatch(range, nullptr, no_io, lookup_context, rate_limiter_priority,
240
+ MayMatch(range, nullptr, no_io, lookup_context, read_options,
242
241
  &FullFilterBlockReader::KeysMayMatch2);
243
242
  }
244
243
 
245
244
  bool PartitionedFilterBlockReader::PrefixMayMatch(
246
245
  const Slice& prefix, const bool no_io, const Slice* const const_ikey_ptr,
247
246
  GetContext* get_context, BlockCacheLookupContext* lookup_context,
248
- Env::IOPriority rate_limiter_priority) {
247
+ const ReadOptions& read_options) {
249
248
  assert(const_ikey_ptr != nullptr);
250
249
  return MayMatch(prefix, no_io, const_ikey_ptr, get_context, lookup_context,
251
- rate_limiter_priority,
252
- &FullFilterBlockReader::PrefixMayMatch);
250
+ read_options, &FullFilterBlockReader::PrefixMayMatch);
253
251
  }
254
252
 
255
253
  void PartitionedFilterBlockReader::PrefixesMayMatch(
256
254
  MultiGetRange* range, const SliceTransform* prefix_extractor,
257
255
  const bool no_io, BlockCacheLookupContext* lookup_context,
258
- Env::IOPriority rate_limiter_priority) {
256
+ const ReadOptions& read_options) {
259
257
  assert(prefix_extractor);
260
- MayMatch(range, prefix_extractor, no_io, lookup_context,
261
- rate_limiter_priority, &FullFilterBlockReader::PrefixesMayMatch);
258
+ MayMatch(range, prefix_extractor, no_io, lookup_context, read_options,
259
+ &FullFilterBlockReader::PrefixesMayMatch);
262
260
  }
263
261
 
264
262
  BlockHandle PartitionedFilterBlockReader::GetFilterPartitionHandle(
@@ -290,8 +288,7 @@ BlockHandle PartitionedFilterBlockReader::GetFilterPartitionHandle(
290
288
  Status PartitionedFilterBlockReader::GetFilterPartitionBlock(
291
289
  FilePrefetchBuffer* prefetch_buffer, const BlockHandle& fltr_blk_handle,
292
290
  bool no_io, GetContext* get_context,
293
- BlockCacheLookupContext* lookup_context,
294
- Env::IOPriority rate_limiter_priority,
291
+ BlockCacheLookupContext* lookup_context, const ReadOptions& _read_options,
295
292
  CachableEntry<ParsedFullFilterBlock>* filter_block) const {
296
293
  assert(table());
297
294
  assert(filter_block);
@@ -307,8 +304,7 @@ Status PartitionedFilterBlockReader::GetFilterPartitionBlock(
307
304
  }
308
305
  }
309
306
 
310
- ReadOptions read_options;
311
- read_options.rate_limiter_priority = rate_limiter_priority;
307
+ ReadOptions read_options = _read_options;
312
308
  if (no_io) {
313
309
  read_options.read_tier = kBlockCacheTier;
314
310
  }
@@ -326,11 +322,10 @@ Status PartitionedFilterBlockReader::GetFilterPartitionBlock(
326
322
  bool PartitionedFilterBlockReader::MayMatch(
327
323
  const Slice& slice, bool no_io, const Slice* const_ikey_ptr,
328
324
  GetContext* get_context, BlockCacheLookupContext* lookup_context,
329
- Env::IOPriority rate_limiter_priority,
330
- FilterFunction filter_function) const {
325
+ const ReadOptions& read_options, FilterFunction filter_function) const {
331
326
  CachableEntry<Block_kFilterPartitionIndex> filter_block;
332
327
  Status s = GetOrReadFilterBlock(no_io, get_context, lookup_context,
333
- &filter_block, rate_limiter_priority);
328
+ &filter_block, read_options);
334
329
  if (UNLIKELY(!s.ok())) {
335
330
  IGNORE_STATUS_IF_ERROR(s);
336
331
  return true;
@@ -347,8 +342,8 @@ bool PartitionedFilterBlockReader::MayMatch(
347
342
 
348
343
  CachableEntry<ParsedFullFilterBlock> filter_partition_block;
349
344
  s = GetFilterPartitionBlock(nullptr /* prefetch_buffer */, filter_handle,
350
- no_io, get_context, lookup_context,
351
- rate_limiter_priority, &filter_partition_block);
345
+ no_io, get_context, lookup_context, read_options,
346
+ &filter_partition_block);
352
347
  if (UNLIKELY(!s.ok())) {
353
348
  IGNORE_STATUS_IF_ERROR(s);
354
349
  return true;
@@ -356,20 +351,17 @@ bool PartitionedFilterBlockReader::MayMatch(
356
351
 
357
352
  FullFilterBlockReader filter_partition(table(),
358
353
  std::move(filter_partition_block));
359
- return (filter_partition.*filter_function)(slice, no_io, const_ikey_ptr,
360
- get_context, lookup_context,
361
- rate_limiter_priority);
354
+ return (filter_partition.*filter_function)(
355
+ slice, no_io, const_ikey_ptr, get_context, lookup_context, read_options);
362
356
  }
363
357
 
364
358
  void PartitionedFilterBlockReader::MayMatch(
365
359
  MultiGetRange* range, const SliceTransform* prefix_extractor, bool no_io,
366
- BlockCacheLookupContext* lookup_context,
367
- Env::IOPriority rate_limiter_priority,
360
+ BlockCacheLookupContext* lookup_context, const ReadOptions& read_options,
368
361
  FilterManyFunction filter_function) const {
369
362
  CachableEntry<Block_kFilterPartitionIndex> filter_block;
370
- Status s =
371
- GetOrReadFilterBlock(no_io, range->begin()->get_context, lookup_context,
372
- &filter_block, rate_limiter_priority);
363
+ Status s = GetOrReadFilterBlock(no_io, range->begin()->get_context,
364
+ lookup_context, &filter_block, read_options);
373
365
  if (UNLIKELY(!s.ok())) {
374
366
  IGNORE_STATUS_IF_ERROR(s);
375
367
  return; // Any/all may match
@@ -393,7 +385,7 @@ void PartitionedFilterBlockReader::MayMatch(
393
385
  this_filter_handle != prev_filter_handle) {
394
386
  MultiGetRange subrange(*range, start_iter_same_handle, iter);
395
387
  MayMatchPartition(&subrange, prefix_extractor, prev_filter_handle, no_io,
396
- lookup_context, rate_limiter_priority, filter_function);
388
+ lookup_context, read_options, filter_function);
397
389
  range->AddSkipsFrom(subrange);
398
390
  start_iter_same_handle = iter;
399
391
  }
@@ -409,7 +401,7 @@ void PartitionedFilterBlockReader::MayMatch(
409
401
  if (!prev_filter_handle.IsNull()) {
410
402
  MultiGetRange subrange(*range, start_iter_same_handle, range->end());
411
403
  MayMatchPartition(&subrange, prefix_extractor, prev_filter_handle, no_io,
412
- lookup_context, rate_limiter_priority, filter_function);
404
+ lookup_context, read_options, filter_function);
413
405
  range->AddSkipsFrom(subrange);
414
406
  }
415
407
  }
@@ -417,13 +409,12 @@ void PartitionedFilterBlockReader::MayMatch(
417
409
  void PartitionedFilterBlockReader::MayMatchPartition(
418
410
  MultiGetRange* range, const SliceTransform* prefix_extractor,
419
411
  BlockHandle filter_handle, bool no_io,
420
- BlockCacheLookupContext* lookup_context,
421
- Env::IOPriority rate_limiter_priority,
412
+ BlockCacheLookupContext* lookup_context, const ReadOptions& read_options,
422
413
  FilterManyFunction filter_function) const {
423
414
  CachableEntry<ParsedFullFilterBlock> filter_partition_block;
424
415
  Status s = GetFilterPartitionBlock(
425
416
  nullptr /* prefetch_buffer */, filter_handle, no_io,
426
- range->begin()->get_context, lookup_context, rate_limiter_priority,
417
+ range->begin()->get_context, lookup_context, read_options,
427
418
  &filter_partition_block);
428
419
  if (UNLIKELY(!s.ok())) {
429
420
  IGNORE_STATUS_IF_ERROR(s);
@@ -433,7 +424,7 @@ void PartitionedFilterBlockReader::MayMatchPartition(
433
424
  FullFilterBlockReader filter_partition(table(),
434
425
  std::move(filter_partition_block));
435
426
  (filter_partition.*filter_function)(range, prefix_extractor, no_io,
436
- lookup_context, rate_limiter_priority);
427
+ lookup_context, read_options);
437
428
  }
438
429
 
439
430
  size_t PartitionedFilterBlockReader::ApproximateMemoryUsage() const {
@@ -448,8 +439,8 @@ size_t PartitionedFilterBlockReader::ApproximateMemoryUsage() const {
448
439
  }
449
440
 
450
441
  // TODO(myabandeh): merge this with the same function in IndexReader
451
- Status PartitionedFilterBlockReader::CacheDependencies(const ReadOptions& ro,
452
- bool pin) {
442
+ Status PartitionedFilterBlockReader::CacheDependencies(
443
+ const ReadOptions& ro, bool pin, FilePrefetchBuffer* tail_prefetch_buffer) {
453
444
  assert(table());
454
445
 
455
446
  const BlockBasedTable::Rep* const rep = table()->get_rep();
@@ -460,8 +451,7 @@ Status PartitionedFilterBlockReader::CacheDependencies(const ReadOptions& ro,
460
451
  CachableEntry<Block_kFilterPartitionIndex> filter_block;
461
452
 
462
453
  Status s = GetOrReadFilterBlock(false /* no_io */, nullptr /* get_context */,
463
- &lookup_context, &filter_block,
464
- ro.rate_limiter_priority);
454
+ &lookup_context, &filter_block, ro);
465
455
  if (!s.ok()) {
466
456
  ROCKS_LOG_ERROR(rep->ioptions.logger,
467
457
  "Error retrieving top-level filter block while trying to "
@@ -494,21 +484,23 @@ Status PartitionedFilterBlockReader::CacheDependencies(const ReadOptions& ro,
494
484
  handle.offset() + handle.size() + BlockBasedTable::kBlockTrailerSize;
495
485
  uint64_t prefetch_len = last_off - prefetch_off;
496
486
  std::unique_ptr<FilePrefetchBuffer> prefetch_buffer;
497
- rep->CreateFilePrefetchBuffer(
498
- 0, 0, &prefetch_buffer, false /* Implicit autoreadahead */,
499
- 0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/);
500
-
501
- IOOptions opts;
502
- s = rep->file->PrepareIOOptions(ro, opts);
503
- if (s.ok()) {
504
- s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
505
- static_cast<size_t>(prefetch_len),
506
- ro.rate_limiter_priority);
507
- }
508
- if (!s.ok()) {
509
- return s;
487
+ if (tail_prefetch_buffer == nullptr || !tail_prefetch_buffer->Enabled() ||
488
+ tail_prefetch_buffer->GetPrefetchOffset() > prefetch_off) {
489
+ rep->CreateFilePrefetchBuffer(
490
+ 0, 0, &prefetch_buffer, false /* Implicit autoreadahead */,
491
+ 0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/);
492
+
493
+ IOOptions opts;
494
+ s = rep->file->PrepareIOOptions(ro, opts);
495
+ if (s.ok()) {
496
+ s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
497
+ static_cast<size_t>(prefetch_len),
498
+ ro.rate_limiter_priority);
499
+ }
500
+ if (!s.ok()) {
501
+ return s;
502
+ }
510
503
  }
511
-
512
504
  // After prefetch, read the partitions one by one
513
505
  for (biter.SeekToFirst(); biter.Valid(); biter.Next()) {
514
506
  handle = biter.value().handle;
@@ -517,7 +509,8 @@ Status PartitionedFilterBlockReader::CacheDependencies(const ReadOptions& ro,
517
509
  // TODO: Support counter batch update for partitioned index and
518
510
  // filter blocks
519
511
  s = table()->MaybeReadBlockAndLoadToCache(
520
- prefetch_buffer.get(), ro, handle, UncompressionDict::GetEmptyDict(),
512
+ prefetch_buffer ? prefetch_buffer.get() : tail_prefetch_buffer, ro,
513
+ handle, UncompressionDict::GetEmptyDict(),
521
514
  /* for_compaction */ false, &block, nullptr /* get_context */,
522
515
  &lookup_context, nullptr /* contents */, false);
523
516
  if (!s.ok()) {
@@ -115,21 +115,21 @@ class PartitionedFilterBlockReader
115
115
  bool KeyMayMatch(const Slice& key, const bool no_io,
116
116
  const Slice* const const_ikey_ptr, GetContext* get_context,
117
117
  BlockCacheLookupContext* lookup_context,
118
- Env::IOPriority rate_limiter_priority) override;
118
+ const ReadOptions& read_options) override;
119
119
  void KeysMayMatch(MultiGetRange* range, const bool no_io,
120
120
  BlockCacheLookupContext* lookup_context,
121
- Env::IOPriority rate_limiter_priority) override;
121
+ const ReadOptions& read_options) override;
122
122
 
123
123
  bool PrefixMayMatch(const Slice& prefix, const bool no_io,
124
124
  const Slice* const const_ikey_ptr,
125
125
  GetContext* get_context,
126
126
  BlockCacheLookupContext* lookup_context,
127
- Env::IOPriority rate_limiter_priority) override;
127
+ const ReadOptions& read_options) override;
128
128
  void PrefixesMayMatch(MultiGetRange* range,
129
129
  const SliceTransform* prefix_extractor,
130
130
  const bool no_io,
131
131
  BlockCacheLookupContext* lookup_context,
132
- Env::IOPriority rate_limiter_priority) override;
132
+ const ReadOptions& read_options) override;
133
133
 
134
134
  size_t ApproximateMemoryUsage() const override;
135
135
 
@@ -140,34 +140,34 @@ class PartitionedFilterBlockReader
140
140
  Status GetFilterPartitionBlock(
141
141
  FilePrefetchBuffer* prefetch_buffer, const BlockHandle& handle,
142
142
  bool no_io, GetContext* get_context,
143
- BlockCacheLookupContext* lookup_context,
144
- Env::IOPriority rate_limiter_priority,
143
+ BlockCacheLookupContext* lookup_context, const ReadOptions& read_options,
145
144
  CachableEntry<ParsedFullFilterBlock>* filter_block) const;
146
145
 
147
146
  using FilterFunction = bool (FullFilterBlockReader::*)(
148
147
  const Slice& slice, const bool no_io, const Slice* const const_ikey_ptr,
149
148
  GetContext* get_context, BlockCacheLookupContext* lookup_context,
150
- Env::IOPriority rate_limiter_priority);
149
+ const ReadOptions& read_options);
151
150
  bool MayMatch(const Slice& slice, bool no_io, const Slice* const_ikey_ptr,
152
151
  GetContext* get_context,
153
152
  BlockCacheLookupContext* lookup_context,
154
- Env::IOPriority rate_limiter_priority,
153
+ const ReadOptions& read_options,
155
154
  FilterFunction filter_function) const;
156
155
  using FilterManyFunction = void (FullFilterBlockReader::*)(
157
156
  MultiGetRange* range, const SliceTransform* prefix_extractor,
158
157
  const bool no_io, BlockCacheLookupContext* lookup_context,
159
- Env::IOPriority rate_limiter_priority);
158
+ const ReadOptions& read_options);
160
159
  void MayMatch(MultiGetRange* range, const SliceTransform* prefix_extractor,
161
160
  bool no_io, BlockCacheLookupContext* lookup_context,
162
- Env::IOPriority rate_limiter_priority,
161
+ const ReadOptions& read_options,
163
162
  FilterManyFunction filter_function) const;
164
163
  void MayMatchPartition(MultiGetRange* range,
165
164
  const SliceTransform* prefix_extractor,
166
165
  BlockHandle filter_handle, bool no_io,
167
166
  BlockCacheLookupContext* lookup_context,
168
- Env::IOPriority rate_limiter_priority,
167
+ const ReadOptions& read_options,
169
168
  FilterManyFunction filter_function) const;
170
- Status CacheDependencies(const ReadOptions& ro, bool pin) override;
169
+ Status CacheDependencies(const ReadOptions& ro, bool pin,
170
+ FilePrefetchBuffer* tail_prefetch_buffer) override;
171
171
 
172
172
  const InternalKeyComparator* internal_comparator() const;
173
173
  bool index_key_includes_seq() const;
@@ -167,7 +167,6 @@ class PartitionedFilterBlockTest
167
167
  PartitionedIndexBuilder* pib, bool empty = false) {
168
168
  std::unique_ptr<PartitionedFilterBlockReader> reader(
169
169
  NewReader(builder, pib));
170
- Env::IOPriority rate_limiter_priority = Env::IO_TOTAL;
171
170
  // Querying added keys
172
171
  const bool no_io = true;
173
172
  for (auto key : keys) {
@@ -176,7 +175,7 @@ class PartitionedFilterBlockTest
176
175
  ASSERT_TRUE(reader->KeyMayMatch(key, !no_io, &ikey_slice,
177
176
  /*get_context=*/nullptr,
178
177
  /*lookup_context=*/nullptr,
179
- rate_limiter_priority));
178
+ ReadOptions()));
180
179
  }
181
180
  {
182
181
  // querying a key twice
@@ -185,7 +184,7 @@ class PartitionedFilterBlockTest
185
184
  ASSERT_TRUE(reader->KeyMayMatch(keys[0], !no_io, &ikey_slice,
186
185
  /*get_context=*/nullptr,
187
186
  /*lookup_context=*/nullptr,
188
- rate_limiter_priority));
187
+ ReadOptions()));
189
188
  }
190
189
  // querying missing keys
191
190
  for (auto key : missing_keys) {
@@ -195,13 +194,13 @@ class PartitionedFilterBlockTest
195
194
  ASSERT_TRUE(reader->KeyMayMatch(key, !no_io, &ikey_slice,
196
195
  /*get_context=*/nullptr,
197
196
  /*lookup_context=*/nullptr,
198
- rate_limiter_priority));
197
+ ReadOptions()));
199
198
  } else {
200
199
  // assuming a good hash function
201
200
  ASSERT_FALSE(reader->KeyMayMatch(key, !no_io, &ikey_slice,
202
201
  /*get_context=*/nullptr,
203
202
  /*lookup_context=*/nullptr,
204
- rate_limiter_priority));
203
+ ReadOptions()));
205
204
  }
206
205
  }
207
206
  }
@@ -354,7 +353,7 @@ TEST_P(PartitionedFilterBlockTest, SamePrefixInMultipleBlocks) {
354
353
  /*no_io=*/false, &ikey_slice,
355
354
  /*get_context=*/nullptr,
356
355
  /*lookup_context=*/nullptr,
357
- Env::IO_TOTAL));
356
+ ReadOptions()));
358
357
  }
359
358
  // Non-existent keys but with the same prefix
360
359
  const std::string pnonkeys[4] = {"p-key9", "p-key11", "p-key21", "p-key31"};
@@ -365,7 +364,7 @@ TEST_P(PartitionedFilterBlockTest, SamePrefixInMultipleBlocks) {
365
364
  /*no_io=*/false, &ikey_slice,
366
365
  /*get_context=*/nullptr,
367
366
  /*lookup_context=*/nullptr,
368
- Env::IO_TOTAL));
367
+ ReadOptions()));
369
368
  }
370
369
  }
371
370
 
@@ -396,7 +395,6 @@ TEST_P(PartitionedFilterBlockTest, PrefixInWrongPartitionBug) {
396
395
  CutABlock(pib.get(), pkeys[4]);
397
396
  std::unique_ptr<PartitionedFilterBlockReader> reader(
398
397
  NewReader(builder.get(), pib.get()));
399
- Env::IOPriority rate_limiter_priority = Env::IO_TOTAL;
400
398
  for (auto key : pkeys) {
401
399
  auto prefix = prefix_extractor->Transform(key);
402
400
  auto ikey = InternalKey(prefix, 0, ValueType::kTypeValue);
@@ -405,7 +403,7 @@ TEST_P(PartitionedFilterBlockTest, PrefixInWrongPartitionBug) {
405
403
  /*no_io=*/false, &ikey_slice,
406
404
  /*get_context=*/nullptr,
407
405
  /*lookup_context=*/nullptr,
408
- rate_limiter_priority));
406
+ ReadOptions()));
409
407
  }
410
408
  }
411
409
 
@@ -49,9 +49,8 @@ InternalIteratorBase<IndexValue>* PartitionIndexReader::NewIterator(
49
49
  BlockCacheLookupContext* lookup_context) {
50
50
  const bool no_io = (read_options.read_tier == kBlockCacheTier);
51
51
  CachableEntry<Block> index_block;
52
- const Status s =
53
- GetOrReadIndexBlock(no_io, read_options.rate_limiter_priority,
54
- get_context, lookup_context, &index_block);
52
+ const Status s = GetOrReadIndexBlock(no_io, get_context, lookup_context,
53
+ &index_block, read_options);
55
54
  if (!s.ok()) {
56
55
  if (iter != nullptr) {
57
56
  iter->Invalidate(s);
@@ -85,6 +84,8 @@ InternalIteratorBase<IndexValue>* PartitionIndexReader::NewIterator(
85
84
  ro.adaptive_readahead = read_options.adaptive_readahead;
86
85
  ro.async_io = read_options.async_io;
87
86
  ro.rate_limiter_priority = read_options.rate_limiter_priority;
87
+ ro.verify_checksums = read_options.verify_checksums;
88
+ ro.io_activity = read_options.io_activity;
88
89
 
89
90
  // We don't return pinned data from index blocks, so no need
90
91
  // to set `block_contents_pinned`.
@@ -111,8 +112,8 @@ InternalIteratorBase<IndexValue>* PartitionIndexReader::NewIterator(
111
112
  // the first level iter is always on heap and will attempt to delete it
112
113
  // in its destructor.
113
114
  }
114
- Status PartitionIndexReader::CacheDependencies(const ReadOptions& ro,
115
- bool pin) {
115
+ Status PartitionIndexReader::CacheDependencies(
116
+ const ReadOptions& ro, bool pin, FilePrefetchBuffer* tail_prefetch_buffer) {
116
117
  if (!partition_map_.empty()) {
117
118
  // The dependencies are already cached since `partition_map_` is filled in
118
119
  // an all-or-nothing manner.
@@ -127,9 +128,8 @@ Status PartitionIndexReader::CacheDependencies(const ReadOptions& ro,
127
128
 
128
129
  CachableEntry<Block> index_block;
129
130
  {
130
- Status s = GetOrReadIndexBlock(false /* no_io */, ro.rate_limiter_priority,
131
- nullptr /* get_context */, &lookup_context,
132
- &index_block);
131
+ Status s = GetOrReadIndexBlock(false /* no_io */, nullptr /* get_context */,
132
+ &lookup_context, &index_block, ro);
133
133
  if (!s.ok()) {
134
134
  return s;
135
135
  }
@@ -162,22 +162,24 @@ Status PartitionIndexReader::CacheDependencies(const ReadOptions& ro,
162
162
  handle.offset() + BlockBasedTable::BlockSizeWithTrailer(handle);
163
163
  uint64_t prefetch_len = last_off - prefetch_off;
164
164
  std::unique_ptr<FilePrefetchBuffer> prefetch_buffer;
165
- rep->CreateFilePrefetchBuffer(
166
- 0, 0, &prefetch_buffer, false /*Implicit auto readahead*/,
167
- 0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/);
168
- IOOptions opts;
169
- {
170
- Status s = rep->file->PrepareIOOptions(ro, opts);
171
- if (s.ok()) {
172
- s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
173
- static_cast<size_t>(prefetch_len),
174
- ro.rate_limiter_priority);
175
- }
176
- if (!s.ok()) {
177
- return s;
165
+ if (tail_prefetch_buffer == nullptr || !tail_prefetch_buffer->Enabled() ||
166
+ tail_prefetch_buffer->GetPrefetchOffset() > prefetch_off) {
167
+ rep->CreateFilePrefetchBuffer(
168
+ 0, 0, &prefetch_buffer, false /*Implicit auto readahead*/,
169
+ 0 /*num_reads_*/, 0 /*num_file_reads_for_auto_readahead*/);
170
+ IOOptions opts;
171
+ {
172
+ Status s = rep->file->PrepareIOOptions(ro, opts);
173
+ if (s.ok()) {
174
+ s = prefetch_buffer->Prefetch(opts, rep->file.get(), prefetch_off,
175
+ static_cast<size_t>(prefetch_len),
176
+ ro.rate_limiter_priority);
177
+ }
178
+ if (!s.ok()) {
179
+ return s;
180
+ }
178
181
  }
179
182
  }
180
-
181
183
  // For saving "all or nothing" to partition_map_
182
184
  UnorderedMap<uint64_t, CachableEntry<Block>> map_in_progress;
183
185
 
@@ -191,7 +193,8 @@ Status PartitionIndexReader::CacheDependencies(const ReadOptions& ro,
191
193
  // TODO: Support counter batch update for partitioned index and
192
194
  // filter blocks
193
195
  Status s = table()->MaybeReadBlockAndLoadToCache(
194
- prefetch_buffer.get(), ro, handle, UncompressionDict::GetEmptyDict(),
196
+ prefetch_buffer ? prefetch_buffer.get() : tail_prefetch_buffer, ro,
197
+ handle, UncompressionDict::GetEmptyDict(),
195
198
  /*for_compaction=*/false, &block.As<Block_kIndex>(),
196
199
  /*get_context=*/nullptr, &lookup_context, /*contents=*/nullptr,
197
200
  /*async_read=*/false);
@@ -30,7 +30,8 @@ class PartitionIndexReader : public BlockBasedTable::IndexReaderCommon {
30
30
  IndexBlockIter* iter, GetContext* get_context,
31
31
  BlockCacheLookupContext* lookup_context) override;
32
32
 
33
- Status CacheDependencies(const ReadOptions& ro, bool pin) override;
33
+ Status CacheDependencies(const ReadOptions& ro, bool pin,
34
+ FilePrefetchBuffer* tail_prefetch_buffer) override;
34
35
  size_t ApproximateMemoryUsage() const override {
35
36
  size_t usage = ApproximateIndexBlockMemoryUsage();
36
37
  #ifdef ROCKSDB_MALLOC_USABLE_SIZE
@@ -24,6 +24,9 @@ inline MemoryAllocator* GetMemoryAllocator(
24
24
 
25
25
  // Assumes block has a trailer as in format.h. file_name and offset provided
26
26
  // for generating a diagnostic message in returned status.
27
+ //
28
+ // Returns Status::OK() on checksum match, or Status::Corruption() on checksum
29
+ // mismatch.
27
30
  extern Status VerifyBlockChecksum(ChecksumType type, const char* data,
28
31
  size_t block_size,
29
32
  const std::string& file_name,
@@ -77,8 +77,9 @@ Status UncompressionDictReader::ReadUncompressionDictionary(
77
77
  }
78
78
 
79
79
  Status UncompressionDictReader::GetOrReadUncompressionDictionary(
80
- FilePrefetchBuffer* prefetch_buffer, bool no_io, bool verify_checksums,
81
- GetContext* get_context, BlockCacheLookupContext* lookup_context,
80
+ FilePrefetchBuffer* prefetch_buffer, const ReadOptions& ro, bool no_io,
81
+ bool verify_checksums, GetContext* get_context,
82
+ BlockCacheLookupContext* lookup_context,
82
83
  CachableEntry<UncompressionDict>* uncompression_dict) const {
83
84
  assert(uncompression_dict);
84
85
 
@@ -92,6 +93,7 @@ Status UncompressionDictReader::GetOrReadUncompressionDictionary(
92
93
  read_options.read_tier = kBlockCacheTier;
93
94
  }
94
95
  read_options.verify_checksums = verify_checksums;
96
+ read_options.io_activity = ro.io_activity;
95
97
 
96
98
  return ReadUncompressionDictionary(table_, prefetch_buffer, read_options,
97
99
  cache_dictionary_blocks(), get_context,
@@ -32,8 +32,9 @@ class UncompressionDictReader {
32
32
  std::unique_ptr<UncompressionDictReader>* uncompression_dict_reader);
33
33
 
34
34
  Status GetOrReadUncompressionDictionary(
35
- FilePrefetchBuffer* prefetch_buffer, bool no_io, bool verify_checksums,
36
- GetContext* get_context, BlockCacheLookupContext* lookup_context,
35
+ FilePrefetchBuffer* prefetch_buffer, const ReadOptions& ro, bool no_io,
36
+ bool verify_checksums, GetContext* get_context,
37
+ BlockCacheLookupContext* lookup_context,
37
38
  CachableEntry<UncompressionDict>* uncompression_dict) const;
38
39
 
39
40
  size_t ApproximateMemoryUsage() const;
@@ -14,7 +14,7 @@
14
14
  #include <string>
15
15
 
16
16
  #include "logging/logging.h"
17
- #include "memory/memory_allocator.h"
17
+ #include "memory/memory_allocator_impl.h"
18
18
  #include "monitoring/perf_context_imp.h"
19
19
  #include "rocksdb/compression_type.h"
20
20
  #include "rocksdb/env.h"
@@ -37,6 +37,10 @@ inline void BlockFetcher::ProcessTrailerIfPresent() {
37
37
  footer_.checksum_type(), slice_.data(), block_size_,
38
38
  file_->file_name(), handle_.offset()));
39
39
  RecordTick(ioptions_.stats, BLOCK_CHECKSUM_COMPUTE_COUNT);
40
+ if (!io_status_.ok()) {
41
+ assert(io_status_.IsCorruption());
42
+ RecordTick(ioptions_.stats, BLOCK_CHECKSUM_MISMATCH_COUNT);
43
+ }
40
44
  }
41
45
  compression_type_ =
42
46
  BlockBasedTable::GetBlockCompressionType(slice_.data(), block_size_);
@@ -254,6 +258,7 @@ IOStatus BlockFetcher::ReadBlockContents() {
254
258
  if (io_status_.ok()) {
255
259
  if (file_->use_direct_io()) {
256
260
  PERF_TIMER_GUARD(block_read_time);
261
+ PERF_CPU_TIMER_GUARD(block_read_cpu_time, nullptr);
257
262
  io_status_ = file_->Read(
258
263
  opts, handle_.offset(), block_size_with_trailer_, &slice_, nullptr,
259
264
  &direct_io_buf_, read_options_.rate_limiter_priority);
@@ -262,6 +267,7 @@ IOStatus BlockFetcher::ReadBlockContents() {
262
267
  } else {
263
268
  PrepareBufferForBlockFromFile();
264
269
  PERF_TIMER_GUARD(block_read_time);
270
+ PERF_CPU_TIMER_GUARD(block_read_cpu_time, nullptr);
265
271
  io_status_ = file_->Read(opts, handle_.offset(),
266
272
  block_size_with_trailer_, &slice_, used_buf_,
267
273
  nullptr, read_options_.rate_limiter_priority);
@@ -8,7 +8,7 @@
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
 
10
10
  #pragma once
11
- #include "memory/memory_allocator.h"
11
+ #include "memory/memory_allocator_impl.h"
12
12
  #include "table/block_based/block.h"
13
13
  #include "table/block_based/block_type.h"
14
14
  #include "table/format.h"
@@ -268,7 +268,8 @@ class BlockFetcherTest : public testing::Test {
268
268
  ASSERT_NE(table_options, nullptr);
269
269
  ASSERT_OK(BlockBasedTable::Open(ro, ioptions, EnvOptions(), *table_options,
270
270
  comparator, std::move(file), file_size,
271
- &table_reader));
271
+ 0 /* block_protection_bytes_per_key */,
272
+ &table_reader, 0 /* tail_size */));
272
273
 
273
274
  table->reset(reinterpret_cast<BlockBasedTable*>(table_reader.release()));
274
275
  }
@@ -70,8 +70,10 @@ class CuckooBuilderTest : public testing::Test {
70
70
 
71
71
  // Assert Table Properties.
72
72
  std::unique_ptr<TableProperties> props;
73
+ const ReadOptions read_options;
73
74
  ASSERT_OK(ReadTableProperties(file_reader.get(), read_file_size,
74
- kCuckooTableMagicNumber, ioptions, &props));
75
+ kCuckooTableMagicNumber, ioptions,
76
+ read_options, &props));
75
77
  // Check unused bucket.
76
78
  std::string unused_key =
77
79
  props->user_collected_properties[CuckooTablePropertyNames::kEmptyKey];
@@ -627,4 +629,3 @@ int main(int argc, char** argv) {
627
629
  ::testing::InitGoogleTest(&argc, argv);
628
630
  return RUN_ALL_TESTS();
629
631
  }
630
-
@@ -59,8 +59,11 @@ CuckooTableReader::CuckooTableReader(
59
59
  }
60
60
  {
61
61
  std::unique_ptr<TableProperties> props;
62
- status_ = ReadTableProperties(file_.get(), file_size,
63
- kCuckooTableMagicNumber, ioptions, &props);
62
+ // TODO: plumb Env::IOActivity
63
+ const ReadOptions read_options;
64
+ status_ =
65
+ ReadTableProperties(file_.get(), file_size, kCuckooTableMagicNumber,
66
+ ioptions, read_options, &props);
64
67
  if (!status_.ok()) {
65
68
  return;
66
69
  }
@@ -58,12 +58,14 @@ class CuckooTableReader : public TableReader {
58
58
  size_t ApproximateMemoryUsage() const override;
59
59
 
60
60
  // Following methods are not implemented for Cuckoo Table Reader
61
- uint64_t ApproximateOffsetOf(const Slice& /*key*/,
61
+ uint64_t ApproximateOffsetOf(const ReadOptions& /*read_options*/,
62
+ const Slice& /*key*/,
62
63
  TableReaderCaller /*caller*/) override {
63
64
  return 0;
64
65
  }
65
66
 
66
- uint64_t ApproximateSize(const Slice& /*start*/, const Slice& /*end*/,
67
+ uint64_t ApproximateSize(const ReadOptions& /* read_options */,
68
+ const Slice& /*start*/, const Slice& /*end*/,
67
69
  TableReaderCaller /*caller*/) override {
68
70
  return 0;
69
71
  }