@nxtedition/rocksdb 10.0.13 → 10.0.15

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 (700) hide show
  1. package/.tap/coverage/213879bb-47ae-470e-bb54-f4157d9f60e2.json +162898 -0
  2. package/.tap/processinfo/{4c642b53-6895-4ef0-9391-7c6b8d484262.json → 213879bb-47ae-470e-bb54-f4157d9f60e2.json} +117 -121
  3. package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
  4. package/.tap/test-results/test/abstract-level-test.js.tap +1705 -0
  5. package/.tap/test-results/test/batch-test.js.tap +12 -0
  6. package/.tap/test-results/test/chained-batch-gc-test.js.tap +11 -0
  7. package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +58 -0
  8. package/.tap/test-results/test/clear-gc-test.js.tap +13 -0
  9. package/.tap/test-results/test/column-test.js.tap +55 -0
  10. package/.tap/test-results/test/common.js.tap +0 -0
  11. package/.tap/test-results/test/compression-test.js.tap +30 -0
  12. package/.tap/test-results/test/db-identity.js.tap +12 -0
  13. package/.tap/test-results/test/electron.js.tap +0 -0
  14. package/.tap/test-results/test/env-cleanup-hook-test.js.tap +2 -0
  15. package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
  16. package/.tap/test-results/test/gc.js.tap +0 -0
  17. package/.tap/test-results/test/getproperty-test.js.tap +29 -0
  18. package/.tap/test-results/test/iterator-gc-test.js.tap +4 -0
  19. package/.tap/test-results/test/iterator-hwm-test.js.tap +24 -0
  20. package/.tap/test-results/test/iterator-recursion-test.js.tap +12 -0
  21. package/.tap/test-results/test/iterator-starvation-test.js.tap +2 -0
  22. package/.tap/test-results/test/iterator-test.js.tap +0 -0
  23. package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
  24. package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
  25. package/.tap/test-results/test/leak-tester.js.tap +0 -0
  26. package/.tap/test-results/test/lock-test.js.tap +0 -0
  27. package/.tap/test-results/test/lock.js.tap +0 -0
  28. package/.tap/test-results/test/make.js.tap +0 -0
  29. package/.tap/test-results/test/max-rev-merge.js.tap +0 -12
  30. package/.tap/test-results/test/merge-operator-test.js.tap +0 -0
  31. package/.tap/test-results/test/mkdir-test.js.tap +0 -0
  32. package/.tap/test-results/test/segfault-test.js.tap +0 -0
  33. package/.tap/test-results/test/stack-blower.js.tap +0 -0
  34. package/binding.cc +42 -34
  35. package/deps/rocksdb/rocksdb/CMakeLists.txt +44 -14
  36. package/deps/rocksdb/rocksdb/Makefile +34 -17
  37. package/deps/rocksdb/rocksdb/TARGETS +27 -0
  38. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +95 -42
  39. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +0 -1
  40. package/deps/rocksdb/rocksdb/cache/cache_test.cc +5 -3
  41. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +381 -393
  42. package/deps/rocksdb/rocksdb/cache/clock_cache.h +88 -51
  43. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +14 -7
  44. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +1 -1
  45. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +21 -19
  46. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +8 -7
  47. package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -1
  48. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +89 -13
  49. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +16 -8
  50. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +6 -6
  51. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +15 -9
  52. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +16 -13
  53. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +306 -23
  54. package/deps/rocksdb/rocksdb/cache/typed_cache.h +3 -4
  55. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +30 -27
  56. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +8 -10
  57. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.cc +20 -0
  58. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +83 -0
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +19 -16
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -5
  61. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +18 -21
  62. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +5 -4
  63. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +7 -6
  64. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +56 -27
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +11 -7
  66. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +20 -19
  67. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +106 -31
  68. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +5 -8
  69. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +4 -2
  70. package/deps/rocksdb/rocksdb/db/builder.cc +89 -44
  71. package/deps/rocksdb/rocksdb/db/builder.h +4 -6
  72. package/deps/rocksdb/rocksdb/db/c.cc +205 -57
  73. package/deps/rocksdb/rocksdb/db/c_test.c +141 -20
  74. package/deps/rocksdb/rocksdb/db/coalescing_iterator.cc +47 -0
  75. package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +79 -0
  76. package/deps/rocksdb/rocksdb/db/column_family.cc +100 -36
  77. package/deps/rocksdb/rocksdb/db/column_family.h +46 -28
  78. package/deps/rocksdb/rocksdb/db/column_family_test.cc +168 -46
  79. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +51 -6
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +72 -24
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +11 -14
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +7 -0
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +87 -8
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +310 -70
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +78 -62
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +0 -1
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +33 -96
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +18 -10
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -8
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +42 -22
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +20 -16
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +18 -17
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +95 -10
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +213 -34
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +4 -4
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -8
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +16 -16
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +75 -142
  103. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +577 -34
  104. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +4 -4
  105. package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
  106. package/deps/rocksdb/rocksdb/db/corruption_test.cc +7 -38
  107. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +5 -5
  108. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +366 -136
  109. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +9 -10
  110. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +282 -6
  111. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +6 -6
  112. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +551 -150
  113. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +1 -1
  114. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +41 -13
  115. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +54 -17
  116. package/deps/rocksdb/rocksdb/db/db_follower_test.cc +527 -0
  117. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -58
  118. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +34 -45
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +699 -580
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +308 -230
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +180 -107
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -2
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +10 -6
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +36 -61
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +347 -0
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.h +54 -0
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +206 -155
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +5 -8
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +41 -39
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +26 -22
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +14 -9
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +126 -46
  133. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +21 -9
  134. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +294 -0
  135. package/deps/rocksdb/rocksdb/db/db_iter.cc +116 -78
  136. package/deps/rocksdb/rocksdb/db/db_iter.h +31 -7
  137. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +34 -14
  138. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +69 -8
  139. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +153 -18
  140. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +9 -11
  141. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +9 -1
  142. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +6 -2
  143. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +105 -0
  144. package/deps/rocksdb/rocksdb/db/db_options_test.cc +97 -111
  145. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -3
  146. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +82 -30
  147. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +5 -7
  148. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +64 -22
  149. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +74 -0
  150. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +175 -47
  151. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +4 -3
  152. package/deps/rocksdb/rocksdb/db/db_test.cc +133 -109
  153. package/deps/rocksdb/rocksdb/db/db_test2.cc +227 -139
  154. package/deps/rocksdb/rocksdb/db/db_test_util.cc +42 -19
  155. package/deps/rocksdb/rocksdb/db/db_test_util.h +67 -24
  156. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +140 -2
  157. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +17 -19
  158. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +332 -87
  159. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +4 -4
  160. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +4 -4
  161. package/deps/rocksdb/rocksdb/db/db_write_test.cc +250 -30
  162. package/deps/rocksdb/rocksdb/db/dbformat.cc +41 -8
  163. package/deps/rocksdb/rocksdb/db/dbformat.h +100 -17
  164. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +48 -8
  165. package/deps/rocksdb/rocksdb/db/error_handler.cc +102 -116
  166. package/deps/rocksdb/rocksdb/db/error_handler.h +28 -6
  167. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +263 -99
  168. package/deps/rocksdb/rocksdb/db/event_helpers.cc +3 -1
  169. package/deps/rocksdb/rocksdb/db/experimental.cc +1073 -7
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +261 -111
  171. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +263 -183
  172. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +31 -12
  173. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +698 -7
  174. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +5 -3
  175. package/deps/rocksdb/rocksdb/db/flush_job.cc +41 -41
  176. package/deps/rocksdb/rocksdb/db/flush_job.h +11 -8
  177. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -13
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +19 -6
  179. package/deps/rocksdb/rocksdb/db/forward_iterator.h +12 -12
  180. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +83 -52
  181. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +169 -2
  182. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -6
  183. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
  184. package/deps/rocksdb/rocksdb/db/job_context.h +17 -0
  185. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -4
  186. package/deps/rocksdb/rocksdb/db/log_reader.cc +44 -20
  187. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -0
  188. package/deps/rocksdb/rocksdb/db/log_test.cc +81 -17
  189. package/deps/rocksdb/rocksdb/db/log_writer.cc +135 -92
  190. package/deps/rocksdb/rocksdb/db/log_writer.h +11 -10
  191. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -3
  192. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -1
  193. package/deps/rocksdb/rocksdb/db/memtable.cc +82 -62
  194. package/deps/rocksdb/rocksdb/db/memtable.h +17 -9
  195. package/deps/rocksdb/rocksdb/db/memtable_list.cc +19 -13
  196. package/deps/rocksdb/rocksdb/db/memtable_list.h +3 -1
  197. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +38 -5
  198. package/deps/rocksdb/rocksdb/db/merge_context.h +3 -0
  199. package/deps/rocksdb/rocksdb/db/merge_helper.cc +34 -156
  200. package/deps/rocksdb/rocksdb/db/merge_helper.h +52 -46
  201. package/deps/rocksdb/rocksdb/db/merge_test.cc +16 -11
  202. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +289 -0
  203. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +918 -0
  204. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -6
  205. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  206. package/deps/rocksdb/rocksdb/db/output_validator.cc +8 -12
  207. package/deps/rocksdb/rocksdb/db/output_validator.h +1 -4
  208. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +23 -4
  209. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +2 -3
  210. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -1
  211. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +2 -2
  212. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -6
  213. package/deps/rocksdb/rocksdb/db/prefix_test.cc +21 -8
  214. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +0 -2
  215. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +0 -1
  216. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +17 -4
  217. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +6 -3
  218. package/deps/rocksdb/rocksdb/db/repair.cc +35 -29
  219. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -2
  220. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +428 -156
  221. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +393 -227
  222. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +154 -82
  223. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +2 -2
  224. package/deps/rocksdb/rocksdb/db/table_cache.cc +9 -11
  225. package/deps/rocksdb/rocksdb/db/table_cache.h +2 -1
  226. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +8 -3
  227. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +27 -26
  228. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +23 -23
  229. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +5 -5
  230. package/deps/rocksdb/rocksdb/db/version_builder.cc +6 -0
  231. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +62 -29
  232. package/deps/rocksdb/rocksdb/db/version_edit.cc +1 -2
  233. package/deps/rocksdb/rocksdb/db/version_edit.h +30 -11
  234. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +291 -116
  235. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +54 -11
  236. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +3 -1
  237. package/deps/rocksdb/rocksdb/db/version_set.cc +301 -141
  238. package/deps/rocksdb/rocksdb/db/version_set.h +90 -33
  239. package/deps/rocksdb/rocksdb/db/version_set_test.cc +817 -193
  240. package/deps/rocksdb/rocksdb/db/version_util.h +10 -5
  241. package/deps/rocksdb/rocksdb/db/wal_manager.cc +15 -11
  242. package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -1
  243. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +10 -9
  244. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +403 -28
  245. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +2 -2
  246. package/deps/rocksdb/rocksdb/db/write_batch.cc +204 -18
  247. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -0
  248. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +149 -5
  249. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +7 -7
  250. package/deps/rocksdb/rocksdb/db/write_stall_stats.h +7 -7
  251. package/deps/rocksdb/rocksdb/db/write_thread.cc +86 -47
  252. package/deps/rocksdb/rocksdb/db/write_thread.h +2 -0
  253. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +176 -68
  254. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +337 -125
  255. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +38 -9
  256. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +126 -34
  257. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +1 -1
  258. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -2
  259. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +161 -1
  260. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +267 -9
  261. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +13 -7
  262. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +9 -9
  263. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +535 -86
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +27 -5
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +8 -15
  266. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +46 -21
  267. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +74 -4
  268. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +28 -11
  269. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +426 -151
  270. package/deps/rocksdb/rocksdb/env/composite_env.cc +1 -1
  271. package/deps/rocksdb/rocksdb/env/emulated_clock.h +6 -6
  272. package/deps/rocksdb/rocksdb/env/env.cc +21 -11
  273. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +9 -9
  274. package/deps/rocksdb/rocksdb/env/env_chroot.cc +3 -2
  275. package/deps/rocksdb/rocksdb/env/env_encryption.cc +3 -3
  276. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -2
  277. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -10
  278. package/deps/rocksdb/rocksdb/env/env_test.cc +24 -18
  279. package/deps/rocksdb/rocksdb/env/file_system.cc +7 -6
  280. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +3 -3
  281. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +3 -3
  282. package/deps/rocksdb/rocksdb/env/fs_on_demand.cc +331 -0
  283. package/deps/rocksdb/rocksdb/env/fs_on_demand.h +139 -0
  284. package/deps/rocksdb/rocksdb/env/fs_posix.cc +14 -15
  285. package/deps/rocksdb/rocksdb/env/io_posix.cc +15 -10
  286. package/deps/rocksdb/rocksdb/env/io_posix.h +86 -92
  287. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  288. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +6 -6
  289. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +8 -6
  290. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -1
  291. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +599 -592
  292. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +312 -200
  293. package/deps/rocksdb/rocksdb/file/file_util.cc +19 -14
  294. package/deps/rocksdb/rocksdb/file/file_util.h +34 -24
  295. package/deps/rocksdb/rocksdb/file/filename.cc +32 -17
  296. package/deps/rocksdb/rocksdb/file/filename.h +51 -53
  297. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +82 -441
  298. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +7 -6
  299. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -5
  300. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +9 -3
  301. package/deps/rocksdb/rocksdb/file/read_write_util.h +3 -3
  302. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +6 -2
  303. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +9 -4
  304. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +8 -4
  305. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +110 -89
  306. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +34 -17
  307. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +16 -0
  308. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +39 -189
  309. package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +114 -0
  310. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +91 -6
  311. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +52 -7
  312. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -1
  313. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +27 -0
  314. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +146 -0
  315. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +2 -2
  316. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +254 -151
  317. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +39 -36
  318. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -1
  319. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +431 -0
  320. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +1 -1
  321. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +57 -23
  322. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +27 -57
  323. package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +74 -0
  324. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +2 -1
  325. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  326. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +11 -11
  327. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -1
  328. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +146 -71
  329. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +6 -1
  330. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +7 -4
  331. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +17 -13
  332. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -19
  333. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +5 -5
  334. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +10 -8
  335. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +18 -2
  336. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +12 -2
  337. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +3 -3
  338. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +118 -116
  339. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +4 -4
  340. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +26 -21
  341. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +18 -6
  342. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +1 -1
  343. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +5 -5
  344. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +8 -8
  345. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +12 -0
  346. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +4 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +3 -3
  348. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +8 -0
  349. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +1 -1
  350. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -4
  351. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +3 -3
  352. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +5 -6
  353. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +159 -167
  354. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +1 -2
  355. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +52 -17
  356. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +3 -4
  357. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/types_util.h +36 -0
  358. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +118 -20
  359. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  360. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +1 -1
  361. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +87 -45
  362. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +26 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +22 -1
  364. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +7 -9
  365. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +5 -6
  366. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +2 -2
  367. package/deps/rocksdb/rocksdb/logging/env_logger.h +3 -3
  368. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -1
  369. package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -3
  370. package/deps/rocksdb/rocksdb/memory/arena.h +11 -0
  371. package/deps/rocksdb/rocksdb/memory/arena_test.cc +17 -2
  372. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +1 -1
  373. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +1 -0
  374. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
  375. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -1
  376. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +11 -10
  377. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +8 -7
  378. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +2 -2
  379. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +2 -2
  380. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  381. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +3 -3
  382. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +2 -2
  383. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +3 -1
  384. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +2 -2
  385. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +20 -10
  386. package/deps/rocksdb/rocksdb/monitoring/histogram.h +15 -15
  387. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +7 -3
  388. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +14 -14
  389. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -1
  390. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +4 -0
  391. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +8 -1
  392. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -1
  393. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +5 -2
  394. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +64 -58
  395. package/deps/rocksdb/rocksdb/monitoring/statistics_impl.h +11 -12
  396. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
  397. package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +1 -1
  398. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +7 -1
  399. package/deps/rocksdb/rocksdb/options/cf_options.cc +20 -28
  400. package/deps/rocksdb/rocksdb/options/cf_options.h +7 -14
  401. package/deps/rocksdb/rocksdb/options/configurable.cc +20 -12
  402. package/deps/rocksdb/rocksdb/options/configurable_test.cc +4 -6
  403. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -2
  404. package/deps/rocksdb/rocksdb/options/customizable.cc +1 -1
  405. package/deps/rocksdb/rocksdb/options/customizable_test.cc +3 -2
  406. package/deps/rocksdb/rocksdb/options/db_options.cc +22 -48
  407. package/deps/rocksdb/rocksdb/options/db_options.h +3 -3
  408. package/deps/rocksdb/rocksdb/options/offpeak_time_info.cc +59 -0
  409. package/deps/rocksdb/rocksdb/options/offpeak_time_info.h +37 -0
  410. package/deps/rocksdb/rocksdb/options/options.cc +14 -6
  411. package/deps/rocksdb/rocksdb/options/options_helper.cc +8 -13
  412. package/deps/rocksdb/rocksdb/options/options_helper.h +2 -3
  413. package/deps/rocksdb/rocksdb/options/options_parser.cc +35 -26
  414. package/deps/rocksdb/rocksdb/options/options_parser.h +4 -2
  415. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -3
  416. package/deps/rocksdb/rocksdb/options/options_test.cc +30 -23
  417. package/deps/rocksdb/rocksdb/port/lang.h +1 -1
  418. package/deps/rocksdb/rocksdb/port/port_example.h +7 -7
  419. package/deps/rocksdb/rocksdb/port/port_posix.cc +7 -7
  420. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -7
  421. package/deps/rocksdb/rocksdb/port/stack_trace.cc +85 -24
  422. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1 -2
  423. package/deps/rocksdb/rocksdb/port/win/io_win.cc +4 -4
  424. package/deps/rocksdb/rocksdb/port/win/io_win.h +13 -17
  425. package/deps/rocksdb/rocksdb/port/win/port_win.cc +3 -2
  426. package/deps/rocksdb/rocksdb/port/win/port_win.h +4 -4
  427. package/deps/rocksdb/rocksdb/src.mk +16 -1
  428. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -7
  429. package/deps/rocksdb/rocksdb/table/block_based/block.cc +39 -15
  430. package/deps/rocksdb/rocksdb/table/block_based/block.h +7 -7
  431. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +80 -40
  432. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +2 -3
  433. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +20 -5
  434. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +228 -122
  435. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +50 -9
  436. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +82 -25
  437. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +17 -20
  438. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +47 -13
  439. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +163 -50
  440. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +1 -2
  441. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +23 -23
  442. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -12
  443. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -2
  444. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +6 -4
  445. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +32 -27
  446. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -1
  447. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +7 -10
  448. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +2 -2
  449. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  450. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +25 -7
  451. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -5
  452. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +4 -6
  453. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +6 -6
  454. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -1
  455. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -5
  456. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +2 -2
  457. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -5
  458. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +138 -86
  459. package/deps/rocksdb/rocksdb/table/block_fetcher.h +22 -0
  460. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +26 -13
  461. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +11 -11
  462. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +11 -11
  463. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +10 -5
  464. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +6 -7
  465. package/deps/rocksdb/rocksdb/table/format.cc +15 -21
  466. package/deps/rocksdb/rocksdb/table/format.h +8 -0
  467. package/deps/rocksdb/rocksdb/table/get_context.cc +121 -78
  468. package/deps/rocksdb/rocksdb/table/get_context.h +11 -6
  469. package/deps/rocksdb/rocksdb/table/internal_iterator.h +12 -5
  470. package/deps/rocksdb/rocksdb/table/iterator.cc +4 -0
  471. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -1
  472. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -1
  473. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +5 -0
  474. package/deps/rocksdb/rocksdb/table/merging_iterator.h +4 -3
  475. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +15 -11
  476. package/deps/rocksdb/rocksdb/table/meta_blocks.h +8 -4
  477. package/deps/rocksdb/rocksdb/table/mock_table.cc +12 -8
  478. package/deps/rocksdb/rocksdb/table/mock_table.h +1 -3
  479. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +0 -1
  480. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -21
  481. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +4 -14
  482. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +7 -8
  483. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +7 -5
  484. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +15 -8
  485. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +1 -1
  486. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +75 -30
  487. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +7 -2
  488. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +76 -11
  489. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +358 -2
  490. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +93 -16
  491. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +12 -12
  492. package/deps/rocksdb/rocksdb/table/table_builder.h +12 -6
  493. package/deps/rocksdb/rocksdb/table/table_iterator.h +69 -0
  494. package/deps/rocksdb/rocksdb/table/table_properties.cc +1 -1
  495. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +8 -6
  496. package/deps/rocksdb/rocksdb/table/table_test.cc +732 -121
  497. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +3 -1
  498. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/unique_id.cc +2 -2
  500. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +2 -2
  501. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +5 -5
  502. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -6
  503. package/deps/rocksdb/rocksdb/test_util/testharness.cc +2 -4
  504. package/deps/rocksdb/rocksdb/test_util/testutil.cc +56 -32
  505. package/deps/rocksdb/rocksdb/test_util/testutil.h +57 -34
  506. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +18 -1
  507. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  508. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  509. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +210 -112
  510. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +3 -3
  511. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +1 -1
  512. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +22 -27
  513. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +10 -4
  514. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +328 -59
  515. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +34 -2
  516. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +64 -17
  517. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +8 -1
  518. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +3 -2
  519. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +136 -10
  520. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -2
  521. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +50 -8
  522. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +51 -45
  523. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +1 -1
  524. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +10 -10
  525. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +14 -4
  526. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +2 -1
  527. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +2 -2
  528. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +2 -4
  529. package/deps/rocksdb/rocksdb/util/atomic.h +111 -0
  530. package/deps/rocksdb/rocksdb/util/autovector.h +5 -1
  531. package/deps/rocksdb/rocksdb/util/bloom_test.cc +12 -2
  532. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  533. package/deps/rocksdb/rocksdb/util/coding.h +34 -38
  534. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -1
  535. package/deps/rocksdb/rocksdb/util/comparator.cc +18 -5
  536. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -1
  537. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +4 -4
  538. package/deps/rocksdb/rocksdb/util/crc32c.cc +3 -6
  539. package/deps/rocksdb/rocksdb/util/crc32c.h +3 -3
  540. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +3 -4
  541. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -2
  542. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +2 -4
  543. package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -4
  544. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -2
  545. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +3 -3
  546. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +83 -59
  547. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -3
  548. package/deps/rocksdb/rocksdb/util/hash.h +4 -4
  549. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +3 -3
  550. package/deps/rocksdb/rocksdb/util/murmurhash.cc +1 -1
  551. package/deps/rocksdb/rocksdb/util/random.cc +3 -4
  552. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +23 -43
  553. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +21 -16
  554. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +44 -24
  555. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +2 -3
  556. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +2 -10
  557. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +2 -2
  558. package/deps/rocksdb/rocksdb/util/slice.cc +4 -5
  559. package/deps/rocksdb/rocksdb/util/slice_test.cc +70 -4
  560. package/deps/rocksdb/rocksdb/util/status.cc +1 -1
  561. package/deps/rocksdb/rocksdb/util/stderr_logger.cc +39 -7
  562. package/deps/rocksdb/rocksdb/util/stderr_logger.h +12 -2
  563. package/deps/rocksdb/rocksdb/util/string_util.cc +31 -18
  564. package/deps/rocksdb/rocksdb/util/string_util.h +9 -9
  565. package/deps/rocksdb/rocksdb/util/string_util_test.cc +36 -0
  566. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +5 -5
  567. package/deps/rocksdb/rocksdb/util/thread_local.cc +1 -1
  568. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +3 -4
  569. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +1 -1
  570. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +4 -4
  571. package/deps/rocksdb/rocksdb/util/vector_iterator.h +12 -16
  572. package/deps/rocksdb/rocksdb/util/write_batch_util.h +5 -0
  573. package/deps/rocksdb/rocksdb/util/xxhash.h +116 -116
  574. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +4 -5
  575. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_impl.h +2 -2
  576. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -2
  577. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +33 -31
  578. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -22
  579. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +9 -7
  580. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +3 -6
  581. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +22 -55
  582. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +113 -74
  583. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +36 -24
  584. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +27 -11
  585. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -3
  586. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +68 -54
  587. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -6
  588. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +16 -16
  589. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +3 -2
  590. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +29 -9
  591. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +27 -14
  592. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +2 -4
  593. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +3 -3
  594. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +2 -4
  595. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +2 -4
  596. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +2 -4
  597. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +2 -4
  598. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +2 -4
  599. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +8 -8
  600. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -7
  601. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -8
  602. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +2 -4
  603. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +9 -7
  604. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +7 -10
  605. package/deps/rocksdb/rocksdb/utilities/debug.cc +6 -2
  606. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +18 -11
  607. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +2 -2
  608. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +18 -25
  609. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +32 -23
  610. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +51 -48
  611. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +5 -3
  612. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -2
  613. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  614. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +2 -3
  615. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +3 -1
  616. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +7 -7
  617. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +10 -10
  618. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +5 -6
  619. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +5 -6
  620. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +1 -1
  621. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -8
  622. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +29 -21
  623. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +14 -15
  624. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -2
  625. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -1
  626. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +3 -3
  627. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -5
  628. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  629. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +2 -2
  630. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +8 -8
  631. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +4 -4
  632. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
  633. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +6 -9
  634. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +2 -2
  635. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +1 -1
  636. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +6 -6
  637. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +1 -2
  638. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +2 -3
  639. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  640. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +1 -1
  641. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
  642. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +5 -0
  643. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +1 -1
  644. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +3 -3
  645. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +1 -1
  646. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +4 -0
  647. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +4 -0
  648. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  649. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +4 -0
  650. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +12 -3
  651. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +17 -3
  652. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +3 -3
  653. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +1 -1
  654. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +3 -3
  655. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +4 -2
  656. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +1 -1
  657. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +1 -2
  658. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -3
  659. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +3 -4
  660. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +442 -10
  661. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +27 -9
  662. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +28 -7
  663. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +70 -12
  664. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +50 -22
  665. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -1
  666. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -1
  667. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +64 -3
  668. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +76 -17
  669. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +6 -6
  670. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +573 -77
  671. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -2
  672. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +65 -3
  673. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +13 -11
  674. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +1 -0
  675. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +14 -16
  676. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +37 -24
  677. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +23 -29
  678. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +4 -2
  679. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +31 -40
  680. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +8 -6
  681. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +3 -4
  682. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +34 -18
  683. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +21 -25
  684. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +26 -5
  685. package/deps/rocksdb/rocksdb/utilities/types_util.cc +88 -0
  686. package/deps/rocksdb/rocksdb/utilities/types_util_test.cc +98 -0
  687. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -1
  688. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +463 -90
  689. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +259 -76
  690. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +70 -14
  691. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +609 -10
  692. package/deps/rocksdb/rocksdb.gyp +8 -4
  693. package/index.js +18 -4
  694. package/max_rev_operator.h +2 -0
  695. package/package.json +2 -2
  696. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  697. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  698. package/util.h +29 -5
  699. package/.tap/coverage/4c642b53-6895-4ef0-9391-7c6b8d484262.json +0 -14334
  700. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +0 -57
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include <algorithm>
13
13
  #include <atomic>
