@nxtedition/rocksdb 13.5.8 → 13.5.9

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 (508) hide show
  1. package/binding.cc +209 -2
  2. package/deps/rocksdb/rocksdb/BUCK +12 -0
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
  4. package/deps/rocksdb/rocksdb/Makefile +28 -23
  5. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
  6. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
  7. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
  10. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
  11. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
  12. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
  14. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
  15. package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
  16. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
  17. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
  23. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
  24. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
  25. package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
  26. package/deps/rocksdb/rocksdb/db/builder.h +5 -4
  27. package/deps/rocksdb/rocksdb/db/c.cc +556 -15
  28. package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
  29. package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
  30. package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
  57. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
  58. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
  59. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
  60. package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
  61. package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
  62. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
  63. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
  64. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
  65. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
  66. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
  67. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
  68. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
  69. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
  70. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
  72. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
  79. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
  80. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
  81. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
  86. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
  87. package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
  88. package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
  89. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
  90. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
  91. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
  92. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
  93. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
  94. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
  95. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
  96. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
  97. package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
  98. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
  99. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
  100. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
  101. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
  102. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
  103. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
  104. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
  105. package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
  106. package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
  107. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  108. package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
  109. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
  110. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
  111. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
  112. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
  113. package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
  114. package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
  115. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
  116. package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
  117. package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
  118. package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
  119. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
  120. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
  121. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
  122. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
  123. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
  124. package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
  125. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
  126. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
  127. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  128. package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
  129. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
  130. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
  131. package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
  132. package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
  133. package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
  134. package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
  135. package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
  136. package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
  137. package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
  138. package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
  139. package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
  140. package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
  141. package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
  142. package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
  143. package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
  144. package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
  145. package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
  146. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
  147. package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
  148. package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
  149. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
  150. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
  151. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
  152. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
  153. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
  154. package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
  155. package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
  156. package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
  157. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
  158. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
  159. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
  160. package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
  161. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
  162. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
  163. package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
  164. package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
  165. package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
  166. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
  167. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
  168. package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
  169. package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
  170. package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
  171. package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
  172. package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
  173. package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
  174. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
  175. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
  176. package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
  177. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
  178. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
  179. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
  180. package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
  181. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
  182. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
  183. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
  184. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
  185. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
  186. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
  187. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
  188. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
  189. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
  190. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
  191. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
  192. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
  193. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
  194. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
  195. package/deps/rocksdb/rocksdb/env/env.cc +32 -2
  196. package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
  197. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
  198. package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
  199. package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
  200. package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
  201. package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
  202. package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
  203. package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
  204. package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
  205. package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
  206. package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
  207. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
  208. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
  209. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
  210. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
  211. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
  212. package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
  213. package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
  214. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
  215. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
  216. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
  217. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
  218. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
  219. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
  220. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
  221. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
  222. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
  223. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
  224. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
  225. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
  226. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
  227. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
  228. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
  229. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
  230. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
  231. package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
  232. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
  233. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
  234. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
  235. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
  236. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
  237. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
  238. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
  239. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
  240. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
  241. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
  242. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
  243. package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
  244. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
  245. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
  246. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
  247. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
  248. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
  249. package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
  250. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
  251. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
  252. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
  253. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
  254. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
  255. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
  257. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
  259. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
  260. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
  261. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
  268. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
  269. package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
  270. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
  271. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
  272. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
  273. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
  274. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
  275. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
  276. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
  277. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
  278. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
  279. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
  280. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
  281. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
  282. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
  283. package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
  284. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
  285. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
  286. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
  287. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
  288. package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
  289. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
  290. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
  291. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
  292. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
  293. package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
  294. package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
  295. package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
  296. package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
  297. package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
  298. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
  299. package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
  300. package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
  301. package/deps/rocksdb/rocksdb/options/options.cc +296 -305
  302. package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
  303. package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
  304. package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
  305. package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
  306. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
  307. package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
  308. package/deps/rocksdb/rocksdb/port/lang.h +2 -1
  309. package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
  310. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
  311. package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
  312. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
  313. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
  314. package/deps/rocksdb/rocksdb/src.mk +17 -11
  315. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
  316. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
  317. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
  318. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
  319. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
  320. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
  321. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
  322. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
  323. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
  324. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
  325. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
  326. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
  327. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
  328. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
  329. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
  330. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
  331. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
  332. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
  333. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
  334. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
  335. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
  336. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
  337. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
  338. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
  339. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
  340. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
  341. package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
  342. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
  343. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
  344. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
  345. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
  346. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
  347. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
  348. package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
  349. package/deps/rocksdb/rocksdb/table/format.cc +62 -44
  350. package/deps/rocksdb/rocksdb/table/format.h +35 -12
  351. package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
  352. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  353. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
  354. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
  355. package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
  356. package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
  357. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
  358. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
  359. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
  360. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
  361. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
  362. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
  363. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  364. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
  365. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
  366. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
  367. package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
  368. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
  369. package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
  370. package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
  371. package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
  372. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
  373. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
  374. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
  375. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
  376. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
  377. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
  378. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
  379. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
  380. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  381. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
  382. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
  383. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
  384. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
  385. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
  386. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
  387. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
  388. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
  389. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
  390. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
  391. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
  392. package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
  393. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
  394. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
  395. package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
  396. package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
  397. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
  398. package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
  399. package/deps/rocksdb/rocksdb/util/compression.h +348 -232
  400. package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
  401. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
  402. package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
  403. package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
  404. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
  405. package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
  406. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
  407. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
  408. package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
  409. package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
  410. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  411. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  412. package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
  413. package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
  414. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
  415. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
  416. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
  417. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
  418. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
  419. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
  420. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
  427. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
  428. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  429. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
  430. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
  431. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
  432. package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
  433. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
  434. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
  435. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
  436. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
  437. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
  438. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
  439. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
  440. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
  441. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
  442. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
  443. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
  444. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
  445. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
  446. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
  447. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
  448. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
  449. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
  450. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
  451. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
  452. package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
  453. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
  454. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
  455. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
  456. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
  457. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
  458. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
  459. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
  460. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
  461. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
  462. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
  463. package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
  464. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
  465. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
  466. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
  467. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
  468. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
  469. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
  470. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
  471. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
  472. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
  473. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
  474. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
  475. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +1 -1
  476. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  477. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +2 -1
  478. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
  479. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
  480. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
  481. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
  482. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
  483. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
  484. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
  485. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
  486. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
  487. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
  488. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
  489. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
  490. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
  491. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
  492. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
  493. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
  494. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
  495. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
  496. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
  497. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
  498. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
  499. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
  500. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
  501. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
  502. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
  503. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
  504. package/deps/rocksdb/rocksdb.gyp +5 -0
  505. package/index.js +47 -2
  506. package/package.json +8 -1
  507. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  508. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
