@nxtedition/rocksdb 6.0.0 → 6.0.3

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 (488) hide show
  1. package/BUILDING.md +18 -0
  2. package/binding.cc +16 -17
  3. package/binding.gyp +2 -2
  4. package/deps/rocksdb/build_version.cc +4 -10
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +26 -3
  6. package/deps/rocksdb/rocksdb/Makefile +73 -91
  7. package/deps/rocksdb/rocksdb/TARGETS +27 -2
  8. package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
  10. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
  13. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  14. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  15. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  16. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  17. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  18. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  19. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  20. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  21. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  22. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  23. package/deps/rocksdb/rocksdb/common.mk +30 -0
  24. package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
  25. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
  26. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
  27. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
  28. package/deps/rocksdb/rocksdb/db/builder.cc +22 -7
  29. package/deps/rocksdb/rocksdb/db/c.cc +71 -0
  30. package/deps/rocksdb/rocksdb/db/c_test.c +28 -2
  31. package/deps/rocksdb/rocksdb/db/column_family.cc +12 -5
  32. package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
  33. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +54 -16
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +14 -2
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +85 -18
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +23 -22
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +151 -32
  47. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  48. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  49. package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
  50. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
  51. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +404 -32
  52. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
  53. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
  54. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
  55. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
  56. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +11 -20
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +15 -1
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +12 -9
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +42 -10
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +14 -4
  68. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
  69. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
  70. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
  71. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
  72. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
  73. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
  74. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
  75. package/deps/rocksdb/rocksdb/db/db_options_test.cc +28 -12
  76. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
  77. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
  78. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
  79. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +11 -6
  80. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
  81. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_test.cc +60 -42
  83. package/deps/rocksdb/rocksdb/db/db_test2.cc +244 -111
  84. package/deps/rocksdb/rocksdb/db/db_test_util.cc +101 -19
  85. package/deps/rocksdb/rocksdb/db/db_test_util.h +52 -2
  86. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
  87. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
  88. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +5 -175
  89. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
  90. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
  91. package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
  92. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  93. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
  94. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
  95. package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
  96. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +91 -12
  97. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -2
  98. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
  99. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
  100. package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
  101. package/deps/rocksdb/rocksdb/db/flush_job.cc +28 -15
  102. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
  103. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
  104. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  105. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +14 -1
  106. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
  107. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
  108. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
  109. package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
  110. package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
  111. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
  112. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
  113. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
  114. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
  115. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
  116. package/deps/rocksdb/rocksdb/db/repair.cc +13 -2
  117. package/deps/rocksdb/rocksdb/db/repair_test.cc +37 -15
  118. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
  119. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
  120. package/deps/rocksdb/rocksdb/db/table_cache.cc +20 -130
  121. package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
  122. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
  123. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  124. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +133 -133
  125. package/deps/rocksdb/rocksdb/db/version_edit.cc +22 -2
  126. package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
  127. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
  128. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -214
  129. package/deps/rocksdb/rocksdb/db/version_set.h +14 -3
  130. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
  131. package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
  132. package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
  133. package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
  134. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
  135. package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
  136. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
  137. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -6
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +44 -6
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +374 -275
  147. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
  148. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
  149. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
  150. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
  151. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
  152. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
  153. package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
  154. package/deps/rocksdb/rocksdb/env/env.cc +0 -60
  155. package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
  156. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  157. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
  158. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
  159. package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
  160. package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
  161. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
  162. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
  163. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +44 -22
  164. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  165. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
  166. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
  167. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
  168. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +60 -40
  169. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -0
  170. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
  171. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +49 -1
  172. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
  173. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
  174. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  175. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
  176. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
  177. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
  178. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  179. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
  180. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -3
  182. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
  184. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  185. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
  186. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
  188. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
  189. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
  191. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +378 -103
  192. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  194. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
  195. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  196. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
  197. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
  198. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
  199. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
  200. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
  201. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
  202. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
  203. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
  204. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
  205. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
  206. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +7 -8
  207. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
  208. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
  209. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
  210. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
  211. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
  212. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
  213. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
  214. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
  215. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
  216. package/deps/rocksdb/rocksdb/options/cf_options.cc +47 -38
  217. package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
  218. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
  219. package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
  220. package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
  221. package/deps/rocksdb/rocksdb/options/db_options.cc +46 -17
  222. package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
  223. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  224. package/deps/rocksdb/rocksdb/options/options_helper.cc +86 -39
  225. package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
  226. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +12 -7
  227. package/deps/rocksdb/rocksdb/options/options_test.cc +222 -68
  228. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
  229. package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
  230. package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
  231. package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
  232. package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
  233. package/deps/rocksdb/rocksdb/src.mk +6 -1
  234. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  235. package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
  236. package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
  237. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
  238. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +23 -8
  239. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
  240. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +81 -7
  241. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
  242. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +94 -726
  243. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -73
  247. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -5
  248. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  249. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +2 -11
  250. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
  251. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
  252. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
  253. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
  254. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
  255. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
  256. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
  257. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -2
  258. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
  259. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
  260. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  261. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +8 -4
  262. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
  263. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
  264. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +65 -7
  265. package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
  266. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
  267. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
  268. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
  269. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
  270. package/deps/rocksdb/rocksdb/table/format.cc +22 -20
  271. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
  272. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
  273. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  274. package/deps/rocksdb/rocksdb/table/multiget_context.h +60 -13
  275. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
  276. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
  277. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
  278. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
  279. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
  280. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  281. package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
  282. package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
  283. package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
  284. package/deps/rocksdb/rocksdb/table/unique_id.cc +84 -25
  285. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +37 -4
  286. package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -1
  287. package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
  288. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
  289. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
  290. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
  291. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  292. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +277 -105
  293. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
  294. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
  295. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
  296. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
  297. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
  298. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  299. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +26 -4
  300. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  301. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
  302. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
  303. package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
  304. package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
  305. package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
  306. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
  307. package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
  308. package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
  309. package/deps/rocksdb/rocksdb/util/compression.h +56 -7
  310. package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
  311. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
  312. package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
  313. package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
  314. package/deps/rocksdb/rocksdb/util/heap.h +5 -3
  315. package/deps/rocksdb/rocksdb/util/random.cc +1 -5
  316. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
  317. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
  318. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
  319. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
  320. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
  321. package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
  322. package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
  323. package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
  324. package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
  325. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
  326. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
  327. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
  328. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
  329. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
  331. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  332. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  333. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
  334. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
  335. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
  336. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
  337. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
  338. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
  339. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
  340. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
  341. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
  342. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
  343. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
  344. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
  345. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
  346. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
  347. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
  351. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
  352. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
  353. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
  356. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
  357. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  358. package/deps/rocksdb/rocksdb.gyp +47 -37
  359. package/package-lock.json +23687 -0
  360. package/package.json +2 -30
  361. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  362. package/prebuilds/darwin-x64/node.napi.node +0 -0
  363. package/prebuilds/linux-x64/node.napi.node +0 -0
  364. package/deps/liburing/liburing/README +0 -46
  365. package/deps/liburing/liburing/test/232c93d07b74-test.c +0 -305
  366. package/deps/liburing/liburing/test/35fa71a030ca-test.c +0 -329
  367. package/deps/liburing/liburing/test/500f9fbadef8-test.c +0 -89
  368. package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +0 -93
  369. package/deps/liburing/liburing/test/8a9973408177-test.c +0 -106
  370. package/deps/liburing/liburing/test/917257daa0fe-test.c +0 -53
  371. package/deps/liburing/liburing/test/Makefile +0 -312
  372. package/deps/liburing/liburing/test/a0908ae19763-test.c +0 -58
  373. package/deps/liburing/liburing/test/a4c0b3decb33-test.c +0 -180
  374. package/deps/liburing/liburing/test/accept-link.c +0 -251
  375. package/deps/liburing/liburing/test/accept-reuse.c +0 -164
  376. package/deps/liburing/liburing/test/accept-test.c +0 -79
  377. package/deps/liburing/liburing/test/accept.c +0 -476
  378. package/deps/liburing/liburing/test/across-fork.c +0 -283
  379. package/deps/liburing/liburing/test/b19062a56726-test.c +0 -53
  380. package/deps/liburing/liburing/test/b5837bd5311d-test.c +0 -77
  381. package/deps/liburing/liburing/test/ce593a6c480a-test.c +0 -135
  382. package/deps/liburing/liburing/test/close-opath.c +0 -122
  383. package/deps/liburing/liburing/test/config +0 -10
  384. package/deps/liburing/liburing/test/connect.c +0 -398
  385. package/deps/liburing/liburing/test/cq-full.c +0 -96
  386. package/deps/liburing/liburing/test/cq-overflow.c +0 -294
  387. package/deps/liburing/liburing/test/cq-peek-batch.c +0 -102
  388. package/deps/liburing/liburing/test/cq-ready.c +0 -94
  389. package/deps/liburing/liburing/test/cq-size.c +0 -58
  390. package/deps/liburing/liburing/test/d4ae271dfaae-test.c +0 -96
  391. package/deps/liburing/liburing/test/d77a67ed5f27-test.c +0 -65
  392. package/deps/liburing/liburing/test/defer.c +0 -307
  393. package/deps/liburing/liburing/test/double-poll-crash.c +0 -186
  394. package/deps/liburing/liburing/test/eeed8b54e0df-test.c +0 -114
  395. package/deps/liburing/liburing/test/empty-eownerdead.c +0 -42
  396. package/deps/liburing/liburing/test/eventfd-disable.c +0 -151
  397. package/deps/liburing/liburing/test/eventfd-ring.c +0 -97
  398. package/deps/liburing/liburing/test/eventfd.c +0 -112
  399. package/deps/liburing/liburing/test/fadvise.c +0 -202
  400. package/deps/liburing/liburing/test/fallocate.c +0 -249
  401. package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +0 -138
  402. package/deps/liburing/liburing/test/file-register.c +0 -843
  403. package/deps/liburing/liburing/test/file-update.c +0 -173
  404. package/deps/liburing/liburing/test/files-exit-hang-poll.c +0 -128
  405. package/deps/liburing/liburing/test/files-exit-hang-timeout.c +0 -134
  406. package/deps/liburing/liburing/test/fixed-link.c +0 -90
  407. package/deps/liburing/liburing/test/fsync.c +0 -224
  408. package/deps/liburing/liburing/test/hardlink.c +0 -136
  409. package/deps/liburing/liburing/test/helpers.c +0 -135
  410. package/deps/liburing/liburing/test/helpers.h +0 -67
  411. package/deps/liburing/liburing/test/io-cancel.c +0 -537
  412. package/deps/liburing/liburing/test/io_uring_enter.c +0 -296
  413. package/deps/liburing/liburing/test/io_uring_register.c +0 -664
  414. package/deps/liburing/liburing/test/io_uring_setup.c +0 -192
  415. package/deps/liburing/liburing/test/iopoll.c +0 -366
  416. package/deps/liburing/liburing/test/lfs-openat-write.c +0 -117
  417. package/deps/liburing/liburing/test/lfs-openat.c +0 -273
  418. package/deps/liburing/liburing/test/link-timeout.c +0 -1107
  419. package/deps/liburing/liburing/test/link.c +0 -496
  420. package/deps/liburing/liburing/test/link_drain.c +0 -229
  421. package/deps/liburing/liburing/test/madvise.c +0 -195
  422. package/deps/liburing/liburing/test/mkdir.c +0 -108
  423. package/deps/liburing/liburing/test/multicqes_drain.c +0 -383
  424. package/deps/liburing/liburing/test/nop-all-sizes.c +0 -107
  425. package/deps/liburing/liburing/test/nop.c +0 -115
  426. package/deps/liburing/liburing/test/open-close.c +0 -146
  427. package/deps/liburing/liburing/test/openat2.c +0 -240
  428. package/deps/liburing/liburing/test/personality.c +0 -204
  429. package/deps/liburing/liburing/test/pipe-eof.c +0 -81
  430. package/deps/liburing/liburing/test/pipe-reuse.c +0 -105
  431. package/deps/liburing/liburing/test/poll-cancel-ton.c +0 -139
  432. package/deps/liburing/liburing/test/poll-cancel.c +0 -135
  433. package/deps/liburing/liburing/test/poll-link.c +0 -227
  434. package/deps/liburing/liburing/test/poll-many.c +0 -208
  435. package/deps/liburing/liburing/test/poll-mshot-update.c +0 -273
  436. package/deps/liburing/liburing/test/poll-ring.c +0 -48
  437. package/deps/liburing/liburing/test/poll-v-poll.c +0 -353
  438. package/deps/liburing/liburing/test/poll.c +0 -109
  439. package/deps/liburing/liburing/test/probe.c +0 -137
  440. package/deps/liburing/liburing/test/read-write.c +0 -876
  441. package/deps/liburing/liburing/test/register-restrictions.c +0 -633
  442. package/deps/liburing/liburing/test/rename.c +0 -134
  443. package/deps/liburing/liburing/test/ring-leak.c +0 -173
  444. package/deps/liburing/liburing/test/ring-leak2.c +0 -249
  445. package/deps/liburing/liburing/test/rsrc_tags.c +0 -449
  446. package/deps/liburing/liburing/test/runtests-loop.sh +0 -16
  447. package/deps/liburing/liburing/test/runtests.sh +0 -170
  448. package/deps/liburing/liburing/test/rw_merge_test.c +0 -97
  449. package/deps/liburing/liburing/test/self.c +0 -91
  450. package/deps/liburing/liburing/test/send_recv.c +0 -291
  451. package/deps/liburing/liburing/test/send_recvmsg.c +0 -345
  452. package/deps/liburing/liburing/test/sendmsg_fs_cve.c +0 -198
  453. package/deps/liburing/liburing/test/shared-wq.c +0 -84
  454. package/deps/liburing/liburing/test/short-read.c +0 -75
  455. package/deps/liburing/liburing/test/shutdown.c +0 -163
  456. package/deps/liburing/liburing/test/sigfd-deadlock.c +0 -74
  457. package/deps/liburing/liburing/test/socket-rw-eagain.c +0 -156
  458. package/deps/liburing/liburing/test/socket-rw.c +0 -147
  459. package/deps/liburing/liburing/test/splice.c +0 -511
  460. package/deps/liburing/liburing/test/sq-full-cpp.cc +0 -45
  461. package/deps/liburing/liburing/test/sq-full.c +0 -45
  462. package/deps/liburing/liburing/test/sq-poll-dup.c +0 -200
  463. package/deps/liburing/liburing/test/sq-poll-kthread.c +0 -168
  464. package/deps/liburing/liburing/test/sq-poll-share.c +0 -137
  465. package/deps/liburing/liburing/test/sq-space_left.c +0 -159
  466. package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +0 -159
  467. package/deps/liburing/liburing/test/sqpoll-disable-exit.c +0 -195
  468. package/deps/liburing/liburing/test/sqpoll-exit-hang.c +0 -77
  469. package/deps/liburing/liburing/test/sqpoll-sleep.c +0 -68
  470. package/deps/liburing/liburing/test/statx.c +0 -172
  471. package/deps/liburing/liburing/test/stdout.c +0 -232
  472. package/deps/liburing/liburing/test/submit-link-fail.c +0 -154
  473. package/deps/liburing/liburing/test/submit-reuse.c +0 -239
  474. package/deps/liburing/liburing/test/symlink.c +0 -116
  475. package/deps/liburing/liburing/test/teardowns.c +0 -58
  476. package/deps/liburing/liburing/test/thread-exit.c +0 -131
  477. package/deps/liburing/liburing/test/timeout-new.c +0 -246
  478. package/deps/liburing/liburing/test/timeout-overflow.c +0 -204
  479. package/deps/liburing/liburing/test/timeout.c +0 -1354
  480. package/deps/liburing/liburing/test/unlink.c +0 -111
  481. package/deps/liburing/liburing/test/wakeup-hang.c +0 -162
  482. package/deps/rocksdb/rocksdb/README.md +0 -32
  483. package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
  484. package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
  485. package/deps/rocksdb/rocksdb/port/README +0 -10
  486. package/deps/rocksdb/rocksdb/python.mk +0 -9
  487. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  488. package/prebuilds/linux-arm64/node.napi.node +0 -0