14
+ #include <deque>
14
15
  #include <sstream>
15
16
  #include <string>
16
17
 
@@ -31,7 +32,39 @@ namespace ROCKSDB_NAMESPACE {
31
32
  struct IOOptions;
32
33
  class RandomAccessFileReader;
33
34
 
35
+ struct ReadaheadParams {
36
+ ReadaheadParams() {}
37
+
38
+ // The initial readahead size.
39
+ size_t initial_readahead_size = 0;
40
+
41
+ // The maximum readahead size.
42
+ // If max_readahead_size > readahead_size, then readahead size will be doubled
43
+ // on every IO until max_readahead_size is hit. Typically this is set as a
44
+ // multiple of initial_readahead_size. initial_readahead_size should be
45
+ // greater than equal to initial_readahead_size.
46
+ size_t max_readahead_size = 0;
47
+
48
+ // If true, Readahead is enabled implicitly by rocksdb
49
+ // after doing sequential scans for num_file_reads_for_auto_readahead.
50
+ bool implicit_auto_readahead = false;
51
+
52
+ // TODO akanksha - Remove num_file_reads when BlockPrefetcher is refactored.
53
+ uint64_t num_file_reads = 0;
54
+ uint64_t num_file_reads_for_auto_readahead = 0;
55
+
56
+ // Number of buffers to maintain that contains prefetched data. If num_buffers
57
+ // > 1 then buffers will be filled asynchronously whenever they get emptied.
58
+ size_t num_buffers = 1;
59
+ };
60
+
34
61
  struct BufferInfo {
62
+ void ClearBuffer() {
63
+ buffer_.Clear();
64
+ initial_end_offset_ = 0;
65
+ async_req_len_ = 0;
66
+ }
67
+
35
68
  AlignedBuffer buffer_;
36
69
 
37
70
  uint64_t offset_ = 0;
@@ -50,8 +83,50 @@ struct BufferInfo {
50
83
 
51
84
  IOHandleDeleter del_fn_ = nullptr;
52
85
 
53
- // pos represents the index of this buffer in vector of BufferInfo.
54
- uint32_t pos_ = 0;
86
+ // initial_end_offset is used to keep track of the end offset of the buffer
87
+ // that was originally called. It's helpful in case of autotuning of readahead
88
+ // size when callback is made to BlockBasedTableIterator.
89
+ // initial end offset of this buffer which will be the starting
90
+ // offset of next prefetch.
91
+ //
92
+ // For example - if end offset of previous buffer was 100 and because of
93
+ // readahead_size optimization, end_offset was trimmed to 60. Then for next
94
+ // prefetch call, start_offset should be intialized to 100 i.e start_offset =
95
+ // buf->initial_end_offset_.
96
+ uint64_t initial_end_offset_ = 0;
97
+
98
+ bool IsDataBlockInBuffer(uint64_t offset, size_t length) {
99
+ assert(async_read_in_progress_ == false);
100
+ return (offset >= offset_ &&
101
+ offset + length <= offset_ + buffer_.CurrentSize());
102
+ }
103
+
104
+ bool IsOffsetInBuffer(uint64_t offset) {
105
+ assert(async_read_in_progress_ == false);
106
+ return (offset >= offset_ && offset < offset_ + buffer_.CurrentSize());
107
+ }
108
+
109
+ bool DoesBufferContainData() {
110
+ assert(async_read_in_progress_ == false);
111
+ return buffer_.CurrentSize() > 0;
112
+ }
113
+
114
+ bool IsBufferOutdated(uint64_t offset) {
115
+ return (!async_read_in_progress_ && DoesBufferContainData() &&
116
+ offset >= offset_ + buffer_.CurrentSize());
117
+ }
118
+
119
+ bool IsBufferOutdatedWithAsyncProgress(uint64_t offset) {
120
+ return (async_read_in_progress_ && io_handle_ != nullptr &&
121
+ offset >= offset_ + async_req_len_);
122
+ }
123
+
124
+ bool IsOffsetInBufferWithAsyncProgress(uint64_t offset) {
125
+ return (async_read_in_progress_ && offset >= offset_ &&
126
+ offset < offset_ + async_req_len_);
127
+ }
128
+
129
+ size_t CurrentSize() { return buffer_.CurrentSize(); }
55
130
  };
56
131
 
57
132
  enum class FilePrefetchBufferUsage {
@@ -60,66 +135,87 @@ enum class FilePrefetchBufferUsage {
60
135
  kUnknown,
61
136
  };
62
137
 
138
+ // Implementation:
139
+ // FilePrefetchBuffer maintains a dequeu of free buffers (free_bufs_) with no
140
+ // data and bufs_ which contains the prefetched data. Whenever a buffer is
141
+ // consumed or is outdated (w.r.t. to requested offset), that buffer is cleared
142
+ // and returned to free_bufs_.
143
+ //
144
+ // If a buffer is available in free_bufs_, it's moved to bufs_ and is sent for
145
+ // prefetching.
146
+ // num_buffers_ defines how many buffers FilePrefetchBuffer can maintain at a
147
+ // time that contains prefetched data with num_buffers_ == bufs_.size() +
148
+ // free_bufs_.size().
149
+ //
150
+ // If num_buffers_ == 1, it's a sequential read flow. Read API will be called on
151
+ // that one buffer whenever the data is requested and is not in the buffer.
152
+ // If num_buffers_ > 1, then the data is prefetched asynchronosuly in the
153
+ // buffers whenever the data is consumed from the buffers and that buffer is
154
+ // freed.
155
+ // If num_buffers > 1, then requested data can be overlapping between 2 buffers.
156
+ // To return the continuous buffer, overlap_buf_ is used. The requested data is
157
+ // copied from 2 buffers to the overlap_buf_ and overlap_buf_ is returned to
158
+ // the caller.
159
+
63
160
  // FilePrefetchBuffer is a smart buffer to store and read data from a file.
64
161
  class FilePrefetchBuffer {
65
162
  public:
66
163
  // Constructor.
67
164
  //
68
165
  // All arguments are optional.
69
- // readahead_size : the initial readahead size.
70
- // max_readahead_size : the maximum readahead size.
71
- // If max_readahead_size > readahead_size, the readahead size will be
72
- // doubled on every IO until max_readahead_size is hit.
73
- // Typically this is set as a multiple of readahead_size.
74
- // max_readahead_size should be greater than equal to readahead_size.
75
- // enable : controls whether reading from the buffer is enabled.
76
- // If false, TryReadFromCache() always return false, and we only take stats
77
- // for the minimum offset if track_min_offset = true.
166
+ // ReadaheadParams : Parameters to control the readahead behavior.
167
+ // enable : controls whether reading from the buffer is enabled.
168
+ // If false, TryReadFromCache() always return false, and we
169
+ // only take stats for the minimum offset if
170
+ // track_min_offset = true.
171
+ // See below NOTE about mmap reads.
78
172
  // track_min_offset : Track the minimum offset ever read and collect stats on
79
- // it. Used for adaptable readahead of the file footer/metadata.
80
- // implicit_auto_readahead : Readahead is enabled implicitly by rocksdb after
81
- // doing sequential scans for two times.
173
+ // it. Used for adaptable readahead of the file
174
+ // footer/metadata.
82
175
  //
83
- // Automatic readhead is enabled for a file if readahead_size
84
- // and max_readahead_size are passed in.
85
176
  // A user can construct a FilePrefetchBuffer without any arguments, but use
86
177
  // `Prefetch` to load data into the buffer.
178
+ // NOTE: FilePrefetchBuffer is incompatible with prefetching from
179
+ // RandomAccessFileReaders using mmap reads, so it is common to use
180
+ // `!use_mmap_reads` for the `enable` parameter.
87
181
  FilePrefetchBuffer(
88
- size_t readahead_size = 0, size_t max_readahead_size = 0,
89
- bool enable = true, bool track_min_offset = false,
90
- bool implicit_auto_readahead = false, uint64_t num_file_reads = 0,
91
- uint64_t num_file_reads_for_auto_readahead = 0,
92
- uint64_t upper_bound_offset = 0, FileSystem* fs = nullptr,
182
+ const ReadaheadParams& readahead_params = {}, bool enable = true,
183
+ bool track_min_offset = false, FileSystem* fs = nullptr,
93
184
  SystemClock* clock = nullptr, Statistics* stats = nullptr,
94
- const std::function<void(uint64_t, size_t, size_t&)>& cb = nullptr,
185
+ const std::function<void(bool, uint64_t&, uint64_t&)>& cb = nullptr,
95
186
  FilePrefetchBufferUsage usage = FilePrefetchBufferUsage::kUnknown)
96
- : curr_(0),
97
- readahead_size_(readahead_size),
98
- initial_auto_readahead_size_(readahead_size),
99
- max_readahead_size_(max_readahead_size),
187
+ : readahead_size_(readahead_params.initial_readahead_size),
188
+ initial_auto_readahead_size_(readahead_params.initial_readahead_size),
189
+ max_readahead_size_(readahead_params.max_readahead_size),
100
190
  min_offset_read_(std::numeric_limits<size_t>::max()),
101
191
  enable_(enable),
102
192
  track_min_offset_(track_min_offset),
103
- implicit_auto_readahead_(implicit_auto_readahead),
193
+ implicit_auto_readahead_(readahead_params.implicit_auto_readahead),
104
194
  prev_offset_(0),
105
195
  prev_len_(0),
106
- num_file_reads_for_auto_readahead_(num_file_reads_for_auto_readahead),
107
- num_file_reads_(num_file_reads),
196
+ num_file_reads_for_auto_readahead_(
197
+ readahead_params.num_file_reads_for_auto_readahead),
198
+ num_file_reads_(readahead_params.num_file_reads),
108
199
  explicit_prefetch_submitted_(false),
109
200
  fs_(fs),
110
201
  clock_(clock),
111
202
  stats_(stats),
112
203
  usage_(usage),
113
- upper_bound_offset_(upper_bound_offset),
114
- readaheadsize_cb_(cb) {
204
+ readaheadsize_cb_(cb),
205
+ num_buffers_(readahead_params.num_buffers) {
115
206
  assert((num_file_reads_ >= num_file_reads_for_auto_readahead_ + 1) ||
116
207
  (num_file_reads_ == 0));
117
- // If ReadOptions.async_io is enabled, data is asynchronously filled in
118
- // second buffer while curr_ is being consumed. If data is overlapping in
119
- // two buffers, data is copied to third buffer to return continuous buffer.
120
- bufs_.resize(3);
121
- for (uint32_t i = 0; i < 2; i++) {
122
- bufs_[i].pos_ = i;
208
+
209
+ // If num_buffers_ > 1, data is asynchronously filled in the
210
+ // queue. As result, data can be overlapping in two buffers. It copies the
211
+ // data to overlap_buf_ in order to to return continuous buffer.
212
+ if (num_buffers_ > 1) {
213
+ overlap_buf_ = new BufferInfo();
214
+ }
215
+
216
+ free_bufs_.resize(num_buffers_);
217
+ for (uint32_t i = 0; i < num_buffers_; i++) {
218
+ free_bufs_[i] = new BufferInfo();
123
219
  }
124
220
  }
125
221
 
@@ -127,10 +223,9 @@ class FilePrefetchBuffer {
127
223
  // Abort any pending async read request before destroying the class object.
128
224
  if (fs_ != nullptr) {
129
225
  std::vector<void*> handles;
130
- for (uint32_t i = 0; i < 2; i++) {
131
- if (bufs_[i].async_read_in_progress_ &&
132
- bufs_[i].io_handle_ != nullptr) {
133
- handles.emplace_back(bufs_[i].io_handle_);
226
+ for (auto& buf : bufs_) {
227
+ if (buf->async_read_in_progress_ && buf->io_handle_ != nullptr) {
228
+ handles.emplace_back(buf->io_handle_);
134
229
  }
135
230
  }
136
231
  if (!handles.empty()) {
@@ -138,60 +233,63 @@ class FilePrefetchBuffer {
138
233
  Status s = fs_->AbortIO(handles);
139
234
  assert(s.ok());
140
235
  }
236
+
237
+ for (auto& buf : bufs_) {
238
+ if (buf->io_handle_ != nullptr) {
239
+ DestroyAndClearIOHandle(buf);
240
+ buf->ClearBuffer();
241
+ }
242
+ buf->async_read_in_progress_ = false;
243
+ }
141
244
  }
142
245
 
143
246
  // Prefetch buffer bytes discarded.
144
247
  uint64_t bytes_discarded = 0;
145
- // Iterated over 2 buffers.
146
- for (int i = 0; i < 2; i++) {
147
- int first = i;
148
- int second = i ^ 1;
149
-
150
- if (DoesBufferContainData(first)) {
151
- // If last block was read completely from first and some bytes in
152
- // first buffer are still unconsumed.
153
- if (prev_offset_ >= bufs_[first].offset_ &&
154
- prev_offset_ + prev_len_ <
155
- bufs_[first].offset_ + bufs_[first].buffer_.CurrentSize()) {
156
- bytes_discarded += bufs_[first].buffer_.CurrentSize() -
157
- (prev_offset_ + prev_len_ - bufs_[first].offset_);
248
+ // Iterated over buffers.
249
+ for (auto& buf : bufs_) {
250
+ if (buf->DoesBufferContainData()) {
251
+ // If last read was from this block and some bytes are still unconsumed.
252
+ if (prev_offset_ >= buf->offset_ &&
253
+ prev_offset_ + prev_len_ < buf->offset_ + buf->CurrentSize()) {
254
+ bytes_discarded +=
255
+ buf->CurrentSize() - (prev_offset_ + prev_len_ - buf->offset_);
158
256
  }
159
- // If data was in second buffer and some/whole block bytes were read
160
- // from second buffer.
161
- else if (prev_offset_ < bufs_[first].offset_ &&
162
- !DoesBufferContainData(second)) {
163
- // If last block read was completely from different buffer, this
164
- // buffer is unconsumed.
165
- if (prev_offset_ + prev_len_ <= bufs_[first].offset_) {
166
- bytes_discarded += bufs_[first].buffer_.CurrentSize();
167
- }
168
- // If last block read overlaps with this buffer and some data is
169
- // still unconsumed and previous buffer (second) is not cleared.
170
- else if (prev_offset_ + prev_len_ > bufs_[first].offset_ &&
171
- bufs_[first].offset_ + bufs_[first].buffer_.CurrentSize() ==
172
- bufs_[second].offset_) {
173
- bytes_discarded += bufs_[first].buffer_.CurrentSize() -
174
- (/*bytes read from this buffer=*/prev_len_ -
175
- (bufs_[first].offset_ - prev_offset_));
176
- }
257
+ // If last read was from previous blocks and this block is unconsumed.
258
+ else if (prev_offset_ < buf->offset_ &&
259
+ prev_offset_ + prev_len_ <= buf->offset_) {
260
+ bytes_discarded += buf->CurrentSize();
177
261
  }
178
262
  }
179
263
  }
180
264
 
181
- for (uint32_t i = 0; i < 2; i++) {
182
- // Release io_handle.
183
- DestroyAndClearIOHandle(i);
184
- }
185
265
  RecordInHistogram(stats_, PREFETCHED_BYTES_DISCARDED, bytes_discarded);
266
+
267
+ for (auto& buf : bufs_) {
268
+ delete buf;
269
+ buf = nullptr;
270
+ }
271
+
272
+ for (auto& buf : free_bufs_) {
273
+ delete buf;
274
+ buf = nullptr;
275
+ }
276
+
277
+ if (overlap_buf_ != nullptr) {
278
+ delete overlap_buf_;
279
+ overlap_buf_ = nullptr;
280
+ }
186
281
  }
187
282
 
188
283
  bool Enabled() const { return enable_; }
189
284
 
190
- // Load data into the buffer from a file.
285
+ // Called externally by user to only load data into the buffer from a file
286
+ // with num_buffers_ should be set to default(1).
287
+ //
191
288
  // opts : the IO options to use.
192
289
  // reader : the file reader.
193
290
  // offset : the file offset to start reading from.
194
291
  // n : the number of bytes to read.
292
+ //
195
293
  Status Prefetch(const IOOptions& opts, RandomAccessFileReader* reader,
196
294
  uint64_t offset, size_t n);
197
295
 
@@ -225,23 +323,16 @@ class FilePrefetchBuffer {
225
323
  uint64_t offset, size_t n, Slice* result, Status* s,
226
324
  bool for_compaction = false);
227
325
 
228
- bool TryReadFromCacheAsync(const IOOptions& opts,
229
- RandomAccessFileReader* reader, uint64_t offset,
230
- size_t n, Slice* result, Status* status);
231
-
232
326
  // The minimum `offset` ever passed to TryReadFromCache(). This will nly be
233
327
  // tracked if track_min_offset = true.
234
328
  size_t min_offset_read() const { return min_offset_read_; }
235
329
 
236
- size_t GetPrefetchOffset() const { return bufs_[curr_].offset_; }
330
+ size_t GetPrefetchOffset() const { return bufs_.front()->offset_; }
237
331
 
238
332
  // Called in case of implicit auto prefetching.
239
333
  void UpdateReadPattern(const uint64_t& offset, const size_t& len,
240
334
  bool decrease_readaheadsize) {
241
335
  if (decrease_readaheadsize) {
242
- // Since this block was eligible for prefetch but it was found in
243
- // cache, so check and decrease the readahead_size by 8KB (default)
244
- // if eligible.
245
336
  DecreaseReadAheadIfEligible(offset, len);
246
337
  }
247
338
  prev_offset_ = offset;
@@ -256,6 +347,10 @@ class FilePrefetchBuffer {
256
347
 
257
348
  void DecreaseReadAheadIfEligible(uint64_t offset, size_t size,
258
349
  size_t value = DEFAULT_DECREMENT) {
350
+ if (bufs_.empty()) {
351
+ return;
352
+ }
353
+
259
354
  // Decrease the readahead_size if
260
355
  // - its enabled internally by RocksDB (implicit_auto_readahead_) and,
261
356
  // - readahead_size is greater than 0 and,
@@ -265,11 +360,12 @@ class FilePrefetchBuffer {
265
360
  // - block is sequential with the previous read and,
266
361
  // - num_file_reads_ + 1 (including this read) >
267
362
  // num_file_reads_for_auto_readahead_
268
- size_t curr_size = bufs_[curr_].async_read_in_progress_
269
- ? bufs_[curr_].async_req_len_
270
- : bufs_[curr_].buffer_.CurrentSize();
363
+
364
+ size_t curr_size = bufs_.front()->async_read_in_progress_
365
+ ? bufs_.front()->async_req_len_
366
+ : bufs_.front()->CurrentSize();
271
367
  if (implicit_auto_readahead_ && readahead_size_ > 0) {
272
- if ((offset + size > bufs_[curr_].offset_ + curr_size) &&
368
+ if ((offset + size > bufs_.front()->offset_ + curr_size) &&
273
369
  IsBlockSequential(offset) &&
274
370
  (num_file_reads_ + 1 > num_file_reads_for_auto_readahead_)) {
275
371
  readahead_size_ =
@@ -280,46 +376,49 @@ class FilePrefetchBuffer {
280
376
  }
281
377
 
282
378
  // Callback function passed to underlying FS in case of asynchronous reads.
283
- void PrefetchAsyncCallback(const FSReadRequest& req, void* cb_arg);
284
-
285
- void ResetUpperBoundOffset(uint64_t upper_bound_offset) {
286
- upper_bound_offset_ = upper_bound_offset;
287
- readahead_size_ = initial_auto_readahead_size_;
379
+ void PrefetchAsyncCallback(FSReadRequest& req, void* cb_arg);
380
+
381
+ void TEST_GetBufferOffsetandSize(
382
+ std::vector<std::pair<uint64_t, size_t>>& buffer_info) {
383
+ for (size_t i = 0; i < bufs_.size(); i++) {
384
+ buffer_info[i].first = bufs_[i]->offset_;
385
+ buffer_info[i].second = bufs_[i]->async_read_in_progress_
386
+ ? bufs_[i]->async_req_len_
387
+ : bufs_[i]->CurrentSize();
388
+ }
288
389
  }
289
390
 
290
391
  private:
291
392
  // Calculates roundoff offset and length to be prefetched based on alignment
292
393
  // and data present in buffer_. It also allocates new buffer or refit tail if
293
394
  // required.
294
- void CalculateOffsetAndLen(size_t alignment, uint64_t offset,
295
- size_t roundup_len, uint32_t index,
296
- bool refit_tail, uint64_t& chunk_len);
395
+ void PrepareBufferForRead(BufferInfo* buf, size_t alignment, uint64_t offset,
396
+ size_t roundup_len, bool refit_tail,
397
+ uint64_t& aligned_useful_len);
297
398
 
298
- void AbortIOIfNeeded(uint64_t offset);
399
+ void AbortOutdatedIO(uint64_t offset);
299
400
 
300
401
  void AbortAllIOs();
301
402
 
302
- void UpdateBuffersIfNeeded(uint64_t offset);
403
+ void ClearOutdatedData(uint64_t offset, size_t len);
303
404
 
304
- // It calls Poll API if any there is any pending asynchronous request. It then
305
- // checks if data is in any buffer. It clears the outdated data and swaps the
306
- // buffers if required.
307
- void PollAndUpdateBuffersIfNeeded(uint64_t offset);
405
+ // It calls Poll API to check for any pending asynchronous request.
406
+ void PollIfNeeded(uint64_t offset, size_t len);
308
407
 
309
- Status PrefetchAsyncInternal(const IOOptions& opts,
310
- RandomAccessFileReader* reader, uint64_t offset,
311
- size_t length, size_t readahead_size,
312
- bool& copy_to_third_buffer);
408
+ Status PrefetchInternal(const IOOptions& opts, RandomAccessFileReader* reader,
409
+ uint64_t offset, size_t length, size_t readahead_size,
410
+ bool& copy_to_third_buffer);
313
411
 
314
- Status Read(const IOOptions& opts, RandomAccessFileReader* reader,
315
- uint64_t read_len, uint64_t chunk_len, uint64_t rounddown_start,
316
- uint32_t index);
412
+ Status Read(BufferInfo* buf, const IOOptions& opts,
413
+ RandomAccessFileReader* reader, uint64_t read_len,
414
+ uint64_t aligned_useful_len, uint64_t start_offset);
317
415
 
318
- Status ReadAsync(const IOOptions& opts, RandomAccessFileReader* reader,
319
- uint64_t read_len, uint64_t rounddown_start, uint32_t index);
416
+ Status ReadAsync(BufferInfo* buf, const IOOptions& opts,
417
+ RandomAccessFileReader* reader, uint64_t read_len,
418
+ uint64_t start_offset);
320
419
 
321
- // Copy the data from src to third buffer.
322
- void CopyDataToBuffer(uint32_t src, uint64_t& offset, size_t& length);
420
+ // Copy the data from src to overlap_buf_.
421
+ void CopyDataToBuffer(BufferInfo* src, uint64_t& offset, size_t& length);
323
422
 
324
423
  bool IsBlockSequential(const size_t& offset) {
325
424
  return (prev_len_ == 0 || (prev_offset_ + prev_len_ == offset));
@@ -355,64 +454,24 @@ class FilePrefetchBuffer {
355
454
  return true;
356
455
  }
357
456
 
358
- // Helper functions.
359
- bool IsDataBlockInBuffer(uint64_t offset, size_t length, uint32_t index) {
360
- return (offset >= bufs_[index].offset_ &&
361
- offset + length <=
362
- bufs_[index].offset_ + bufs_[index].buffer_.CurrentSize());
363
- }
364
- bool IsOffsetInBuffer(uint64_t offset, uint32_t index) {
365
- return (offset >= bufs_[index].offset_ &&
366
- offset < bufs_[index].offset_ + bufs_[index].buffer_.CurrentSize());
367
- }
368
- bool DoesBufferContainData(uint32_t index) {
369
- return bufs_[index].buffer_.CurrentSize() > 0;
370
- }
371
- bool IsBufferOutdated(uint64_t offset, uint32_t index) {
372
- return (
373
- !bufs_[index].async_read_in_progress_ && DoesBufferContainData(index) &&
374
- offset >= bufs_[index].offset_ + bufs_[index].buffer_.CurrentSize());
375
- }
376
- bool IsBufferOutdatedWithAsyncProgress(uint64_t offset, uint32_t index) {
377
- return (bufs_[index].async_read_in_progress_ &&
378
- bufs_[index].io_handle_ != nullptr &&
379
- offset >= bufs_[index].offset_ + bufs_[index].async_req_len_);
380
- }
381
- bool IsOffsetInBufferWithAsyncProgress(uint64_t offset, uint32_t index) {
382
- return (bufs_[index].async_read_in_progress_ &&
383
- offset >= bufs_[index].offset_ &&
384
- offset < bufs_[index].offset_ + bufs_[index].async_req_len_);
385
- }
386
-
387
- bool IsSecondBuffEligibleForPrefetching() {
388
- uint32_t second = curr_ ^ 1;
389
- if (bufs_[second].async_read_in_progress_) {
390
- return false;
391
- }
392
- assert(!bufs_[curr_].async_read_in_progress_);
393
-
394
- if (DoesBufferContainData(curr_) && DoesBufferContainData(second) &&
395
- (bufs_[curr_].offset_ + bufs_[curr_].buffer_.CurrentSize() ==
396
- bufs_[second].offset_)) {
457
+ bool IsEligibleForFurtherPrefetching() {
458
+ if (free_bufs_.empty()) {
397
459
  return false;
398
460
  }
399
-
400
461
  // Readahead size can be 0 because of trimming.
401
462
  if (readahead_size_ == 0) {
402
463
  return false;
403
464
  }
404
-
405
- bufs_[second].buffer_.Clear();
406
465
  return true;
407
466
  }
408
467
 
409
- void DestroyAndClearIOHandle(uint32_t index) {
410
- if (bufs_[index].io_handle_ != nullptr && bufs_[index].del_fn_ != nullptr) {
411
- bufs_[index].del_fn_(bufs_[index].io_handle_);
412
- bufs_[index].io_handle_ = nullptr;
413
- bufs_[index].del_fn_ = nullptr;
468
+ void DestroyAndClearIOHandle(BufferInfo* buf) {
469
+ if (buf->io_handle_ != nullptr && buf->del_fn_ != nullptr) {
470
+ buf->del_fn_(buf->io_handle_);
471
+ buf->io_handle_ = nullptr;
472
+ buf->del_fn_ = nullptr;
414
473
  }
415
- bufs_[index].async_read_in_progress_ = false;
474
+ buf->async_read_in_progress_ = false;
416
475
  }
417
476
 
418
477
  Status HandleOverlappingData(const IOOptions& opts,
@@ -427,49 +486,102 @@ class FilePrefetchBuffer {
427
486
  Status* s,
428
487
  bool for_compaction = false);
429
488
 
430
- bool TryReadFromCacheAsyncUntracked(const IOOptions& opts,
431
- RandomAccessFileReader* reader,
432
- uint64_t offset, size_t n, Slice* result,
433
- Status* status);
434
-
435
- void UpdateReadAheadSizeForUpperBound(uint64_t offset, size_t n) {
436
- // Adjust readhahead_size till upper_bound if upper_bound_offset_ is
437
- // set.
438
- if (readahead_size_ > 0 && upper_bound_offset_ > 0 &&
439
- upper_bound_offset_ > offset) {
440
- if (upper_bound_offset_ < offset + n + readahead_size_) {
441
- readahead_size_ = (upper_bound_offset_ - offset) - n;
442
- RecordTick(stats_, READAHEAD_TRIMMED);
443
- }
489
+ void ReadAheadSizeTuning(BufferInfo* buf, bool read_curr_block,
490
+ bool refit_tail, uint64_t prev_buf_end_offset,
491
+ size_t alignment, size_t length,
492
+ size_t readahead_size, uint64_t& offset,
493
+ uint64_t& end_offset, size_t& read_len,
494
+ uint64_t& aligned_useful_len);
495
+
496
+ void UpdateStats(bool found_in_buffer, size_t length_found) {
497
+ if (found_in_buffer) {
498
+ RecordTick(stats_, PREFETCH_HITS);
499
+ }
500
+ if (length_found > 0) {
501
+ RecordTick(stats_, PREFETCH_BYTES_USEFUL, length_found);
444
502
  }
445
503
  }
446
504
 
447
- inline bool IsOffsetOutOfBound(uint64_t offset) {
448
- if (upper_bound_offset_ > 0) {
449
- return (offset >= upper_bound_offset_);
505
+ void UpdateReadAheadTrimmedStat(size_t initial_length,
506
+ size_t updated_length) {
507
+ if (initial_length != updated_length) {
508
+ RecordTick(stats_, READAHEAD_TRIMMED);
450
509
  }
451
- return false;
452
510
  }
453
511
 
454
- // Performs tuning to calculate readahead_size.
455
- size_t ReadAheadSizeTuning(uint64_t offset, size_t n) {
456
- UpdateReadAheadSizeForUpperBound(offset, n);
512
+ Status PrefetchRemBuffers(const IOOptions& opts,
513
+ RandomAccessFileReader* reader,
514
+ uint64_t end_offset1, size_t alignment,
515
+ size_t readahead_size);
516
+
517
+ // *** BEGIN APIs related to allocating and freeing buffers ***
518
+ bool IsBufferQueueEmpty() { return bufs_.empty(); }
519
+
520
+ BufferInfo* GetFirstBuffer() { return bufs_.front(); }
457
521
 
458
- if (readaheadsize_cb_ != nullptr && readahead_size_ > 0) {
459
- size_t updated_readahead_size = 0;
460
- readaheadsize_cb_(offset, readahead_size_, updated_readahead_size);
461
- if (readahead_size_ != updated_readahead_size) {
462
- RecordTick(stats_, READAHEAD_TRIMMED);
522
+ BufferInfo* GetLastBuffer() { return bufs_.back(); }
523
+
524
+ size_t NumBuffersAllocated() { return bufs_.size(); }
525
+
526
+ void AllocateBuffer() {
527
+ assert(!free_bufs_.empty());
528
+ BufferInfo* buf = free_bufs_.front();
529
+ free_bufs_.pop_front();
530
+ bufs_.emplace_back(buf);
531
+ }
532
+
533
+ void AllocateBufferIfEmpty() {
534
+ if (bufs_.empty()) {
535
+ AllocateBuffer();
536
+ }
537
+ }
538
+
539
+ void FreeFrontBuffer() {
540
+ BufferInfo* buf = bufs_.front();
541
+ buf->ClearBuffer();
542
+ bufs_.pop_front();
543
+ free_bufs_.emplace_back(buf);
544
+ }
545
+
546
+ void FreeLastBuffer() {
547
+ BufferInfo* buf = bufs_.back();
548
+ buf->ClearBuffer();
549
+ bufs_.pop_back();
550
+ free_bufs_.emplace_back(buf);
551
+ }
552
+
553
+ void FreeAllBuffers() {
554
+ while (!bufs_.empty()) {
555
+ BufferInfo* buf = bufs_.front();
556
+ buf->ClearBuffer();
557
+ bufs_.pop_front();
558
+ free_bufs_.emplace_back(buf);
559
+ }
560
+ }
561
+
562
+ void FreeEmptyBuffers() {
563
+ if (bufs_.empty()) {
564
+ return;
565
+ }
566
+
567
+ std::deque<BufferInfo*> tmp_buf;
568
+ while (!bufs_.empty()) {
569
+ BufferInfo* buf = bufs_.front();
570
+ bufs_.pop_front();
571
+ if (buf->async_read_in_progress_ || buf->DoesBufferContainData()) {
572
+ tmp_buf.emplace_back(buf);
573
+ } else {
574
+ free_bufs_.emplace_back(buf);
463
575
  }
464
- return updated_readahead_size;
465
576
  }
466
- return readahead_size_;
577
+ bufs_ = tmp_buf;
467
578
  }
468
579
 
469
- std::vector<BufferInfo> bufs_;
470
- // curr_ represents the index for bufs_ indicating which buffer is being
471
- // consumed currently.
472
- uint32_t curr_;
580
+ // *** END APIs related to allocating and freeing buffers ***
581
+
582
+ std::deque<BufferInfo*> bufs_;
583
+ std::deque<BufferInfo*> free_bufs_;
584
+ BufferInfo* overlap_buf_ = nullptr;
473
585
 
474
586
  size_t readahead_size_;
475
587
  size_t initial_auto_readahead_size_;
@@ -497,7 +609,7 @@ class FilePrefetchBuffer {
497
609
  uint64_t num_file_reads_;
498
610
 
499
611
  // If explicit_prefetch_submitted_ is set then it indicates RocksDB called
500
- // PrefetchAsync to submit request. It needs to call TryReadFromCacheAsync to
612
+ // PrefetchAsync to submit request. It needs to call TryReadFromCache to
501
613
  // poll the submitted request without checking if data is sequential and
502
614
  // num_file_reads_.
503
615
  bool explicit_prefetch_submitted_;
@@ -508,10 +620,10 @@ class FilePrefetchBuffer {
508
620
 
509
621
  FilePrefetchBufferUsage usage_;
510
622
 
511
- // upper_bound_offset_ is set when ReadOptions.iterate_upper_bound and
512
- // ReadOptions.auto_readahead_size are set to trim readahead_size upto
513
- // upper_bound_offset_ during prefetching.
514
- uint64_t upper_bound_offset_ = 0;
515
- std::function<void(uint64_t, size_t, size_t&)> readaheadsize_cb_;
623
+ std::function<void(bool, uint64_t&, uint64_t&)> readaheadsize_cb_;
624
+
625
+ // num_buffers_ is the number of buffers maintained by FilePrefetchBuffer to
626
+ // prefetch the data at a time.
627
+ size_t num_buffers_;
516
628
  };
517
629
  } // namespace ROCKSDB_NAMESPACE