@@ -299,9 +299,18 @@ TEST_P(PrefetchTest, Basic) {
299
299
  const uint64_t prev_table_open_prefetch_tail_hit =
300
300
  options.statistics->getTickerCount(TABLE_OPEN_PREFETCH_TAIL_HIT);
301
301
 
302
+ HistogramData pre_compaction_prefetch_bytes;
303
+ options.statistics->histogramData(COMPACTION_PREFETCH_BYTES,
304
+ &pre_compaction_prefetch_bytes);
305
+ ASSERT_EQ(pre_compaction_prefetch_bytes.count, 0);
306
+
302
307
  // commenting out the line below causes the example to work correctly
303
308
  ASSERT_OK(db_->CompactRange(CompactRangeOptions(), &least, &greatest));
304
309
 
310
+ HistogramData post_compaction_prefetch_bytes;
311
+ options.statistics->histogramData(COMPACTION_PREFETCH_BYTES,
312
+ &post_compaction_prefetch_bytes);
313
+
305
314
  HistogramData cur_table_open_prefetch_tail_read;
306
315
  options.statistics->histogramData(TABLE_OPEN_PREFETCH_TAIL_READ_BYTES,
307
316
  &cur_table_open_prefetch_tail_read);
@@ -318,6 +327,7 @@ TEST_P(PrefetchTest, Basic) {
318
327
  ASSERT_GT(fs->GetPrefetchCount(), 1);
319
328
  ASSERT_EQ(0, buff_prefetch_count);
320
329
  fs->ClearPrefetchCount();
330
+ ASSERT_EQ(post_compaction_prefetch_bytes.count, 0);
321
331
  } else {
322
332
  ASSERT_FALSE(fs->IsPrefetchCalled());
323
333
  // To rule out false positive by the SST file tail prefetch during
@@ -331,6 +341,20 @@ TEST_P(PrefetchTest, Basic) {
331
341
  prev_table_open_prefetch_tail_hit);
332
342
  ASSERT_GE(cur_table_open_prefetch_tail_miss,
333
343
  prev_table_open_prefetch_tail_miss);
344
+
345
+ ASSERT_GT(post_compaction_prefetch_bytes.count, 0);
346
+
347
+ // Not an exact match due to potential roundup/down for alignment
348
+ auto expected_compaction_readahead_size =
349
+ Options().compaction_readahead_size;
350
+ ASSERT_LE(post_compaction_prefetch_bytes.max,
351
+ expected_compaction_readahead_size * 1.1);
352
+ ASSERT_GE(post_compaction_prefetch_bytes.max,
353
+ expected_compaction_readahead_size * 0.9);
354
+ ASSERT_LE(post_compaction_prefetch_bytes.average,
355
+ expected_compaction_readahead_size * 1.1);
356
+ ASSERT_GE(post_compaction_prefetch_bytes.average,
357
+ expected_compaction_readahead_size * 0.9);
334
358
  }
335
359
 
336
360
  for (bool disable_io : {false, true}) {
@@ -3251,8 +3275,9 @@ TEST_F(FilePrefetchBufferTest, SyncReadaheadStats) {
3251
3275
  ReadaheadParams readahead_params;
3252
3276
  readahead_params.initial_readahead_size = 8192;
3253
3277
  readahead_params.max_readahead_size = 8192;
3254
- FilePrefetchBuffer fpb(readahead_params, true, false, fs(), nullptr,
3255
- stats.get());
3278
+ FilePrefetchBuffer fpb(
3279
+ readahead_params, true, false, fs(), nullptr, stats.get(),
3280
+ nullptr /* cb */, FilePrefetchBufferUsage::kUserScanPrefetch /* usage */);
3256
3281
  Slice result;
3257
3282
  // Simulate a seek of 4096 bytes at offset 0. Due to the readahead settings,
3258
3283
  // it will do a read of offset 0 and length - (4096 + 8192) 12288.
@@ -3290,8 +3315,71 @@ TEST_F(FilePrefetchBufferTest, SyncReadaheadStats) {
3290
3315
  /* 24576(end offset of the buffer) - 16000(requested offset) =*/8576);
3291
3316
  }
3292
3317
 
3293
- class FSBufferPrefetchTest : public testing::Test,
3294
- public ::testing::WithParamInterface<bool> {
3318
+ TEST_F(FilePrefetchBufferTest, ForCompaction) {
3319
+ // Make sure TryReadWithCache with for_compaction=true works without file
3320
+ // system buffer reuse optimization
3321
+ std::string fname = "fs-prefetch-buffer-for-compaction";
3322
+ Random rand(0);
3323
+ std::string content = rand.RandomString(64 * 1024);
3324
+ Write(fname, content);
3325
+
3326
+ FileOptions opts;
3327
+ std::unique_ptr<RandomAccessFileReader> r;
3328
+ Read(fname, opts, &r);
3329
+
3330
+ std::shared_ptr<Statistics> stats = CreateDBStatistics();
3331
+ ReadaheadParams readahead_params;
3332
+ readahead_params.initial_readahead_size = 8192;
3333
+ readahead_params.max_readahead_size = 8192;
3334
+ readahead_params.num_buffers = 1;
3335
+
3336
+ FilePrefetchBuffer fpb(readahead_params, true /* enable */,
3337
+ false /* track_min_offset */, fs(), nullptr,
3338
+ stats.get());
3339
+
3340
+ Slice result;
3341
+ Status s;
3342
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 0 /* offset */,
3343
+ 3000 /* n */, &result, &s, true));
3344
+ ASSERT_EQ(s, Status::OK());
3345
+ ASSERT_EQ(result.size(), 3000);
3346
+ ASSERT_EQ(strncmp(result.data(), content.substr(0, 3000).c_str(), 3000), 0);
3347
+
3348
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 3000 /* offset */,
3349
+ 10000 /* n */, &result, &s, true));
3350
+ ASSERT_EQ(s, Status::OK());
3351
+ ASSERT_EQ(result.size(), 10000);
3352
+ ASSERT_EQ(strncmp(result.data(), content.substr(3000, 10000).c_str(), 10000),
3353
+ 0);
3354
+
3355
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 15000 /* offset */,
3356
+ 4096 /* n */, &result, &s, true));
3357
+ ASSERT_EQ(s, Status::OK());
3358
+ ASSERT_EQ(result.size(), 4096);
3359
+ ASSERT_EQ(strncmp(result.data(), content.substr(15000, 4096).c_str(), 4096),
3360
+ 0);
3361
+
3362
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 40000 /* offset */,
3363
+ 20000 /* n */, &result, &s, true));
3364
+ ASSERT_EQ(s, Status::OK());
3365
+ ASSERT_EQ(result.size(), 20000);
3366
+ ASSERT_EQ(strncmp(result.data(), content.substr(40000, 20000).c_str(), 20000),
3367
+ 0);
3368
+
3369
+ // Try reading past end of file
3370
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 60000 /* offset */,
3371
+ 10000 /* n */, &result, &s, true));
3372
+ ASSERT_EQ(s, Status::OK());
3373
+ ASSERT_EQ(result.size(), 64 * 1024 - 60000);
3374
+ ASSERT_EQ(
3375
+ strncmp(result.data(), content.substr(60000, 64 * 1024 - 60000).c_str(),
3376
+ 64 * 1024 - 60000),
3377
+ 0);
3378
+ }
3379
+
3380
+ class FSBufferPrefetchTest
3381
+ : public testing::Test,
3382
+ public ::testing::WithParamInterface<std::tuple<bool, bool>> {
3295
3383
  public:
3296
3384
  // Mock file system supporting the kFSBuffer buffer reuse operation
3297
3385
  class BufferReuseFS : public FileSystemWrapper {
@@ -3316,12 +3404,24 @@ class FSBufferPrefetchTest : public testing::Test,
3316
3404
  IODebugContext* dbg) override {
3317
3405
  for (size_t i = 0; i < num_reqs; ++i) {
3318
3406
  FSReadRequest& req = reqs[i];
3319
- FSAllocationPtr buffer(new char[req.len], [](void* ptr) {
3320
- delete[] static_cast<char*>(ptr);
3321
- });
3322
- req.fs_scratch = std::move(buffer);
3407
+
3408
+ // We cannot assume that fs_scratch points to the start of
3409
+ // the read data. We can have the FSAllocationPtr point to a
3410
+ // wrapper around the result buffer in our test implementation so
3411
+ // that we can catch whenever we incorrectly make this assumption.
3412
+ // See https://github.com/facebook/rocksdb/pull/13189 for more
3413
+ // context.
3414
+ char* internalData = new char[req.len];
3323
3415
  req.status = Read(req.offset, req.len, options, &req.result,
3324
- static_cast<char*>(req.fs_scratch.get()), dbg);
3416
+ internalData, dbg);
3417
+
3418
+ Slice* internalSlice = new Slice(internalData, req.len);
3419
+ FSAllocationPtr internalPtr(internalSlice, [](void* ptr) {
3420
+ delete[] static_cast<const char*>(
3421
+ static_cast<Slice*>(ptr)->data_);
3422
+ delete static_cast<Slice*>(ptr);
3423
+ });
3424
+ req.fs_scratch = std::move(internalPtr);
3325
3425
  }
3326
3426
  return IOStatus::OK();
3327
3427
  }