@@ -534,15 +534,24 @@ TEST_P(PrefetchTest, PrefetchWhenReseek) {
534
534
  * initially (2 more data blocks).
535
535
  */
536
536
  iter->Seek(BuildKey(0));
537
+ ASSERT_TRUE(iter->Valid());
537
538
  iter->Seek(BuildKey(1000));
539
+ ASSERT_TRUE(iter->Valid());
538
540
  iter->Seek(BuildKey(1004)); // Prefetch Data
541
+ ASSERT_TRUE(iter->Valid());
539
542
  iter->Seek(BuildKey(1008));
543
+ ASSERT_TRUE(iter->Valid());
540
544
  iter->Seek(BuildKey(1011));
545
+ ASSERT_TRUE(iter->Valid());
541
546
  iter->Seek(BuildKey(1015)); // Prefetch Data
547
+ ASSERT_TRUE(iter->Valid());
542
548
  iter->Seek(BuildKey(1019));
549
+ ASSERT_TRUE(iter->Valid());
543
550
  // Missed 2 blocks but they are already in buffer so no reset.
544
551
  iter->Seek(BuildKey(103)); // Already in buffer.
552
+ ASSERT_TRUE(iter->Valid());
545
553
  iter->Seek(BuildKey(1033)); // Prefetch Data
554
+ ASSERT_TRUE(iter->Valid());
546
555
  if (support_prefetch && !use_direct_io) {
547
556
  ASSERT_EQ(fs->GetPrefetchCount(), 3);
548
557
  fs->ClearPrefetchCount();
@@ -558,10 +567,15 @@ TEST_P(PrefetchTest, PrefetchWhenReseek) {
558
567
  */
559
568
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ReadOptions()));
560
569
  iter->Seek(BuildKey(0));
570
+ ASSERT_TRUE(iter->Valid());
561
571
  iter->Seek(BuildKey(1008));
572
+ ASSERT_TRUE(iter->Valid());
562
573
  iter->Seek(BuildKey(1019));
574
+ ASSERT_TRUE(iter->Valid());
563
575
  iter->Seek(BuildKey(1033));
576
+ ASSERT_TRUE(iter->Valid());
564
577
  iter->Seek(BuildKey(1048));
578
+ ASSERT_TRUE(iter->Valid());
565
579
  if (support_prefetch && !use_direct_io) {
566
580
  ASSERT_EQ(fs->GetPrefetchCount(), 0);
567
581
  fs->ClearPrefetchCount();
@@ -576,9 +590,13 @@ TEST_P(PrefetchTest, PrefetchWhenReseek) {
576
590
  */
577
591
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ReadOptions()));
578
592
  iter->Seek(BuildKey(0));
593
+ ASSERT_TRUE(iter->Valid());
579
594
  iter->Seek(BuildKey(1));
595
+ ASSERT_TRUE(iter->Valid());
580
596
  iter->Seek(BuildKey(10));
597
+ ASSERT_TRUE(iter->Valid());
581
598
  iter->Seek(BuildKey(100));
599
+ ASSERT_TRUE(iter->Valid());
582
600
  if (support_prefetch && !use_direct_io) {
583
601
  ASSERT_EQ(fs->GetPrefetchCount(), 0);
584
602
  fs->ClearPrefetchCount();
@@ -596,14 +614,21 @@ TEST_P(PrefetchTest, PrefetchWhenReseek) {
596
614
  */
597
615
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ReadOptions()));
598
616
  iter->Seek(BuildKey(0));
617
+ ASSERT_TRUE(iter->Valid());
599
618
  iter->Seek(BuildKey(1000));
619
+ ASSERT_TRUE(iter->Valid());
600
620
  iter->Seek(BuildKey(1004)); // This iteration will prefetch buffer
621
+ ASSERT_TRUE(iter->Valid());
601
622
  iter->Seek(BuildKey(1008));
623
+ ASSERT_TRUE(iter->Valid());
602
624
  iter->Seek(
603
625
  BuildKey(996)); // Reseek won't prefetch any data and
604
626
  // readahead_size will be initiallized to 8*1024.
627
+ ASSERT_TRUE(iter->Valid());
605
628
  iter->Seek(BuildKey(992));
629
+ ASSERT_TRUE(iter->Valid());
606
630
  iter->Seek(BuildKey(989));
631
+ ASSERT_TRUE(iter->Valid());
607
632
  if (support_prefetch && !use_direct_io) {
608
633
  ASSERT_EQ(fs->GetPrefetchCount(), 1);
609
634
  fs->ClearPrefetchCount();
@@ -615,11 +640,17 @@ TEST_P(PrefetchTest, PrefetchWhenReseek) {
615
640
  // Read sequentially to confirm readahead_size is reset to initial value (2
616
641
  // more data blocks)
617
642
  iter->Seek(BuildKey(1011));
643
+ ASSERT_TRUE(iter->Valid());
618
644
  iter->Seek(BuildKey(1015));
645
+ ASSERT_TRUE(iter->Valid());
619
646
  iter->Seek(BuildKey(1019)); // Prefetch Data
647
+ ASSERT_TRUE(iter->Valid());
620
648
  iter->Seek(BuildKey(1022));
649
+ ASSERT_TRUE(iter->Valid());
621
650
  iter->Seek(BuildKey(1026));
651
+ ASSERT_TRUE(iter->Valid());
622
652
  iter->Seek(BuildKey(103)); // Prefetch Data
653
+ ASSERT_TRUE(iter->Valid());
623
654
  if (support_prefetch && !use_direct_io) {
624
655
  ASSERT_EQ(fs->GetPrefetchCount(), 2);
625
656
  fs->ClearPrefetchCount();
@@ -634,12 +665,19 @@ TEST_P(PrefetchTest, PrefetchWhenReseek) {
634
665
  */
635
666
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ReadOptions()));
636
667
  iter->Seek(BuildKey(0));
668
+ ASSERT_TRUE(iter->Valid());
637
669
  iter->Seek(BuildKey(1167));
670
+ ASSERT_TRUE(iter->Valid());
638
671
  iter->Seek(BuildKey(1334)); // This iteration will prefetch buffer
672
+ ASSERT_TRUE(iter->Valid());
639
673
  iter->Seek(BuildKey(1499));
674
+ ASSERT_TRUE(iter->Valid());
640
675
  iter->Seek(BuildKey(1667));
676
+ ASSERT_TRUE(iter->Valid());
641
677
  iter->Seek(BuildKey(1847));
678
+ ASSERT_TRUE(iter->Valid());
642
679
  iter->Seek(BuildKey(1999));
680
+ ASSERT_TRUE(iter->Valid());
643
681
  if (support_prefetch && !use_direct_io) {
644
682
  ASSERT_EQ(fs->GetPrefetchCount(), 1);
645
683
  fs->ClearPrefetchCount();
@@ -766,8 +804,11 @@ TEST_P(PrefetchTest, PrefetchWhenReseekwithCache) {
766
804
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ReadOptions()));
767
805
  // Warm up the cache
768
806
  iter->Seek(BuildKey(1011));
807
+ ASSERT_TRUE(iter->Valid());
769
808
  iter->Seek(BuildKey(1015));
809
+ ASSERT_TRUE(iter->Valid());
770
810
  iter->Seek(BuildKey(1019));
811
+ ASSERT_TRUE(iter->Valid());
771
812
  if (support_prefetch && !use_direct_io) {
772
813
  ASSERT_EQ(fs->GetPrefetchCount(), 1);
773
814
  fs->ClearPrefetchCount();
@@ -780,20 +821,31 @@ TEST_P(PrefetchTest, PrefetchWhenReseekwithCache) {
780
821
  // After caching, blocks will be read from cache (Sequential blocks)
781
822
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ReadOptions()));
782
823
  iter->Seek(BuildKey(0));
824
+ ASSERT_TRUE(iter->Valid());
783
825
  iter->Seek(BuildKey(1000));
826
+ ASSERT_TRUE(iter->Valid());
784
827
  iter->Seek(BuildKey(1004)); // Prefetch data (not in cache).
828
+ ASSERT_TRUE(iter->Valid());
785
829
  // Missed one sequential block but next is in already in buffer so readahead
786
830
  // will not be reset.
787
831
  iter->Seek(BuildKey(1011));
832
+ ASSERT_TRUE(iter->Valid());
788
833
  // Prefetch data but blocks are in cache so no prefetch and reset.
789
834
  iter->Seek(BuildKey(1015));
835
+ ASSERT_TRUE(iter->Valid());
790
836
  iter->Seek(BuildKey(1019));
837
+ ASSERT_TRUE(iter->Valid());
791
838
  iter->Seek(BuildKey(1022));
839
+ ASSERT_TRUE(iter->Valid());
792
840
  // Prefetch data with readahead_size = 4 blocks.
793
841
  iter->Seek(BuildKey(1026));
842
+ ASSERT_TRUE(iter->Valid());
794
843
  iter->Seek(BuildKey(103));
844
+ ASSERT_TRUE(iter->Valid());
795
845
  iter->Seek(BuildKey(1033));
846
+ ASSERT_TRUE(iter->Valid());
796
847
  iter->Seek(BuildKey(1037));
848
+ ASSERT_TRUE(iter->Valid());
797
849
 
798
850
  if (support_prefetch && !use_direct_io) {
799
851
  ASSERT_EQ(fs->GetPrefetchCount(), 3);
@@ -881,7 +933,7 @@ TEST_P(PrefetchTest1, DBIterLevelReadAhead) {
881
933
  [&](void*) { buff_prefetch_count++; });
882
934
 
883
935
  SyncPoint::GetInstance()->SetCallBack(
884
- "FilePrefetchBuffer::PrefetchAsync:Start",
936
+ "FilePrefetchBuffer::PrefetchAsyncInternal:Start",
885
937
  [&](void*) { buff_async_prefetch_count++; });
886
938
 
887
939
  // The callback checks, since reads are sequential, readahead_size doesn't
@@ -955,7 +1007,7 @@ class PrefetchTest2 : public DBTestBase,
955
1007
  INSTANTIATE_TEST_CASE_P(PrefetchTest2, PrefetchTest2, ::testing::Bool());
956
1008
 
957
1009
  #ifndef ROCKSDB_LITE
958
- TEST_P(PrefetchTest2, NonSequentialReads) {
1010
+ TEST_P(PrefetchTest2, NonSequentialReadsWithAdaptiveReadahead) {
959
1011
  const int kNumKeys = 1000;
960
1012
  // Set options
961
1013
  std::shared_ptr<MockFS> fs =
@@ -1002,9 +1054,8 @@ TEST_P(PrefetchTest2, NonSequentialReads) {
1002
1054
  int set_readahead = 0;
1003
1055
  size_t readahead_size = 0;
1004
1056
 
1005
- SyncPoint::GetInstance()->SetCallBack(
1006
- "FilePrefetchBuffer::PrefetchAsync:Start",
1007
- [&](void*) { buff_prefetch_count++; });
1057
+ SyncPoint::GetInstance()->SetCallBack("FilePrefetchBuffer::Prefetch:Start",
1058
+ [&](void*) { buff_prefetch_count++; });
1008
1059
  SyncPoint::GetInstance()->SetCallBack(
1009
1060
  "BlockPrefetcher::SetReadaheadState",
1010
1061
  [&](void* /*arg*/) { set_readahead++; });
@@ -1018,13 +1069,15 @@ TEST_P(PrefetchTest2, NonSequentialReads) {
1018
1069
  // Iterate until prefetch is done.
1019
1070
  ReadOptions ro;
1020
1071
  ro.adaptive_readahead = true;
1021
- // TODO akanksha: Remove after adding new units.
1022
- ro.async_io = true;
1023
1072
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1073
+
1024
1074
  iter->SeekToFirst();
1075
+ ASSERT_TRUE(iter->Valid());
1076
+
1025
1077
  while (iter->Valid() && buff_prefetch_count == 0) {
1026
1078
  iter->Next();
1027
1079
  }
1080
+
1028
1081
  ASSERT_EQ(readahead_size, 8 * 1024);
1029
1082
  ASSERT_EQ(buff_prefetch_count, 1);
1030
1083
  ASSERT_EQ(set_readahead, 0);
@@ -1033,9 +1086,12 @@ TEST_P(PrefetchTest2, NonSequentialReads) {
1033
1086
  // Move to last file and check readahead size fallbacks to 8KB. So next
1034
1087
  // readahead size after prefetch should be 8 * 1024;
1035
1088
  iter->Seek(BuildKey(4004));
1089
+ ASSERT_TRUE(iter->Valid());
1090
+
1036
1091
  while (iter->Valid() && buff_prefetch_count == 0) {
1037
1092
  iter->Next();
1038
1093
  }
1094
+
1039
1095
  ASSERT_EQ(readahead_size, 8 * 1024);
1040
1096
  ASSERT_EQ(set_readahead, 0);
1041
1097
  ASSERT_EQ(buff_prefetch_count, 1);
@@ -1099,7 +1155,7 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
1099
1155
  size_t decrease_readahead_size = 8 * 1024;
1100
1156
 
1101
1157
  SyncPoint::GetInstance()->SetCallBack(
1102
- "FilePrefetchBuffer::PrefetchAsync:Start",
1158
+ "FilePrefetchBuffer::PrefetchAsyncInternal:Start",
1103
1159
  [&](void*) { buff_prefetch_count++; });
1104
1160
  SyncPoint::GetInstance()->SetCallBack(
1105
1161
  "FilePrefetchBuffer::TryReadFromCache", [&](void* arg) {
@@ -1120,8 +1176,11 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
1120
1176
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1121
1177
  // Warm up the cache
1122
1178
  iter->Seek(BuildKey(1011));
1179
+ ASSERT_TRUE(iter->Valid());
1123
1180
  iter->Seek(BuildKey(1015));
1181
+ ASSERT_TRUE(iter->Valid());
1124
1182
  iter->Seek(BuildKey(1019));
1183
+ ASSERT_TRUE(iter->Valid());
1125
1184
  buff_prefetch_count = 0;
1126
1185
  }
1127
1186
 
@@ -1129,26 +1188,39 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
1129
1188
  ASSERT_OK(options.statistics->Reset());
1130
1189
  // After caching, blocks will be read from cache (Sequential blocks)
1131
1190
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1132
- iter->Seek(BuildKey(0));
1191
+ iter->Seek(
1192
+ BuildKey(0)); // In cache so it will decrease the readahead_size.
1133
1193
  ASSERT_TRUE(iter->Valid());
1134
- iter->Seek(BuildKey(1000));
1194
+ expected_current_readahead_size = std::max(
1195
+ decrease_readahead_size,
1196
+ (expected_current_readahead_size >= decrease_readahead_size
1197
+ ? (expected_current_readahead_size - decrease_readahead_size)
1198
+ : 0));
1199
+
1200
+ iter->Seek(BuildKey(1000)); // Prefetch the block.
1135
1201
  ASSERT_TRUE(iter->Valid());
1136
- iter->Seek(BuildKey(1004)); // Prefetch data (not in cache).
1202
+ ASSERT_EQ(current_readahead_size, expected_current_readahead_size);
1203
+ expected_current_readahead_size *= 2;
1204
+
1205
+ iter->Seek(BuildKey(1004)); // Prefetch the block.
1137
1206
  ASSERT_TRUE(iter->Valid());
1138
1207
  ASSERT_EQ(current_readahead_size, expected_current_readahead_size);
1208
+ expected_current_readahead_size *= 2;
1139
1209
 
1140
- // Missed one sequential block but 1011 is already in buffer so
1141
- // readahead will not be reset.
1210
+ // 1011 is already in cache but won't reset??
1142
1211
  iter->Seek(BuildKey(1011));
1143
1212
  ASSERT_TRUE(iter->Valid());
1144
- ASSERT_EQ(current_readahead_size, expected_current_readahead_size);
1145
1213
 
1146
1214
  // Eligible to Prefetch data (not in buffer) but block is in cache so no
1147
1215
  // prefetch will happen and will result in decrease in readahead_size.
1148
1216
  // readahead_size will be 8 * 1024
1149
1217
  iter->Seek(BuildKey(1015));
1150
1218
  ASSERT_TRUE(iter->Valid());
1151
- expected_current_readahead_size -= decrease_readahead_size;
1219
+ expected_current_readahead_size = std::max(
1220
+ decrease_readahead_size,
1221
+ (expected_current_readahead_size >= decrease_readahead_size
1222
+ ? (expected_current_readahead_size - decrease_readahead_size)
1223
+ : 0));
1152
1224
 
1153
1225
  // 1016 is the same block as 1015. So no change in readahead_size.
1154
1226
  iter->Seek(BuildKey(1016));
@@ -1169,7 +1241,7 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
1169
1241
  iter->Seek(BuildKey(1022));
1170
1242
  ASSERT_TRUE(iter->Valid());
1171
1243
  ASSERT_EQ(current_readahead_size, expected_current_readahead_size);
1172
- ASSERT_EQ(buff_prefetch_count, 2);
1244
+ ASSERT_EQ(buff_prefetch_count, 3);
1173
1245
 
1174
1246
  // Check stats to make sure async prefetch is done.
1175
1247
  {
@@ -1179,6 +1251,7 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
1179
1251
  ASSERT_EQ(async_read_bytes.count, 0);
1180
1252
  } else {
1181
1253
  ASSERT_GT(async_read_bytes.count, 0);
1254
+ ASSERT_GT(get_perf_context()->number_async_seek, 0);
1182
1255
  }
1183
1256
  }
1184
1257
 
@@ -1264,7 +1337,7 @@ TEST_P(PrefetchTestWithPosix, ReadAsyncWithPosixFS) {
1264
1337
  }
1265
1338
 
1266
1339
  SyncPoint::GetInstance()->SetCallBack(
1267
- "FilePrefetchBuffer::PrefetchAsync:Start",
1340
+ "FilePrefetchBuffer::PrefetchAsyncInternal:Start",
1268
1341
  [&](void*) { buff_prefetch_count++; });
1269
1342
 
1270
1343
  SyncPoint::GetInstance()->SetCallBack(
@@ -1275,12 +1348,15 @@ TEST_P(PrefetchTestWithPosix, ReadAsyncWithPosixFS) {
1275
1348
  // Read the keys.
1276
1349
  {
1277
1350
  ASSERT_OK(options.statistics->Reset());
1351
+ get_perf_context()->Reset();
1352
+
1278
1353
  auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1279
1354
  int num_keys = 0;
1280
1355
  for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
1281
1356
  ASSERT_OK(iter->status());
1282
1357
  num_keys++;
1283
1358
  }
1359
+
1284
1360
  ASSERT_EQ(num_keys, total_keys);
1285
1361
  ASSERT_GT(buff_prefetch_count, 0);
1286
1362
 
@@ -1301,6 +1377,55 @@ TEST_P(PrefetchTestWithPosix, ReadAsyncWithPosixFS) {
1301
1377
  }
1302
1378
  ASSERT_GT(prefetched_bytes_discarded.count, 0);
1303
1379
  }
1380
+ ASSERT_EQ(get_perf_context()->number_async_seek, 0);
1381
+ }
1382
+
1383
+ {
1384
+ // Read the keys using seek.
1385
+ {
1386
+ ASSERT_OK(options.statistics->Reset());
1387
+ get_perf_context()->Reset();
1388
+
1389
+ auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
1390
+ int num_keys = 0;
1391
+ iter->Seek(BuildKey(450));
1392
+ while (iter->Valid()) {
1393
+ ASSERT_OK(iter->status());
1394
+ num_keys++;
1395
+ iter->Next();
1396
+ }
1397
+ ASSERT_OK(iter->status());
1398
+
1399
+ iter->Seek(BuildKey(450));
1400
+ while (iter->Valid()) {
1401
+ ASSERT_OK(iter->status());
1402
+ num_keys++;
1403
+ iter->Prev();
1404
+ }
1405
+
1406
+ ASSERT_EQ(num_keys, total_keys + 1);
1407
+ ASSERT_GT(buff_prefetch_count, 0);
1408
+
1409
+ // Check stats to make sure async prefetch is done.
1410
+ {
1411
+ HistogramData async_read_bytes;
1412
+ options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
1413
+ HistogramData prefetched_bytes_discarded;
1414
+ options.statistics->histogramData(PREFETCHED_BYTES_DISCARDED,
1415
+ &prefetched_bytes_discarded);
1416
+
1417
+ // Not all platforms support iouring. In that case, ReadAsync in posix
1418
+ // won't submit async requests.
1419
+ if (read_async_called) {
1420
+ ASSERT_GT(async_read_bytes.count, 0);
1421
+ ASSERT_GT(get_perf_context()->number_async_seek, 0);
1422
+ } else {
1423
+ ASSERT_EQ(async_read_bytes.count, 0);
1424
+ ASSERT_EQ(get_perf_context()->number_async_seek, 0);
1425
+ }
1426
+ ASSERT_GT(prefetched_bytes_discarded.count, 0);
1427
+ }
1428
+ }
1304
1429
  }
1305
1430
 
1306
1431
  SyncPoint::GetInstance()->DisableProcessing();
@@ -172,8 +172,11 @@ class RandomAccessFileReader {
172
172
  size_t num_reqs, AlignedBuf* aligned_buf,
173
173
  Env::IOPriority rate_limiter_priority) const;
174
174
 
175
- IOStatus Prefetch(uint64_t offset, size_t n) const {
176
- return file_->Prefetch(offset, n, IOOptions(), nullptr);
175
+ IOStatus Prefetch(uint64_t offset, size_t n,
176
+ const Env::IOPriority rate_limiter_priority) const {
177
+ IOOptions opts;
178
+ opts.rate_limiter_priority = rate_limiter_priority;
179
+ return file_->Prefetch(offset, n, opts, nullptr);
177
180
  }
178
181
 
179
182
  FSRandomAccessFile* file() { return file_.get(); }
@@ -38,6 +38,13 @@ IOStatus SequentialFileReader::Read(size_t n, Slice* result, char* scratch) {
38
38
  IOStatus io_s;
39
39
  if (use_direct_io()) {
40
40
  #ifndef ROCKSDB_LITE
41
+ //
42
+ // |-offset_advance-|---bytes returned--|
43
+ // |----------------------buf size-------------------------|
44
+ // | | | |
45
+ // aligned offset offset + n Roundup(offset + n,
46
+ // offset alignment)
47
+ //
41
48
  size_t offset = offset_.fetch_add(n);
42
49
  size_t alignment = file_->GetRequiredBufferAlignment();
43
50
  size_t aligned_offset = TruncateToPageBoundary(alignment, offset);
@@ -54,10 +54,14 @@ IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
54
54
  UpdateFileChecksum(data);
55
55
 
56
56
  {
57
+ IOOptions io_options;
58
+ io_options.rate_limiter_priority =
59
+ WritableFileWriter::DecideRateLimiterPriority(
60
+ writable_file_->GetIOPriority(), op_rate_limiter_priority);
57
61
  IOSTATS_TIMER_GUARD(prepare_write_nanos);
58
62
  TEST_SYNC_POINT("WritableFileWriter::Append:BeforePrepareWrite");
59
63
  writable_file_->PrepareWrite(static_cast<size_t>(GetFileSize()), left,
60
- IOOptions(), nullptr);
64
+ io_options, nullptr);
61
65
  }
62
66
 
63
67
  // See whether we need to enlarge the buffer to avoid the flush
@@ -211,6 +215,8 @@ IOStatus WritableFileWriter::Close() {
211
215
  s = Flush(); // flush cache to OS
212
216
 
213
217
  IOStatus interim;
218
+ IOOptions io_options;
219
+ io_options.rate_limiter_priority = writable_file_->GetIOPriority();
214
220
  // In direct I/O mode we write whole pages so
215
221
  // we need to let the file know where data ends.
216
222
  if (use_direct_io()) {
@@ -221,7 +227,7 @@ IOStatus WritableFileWriter::Close() {
221
227
  start_ts = FileOperationInfo::StartNow();
222
228
  }
223
229
  #endif
224
- interim = writable_file_->Truncate(filesize_, IOOptions(), nullptr);
230
+ interim = writable_file_->Truncate(filesize_, io_options, nullptr);
225
231
  #ifndef ROCKSDB_LITE
226
232
  if (ShouldNotifyListeners()) {
227
233
  auto finish_ts = FileOperationInfo::FinishNow();
@@ -241,7 +247,7 @@ IOStatus WritableFileWriter::Close() {
241
247
  start_ts = FileOperationInfo::StartNow();
242
248
  }
243
249
  #endif
244
- interim = writable_file_->Fsync(IOOptions(), nullptr);
250
+ interim = writable_file_->Fsync(io_options, nullptr);
245
251
  #ifndef ROCKSDB_LITE
246
252
  if (ShouldNotifyListeners()) {
247
253
  auto finish_ts = FileOperationInfo::FinishNow();
@@ -267,7 +273,7 @@ IOStatus WritableFileWriter::Close() {
267
273
  start_ts = FileOperationInfo::StartNow();
268
274
  }
269
275
  #endif
270
- interim = writable_file_->Close(IOOptions(), nullptr);
276
+ interim = writable_file_->Close(io_options, nullptr);
271
277
  #ifndef ROCKSDB_LITE
272
278
  if (ShouldNotifyListeners()) {
273
279
  auto finish_ts = FileOperationInfo::FinishNow();
@@ -331,7 +337,11 @@ IOStatus WritableFileWriter::Flush(Env::IOPriority op_rate_limiter_priority) {
331
337
  start_ts = FileOperationInfo::StartNow();
332
338
  }
333
339
  #endif
334
- s = writable_file_->Flush(IOOptions(), nullptr);
340
+ IOOptions io_options;
341
+ io_options.rate_limiter_priority =
342
+ WritableFileWriter::DecideRateLimiterPriority(
343
+ writable_file_->GetIOPriority(), op_rate_limiter_priority);
344
+ s = writable_file_->Flush(io_options, nullptr);
335
345
  #ifndef ROCKSDB_LITE
336
346
  if (ShouldNotifyListeners()) {
337
347
  auto finish_ts = std::chrono::steady_clock::now();
@@ -428,17 +438,22 @@ IOStatus WritableFileWriter::SyncInternal(bool use_fsync) {
428
438
  IOSTATS_TIMER_GUARD(fsync_nanos);
429
439
  TEST_SYNC_POINT("WritableFileWriter::SyncInternal:0");
430
440
  auto prev_perf_level = GetPerfLevel();
441
+
431
442
  IOSTATS_CPU_TIMER_GUARD(cpu_write_nanos, clock_);
443
+
432
444
  #ifndef ROCKSDB_LITE
433
445
  FileOperationInfo::StartTimePoint start_ts;
434
446
  if (ShouldNotifyListeners()) {
435
447
  start_ts = FileOperationInfo::StartNow();
436
448
  }
437
449
  #endif
450
+
451
+ IOOptions io_options;
452
+ io_options.rate_limiter_priority = writable_file_->GetIOPriority();
438
453
  if (use_fsync) {
439
- s = writable_file_->Fsync(IOOptions(), nullptr);
454
+ s = writable_file_->Fsync(io_options, nullptr);
440
455
  } else {
441
- s = writable_file_->Sync(IOOptions(), nullptr);
456
+ s = writable_file_->Sync(io_options, nullptr);
442
457
  }
443
458
  #ifndef ROCKSDB_LITE
444
459
  if (ShouldNotifyListeners()) {
@@ -466,7 +481,9 @@ IOStatus WritableFileWriter::RangeSync(uint64_t offset, uint64_t nbytes) {
466
481
  start_ts = FileOperationInfo::StartNow();
467
482
  }
468
483
  #endif
469
- IOStatus s = writable_file_->RangeSync(offset, nbytes, IOOptions(), nullptr);
484
+ IOOptions io_options;
485
+ io_options.rate_limiter_priority = writable_file_->GetIOPriority();
486
+ IOStatus s = writable_file_->RangeSync(offset, nbytes, io_options, nullptr);
470
487
  #ifndef ROCKSDB_LITE
471
488
  if (ShouldNotifyListeners()) {
472
489
  auto finish_ts = std::chrono::steady_clock::now();
@@ -490,19 +507,19 @@ IOStatus WritableFileWriter::WriteBuffered(
490
507
  size_t left = size;
491
508
  DataVerificationInfo v_info;
492
509
  char checksum_buf[sizeof(uint32_t)];
510
+ Env::IOPriority rate_limiter_priority_used =
511
+ WritableFileWriter::DecideRateLimiterPriority(
512
+ writable_file_->GetIOPriority(), op_rate_limiter_priority);
513
+ IOOptions io_options;
514
+ io_options.rate_limiter_priority = rate_limiter_priority_used;
493
515
 
494
516
  while (left > 0) {
495
- size_t allowed;
496
- Env::IOPriority rate_limiter_priority_used =
497
- WritableFileWriter::DecideRateLimiterPriority(
498
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
517
+ size_t allowed = left;
499
518
  if (rate_limiter_ != nullptr &&
500
519
  rate_limiter_priority_used != Env::IO_TOTAL) {
501
520
  allowed = rate_limiter_->RequestToken(left, 0 /* alignment */,
502
521
  rate_limiter_priority_used, stats_,
503
522
  RateLimiter::OpType::kWrite);
504
- } else {
505
- allowed = left;
506
523
  }
507
524
 
508
525
  {
@@ -511,7 +528,7 @@ IOStatus WritableFileWriter::WriteBuffered(
511
528
 
512
529
  #ifndef ROCKSDB_LITE
513
530
  FileOperationInfo::StartTimePoint start_ts;
514
- uint64_t old_size = writable_file_->GetFileSize(IOOptions(), nullptr);
531
+ uint64_t old_size = writable_file_->GetFileSize(io_options, nullptr);
515
532
  if (ShouldNotifyListeners()) {
516
533
  start_ts = FileOperationInfo::StartNow();
517
534
  old_size = next_write_offset_;
@@ -524,10 +541,10 @@ IOStatus WritableFileWriter::WriteBuffered(
524
541
  if (perform_data_verification_) {
525
542
  Crc32cHandoffChecksumCalculation(src, allowed, checksum_buf);
526
543
  v_info.checksum = Slice(checksum_buf, sizeof(uint32_t));
527
- s = writable_file_->Append(Slice(src, allowed), IOOptions(), v_info,
544
+ s = writable_file_->Append(Slice(src, allowed), io_options, v_info,
528
545
  nullptr);
529
546
  } else {
530
- s = writable_file_->Append(Slice(src, allowed), IOOptions(), nullptr);
547
+ s = writable_file_->Append(Slice(src, allowed), io_options, nullptr);
531
548
  }
532
549
  if (!s.ok()) {
533
550
  // If writable_file_->Append() failed, then the data may or may not
@@ -579,15 +596,16 @@ IOStatus WritableFileWriter::WriteBufferedWithChecksum(
579
596
  size_t left = size;
580
597
  DataVerificationInfo v_info;
581
598
  char checksum_buf[sizeof(uint32_t)];
582
-
599
+ Env::IOPriority rate_limiter_priority_used =
600
+ WritableFileWriter::DecideRateLimiterPriority(
601
+ writable_file_->GetIOPriority(), op_rate_limiter_priority);
602
+ IOOptions io_options;
603
+ io_options.rate_limiter_priority = rate_limiter_priority_used;
583
604
  // Check how much is allowed. Here, we loop until the rate limiter allows to
584
605
  // write the entire buffer.
585
606
  // TODO: need to be improved since it sort of defeats the purpose of the rate
586
607
  // limiter
587
608
  size_t data_size = left;
588
- Env::IOPriority rate_limiter_priority_used =
589
- WritableFileWriter::DecideRateLimiterPriority(
590
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
591
609
  if (rate_limiter_ != nullptr && rate_limiter_priority_used != Env::IO_TOTAL) {
592
610
  while (data_size > 0) {
593
611
  size_t tmp_size;
@@ -604,7 +622,7 @@ IOStatus WritableFileWriter::WriteBufferedWithChecksum(
604
622
 
605
623
  #ifndef ROCKSDB_LITE
606
624
  FileOperationInfo::StartTimePoint start_ts;
607
- uint64_t old_size = writable_file_->GetFileSize(IOOptions(), nullptr);
625
+ uint64_t old_size = writable_file_->GetFileSize(io_options, nullptr);
608
626
  if (ShouldNotifyListeners()) {
609
627
  start_ts = FileOperationInfo::StartNow();
610
628
  old_size = next_write_offset_;
@@ -617,8 +635,7 @@ IOStatus WritableFileWriter::WriteBufferedWithChecksum(
617
635
 
618
636
  EncodeFixed32(checksum_buf, buffered_data_crc32c_checksum_);
619
637
  v_info.checksum = Slice(checksum_buf, sizeof(uint32_t));
620
- s = writable_file_->Append(Slice(src, left), IOOptions(), v_info,
621
- nullptr);
638
+ s = writable_file_->Append(Slice(src, left), io_options, v_info, nullptr);
622
639
  SetPerfLevel(prev_perf_level);
623
640
  }
624
641
  #ifndef ROCKSDB_LITE
@@ -709,20 +726,20 @@ IOStatus WritableFileWriter::WriteDirect(
709
726
  size_t left = buf_.CurrentSize();
710
727
  DataVerificationInfo v_info;
711
728
  char checksum_buf[sizeof(uint32_t)];
729
+ Env::IOPriority rate_limiter_priority_used =
730
+ WritableFileWriter::DecideRateLimiterPriority(
731
+ writable_file_->GetIOPriority(), op_rate_limiter_priority);
732
+ IOOptions io_options;
733
+ io_options.rate_limiter_priority = rate_limiter_priority_used;
712
734
 
713
735
  while (left > 0) {
714
736
  // Check how much is allowed
715
- size_t size;
716
- Env::IOPriority rate_limiter_priority_used =
717
- WritableFileWriter::DecideRateLimiterPriority(
718
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
737
+ size_t size = left;
719
738
  if (rate_limiter_ != nullptr &&
720
739
  rate_limiter_priority_used != Env::IO_TOTAL) {
721
740
  size = rate_limiter_->RequestToken(left, buf_.Alignment(),
722
- writable_file_->GetIOPriority(),
723
- stats_, RateLimiter::OpType::kWrite);
724
- } else {
725
- size = left;
741
+ rate_limiter_priority_used, stats_,
742
+ RateLimiter::OpType::kWrite);
726
743
  }
727
744
 
728
745
  {
@@ -737,10 +754,10 @@ IOStatus WritableFileWriter::WriteDirect(
737
754
  Crc32cHandoffChecksumCalculation(src, size, checksum_buf);
738
755
  v_info.checksum = Slice(checksum_buf, sizeof(uint32_t));
739
756
  s = writable_file_->PositionedAppend(Slice(src, size), write_offset,
740
- IOOptions(), v_info, nullptr);
757
+ io_options, v_info, nullptr);
741
758
  } else {
742
759
  s = writable_file_->PositionedAppend(Slice(src, size), write_offset,
743
- IOOptions(), nullptr);
760
+ io_options, nullptr);
744
761
  }
745
762
 
746
763
  if (ShouldNotifyListeners()) {
@@ -810,20 +827,22 @@ IOStatus WritableFileWriter::WriteDirectWithChecksum(
810
827
  DataVerificationInfo v_info;
811
828
  char checksum_buf[sizeof(uint32_t)];
812
829
 
830
+ Env::IOPriority rate_limiter_priority_used =
831
+ WritableFileWriter::DecideRateLimiterPriority(
832
+ writable_file_->GetIOPriority(), op_rate_limiter_priority);
833
+ IOOptions io_options;
834
+ io_options.rate_limiter_priority = rate_limiter_priority_used;
813
835
  // Check how much is allowed. Here, we loop until the rate limiter allows to
814
836
  // write the entire buffer.
815
837
  // TODO: need to be improved since it sort of defeats the purpose of the rate
816
838
  // limiter
817
839
  size_t data_size = left;
818
- Env::IOPriority rate_limiter_priority_used =
819
- WritableFileWriter::DecideRateLimiterPriority(
820
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
821
840
  if (rate_limiter_ != nullptr && rate_limiter_priority_used != Env::IO_TOTAL) {
822
841
  while (data_size > 0) {
823
842
  size_t size;
824
843
  size = rate_limiter_->RequestToken(data_size, buf_.Alignment(),
825
- writable_file_->GetIOPriority(),
826
- stats_, RateLimiter::OpType::kWrite);
844
+ rate_limiter_priority_used, stats_,
845
+ RateLimiter::OpType::kWrite);
827
846
  data_size -= size;
828
847
  }
829
848
  }
@@ -839,7 +858,7 @@ IOStatus WritableFileWriter::WriteDirectWithChecksum(
839
858
  EncodeFixed32(checksum_buf, buffered_data_crc32c_checksum_);
840
859
  v_info.checksum = Slice(checksum_buf, sizeof(uint32_t));
841
860
  s = writable_file_->PositionedAppend(Slice(src, left), write_offset,
842
- IOOptions(), v_info, nullptr);
861
+ io_options, v_info, nullptr);
843
862
 
844
863
  if (ShouldNotifyListeners()) {
845
864
  auto finish_ts = std::chrono::steady_clock::now();
@@ -894,4 +913,5 @@ Env::IOPriority WritableFileWriter::DecideRateLimiterPriority(
894
913
  return op_rate_limiter_priority;
895
914
  }
896
915
  }
916
+
897
917
  } // namespace ROCKSDB_NAMESPACE
@@ -277,6 +277,7 @@ class WritableFileWriter {
277
277
  const char* GetFileChecksumFuncName() const;
278
278
 
279
279
  private:
280
+ // Decide the Rate Limiter priority.
280
281
  static Env::IOPriority DecideRateLimiterPriority(
281
282
  Env::IOPriority writable_file_io_priority,
282
283
  Env::IOPriority op_rate_limiter_priority);