@nxtedition/rocksdb 8.2.8 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -22,12 +22,37 @@
22
22
  #include "util/rate_limiter_impl.h"
23
23
 
24
24
  namespace ROCKSDB_NAMESPACE {
25
- const std::array<Histograms, std::size_t(Env::IOActivity::kUnknown)>
26
- kReadHistograms{{
27
- FILE_READ_FLUSH_MICROS,
28
- FILE_READ_COMPACTION_MICROS,
29
- FILE_READ_DB_OPEN_MICROS,
30
- }};
25
+ inline Histograms GetFileReadHistograms(Statistics* stats,
26
+ Env::IOActivity io_activity) {
27
+ switch (io_activity) {
28
+ case Env::IOActivity::kFlush:
29
+ return Histograms::FILE_READ_FLUSH_MICROS;
30
+ case Env::IOActivity::kCompaction:
31
+ return Histograms::FILE_READ_COMPACTION_MICROS;
32
+ case Env::IOActivity::kDBOpen:
33
+ return Histograms::FILE_READ_DB_OPEN_MICROS;
34
+ default:
35
+ break;
36
+ }
37
+
38
+ if (stats && stats->get_stats_level() > StatsLevel::kExceptDetailedTimers) {
39
+ switch (io_activity) {
40
+ case Env::IOActivity::kGet:
41
+ return Histograms::FILE_READ_GET_MICROS;
42
+ case Env::IOActivity::kMultiGet:
43
+ return Histograms::FILE_READ_MULTIGET_MICROS;
44
+ case Env::IOActivity::kDBIterator:
45
+ return Histograms::FILE_READ_DB_ITERATOR_MICROS;
46
+ case Env::IOActivity::kVerifyDBChecksum:
47
+ return Histograms::FILE_READ_VERIFY_DB_CHECKSUM_MICROS;
48
+ case Env::IOActivity::kVerifyFileChecksums:
49
+ return Histograms::FILE_READ_VERIFY_FILE_CHECKSUMS_MICROS;
50
+ default:
51
+ break;
52
+ }
53
+ }
54
+ return Histograms::HISTOGRAM_ENUM_MAX;
55
+ }
31
56
  inline void RecordIOStats(Statistics* stats, Temperature file_temperature,
32
57
  bool is_last_level, size_t size) {
33
58
  IOSTATS_ADD(bytes_read, size);
@@ -79,11 +104,11 @@ IOStatus RandomAccessFileReader::Create(
79
104
  return io_s;
80
105
  }
81
106
 
82
- IOStatus RandomAccessFileReader::Read(
83
- const IOOptions& opts, uint64_t offset, size_t n, Slice* result,
84
- char* scratch, AlignedBuf* aligned_buf,
85
- Env::IOPriority rate_limiter_priority) const {
107
+ IOStatus RandomAccessFileReader::Read(const IOOptions& opts, uint64_t offset,
108
+ size_t n, Slice* result, char* scratch,
109
+ AlignedBuf* aligned_buf) const {
86
110
  (void)aligned_buf;
111
+ const Env::IOPriority rate_limiter_priority = opts.rate_limiter_priority;
87
112
 
88
113
  TEST_SYNC_POINT_CALLBACK("RandomAccessFileReader::Read", nullptr);
89
114
 
@@ -97,17 +122,23 @@ IOStatus RandomAccessFileReader::Read(
97
122
 
98
123
  IOStatus io_s;
99
124
  uint64_t elapsed = 0;
125
+ size_t alignment = file_->GetRequiredBufferAlignment();
126
+ bool is_aligned = false;
127
+ if (scratch != nullptr) {
128
+ // Check if offset, length and buffer are aligned.
129
+ is_aligned = (offset & (alignment - 1)) == 0 &&
130
+ (n & (alignment - 1)) == 0 &&
131
+ (uintptr_t(scratch) & (alignment - 1)) == 0;
132
+ }
133
+
100
134
  {
101
135
  StopWatch sw(clock_, stats_, hist_type_,
102
- (opts.io_activity != Env::IOActivity::kUnknown)
103
- ? kReadHistograms[(std::size_t)(opts.io_activity)]
104
- : Histograms::HISTOGRAM_ENUM_MAX,
136
+ GetFileReadHistograms(stats_, opts.io_activity),
105
137
  (stats_ != nullptr) ? &elapsed : nullptr, true /*overwrite*/,
106
138
  true /*delay_enabled*/);
107
139
  auto prev_perf_level = GetPerfLevel();
108
140
  IOSTATS_TIMER_GUARD(read_nanos);
109
- if (use_direct_io()) {
110
- size_t alignment = file_->GetRequiredBufferAlignment();
141
+ if (use_direct_io() && is_aligned == false) {
111
142
  size_t aligned_offset =
112
143
  TruncateToPageBoundary(alignment, static_cast<size_t>(offset));
113
144
  size_t offset_advance = static_cast<size_t>(offset) - aligned_offset;
@@ -182,9 +213,9 @@ IOStatus RandomAccessFileReader::Read(
182
213
  if (rate_limiter_->IsRateLimited(RateLimiter::OpType::kRead)) {
183
214
  sw.DelayStart();
184
215
  }
185
- allowed = rate_limiter_->RequestToken(n - pos, 0 /* alignment */,
186
- rate_limiter_priority, stats_,
187
- RateLimiter::OpType::kRead);
216
+ allowed = rate_limiter_->RequestToken(
217
+ n - pos, (use_direct_io() ? alignment : 0), rate_limiter_priority,
218
+ stats_, RateLimiter::OpType::kRead);
188
219
  if (rate_limiter_->IsRateLimited(RateLimiter::OpType::kRead)) {
189
220
  sw.DelayStop();
190
221
  }
@@ -240,6 +271,14 @@ IOStatus RandomAccessFileReader::Read(
240
271
  file_read_hist_->Add(elapsed);
241
272
  }
242
273
 
274
+ #ifndef NDEBUG
275
+ auto pair = std::make_pair(&file_name_, &io_s);
276
+ if (offset == 0) {
277
+ TEST_SYNC_POINT_CALLBACK("RandomAccessFileReader::Read::BeforeReturn",
278
+ &pair);
279
+ }
280
+ TEST_SYNC_POINT_CALLBACK("RandomAccessFileReader::Read::AnyOffset", &pair);
281
+ #endif
243
282
  return io_s;
244
283
  }
245
284
 
@@ -269,9 +308,10 @@ bool TryMerge(FSReadRequest* dest, const FSReadRequest& src) {
269
308
  return true;
270
309
  }
271
310
 
272
- IOStatus RandomAccessFileReader::MultiRead(
273
- const IOOptions& opts, FSReadRequest* read_reqs, size_t num_reqs,
274
- AlignedBuf* aligned_buf, Env::IOPriority rate_limiter_priority) const {
311
+ IOStatus RandomAccessFileReader::MultiRead(const IOOptions& opts,
312
+ FSReadRequest* read_reqs,
313
+ size_t num_reqs,
314
+ AlignedBuf* aligned_buf) const {
275
315
  (void)aligned_buf; // suppress warning of unused variable in LITE mode
276
316
  assert(num_reqs > 0);
277
317
 
@@ -280,6 +320,7 @@ IOStatus RandomAccessFileReader::MultiRead(
280
320
  assert(read_reqs[i].offset <= read_reqs[i + 1].offset);
281
321
  }
282
322
  #endif // !NDEBUG
323
+ const Env::IOPriority rate_limiter_priority = opts.rate_limiter_priority;
283
324
 
284
325
  // To be paranoid modify scratch a little bit, so in case underlying
285
326
  // FileSystem doesn't fill the buffer but return success and `scratch` returns
@@ -296,9 +337,7 @@ IOStatus RandomAccessFileReader::MultiRead(
296
337
  uint64_t elapsed = 0;
297
338
  {
298
339
  StopWatch sw(clock_, stats_, hist_type_,
299
- (opts.io_activity != Env::IOActivity::kUnknown)
300
- ? kReadHistograms[(std::size_t)(opts.io_activity)]
301
- : Histograms::HISTOGRAM_ENUM_MAX,
340
+ GetFileReadHistograms(stats_, opts.io_activity),
302
341
  (stats_ != nullptr) ? &elapsed : nullptr, true /*overwrite*/,
303
342
  true /*delay_enabled*/);
304
343
  auto prev_perf_level = GetPerfLevel();
@@ -314,14 +353,14 @@ IOStatus RandomAccessFileReader::MultiRead(
314
353
  // Align and merge the read requests.
315
354
  size_t alignment = file_->GetRequiredBufferAlignment();
316
355
  for (size_t i = 0; i < num_reqs; i++) {
317
- const auto& r = Align(read_reqs[i], alignment);
356
+ FSReadRequest r = Align(read_reqs[i], alignment);
318
357
  if (i == 0) {
319
358
  // head
320
- aligned_reqs.push_back(r);
359
+ aligned_reqs.push_back(std::move(r));
321
360
 
322
361
  } else if (!TryMerge(&aligned_reqs.back(), r)) {
323
362
  // head + n
324
- aligned_reqs.push_back(r);
363
+ aligned_reqs.push_back(std::move(r));
325
364
 
326
365
  } else {
327
366
  // unused
@@ -487,16 +526,16 @@ IOStatus RandomAccessFileReader::ReadAsync(
487
526
 
488
527
  assert(read_async_info->buf_.CurrentSize() == 0);
489
528
 
490
- StopWatch sw(clock_, nullptr /*stats*/,
491
- Histograms::HISTOGRAM_ENUM_MAX /*hist_type*/,
492
- Histograms::HISTOGRAM_ENUM_MAX, &elapsed, true /*overwrite*/,
529
+ StopWatch sw(clock_, stats_, hist_type_,
530
+ GetFileReadHistograms(stats_, opts.io_activity),
531
+ (stats_ != nullptr) ? &elapsed : nullptr, true /*overwrite*/,
493
532
  true /*delay_enabled*/);
494
533
  s = file_->ReadAsync(aligned_req, opts, read_async_callback,
495
534
  read_async_info, io_handle, del_fn, nullptr /*dbg*/);
496
535
  } else {
497
- StopWatch sw(clock_, nullptr /*stats*/,
498
- Histograms::HISTOGRAM_ENUM_MAX /*hist_type*/,
499
- Histograms::HISTOGRAM_ENUM_MAX, &elapsed, true /*overwrite*/,
536
+ StopWatch sw(clock_, stats_, hist_type_,
537
+ GetFileReadHistograms(stats_, opts.io_activity),
538
+ (stats_ != nullptr) ? &elapsed : nullptr, true /*overwrite*/,
500
539
  true /*delay_enabled*/);
501
540
  s = file_->ReadAsync(req, opts, read_async_callback, read_async_info,
502
541
  io_handle, del_fn, nullptr /*dbg*/);
@@ -164,31 +164,18 @@ class RandomAccessFileReader {
164
164
  // 2. Otherwise, scratch is not used and can be null, the aligned_buf owns
165
165
  // the internally allocated buffer on return, and the result refers to a
166
166
  // region in aligned_buf.
167
- //
168
- // `rate_limiter_priority` is used to charge the internal rate limiter when
169
- // enabled. The special value `Env::IO_TOTAL` makes this operation bypass the
170
- // rate limiter.
171
167
  IOStatus Read(const IOOptions& opts, uint64_t offset, size_t n, Slice* result,
172
- char* scratch, AlignedBuf* aligned_buf,
173
- Env::IOPriority rate_limiter_priority) const;
168
+ char* scratch, AlignedBuf* aligned_buf) const;
174
169
 
175
170
  // REQUIRES:
176
171
  // num_reqs > 0, reqs do not overlap, and offsets in reqs are increasing.
177
172
  // In non-direct IO mode, aligned_buf should be null;
178
173
  // In direct IO mode, aligned_buf stores the aligned buffer allocated inside
179
174
  // MultiRead, the result Slices in reqs refer to aligned_buf.
180
- //
181
- // `rate_limiter_priority` will be used to charge the internal rate limiter.
182
- // It is not yet supported so the client must provide the special value
183
- // `Env::IO_TOTAL` to bypass the rate limiter.
184
175
  IOStatus MultiRead(const IOOptions& opts, FSReadRequest* reqs,
185
- size_t num_reqs, AlignedBuf* aligned_buf,
186
- Env::IOPriority rate_limiter_priority) const;
176
+ size_t num_reqs, AlignedBuf* aligned_buf) const;
187
177
 
188
- IOStatus Prefetch(uint64_t offset, size_t n,
189
- const Env::IOPriority rate_limiter_priority) const {
190
- IOOptions opts;
191
- opts.rate_limiter_priority = rate_limiter_priority;
178
+ IOStatus Prefetch(const IOOptions& opts, uint64_t offset, size_t n) const {
192
179
  return file_->Prefetch(offset, n, opts, nullptr);
193
180
  }
194
181
 
@@ -83,8 +83,9 @@ TEST_F(RandomAccessFileReaderTest, ReadDirectIO) {
83
83
  Slice result;
84
84
  AlignedBuf buf;
85
85
  for (Env::IOPriority rate_limiter_priority : {Env::IO_LOW, Env::IO_TOTAL}) {
86
- ASSERT_OK(r->Read(IOOptions(), offset, len, &result, nullptr, &buf,
87
- rate_limiter_priority));
86
+ IOOptions io_opts;
87
+ io_opts.rate_limiter_priority = rate_limiter_priority;
88
+ ASSERT_OK(r->Read(io_opts, offset, len, &result, nullptr, &buf));
88
89
  ASSERT_EQ(result.ToString(), content.substr(offset, len));
89
90
  }
90
91
  }
@@ -95,7 +96,18 @@ TEST_F(RandomAccessFileReaderTest, MultiReadDirectIO) {
95
96
  "RandomAccessFileReader::MultiRead:AlignedReqs", [&](void* reqs) {
96
97
  // Copy reqs, since it's allocated on stack inside MultiRead, which will
97
98
  // be deallocated after MultiRead returns.
98
- aligned_reqs = *reinterpret_cast<std::vector<FSReadRequest>*>(reqs);
99
+ size_t i = 0;
100
+ aligned_reqs.resize(
101
+ (*reinterpret_cast<std::vector<FSReadRequest>*>(reqs)).size());
102
+ for (auto& req :
103
+ (*reinterpret_cast<std::vector<FSReadRequest>*>(reqs))) {
104
+ aligned_reqs[i].offset = req.offset;
105
+ aligned_reqs[i].len = req.len;
106
+ aligned_reqs[i].result = req.result;
107
+ aligned_reqs[i].status = req.status;
108
+ aligned_reqs[i].scratch = req.scratch;
109
+ i++;
110
+ }
99
111
  });
100
112
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
101
113
 
@@ -135,8 +147,8 @@ TEST_F(RandomAccessFileReaderTest, MultiReadDirectIO) {
135
147
  reqs.push_back(std::move(r0));
136
148
  reqs.push_back(std::move(r1));
137
149
  AlignedBuf aligned_buf;
138
- ASSERT_OK(r->MultiRead(IOOptions(), reqs.data(), reqs.size(), &aligned_buf,
139
- Env::IO_TOTAL /* rate_limiter_priority */));
150
+ ASSERT_OK(
151
+ r->MultiRead(IOOptions(), reqs.data(), reqs.size(), &aligned_buf));
140
152
 
141
153
  AssertResult(content, reqs);
142
154
 
@@ -180,8 +192,8 @@ TEST_F(RandomAccessFileReaderTest, MultiReadDirectIO) {
180
192
  reqs.push_back(std::move(r1));
181
193
  reqs.push_back(std::move(r2));
182
194
  AlignedBuf aligned_buf;
183
- ASSERT_OK(r->MultiRead(IOOptions(), reqs.data(), reqs.size(), &aligned_buf,
184
- Env::IO_TOTAL /* rate_limiter_priority */));
195
+ ASSERT_OK(
196
+ r->MultiRead(IOOptions(), reqs.data(), reqs.size(), &aligned_buf));
185
197
 
186
198
  AssertResult(content, reqs);
187
199
 
@@ -225,8 +237,8 @@ TEST_F(RandomAccessFileReaderTest, MultiReadDirectIO) {
225
237
  reqs.push_back(std::move(r1));
226
238
  reqs.push_back(std::move(r2));
227
239
  AlignedBuf aligned_buf;
228
- ASSERT_OK(r->MultiRead(IOOptions(), reqs.data(), reqs.size(), &aligned_buf,
229
- Env::IO_TOTAL /* rate_limiter_priority */));
240
+ ASSERT_OK(
241
+ r->MultiRead(IOOptions(), reqs.data(), reqs.size(), &aligned_buf));
230
242
 
231
243
  AssertResult(content, reqs);
232
244
 
@@ -262,8 +274,8 @@ TEST_F(RandomAccessFileReaderTest, MultiReadDirectIO) {
262
274
  reqs.push_back(std::move(r0));
263
275
  reqs.push_back(std::move(r1));
264
276
  AlignedBuf aligned_buf;
265
- ASSERT_OK(r->MultiRead(IOOptions(), reqs.data(), reqs.size(), &aligned_buf,
266
- Env::IO_TOTAL /* rate_limiter_priority */));
277
+ ASSERT_OK(
278
+ r->MultiRead(IOOptions(), reqs.data(), reqs.size(), &aligned_buf));
267
279
 
268
280
  AssertResult(content, reqs);
269
281
 
@@ -283,7 +295,6 @@ TEST_F(RandomAccessFileReaderTest, MultiReadDirectIO) {
283
295
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
284
296
  }
285
297
 
286
-
287
298
  TEST(FSReadRequest, Align) {
288
299
  FSReadRequest r;
289
300
  r.offset = 2000;
@@ -99,6 +99,9 @@ class SequentialFileReader {
99
99
  // when less than n bytes are actually read (e.g. at end of file). To avoid
100
100
  // overcharging the rate limiter, the caller can use file size to cap n to
101
101
  // read until end of file.
102
+ //
103
+ // TODO(hx235): accept parameter `IOOptions` containing
104
+ // `rate_limiter_priority` like RandomAccessFileReader::Read()
102
105
  IOStatus Read(size_t n, Slice* result, char* scratch,
103
106
  Env::IOPriority rate_limiter_priority);
104
107
 
@@ -13,7 +13,9 @@
13
13
  #include <string>
14
14
 
15
15
  #include "rocksdb/cache.h"
16
+ #include "rocksdb/compression_type.h"
16
17
  #include "rocksdb/memory_allocator.h"
18
+ #include "rocksdb/options.h"
17
19
  #include "rocksdb/slice.h"
18
20
  #include "rocksdb/status.h"
19
21
 
@@ -66,7 +68,7 @@ class Cache {
66
68
  enum class Priority { HIGH, LOW, BOTTOM };
67
69
 
68
70
  // A set of callbacks to allow objects in the primary block cache to be
69
- // be persisted in a secondary cache. The purpose of the secondary cache
71
+ // persisted in a secondary cache. The purpose of the secondary cache
70
72
  // is to support other ways of caching the object, such as persistent or
71
73
  // compressed data, that may require the object to be parsed and transformed
72
74
  // in some way. Since the primary cache holds C++ objects and the secondary
@@ -109,13 +111,18 @@ class Cache {
109
111
  // pointer into static data).
110
112
  using DeleterFn = void (*)(ObjectPtr obj, MemoryAllocator* allocator);
111
113
 
112
- // The CreateCallback is takes in a buffer from the NVM cache and constructs
113
- // an object using it. The callback doesn't have ownership of the buffer and
114
+ // The CreateCallback is takes in a buffer from the secondary cache and
115
+ // constructs an object using it. The buffer could be compressed or
116
+ // uncompressed, as indicated by the type argument. If compressed,
117
+ // the callback is responsible for uncompressing it using information
118
+ // from the context, such as compression dictionary.
119
+ // The callback doesn't have ownership of the buffer and
114
120
  // should copy the contents into its own buffer. The CreateContext* is
115
121
  // provided by Lookup and may be used to follow DB- or CF-specific settings.
116
122
  // In case of some error, non-OK is returned and the caller should ignore
117
123
  // any result in out_obj. (The implementation must clean up after itself.)
118
- using CreateCallback = Status (*)(const Slice& data, CreateContext* context,
124
+ using CreateCallback = Status (*)(const Slice& data, CompressionType type,
125
+ CacheTier source, CreateContext* context,
119
126
  MemoryAllocator* allocator,
120
127
  ObjectPtr* out_obj, size_t* out_charge);
121
128
 
@@ -242,12 +249,19 @@ class Cache {
242
249
  // the item is only inserted into the primary cache. It may
243
250
  // defer the insertion to the secondary cache as it sees fit.
244
251
  //
252
+ // Along with the object pointer, the caller may pass a Slice pointing to
253
+ // the compressed serialized data of the object. If compressed is
254
+ // non-empty, then the caller must pass the type indicating the compression
255
+ // algorithm used. The cache may, optionally, also insert the compressed
256
+ // block into one or more cache tiers.
257
+ //
245
258
  // When the inserted entry is no longer needed, it will be destroyed using
246
259
  // helper->del_cb (if non-nullptr).
247
- virtual Status Insert(const Slice& key, ObjectPtr obj,
248
- const CacheItemHelper* helper, size_t charge,
249
- Handle** handle = nullptr,
250
- Priority priority = Priority::LOW) = 0;
260
+ virtual Status Insert(
261
+ const Slice& key, ObjectPtr obj, const CacheItemHelper* helper,
262
+ size_t charge, Handle** handle = nullptr,
263
+ Priority priority = Priority::LOW, const Slice& compressed = Slice(),
264
+ CompressionType type = CompressionType::kNoCompression) = 0;
251
265
 
252
266
  // Similar to Insert, but used for creating cache entries that cannot
253
267
  // be found with Lookup, such as for memory charging purposes. The
@@ -361,6 +375,14 @@ class Cache {
361
375
  // Returns the helper for the specified entry.
362
376
  virtual const CacheItemHelper* GetCacheItemHelper(Handle* handle) const = 0;
363
377
 
378
+ virtual Status GetSecondaryCacheCapacity(size_t& /*size*/) const {
379
+ return Status::NotSupported();
380
+ }
381
+
382
+ virtual Status GetSecondaryCachePinnedUsage(size_t& /*size*/) const {
383
+ return Status::NotSupported();
384
+ }
385
+
364
386
  // Call this on shutdown if you want to speed it up. Cache will disown
365
387
  // any underlying data and will not free it on delete. This call will leak
366
388
  // memory - call this only if you're shutting down the process.
@@ -514,7 +536,8 @@ class Cache {
514
536
  // returns `true` if it has taken ownership of the Value (object), or
515
537
  // `false` if the cache should destroy it as usual. Regardless, Ref() and
516
538
  // Release() cannot be called on this Handle that is poised for eviction.
517
- using EvictionCallback = std::function<bool(const Slice& key, Handle* h)>;
539
+ using EvictionCallback =
540
+ std::function<bool(const Slice& key, Handle* h, bool was_hit)>;
518
541
  // Sets an eviction callback for this Cache. Not thread safe and only
519
542
  // supports being set once, so should only be used during initialization
520
543
  // or destruction, guaranteed before or after any thread-shared operations.
@@ -535,11 +558,14 @@ class CacheWrapper : public Cache {
535
558
  // Only function that derived class must provide
536
559
  // const char* Name() const override { ... }
537
560
 
538
- Status Insert(const Slice& key, ObjectPtr value,
539
- const CacheItemHelper* helper, size_t charge,
540
- Handle** handle = nullptr,
541
- Priority priority = Priority::LOW) override {
542
- return target_->Insert(key, value, helper, charge, handle, priority);
561
+ Status Insert(
562
+ const Slice& key, ObjectPtr value, const CacheItemHelper* helper,
563
+ size_t charge, Handle** handle = nullptr,
564
+ Priority priority = Priority::LOW,
565
+ const Slice& compressed_value = Slice(),
566
+ CompressionType type = CompressionType::kNoCompression) override {
567
+ return target_->Insert(key, value, helper, charge, handle, priority,
568
+ compressed_value, type);
543
569
  }
544
570
 
545
571
  Handle* CreateStandalone(const Slice& key, ObjectPtr obj,