@@ -3343,7 +3443,7 @@ class FSBufferPrefetchTest : public testing::Test,
3343
3443
  void SetUp() override {
3344
3444
  SetupSyncPointsToMockDirectIO();
3345
3445
  env_ = Env::Default();
3346
- bool use_async_prefetch = GetParam();
3446
+ bool use_async_prefetch = std::get<0>(GetParam());
3347
3447
  if (use_async_prefetch) {
3348
3448
  fs_ = FileSystem::Default();
3349
3449
  } else {
@@ -3387,8 +3487,13 @@ class FSBufferPrefetchTest : public testing::Test,
3387
3487
  std::string Path(const std::string& fname) { return test_dir_ + "/" + fname; }
3388
3488
  };
3389
3489
 
3490
+ // param 1: whether async IO is enabled (num_buffers_ > 1)
3491
+ // param 2: whether for_compaction is set to true for TryReadFromCache requests
3492
+ // 3 out of these 4 combinations are tested (async IO is not allowed for
3493
+ // compaction reads)
3390
3494
  INSTANTIATE_TEST_CASE_P(FSBufferPrefetchTest, FSBufferPrefetchTest,
3391
- ::testing::Bool());
3495
+ ::testing::Combine(::testing::Bool(),
3496
+ ::testing::Bool()));
3392
3497
 
3393
3498
  TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
3394
3499
  // Check that the main buffer, the overlap_buf_, and the secondary buffer (in
@@ -3407,12 +3512,20 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
3407
3512
  ReadaheadParams readahead_params;
3408
3513
  readahead_params.initial_readahead_size = 8192;
3409
3514
  readahead_params.max_readahead_size = 8192;
3410
- bool use_async_prefetch = GetParam();
3515
+ bool use_async_prefetch = std::get<0>(GetParam());
3516
+ bool for_compaction = std::get<1>(GetParam());
3517
+ // We disallow async IO for compaction reads since they are background
3518
+ // operations anyways and not as latency sensitive as user-initiated reads
3519
+ if (use_async_prefetch && for_compaction) {
3520
+ return;
3521
+ }
3411
3522
  size_t num_buffers = use_async_prefetch ? 2 : 1;
3412
3523
  readahead_params.num_buffers = num_buffers;
3413
3524
 
3414
- FilePrefetchBuffer fpb(readahead_params, true, false, fs(), clock(),
3415
- stats.get());
3525
+ FilePrefetchBuffer fpb(
3526
+ readahead_params, true /* enable */, false /* track_min_offset */, fs(),
3527
+ clock(), stats.get(), nullptr /* cb */,
3528
+ FilePrefetchBufferUsage::kUserScanPrefetch /* usage */);
3416
3529
 
3417
3530
  int overlap_buffer_write_ct = 0;
3418
3531
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
@@ -3426,15 +3539,18 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
3426
3539
  std::vector<std::tuple<uint64_t, size_t, bool>> buffer_info(num_buffers);
3427
3540
  std::pair<uint64_t, size_t> overlap_buffer_info;
3428
3541
  bool could_read_from_cache =
3429
- fpb.TryReadFromCache(IOOptions(), r.get(), 0, 4096, &result, &s);
3542
+ fpb.TryReadFromCache(IOOptions(), r.get(), 0 /* offset */, 4096 /* n */,
3543
+ &result, &s, for_compaction);
3430
3544
  // Platforms that don't have IO uring may not support async IO.
3431
3545
  if (use_async_prefetch && s.IsNotSupported()) {
3432
3546
  return;
3433
3547
  }
3434
3548
  ASSERT_TRUE(could_read_from_cache);
3435
3549
  ASSERT_EQ(s, Status::OK());
3550
+
3436
3551
  ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 0);
3437
3552
  ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL), 0);
3553
+
3438
3554
  ASSERT_EQ(strncmp(result.data(), content.substr(0, 4096).c_str(), 4096), 0);
3439
3555
  fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
3440
3556
  fpb.TEST_GetBufferOffsetandSize(buffer_info);
@@ -3460,12 +3576,15 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
3460
3576
 
3461
3577
  // Simulate a block cache hit
3462
3578
  fpb.UpdateReadPattern(4096, 4096, false);
3463
- ASSERT_TRUE(
3464
- fpb.TryReadFromCache(IOOptions(), r.get(), 8192, 8192, &result, &s));
3579
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 8192 /* offset */,
3580
+ 8192 /* n */, &result, &s, for_compaction));
3465
3581
  ASSERT_EQ(s, Status::OK());
3466
- ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 0);
3467
- ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
3468
- 4096); // 8192-12288
3582
+ if (!for_compaction) {
3583
+ ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 0);
3584
+ ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
3585
+ 4096); // 8192-12288
3586
+ }
3587
+
3469
3588
  ASSERT_EQ(strncmp(result.data(), content.substr(8192, 8192).c_str(), 8192),
3470
3589
  0);
3471
3590
  fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
@@ -3496,12 +3615,16 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
3496
3615
  ASSERT_EQ(std::get<1>(buffer_info[0]), 12288);
3497
3616
  }
3498
3617
 
3499
- ASSERT_TRUE(
3500
- fpb.TryReadFromCache(IOOptions(), r.get(), 12288, 4096, &result, &s));
3618
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 12288 /* offset */,
3619
+ 4096 /* n */, &result, &s, for_compaction));
3501
3620
  ASSERT_EQ(s, Status::OK());
3502
- ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 1);
3503
- ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
3504
- 4096); // 12288-16384
3621
+
3622
+ if (!for_compaction) {
3623
+ ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 1);
3624
+ ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
3625
+ 4096); // 12288-16384
3626
+ }
3627
+
3505
3628
  ASSERT_EQ(strncmp(result.data(), content.substr(12288, 4096).c_str(), 4096),
3506
3629
  0);
3507
3630
  fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
@@ -3528,13 +3651,17 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchStatsInternals) {
3528
3651
  }
3529
3652
 
3530
3653
  // Read from 16000-26000 (start and end do not meet normal alignment)
3531
- ASSERT_TRUE(
3532
- fpb.TryReadFromCache(IOOptions(), r.get(), 16000, 10000, &result, &s));
3654
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 16000 /* offset */,
3655
+ 10000 /* n */, &result, &s, for_compaction));
3533
3656
  ASSERT_EQ(s, Status::OK());
3534
- ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 0);
3535
- ASSERT_EQ(
3536
- stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
3537
- /* 24576(end offset of the buffer) - 16000(requested offset) =*/8576);
3657
+
3658
+ if (!for_compaction) {
3659
+ ASSERT_EQ(stats->getAndResetTickerCount(PREFETCH_HITS), 0);
3660
+ ASSERT_EQ(
3661
+ stats->getAndResetTickerCount(PREFETCH_BYTES_USEFUL),
3662
+ /* 24576(end offset of the buffer) - 16000(requested offset) =*/8576);
3663
+ }
3664
+
3538
3665
  ASSERT_EQ(strncmp(result.data(), content.substr(16000, 10000).c_str(), 10000),
3539
3666
  0);
3540
3667
  fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
@@ -3583,10 +3710,17 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
3583
3710
  // Readahead size will double each time
3584
3711
  readahead_params.initial_readahead_size = 5;
3585
3712
  readahead_params.max_readahead_size = 100;
3586
- bool use_async_prefetch = GetParam();
3713
+ bool use_async_prefetch = std::get<0>(GetParam());
3714
+ bool for_compaction = std::get<1>(GetParam());
3715
+ // We disallow async IO for compaction reads since they are background
3716
+ // operations anyways and their latencies are not visible to the end user
3717
+ if (use_async_prefetch && for_compaction) {
3718
+ return;
3719
+ }
3587
3720
  size_t num_buffers = use_async_prefetch ? 2 : 1;
3588
3721
  readahead_params.num_buffers = num_buffers;
3589
- FilePrefetchBuffer fpb(readahead_params, true, false, fs(), clock(),
3722
+ FilePrefetchBuffer fpb(readahead_params, true /* enable */,
3723
+ false /* track_min_offset */, fs(), clock(),
3590
3724
  stats.get());
3591
3725
 
3592
3726
  int overlap_buffer_write_ct = 0;
@@ -3601,7 +3735,8 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
3601
3735
  std::vector<std::tuple<uint64_t, size_t, bool>> buffer_info(num_buffers);
3602
3736
  std::pair<uint64_t, size_t> overlap_buffer_info;
3603
3737
  bool could_read_from_cache =
3604
- fpb.TryReadFromCache(IOOptions(), r.get(), 5, 3, &result, &s);
3738
+ fpb.TryReadFromCache(IOOptions(), r.get(), 5 /* offset */, 3 /* n */,
3739
+ &result, &s, for_compaction);
3605
3740
  // Platforms that don't have IO uring may not support async IO.
3606
3741
  if (use_async_prefetch && s.IsNotSupported()) {
3607
3742
  return;
@@ -3633,7 +3768,8 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
3633
3768
  ASSERT_EQ(std::get<1>(buffer_info[0]), 3 + 5);
3634
3769
  }
3635
3770
 
3636
- ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 16, 7, &result, &s));
3771
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 16 /* offset */,
3772
+ 7 /* n */, &result, &s, for_compaction));
3637
3773
  ASSERT_EQ(s, Status::OK());
3638
3774
  ASSERT_EQ(strncmp(result.data(), content.substr(16, 7).c_str(), 7), 0);
3639
3775
  fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
@@ -3657,16 +3793,18 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
3657
3793
 
3658
3794
  // Go backwards
3659
3795
  if (use_async_prefetch) {
3660
- ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 10, 8, &result, &s));
3796
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 10 /* offset */,
3797
+ 8 /* n */, &result, &s, for_compaction));
3661
3798
  } else {
3662
3799
  // TryReadFromCacheUntracked returns false since the offset
3663
3800
  // requested is less than the start of our buffer
3664
- ASSERT_FALSE(
3665
- fpb.TryReadFromCache(IOOptions(), r.get(), 10, 8, &result, &s));
3801
+ ASSERT_FALSE(fpb.TryReadFromCache(IOOptions(), r.get(), 10 /* offset */,
3802
+ 8 /* n */, &result, &s, for_compaction));
3666
3803
  }
3667
3804
  ASSERT_EQ(s, Status::OK());
3668
3805
 
3669
- ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 27, 6, &result, &s));
3806
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 27 /* offset */,
3807
+ 6 /* n */, &result, &s, for_compaction));
3670
3808
  ASSERT_EQ(s, Status::OK());
3671
3809
  ASSERT_EQ(strncmp(result.data(), content.substr(27, 6).c_str(), 6), 0);
3672
3810
  fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
@@ -3687,7 +3825,8 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
3687
3825
  ASSERT_EQ(std::get<1>(buffer_info[0]), 7 + 10);
3688
3826
  }
3689
3827
 
3690
- ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 30, 20, &result, &s));
3828
+ ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 30 /* offset */,
3829
+ 20 /* n */, &result, &s, for_compaction));
3691
3830
  ASSERT_EQ(s, Status::OK());
3692
3831
  ASSERT_EQ(strncmp(result.data(), content.substr(30, 20).c_str(), 20), 0);
3693
3832
  fpb.TEST_GetOverlapBufferOffsetandSize(overlap_buffer_info);
@@ -3710,13 +3849,13 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchUnalignedReads) {
3710
3849
  }
3711
3850
  }
3712
3851
 
3713
- TEST_P(FSBufferPrefetchTest, FSBufferPrefetchForCompaction) {
3714
- // Quick test to make sure file system buffer reuse is disabled for compaction
3715
- // reads. Will update once it is re-enabled
3716
- // Primarily making sure we do not hit unsigned integer overflow issues
3717
- std::string fname = "fs-buffer-prefetch-for-compaction";
3852
+ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchRandomized) {
3853
+ // This test is meant to find untested code paths. It does very simple
3854
+ // verifications and relies on debug assertions to catch invariant violations
3855
+ // We scan through a file reading between 0 and 16 KiB at a time
3856
+ std::string fname = "fs-buffer-prefetch-randomized";
3718
3857
  Random rand(0);
3719
- std::string content = rand.RandomString(32768);
3858
+ std::string content = rand.RandomString(16 * 1024 * 1024);
3720
3859
  Write(fname, content);
3721
3860
 
3722
3861
  FileOptions opts;
@@ -3725,45 +3864,59 @@ TEST_P(FSBufferPrefetchTest, FSBufferPrefetchForCompaction) {
3725
3864
 
3726
3865
  std::shared_ptr<Statistics> stats = CreateDBStatistics();
3727
3866
  ReadaheadParams readahead_params;
3728
- readahead_params.initial_readahead_size = 8192;
3729
- readahead_params.max_readahead_size = 8192;
3730
- bool use_async_prefetch = GetParam();
3867
+ readahead_params.initial_readahead_size = 512;
3868
+ readahead_params.max_readahead_size = 2048;
3869
+ bool use_async_prefetch = std::get<0>(GetParam());
3870
+ bool for_compaction = std::get<1>(GetParam());
3731
3871
  // Async IO is not enabled for compaction prefetching
3732
- if (use_async_prefetch) {
3872
+ if (use_async_prefetch && for_compaction) {
3733
3873
  return;
3734
3874
  }
3735
- readahead_params.num_buffers = 1;
3875
+ size_t num_buffers = use_async_prefetch ? 2 : 1;
3876
+ readahead_params.num_buffers = num_buffers;
3736
3877
 
3737
- FilePrefetchBuffer fpb(readahead_params, true, false, fs(), clock(),
3878
+ FilePrefetchBuffer fpb(readahead_params, true /* enable */,
3879
+ false /* track_min_offset */, fs(), clock(),
3738
3880
  stats.get());
3739
3881
 
3740
3882
  Slice result;
3741
3883
  Status s;
3742
- ASSERT_TRUE(
3743
- fpb.TryReadFromCache(IOOptions(), r.get(), 0, 4096, &result, &s, true));
3744
- ASSERT_EQ(s, Status::OK());
3745
- ASSERT_EQ(strncmp(result.data(), content.substr(0, 4096).c_str(), 4096), 0);
3746
3884
 
3747
- fpb.UpdateReadPattern(4096, 4096, false);
3748
-
3749
- ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 8192, 8192, &result,
3750
- &s, true));
3751
- ASSERT_EQ(s, Status::OK());
3752
- ASSERT_EQ(strncmp(result.data(), content.substr(8192, 8192).c_str(), 8192),
3753
- 0);
3754
-
3755
- ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 12288, 4096, &result,
3756
- &s, true));
3757
- ASSERT_EQ(s, Status::OK());
3758
- ASSERT_EQ(strncmp(result.data(), content.substr(12288, 4096).c_str(), 4096),
3759
- 0);
3760
-
3761
- // Read from 16000-26000 (start and end do not meet normal alignment)
3762
- ASSERT_TRUE(fpb.TryReadFromCache(IOOptions(), r.get(), 16000, 10000, &result,
3763
- &s, true));
3764
- ASSERT_EQ(s, Status::OK());
3765
- ASSERT_EQ(strncmp(result.data(), content.substr(16000, 10000).c_str(), 10000),
3766
- 0);
3885
+ uint64_t offset = 0;
3886
+ Random rnd(987654);
3887
+ for (int i = 0; i < 1000; i++) {
3888
+ size_t len = rnd.Uniform(16 * 1024);
3889
+ if (offset >= content.size()) {
3890
+ std::cout << "Stopped early after " << i << " iterations" << std::endl;
3891
+ break;
3892
+ }
3893
+ bool could_read_from_cache = fpb.TryReadFromCache(
3894
+ IOOptions(), r.get(), offset, len, &result, &s, for_compaction);
3895
+ // Platforms that don't have IO uring may not support async IO.
3896
+ if (use_async_prefetch && s.IsNotSupported()) {
3897
+ return;
3898
+ }
3899
+ ASSERT_TRUE(could_read_from_cache);
3900
+ ASSERT_EQ(s, Status::OK());
3901
+ ASSERT_EQ(result.size(),
3902
+ std::min(len, content.size() - static_cast<size_t>(offset)));
3903
+ ASSERT_EQ(strncmp(result.data(),
3904
+ content.substr(offset, offset + len).c_str(), len),
3905
+ 0);
3906
+ if (i % 4 == 0) {
3907
+ // Test reads where we "skip forward" in the file more than we could read
3908
+ // ahead
3909
+ offset += len + 2 * readahead_params.max_readahead_size;
3910
+ } else if (i % 4 == 1) {
3911
+ // Test reads where we "skip forward" in the file but should have some
3912
+ // overlap with the read ahead data
3913
+ offset += len + readahead_params.max_readahead_size / 2;
3914
+ } else {
3915
+ // Test "back to back" reads (next read starts right at end of previous
3916
+ // one)
3917
+ offset += len;
3918
+ }
3919
+ }
3767
3920
  }
3768
3921
 
3769
3922
  } // namespace ROCKSDB_NAMESPACE
@@ -106,11 +106,14 @@ IOStatus RandomAccessFileReader::Create(
106
106
 
107
107
  IOStatus RandomAccessFileReader::Read(const IOOptions& opts, uint64_t offset,
108
108
  size_t n, Slice* result, char* scratch,
109
- AlignedBuf* aligned_buf) const {
109
+ AlignedBuf* aligned_buf,
110
+ IODebugContext* dbg) const {
110
111
  (void)aligned_buf;
111
112
  const Env::IOPriority rate_limiter_priority = opts.rate_limiter_priority;
112
113
 
113
114
  TEST_SYNC_POINT_CALLBACK("RandomAccessFileReader::Read", nullptr);
115
+ TEST_SYNC_POINT_CALLBACK("RandomAccessFileReader::Read:IODebugContext",
116
+ const_cast<void*>(static_cast<void*>(dbg)));
114
117
 
115
118
  // To be paranoid: modify scratch a little bit, so in case underlying
116
119
  // FileSystem doesn't fill the buffer but return success and `scratch` returns
@@ -175,7 +178,7 @@ IOStatus RandomAccessFileReader::Read(const IOOptions& opts, uint64_t offset,
175
178
  // the opts.timeout before calling file_->Read
176
179
  assert(!opts.timeout.count() || allowed == read_size);
177
180
  io_s = file_->Read(aligned_offset + buf.CurrentSize(), allowed, opts,
178
- &tmp, buf.Destination(), nullptr);
181
+ &tmp, buf.Destination(), dbg);
179
182
  }
180
183
  if (ShouldNotifyListeners()) {
181
184
  auto finish_ts = FileOperationInfo::FinishNow();
@@ -237,7 +240,7 @@ IOStatus RandomAccessFileReader::Read(const IOOptions& opts, uint64_t offset,
237
240
  // the opts.timeout before calling file_->Read
238
241
  assert(!opts.timeout.count() || allowed == n);
239
242
  io_s = file_->Read(offset + pos, allowed, opts, &tmp_result,
240
- scratch + pos, nullptr);
243
+ scratch + pos, dbg);
241
244
  }
242
245
  if (ShouldNotifyListeners()) {
243
246
  auto finish_ts = FileOperationInfo::FinishNow();
@@ -311,7 +314,8 @@ bool TryMerge(FSReadRequest* dest, const FSReadRequest& src) {
311
314
  IOStatus RandomAccessFileReader::MultiRead(const IOOptions& opts,
312
315
  FSReadRequest* read_reqs,
313
316
  size_t num_reqs,
314
- AlignedBuf* aligned_buf) const {
317
+ AlignedBuf* aligned_buf,
318
+ IODebugContext* dbg) const {
315
319
  (void)aligned_buf; // suppress warning of unused variable in LITE mode
316
320
  assert(num_reqs > 0);
317
321
 
@@ -420,8 +424,10 @@ IOStatus RandomAccessFileReader::MultiRead(const IOOptions& opts,
420
424
  remaining_bytes -= request_bytes;
421
425
  }
422
426
  }
423
- io_s = file_->MultiRead(fs_reqs, num_fs_reqs, opts,
424
- /*IODebugContext*=*/nullptr);
427
+ TEST_SYNC_POINT_CALLBACK(
428
+ "RandomAccessFileReader::MultiRead:IODebugContext",
429
+ const_cast<void*>(static_cast<void*>(dbg)));
430
+ io_s = file_->MultiRead(fs_reqs, num_fs_reqs, opts, dbg);
425
431
  RecordInHistogram(stats_, MULTIGET_IO_BATCH_SIZE, num_fs_reqs);
426
432
  }
427
433
 
@@ -475,18 +481,21 @@ IOStatus RandomAccessFileReader::MultiRead(const IOOptions& opts,
475
481
  }
476
482
 
477
483
  IOStatus RandomAccessFileReader::PrepareIOOptions(const ReadOptions& ro,
478
- IOOptions& opts) const {
484
+ IOOptions& opts,
485
+ IODebugContext* dbg) const {
479
486
  if (clock_ != nullptr) {
480
- return PrepareIOFromReadOptions(ro, clock_, opts);
487
+ return PrepareIOFromReadOptions(ro, clock_, opts, dbg);
481
488
  } else {
482
- return PrepareIOFromReadOptions(ro, SystemClock::Default().get(), opts);
489
+ return PrepareIOFromReadOptions(ro, SystemClock::Default().get(), opts,
490
+ dbg);
483
491
  }
484
492
  }
485
493
 
486
494
  IOStatus RandomAccessFileReader::ReadAsync(
487
495
  FSReadRequest& req, const IOOptions& opts,
488
496
  std::function<void(FSReadRequest&, void*)> cb, void* cb_arg,
489
- void** io_handle, IOHandleDeleter* del_fn, AlignedBuf* aligned_buf) {
497
+ void** io_handle, IOHandleDeleter* del_fn, AlignedBuf* aligned_buf,
498
+ IODebugContext* dbg) {
490
499
  IOStatus s;
491
500
  // Create a callback and populate info.
492
501
  auto read_async_callback =
@@ -532,14 +541,14 @@ IOStatus RandomAccessFileReader::ReadAsync(
532
541
  (stats_ != nullptr) ? &elapsed : nullptr, true /*overwrite*/,
533
542
  true /*delay_enabled*/);
534
543
  s = file_->ReadAsync(aligned_req, opts, read_async_callback,
535
- read_async_info, io_handle, del_fn, nullptr /*dbg*/);
544
+ read_async_info, io_handle, del_fn, dbg);
536
545
  } else {
537
546
  StopWatch sw(clock_, stats_, hist_type_,
538
547
  GetFileReadHistograms(stats_, opts.io_activity),
539
548
  (stats_ != nullptr) ? &elapsed : nullptr, true /*overwrite*/,
540
549
  true /*delay_enabled*/);
541
550
  s = file_->ReadAsync(req, opts, read_async_callback, read_async_info,
542
- io_handle, del_fn, nullptr /*dbg*/);
551
+ io_handle, del_fn, dbg);
543
552
  }
544
553
  RecordTick(stats_, READ_ASYNC_MICROS, elapsed);
545
554
 
@@ -76,7 +76,6 @@ class RandomAccessFileReader {
76
76
  io_status.PermitUncheckedError();
77
77
  }
78
78
 
79
-
80
79
  bool ShouldNotifyListeners() const { return !listeners_.empty(); }
81
80
 
82
81
  FSRandomAccessFilePtr file_;
@@ -165,7 +164,8 @@ class RandomAccessFileReader {
165
164
  // the internally allocated buffer on return, and the result refers to a
166
165
  // region in aligned_buf.
167
166
  IOStatus Read(const IOOptions& opts, uint64_t offset, size_t n, Slice* result,
168
- char* scratch, AlignedBuf* aligned_buf) const;
167
+ char* scratch, AlignedBuf* aligned_buf,
168
+ IODebugContext* dbg = nullptr) const;
169
169
 
170
170
  // REQUIRES:
171
171
  // num_reqs > 0, reqs do not overlap, and offsets in reqs are increasing.
@@ -173,10 +173,12 @@ class RandomAccessFileReader {
173
173
  // In direct IO mode, aligned_buf stores the aligned buffer allocated inside
174
174
  // MultiRead, the result Slices in reqs refer to aligned_buf.
175
175
  IOStatus MultiRead(const IOOptions& opts, FSReadRequest* reqs,
176
- size_t num_reqs, AlignedBuf* aligned_buf) const;
176
+ size_t num_reqs, AlignedBuf* aligned_buf,
177
+ IODebugContext* dbg = nullptr) const;
177
178
 
178
- IOStatus Prefetch(const IOOptions& opts, uint64_t offset, size_t n) const {
179
- return file_->Prefetch(offset, n, opts, nullptr);
179
+ IOStatus Prefetch(const IOOptions& opts, uint64_t offset, size_t n,
180
+ IODebugContext* dbg = nullptr) const {
181
+ return file_->Prefetch(offset, n, opts, dbg);
180
182
  }
181
183
 
182
184
  FSRandomAccessFile* file() { return file_.get(); }
@@ -185,12 +187,13 @@ class RandomAccessFileReader {
185
187
 
186
188
  bool use_direct_io() const { return file_->use_direct_io(); }
187
189
 
188
- IOStatus PrepareIOOptions(const ReadOptions& ro, IOOptions& opts) const;
190
+ IOStatus PrepareIOOptions(const ReadOptions& ro, IOOptions& opts,
191
+ IODebugContext* dbg = nullptr) const;
189
192
 
190
193
  IOStatus ReadAsync(FSReadRequest& req, const IOOptions& opts,
191
194
  std::function<void(FSReadRequest&, void*)> cb,
192
195
  void* cb_arg, void** io_handle, IOHandleDeleter* del_fn,
193
- AlignedBuf* aligned_buf);
196
+ AlignedBuf* aligned_buf, IODebugContext* dbg = nullptr);
194
197
 
195
198
  void ReadAsyncCallback(FSReadRequest& req, void* cb_arg);
196
199
  };