@nxtedition/rocksdb 10.0.13 → 10.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (700) hide show
  1. package/.tap/coverage/213879bb-47ae-470e-bb54-f4157d9f60e2.json +162898 -0
  2. package/.tap/processinfo/{4c642b53-6895-4ef0-9391-7c6b8d484262.json → 213879bb-47ae-470e-bb54-f4157d9f60e2.json} +117 -121
  3. package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
  4. package/.tap/test-results/test/abstract-level-test.js.tap +1705 -0
  5. package/.tap/test-results/test/batch-test.js.tap +12 -0
  6. package/.tap/test-results/test/chained-batch-gc-test.js.tap +11 -0
  7. package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +58 -0
  8. package/.tap/test-results/test/clear-gc-test.js.tap +13 -0
  9. package/.tap/test-results/test/column-test.js.tap +55 -0
  10. package/.tap/test-results/test/common.js.tap +0 -0
  11. package/.tap/test-results/test/compression-test.js.tap +30 -0
  12. package/.tap/test-results/test/db-identity.js.tap +12 -0
  13. package/.tap/test-results/test/electron.js.tap +0 -0
  14. package/.tap/test-results/test/env-cleanup-hook-test.js.tap +2 -0
  15. package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
  16. package/.tap/test-results/test/gc.js.tap +0 -0
  17. package/.tap/test-results/test/getproperty-test.js.tap +29 -0
  18. package/.tap/test-results/test/iterator-gc-test.js.tap +4 -0
  19. package/.tap/test-results/test/iterator-hwm-test.js.tap +24 -0
  20. package/.tap/test-results/test/iterator-recursion-test.js.tap +12 -0
  21. package/.tap/test-results/test/iterator-starvation-test.js.tap +2 -0
  22. package/.tap/test-results/test/iterator-test.js.tap +0 -0
  23. package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
  24. package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
  25. package/.tap/test-results/test/leak-tester.js.tap +0 -0
  26. package/.tap/test-results/test/lock-test.js.tap +0 -0
  27. package/.tap/test-results/test/lock.js.tap +0 -0
  28. package/.tap/test-results/test/make.js.tap +0 -0
  29. package/.tap/test-results/test/max-rev-merge.js.tap +0 -12
  30. package/.tap/test-results/test/merge-operator-test.js.tap +0 -0
  31. package/.tap/test-results/test/mkdir-test.js.tap +0 -0
  32. package/.tap/test-results/test/segfault-test.js.tap +0 -0
  33. package/.tap/test-results/test/stack-blower.js.tap +0 -0
  34. package/binding.cc +42 -34
  35. package/deps/rocksdb/rocksdb/CMakeLists.txt +44 -14
  36. package/deps/rocksdb/rocksdb/Makefile +34 -17
  37. package/deps/rocksdb/rocksdb/TARGETS +27 -0
  38. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +95 -42
  39. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +0 -1
  40. package/deps/rocksdb/rocksdb/cache/cache_test.cc +5 -3
  41. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +381 -393
  42. package/deps/rocksdb/rocksdb/cache/clock_cache.h +88 -51
  43. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +14 -7
  44. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +1 -1
  45. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +21 -19
  46. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +8 -7
  47. package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -1
  48. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +89 -13
  49. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +16 -8
  50. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +6 -6
  51. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +15 -9
  52. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +16 -13
  53. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +306 -23
  54. package/deps/rocksdb/rocksdb/cache/typed_cache.h +3 -4
  55. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +30 -27
  56. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +8 -10
  57. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.cc +20 -0
  58. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +83 -0
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +19 -16
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -5
  61. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +18 -21
  62. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +5 -4
  63. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +7 -6
  64. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +56 -27
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +11 -7
  66. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +20 -19
  67. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +106 -31
  68. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +5 -8
  69. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +4 -2
  70. package/deps/rocksdb/rocksdb/db/builder.cc +89 -44
  71. package/deps/rocksdb/rocksdb/db/builder.h +4 -6
  72. package/deps/rocksdb/rocksdb/db/c.cc +205 -57
  73. package/deps/rocksdb/rocksdb/db/c_test.c +141 -20
  74. package/deps/rocksdb/rocksdb/db/coalescing_iterator.cc +47 -0
  75. package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +79 -0
  76. package/deps/rocksdb/rocksdb/db/column_family.cc +100 -36
  77. package/deps/rocksdb/rocksdb/db/column_family.h +46 -28
  78. package/deps/rocksdb/rocksdb/db/column_family_test.cc +168 -46
  79. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +51 -6
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +72 -24
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +11 -14
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +7 -0
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +87 -8
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +310 -70
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +78 -62
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +0 -1
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +33 -96
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +18 -10
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -8
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +42 -22
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +20 -16
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +18 -17
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +95 -10
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +213 -34
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +4 -4
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -8
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +16 -16
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +75 -142
  103. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +577 -34
  104. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +4 -4
  105. package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
  106. package/deps/rocksdb/rocksdb/db/corruption_test.cc +7 -38
  107. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +5 -5
  108. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +366 -136
  109. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +9 -10
  110. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +282 -6
  111. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +6 -6
  112. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +551 -150
  113. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +1 -1
  114. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +41 -13
  115. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +54 -17
  116. package/deps/rocksdb/rocksdb/db/db_follower_test.cc +527 -0
  117. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -58
  118. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +34 -45
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +699 -580
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +308 -230
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +180 -107
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -2
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +10 -6
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +36 -61
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +347 -0
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.h +54 -0
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +206 -155
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +5 -8
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +41 -39
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +26 -22
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +14 -9
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +126 -46
  133. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +21 -9
  134. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +294 -0
  135. package/deps/rocksdb/rocksdb/db/db_iter.cc +116 -78
  136. package/deps/rocksdb/rocksdb/db/db_iter.h +31 -7
  137. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +34 -14
  138. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +69 -8
  139. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +153 -18
  140. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +9 -11
  141. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +9 -1
  142. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +6 -2
  143. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +105 -0
  144. package/deps/rocksdb/rocksdb/db/db_options_test.cc +97 -111
  145. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -3
  146. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +82 -30
  147. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +5 -7
  148. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +64 -22
  149. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +74 -0
  150. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +175 -47
  151. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +4 -3
  152. package/deps/rocksdb/rocksdb/db/db_test.cc +133 -109
  153. package/deps/rocksdb/rocksdb/db/db_test2.cc +227 -139
  154. package/deps/rocksdb/rocksdb/db/db_test_util.cc +42 -19
  155. package/deps/rocksdb/rocksdb/db/db_test_util.h +67 -24
  156. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +140 -2
  157. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +17 -19
  158. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +332 -87
  159. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +4 -4
  160. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +4 -4
  161. package/deps/rocksdb/rocksdb/db/db_write_test.cc +250 -30
  162. package/deps/rocksdb/rocksdb/db/dbformat.cc +41 -8
  163. package/deps/rocksdb/rocksdb/db/dbformat.h +100 -17
  164. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +48 -8
  165. package/deps/rocksdb/rocksdb/db/error_handler.cc +102 -116
  166. package/deps/rocksdb/rocksdb/db/error_handler.h +28 -6
  167. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +263 -99
  168. package/deps/rocksdb/rocksdb/db/event_helpers.cc +3 -1
  169. package/deps/rocksdb/rocksdb/db/experimental.cc +1073 -7
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +261 -111
  171. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +263 -183
  172. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +31 -12
  173. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +698 -7
  174. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +5 -3
  175. package/deps/rocksdb/rocksdb/db/flush_job.cc +41 -41
  176. package/deps/rocksdb/rocksdb/db/flush_job.h +11 -8
  177. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -13
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +19 -6
  179. package/deps/rocksdb/rocksdb/db/forward_iterator.h +12 -12
  180. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +83 -52
  181. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +169 -2
  182. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -6
  183. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
  184. package/deps/rocksdb/rocksdb/db/job_context.h +17 -0
  185. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -4
  186. package/deps/rocksdb/rocksdb/db/log_reader.cc +44 -20
  187. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -0
  188. package/deps/rocksdb/rocksdb/db/log_test.cc +81 -17
  189. package/deps/rocksdb/rocksdb/db/log_writer.cc +135 -92
  190. package/deps/rocksdb/rocksdb/db/log_writer.h +11 -10
  191. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -3
  192. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -1
  193. package/deps/rocksdb/rocksdb/db/memtable.cc +82 -62
  194. package/deps/rocksdb/rocksdb/db/memtable.h +17 -9
  195. package/deps/rocksdb/rocksdb/db/memtable_list.cc +19 -13
  196. package/deps/rocksdb/rocksdb/db/memtable_list.h +3 -1
  197. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +38 -5
  198. package/deps/rocksdb/rocksdb/db/merge_context.h +3 -0
  199. package/deps/rocksdb/rocksdb/db/merge_helper.cc +34 -156
  200. package/deps/rocksdb/rocksdb/db/merge_helper.h +52 -46
  201. package/deps/rocksdb/rocksdb/db/merge_test.cc +16 -11
  202. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +289 -0
  203. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +918 -0
  204. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -6
  205. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  206. package/deps/rocksdb/rocksdb/db/output_validator.cc +8 -12
  207. package/deps/rocksdb/rocksdb/db/output_validator.h +1 -4
  208. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +23 -4
  209. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +2 -3
  210. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -1
  211. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +2 -2
  212. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -6
  213. package/deps/rocksdb/rocksdb/db/prefix_test.cc +21 -8
  214. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +0 -2
  215. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +0 -1
  216. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +17 -4
  217. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +6 -3
  218. package/deps/rocksdb/rocksdb/db/repair.cc +35 -29
  219. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -2
  220. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +428 -156
  221. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +393 -227
  222. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +154 -82
  223. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +2 -2
  224. package/deps/rocksdb/rocksdb/db/table_cache.cc +9 -11
  225. package/deps/rocksdb/rocksdb/db/table_cache.h +2 -1
  226. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +8 -3
  227. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +27 -26
  228. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +23 -23
  229. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +5 -5
  230. package/deps/rocksdb/rocksdb/db/version_builder.cc +6 -0
  231. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +62 -29
  232. package/deps/rocksdb/rocksdb/db/version_edit.cc +1 -2
  233. package/deps/rocksdb/rocksdb/db/version_edit.h +30 -11
  234. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +291 -116
  235. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +54 -11
  236. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +3 -1
  237. package/deps/rocksdb/rocksdb/db/version_set.cc +301 -141
  238. package/deps/rocksdb/rocksdb/db/version_set.h +90 -33
  239. package/deps/rocksdb/rocksdb/db/version_set_test.cc +817 -193
  240. package/deps/rocksdb/rocksdb/db/version_util.h +10 -5
  241. package/deps/rocksdb/rocksdb/db/wal_manager.cc +15 -11
  242. package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -1
  243. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +10 -9
  244. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +403 -28
  245. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +2 -2
  246. package/deps/rocksdb/rocksdb/db/write_batch.cc +204 -18
  247. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -0
  248. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +149 -5
  249. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +7 -7
  250. package/deps/rocksdb/rocksdb/db/write_stall_stats.h +7 -7
  251. package/deps/rocksdb/rocksdb/db/write_thread.cc +86 -47
  252. package/deps/rocksdb/rocksdb/db/write_thread.h +2 -0
  253. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +176 -68
  254. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +337 -125
  255. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +38 -9
  256. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +126 -34
  257. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +1 -1
  258. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -2
  259. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +161 -1
  260. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +267 -9
  261. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +13 -7
  262. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +9 -9
  263. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +535 -86
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +27 -5
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +8 -15
  266. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +46 -21
  267. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +74 -4
  268. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +28 -11
  269. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +426 -151
  270. package/deps/rocksdb/rocksdb/env/composite_env.cc +1 -1
  271. package/deps/rocksdb/rocksdb/env/emulated_clock.h +6 -6
  272. package/deps/rocksdb/rocksdb/env/env.cc +21 -11
  273. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +9 -9
  274. package/deps/rocksdb/rocksdb/env/env_chroot.cc +3 -2
  275. package/deps/rocksdb/rocksdb/env/env_encryption.cc +3 -3
  276. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -2
  277. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -10
  278. package/deps/rocksdb/rocksdb/env/env_test.cc +24 -18
  279. package/deps/rocksdb/rocksdb/env/file_system.cc +7 -6
  280. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +3 -3
  281. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +3 -3
  282. package/deps/rocksdb/rocksdb/env/fs_on_demand.cc +331 -0
  283. package/deps/rocksdb/rocksdb/env/fs_on_demand.h +139 -0
  284. package/deps/rocksdb/rocksdb/env/fs_posix.cc +14 -15
  285. package/deps/rocksdb/rocksdb/env/io_posix.cc +15 -10
  286. package/deps/rocksdb/rocksdb/env/io_posix.h +86 -92
  287. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  288. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +6 -6
  289. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +8 -6
  290. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -1
  291. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +599 -592
  292. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +312 -200
  293. package/deps/rocksdb/rocksdb/file/file_util.cc +19 -14
  294. package/deps/rocksdb/rocksdb/file/file_util.h +34 -24
  295. package/deps/rocksdb/rocksdb/file/filename.cc +32 -17
  296. package/deps/rocksdb/rocksdb/file/filename.h +51 -53
  297. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +82 -441
  298. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +7 -6
  299. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -5
  300. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +9 -3
  301. package/deps/rocksdb/rocksdb/file/read_write_util.h +3 -3
  302. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +6 -2
  303. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +9 -4
  304. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +8 -4
  305. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +110 -89
  306. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +34 -17
  307. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +16 -0
  308. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +39 -189
  309. package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +114 -0
  310. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +91 -6
  311. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +52 -7
  312. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -1
  313. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +27 -0
  314. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +146 -0
  315. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +2 -2
  316. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +254 -151
  317. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +39 -36
  318. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -1
  319. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +431 -0
  320. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +1 -1
  321. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +57 -23
  322. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +27 -57
  323. package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +74 -0
  324. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +2 -1
  325. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  326. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +11 -11
  327. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -1
  328. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +146 -71
  329. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +6 -1
  330. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +7 -4
  331. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +17 -13
  332. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -19
  333. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +5 -5
  334. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +10 -8
  335. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +18 -2
  336. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +12 -2
  337. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +3 -3
  338. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +118 -116
  339. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +4 -4
  340. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +26 -21
  341. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +18 -6
  342. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +1 -1
  343. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +5 -5
  344. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +8 -8
  345. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +12 -0
  346. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +4 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +3 -3
  348. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +8 -0
  349. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +1 -1
  350. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -4
  351. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +3 -3
  352. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +5 -6
  353. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +159 -167
  354. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +1 -2
  355. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +52 -17
  356. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +3 -4
  357. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/types_util.h +36 -0
  358. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +118 -20
  359. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  360. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +1 -1
  361. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +87 -45
  362. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +26 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +22 -1
  364. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +7 -9
  365. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +5 -6
  366. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +2 -2
  367. package/deps/rocksdb/rocksdb/logging/env_logger.h +3 -3
  368. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -1
  369. package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -3
  370. package/deps/rocksdb/rocksdb/memory/arena.h +11 -0
  371. package/deps/rocksdb/rocksdb/memory/arena_test.cc +17 -2
  372. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +1 -1
  373. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +1 -0
  374. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
  375. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -1
  376. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +11 -10
  377. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +8 -7
  378. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +2 -2
  379. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +2 -2
  380. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  381. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +3 -3
  382. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +2 -2
  383. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +3 -1
  384. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +2 -2
  385. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +20 -10
  386. package/deps/rocksdb/rocksdb/monitoring/histogram.h +15 -15
  387. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +7 -3
  388. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +14 -14
  389. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -1
  390. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +4 -0
  391. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +8 -1
  392. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -1
  393. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +5 -2
  394. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +64 -58
  395. package/deps/rocksdb/rocksdb/monitoring/statistics_impl.h +11 -12
  396. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
  397. package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +1 -1
  398. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +7 -1
  399. package/deps/rocksdb/rocksdb/options/cf_options.cc +20 -28
  400. package/deps/rocksdb/rocksdb/options/cf_options.h +7 -14
  401. package/deps/rocksdb/rocksdb/options/configurable.cc +20 -12
  402. package/deps/rocksdb/rocksdb/options/configurable_test.cc +4 -6
  403. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -2
  404. package/deps/rocksdb/rocksdb/options/customizable.cc +1 -1
  405. package/deps/rocksdb/rocksdb/options/customizable_test.cc +3 -2
  406. package/deps/rocksdb/rocksdb/options/db_options.cc +22 -48
  407. package/deps/rocksdb/rocksdb/options/db_options.h +3 -3
  408. package/deps/rocksdb/rocksdb/options/offpeak_time_info.cc +59 -0
  409. package/deps/rocksdb/rocksdb/options/offpeak_time_info.h +37 -0
  410. package/deps/rocksdb/rocksdb/options/options.cc +14 -6
  411. package/deps/rocksdb/rocksdb/options/options_helper.cc +8 -13
  412. package/deps/rocksdb/rocksdb/options/options_helper.h +2 -3
  413. package/deps/rocksdb/rocksdb/options/options_parser.cc +35 -26
  414. package/deps/rocksdb/rocksdb/options/options_parser.h +4 -2
  415. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -3
  416. package/deps/rocksdb/rocksdb/options/options_test.cc +30 -23
  417. package/deps/rocksdb/rocksdb/port/lang.h +1 -1
  418. package/deps/rocksdb/rocksdb/port/port_example.h +7 -7
  419. package/deps/rocksdb/rocksdb/port/port_posix.cc +7 -7
  420. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -7
  421. package/deps/rocksdb/rocksdb/port/stack_trace.cc +85 -24
  422. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1 -2
  423. package/deps/rocksdb/rocksdb/port/win/io_win.cc +4 -4
  424. package/deps/rocksdb/rocksdb/port/win/io_win.h +13 -17
  425. package/deps/rocksdb/rocksdb/port/win/port_win.cc +3 -2
  426. package/deps/rocksdb/rocksdb/port/win/port_win.h +4 -4
  427. package/deps/rocksdb/rocksdb/src.mk +16 -1
  428. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -7
  429. package/deps/rocksdb/rocksdb/table/block_based/block.cc +39 -15
  430. package/deps/rocksdb/rocksdb/table/block_based/block.h +7 -7
  431. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +80 -40
  432. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +2 -3
  433. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +20 -5
  434. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +228 -122
  435. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +50 -9
  436. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +82 -25
  437. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +17 -20
  438. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +47 -13
  439. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +163 -50
  440. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +1 -2
  441. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +23 -23
  442. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -12
  443. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -2
  444. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +6 -4
  445. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +32 -27
  446. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -1
  447. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +7 -10
  448. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +2 -2
  449. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  450. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +25 -7
  451. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -5
  452. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +4 -6
  453. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +6 -6
  454. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -1
  455. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -5
  456. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +2 -2
  457. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -5
  458. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +138 -86
  459. package/deps/rocksdb/rocksdb/table/block_fetcher.h +22 -0
  460. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +26 -13
  461. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +11 -11
  462. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +11 -11
  463. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +10 -5
  464. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +6 -7
  465. package/deps/rocksdb/rocksdb/table/format.cc +15 -21
  466. package/deps/rocksdb/rocksdb/table/format.h +8 -0
  467. package/deps/rocksdb/rocksdb/table/get_context.cc +121 -78
  468. package/deps/rocksdb/rocksdb/table/get_context.h +11 -6
  469. package/deps/rocksdb/rocksdb/table/internal_iterator.h +12 -5
  470. package/deps/rocksdb/rocksdb/table/iterator.cc +4 -0
  471. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -1
  472. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -1
  473. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +5 -0
  474. package/deps/rocksdb/rocksdb/table/merging_iterator.h +4 -3
  475. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +15 -11
  476. package/deps/rocksdb/rocksdb/table/meta_blocks.h +8 -4
  477. package/deps/rocksdb/rocksdb/table/mock_table.cc +12 -8
  478. package/deps/rocksdb/rocksdb/table/mock_table.h +1 -3
  479. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +0 -1
  480. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -21
  481. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +4 -14
  482. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +7 -8
  483. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +7 -5
  484. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +15 -8
  485. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +1 -1
  486. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +75 -30
  487. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +7 -2
  488. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +76 -11
  489. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +358 -2
  490. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +93 -16
  491. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +12 -12
  492. package/deps/rocksdb/rocksdb/table/table_builder.h +12 -6
  493. package/deps/rocksdb/rocksdb/table/table_iterator.h +69 -0
  494. package/deps/rocksdb/rocksdb/table/table_properties.cc +1 -1
  495. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +8 -6
  496. package/deps/rocksdb/rocksdb/table/table_test.cc +732 -121
  497. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +3 -1
  498. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/unique_id.cc +2 -2
  500. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +2 -2
  501. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +5 -5
  502. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -6
  503. package/deps/rocksdb/rocksdb/test_util/testharness.cc +2 -4
  504. package/deps/rocksdb/rocksdb/test_util/testutil.cc +56 -32
  505. package/deps/rocksdb/rocksdb/test_util/testutil.h +57 -34
  506. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +18 -1
  507. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  508. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  509. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +210 -112
  510. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +3 -3
  511. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +1 -1
  512. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +22 -27
  513. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +10 -4
  514. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +328 -59
  515. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +34 -2
  516. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +64 -17
  517. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +8 -1
  518. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +3 -2
  519. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +136 -10
  520. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -2
  521. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +50 -8
  522. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +51 -45
  523. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +1 -1
  524. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +10 -10
  525. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +14 -4
  526. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +2 -1
  527. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +2 -2
  528. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +2 -4
  529. package/deps/rocksdb/rocksdb/util/atomic.h +111 -0
  530. package/deps/rocksdb/rocksdb/util/autovector.h +5 -1
  531. package/deps/rocksdb/rocksdb/util/bloom_test.cc +12 -2
  532. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  533. package/deps/rocksdb/rocksdb/util/coding.h +34 -38
  534. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -1
  535. package/deps/rocksdb/rocksdb/util/comparator.cc +18 -5
  536. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -1
  537. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +4 -4
  538. package/deps/rocksdb/rocksdb/util/crc32c.cc +3 -6
  539. package/deps/rocksdb/rocksdb/util/crc32c.h +3 -3
  540. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +3 -4
  541. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -2
  542. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +2 -4
  543. package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -4
  544. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -2
  545. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +3 -3
  546. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +83 -59
  547. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -3
  548. package/deps/rocksdb/rocksdb/util/hash.h +4 -4
  549. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +3 -3
  550. package/deps/rocksdb/rocksdb/util/murmurhash.cc +1 -1
  551. package/deps/rocksdb/rocksdb/util/random.cc +3 -4
  552. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +23 -43
  553. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +21 -16
  554. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +44 -24
  555. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +2 -3
  556. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +2 -10
  557. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +2 -2
  558. package/deps/rocksdb/rocksdb/util/slice.cc +4 -5
  559. package/deps/rocksdb/rocksdb/util/slice_test.cc +70 -4
  560. package/deps/rocksdb/rocksdb/util/status.cc +1 -1
  561. package/deps/rocksdb/rocksdb/util/stderr_logger.cc +39 -7
  562. package/deps/rocksdb/rocksdb/util/stderr_logger.h +12 -2
  563. package/deps/rocksdb/rocksdb/util/string_util.cc +31 -18
  564. package/deps/rocksdb/rocksdb/util/string_util.h +9 -9
  565. package/deps/rocksdb/rocksdb/util/string_util_test.cc +36 -0
  566. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +5 -5
  567. package/deps/rocksdb/rocksdb/util/thread_local.cc +1 -1
  568. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +3 -4
  569. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +1 -1
  570. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +4 -4
  571. package/deps/rocksdb/rocksdb/util/vector_iterator.h +12 -16
  572. package/deps/rocksdb/rocksdb/util/write_batch_util.h +5 -0
  573. package/deps/rocksdb/rocksdb/util/xxhash.h +116 -116
  574. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +4 -5
  575. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_impl.h +2 -2
  576. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -2
  577. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +33 -31
  578. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -22
  579. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +9 -7
  580. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +3 -6
  581. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +22 -55
  582. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +113 -74
  583. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +36 -24
  584. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +27 -11
  585. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -3
  586. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +68 -54
  587. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -6
  588. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +16 -16
  589. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +3 -2
  590. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +29 -9
  591. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +27 -14
  592. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +2 -4
  593. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +3 -3
  594. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +2 -4
  595. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +2 -4
  596. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +2 -4
  597. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +2 -4
  598. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +2 -4
  599. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +8 -8
  600. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -7
  601. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -8
  602. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +2 -4
  603. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +9 -7
  604. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +7 -10
  605. package/deps/rocksdb/rocksdb/utilities/debug.cc +6 -2
  606. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +18 -11
  607. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +2 -2
  608. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +18 -25
  609. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +32 -23
  610. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +51 -48
  611. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +5 -3
  612. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -2
  613. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  614. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +2 -3
  615. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +3 -1
  616. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +7 -7
  617. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +10 -10
  618. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +5 -6
  619. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +5 -6
  620. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +1 -1
  621. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -8
  622. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +29 -21
  623. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +14 -15
  624. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -2
  625. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -1
  626. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +3 -3
  627. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -5
  628. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  629. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +2 -2
  630. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +8 -8
  631. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +4 -4
  632. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
  633. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +6 -9
  634. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +2 -2
  635. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +1 -1
  636. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +6 -6
  637. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +1 -2
  638. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +2 -3
  639. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  640. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +1 -1
  641. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
  642. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +5 -0
  643. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +1 -1
  644. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +3 -3
  645. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +1 -1
  646. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +4 -0
  647. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +4 -0
  648. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  649. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +4 -0
  650. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +12 -3
  651. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +17 -3
  652. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +3 -3
  653. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +1 -1
  654. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +3 -3
  655. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +4 -2
  656. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +1 -1
  657. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +1 -2
  658. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -3
  659. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +3 -4
  660. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +442 -10
  661. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +27 -9
  662. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +28 -7
  663. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +70 -12
  664. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +50 -22
  665. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -1
  666. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -1
  667. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +64 -3
  668. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +76 -17
  669. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +6 -6
  670. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +573 -77
  671. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -2
  672. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +65 -3
  673. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +13 -11
  674. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +1 -0
  675. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +14 -16
  676. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +37 -24
  677. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +23 -29
  678. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +4 -2
  679. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +31 -40
  680. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +8 -6
  681. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +3 -4
  682. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +34 -18
  683. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +21 -25
  684. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +26 -5
  685. package/deps/rocksdb/rocksdb/utilities/types_util.cc +88 -0
  686. package/deps/rocksdb/rocksdb/utilities/types_util_test.cc +98 -0
  687. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -1
  688. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +463 -90
  689. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +259 -76
  690. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +70 -14
  691. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +609 -10
  692. package/deps/rocksdb/rocksdb.gyp +8 -4
  693. package/index.js +18 -4
  694. package/max_rev_operator.h +2 -0
  695. package/package.json +2 -2
  696. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  697. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  698. package/util.h +29 -5
  699. package/.tap/coverage/4c642b53-6895-4ef0-9391-7c6b8d484262.json +0 -14334
  700. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +0 -57
@@ -13,6 +13,7 @@
13
13
  #include <mutex>
14
14
 
15
15
  #include "db/version_edit.h"
16
+ #include "file/file_util.h"
16
17
  #include "monitoring/histogram.h"
17
18
  #include "monitoring/iostats_context_imp.h"
18
19
  #include "port/port.h"
@@ -24,6 +25,24 @@
24
25
  #include "util/rate_limiter_impl.h"
25
26
 
26
27
  namespace ROCKSDB_NAMESPACE {
28
+ inline Histograms GetFileWriteHistograms(Histograms file_writer_hist,
29
+ Env::IOActivity io_activity) {
30
+ if (file_writer_hist == Histograms::SST_WRITE_MICROS ||
31
+ file_writer_hist == Histograms::BLOB_DB_BLOB_FILE_WRITE_MICROS) {
32
+ switch (io_activity) {
33
+ case Env::IOActivity::kFlush:
34
+ return Histograms::FILE_WRITE_FLUSH_MICROS;
35
+ case Env::IOActivity::kCompaction:
36
+ return Histograms::FILE_WRITE_COMPACTION_MICROS;
37
+ case Env::IOActivity::kDBOpen:
38
+ return Histograms::FILE_WRITE_DB_OPEN_MICROS;
39
+ default:
40
+ break;
41
+ }
42
+ }
43
+ return Histograms::HISTOGRAM_ENUM_MAX;
44
+ }
45
+
27
46
  IOStatus WritableFileWriter::Create(const std::shared_ptr<FileSystem>& fs,
28
47
  const std::string& fname,
29
48
  const FileOptions& file_opts,
@@ -42,12 +61,16 @@ IOStatus WritableFileWriter::Create(const std::shared_ptr<FileSystem>& fs,
42
61
  return io_s;
43
62
  }
44
63
 
45
- IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
46
- Env::IOPriority op_rate_limiter_priority) {
64
+ IOStatus WritableFileWriter::Append(const IOOptions& opts, const Slice& data,
65
+ uint32_t crc32c_checksum) {
47
66
  if (seen_error()) {
48
67
  return AssertFalseAndGetStatusForPrevError();
49
68
  }
50
69
 
70
+ StopWatch sw(clock_, stats_, hist_type_,
71
+ GetFileWriteHistograms(hist_type_, opts.io_activity));
72
+
73
+ const IOOptions io_options = FinalizeIOOptions(opts);
51
74
  const char* src = data.data();
52
75
  size_t left = data.size();
53
76
  IOStatus s;
@@ -59,10 +82,6 @@ IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
59
82
  UpdateFileChecksum(data);
60
83
 
61
84
  {
62
- IOOptions io_options;
63
- io_options.rate_limiter_priority =
64
- WritableFileWriter::DecideRateLimiterPriority(
65
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
66
85
  IOSTATS_TIMER_GUARD(prepare_write_nanos);
67
86
  TEST_SYNC_POINT("WritableFileWriter::Append:BeforePrepareWrite");
68
87
  writable_file_->PrepareWrite(static_cast<size_t>(GetFileSize()), left,
@@ -88,7 +107,7 @@ IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
88
107
  // Flush only when buffered I/O
89
108
  if (!use_direct_io() && (buf_.Capacity() - buf_.CurrentSize()) < left) {
90
109
  if (buf_.CurrentSize() > 0) {
91
- s = Flush(op_rate_limiter_priority);
110
+ s = Flush(io_options);
92
111
  if (!s.ok()) {
93
112
  set_seen_error();
94
113
  return s;
@@ -119,7 +138,7 @@ IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
119
138
  src += appended;
120
139
 
121
140
  if (left > 0) {
122
- s = Flush(op_rate_limiter_priority);
141
+ s = Flush(io_options);
123
142
  if (!s.ok()) {
124
143
  break;
125
144
  }
@@ -129,7 +148,7 @@ IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
129
148
  } else {
130
149
  assert(buf_.CurrentSize() == 0);
131
150
  buffered_data_crc32c_checksum_ = crc32c_checksum;
132
- s = WriteBufferedWithChecksum(src, left, op_rate_limiter_priority);
151
+ s = WriteBufferedWithChecksum(io_options, src, left);
133
152
  }
134
153
  } else {
135
154
  // In this case, either we do not need to do the data verification or
@@ -149,7 +168,7 @@ IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
149
168
  src += appended;
150
169
 
151
170
  if (left > 0) {
152
- s = Flush(op_rate_limiter_priority);
171
+ s = Flush(io_options);
153
172
  if (!s.ok()) {
154
173
  break;
155
174
  }
@@ -160,9 +179,9 @@ IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
160
179
  assert(buf_.CurrentSize() == 0);
161
180
  if (perform_data_verification_ && buffered_data_with_checksum_) {
162
181
  buffered_data_crc32c_checksum_ = crc32c::Value(src, left);
163
- s = WriteBufferedWithChecksum(src, left, op_rate_limiter_priority);
182
+ s = WriteBufferedWithChecksum(io_options, src, left);
164
183
  } else {
165
- s = WriteBuffered(src, left, op_rate_limiter_priority);
184
+ s = WriteBuffered(io_options, src, left);
166
185
  }
167
186
  }
168
187
  }
@@ -177,15 +196,15 @@ IOStatus WritableFileWriter::Append(const Slice& data, uint32_t crc32c_checksum,
177
196
  return s;
178
197
  }
179
198
 
180
- IOStatus WritableFileWriter::Pad(const size_t pad_bytes,
181
- Env::IOPriority op_rate_limiter_priority) {
199
+ IOStatus WritableFileWriter::Pad(const IOOptions& opts,
200
+ const size_t pad_bytes) {
182
201
  if (seen_error()) {
183
202
  return AssertFalseAndGetStatusForPrevError();
184
203
  }
204
+ const IOOptions io_options = FinalizeIOOptions(opts);
185
205
  assert(pad_bytes < kDefaultPageSize);
186
206
  size_t left = pad_bytes;
187
207
  size_t cap = buf_.Capacity() - buf_.CurrentSize();
188
- size_t pad_start = buf_.CurrentSize();
189
208
 
190
209
  // Assume pad_bytes is small compared to buf_ capacity. So we always
191
210
  // use buf_ rather than write directly to file in certain cases like
@@ -194,8 +213,18 @@ IOStatus WritableFileWriter::Pad(const size_t pad_bytes,
194
213
  size_t append_bytes = std::min(cap, left);
195
214
  buf_.PadWith(append_bytes, 0);
196
215
  left -= append_bytes;
216
+
217
+ Slice data(buf_.BufferStart() + buf_.CurrentSize() - append_bytes,
218
+ append_bytes);
219
+ UpdateFileChecksum(data);
220
+ if (perform_data_verification_) {
221
+ buffered_data_crc32c_checksum_ = crc32c::Extend(
222
+ buffered_data_crc32c_checksum_,
223
+ buf_.BufferStart() + buf_.CurrentSize() - append_bytes, append_bytes);
224
+ }
225
+
197
226
  if (left > 0) {
198
- IOStatus s = Flush(op_rate_limiter_priority);
227
+ IOStatus s = Flush(io_options);
199
228
  if (!s.ok()) {
200
229
  set_seen_error();
201
230
  return s;
@@ -206,19 +235,16 @@ IOStatus WritableFileWriter::Pad(const size_t pad_bytes,
206
235
  pending_sync_ = true;
207
236
  uint64_t cur_size = filesize_.load(std::memory_order_acquire);
208
237
  filesize_.store(cur_size + pad_bytes, std::memory_order_release);
209
- if (perform_data_verification_) {
210
- buffered_data_crc32c_checksum_ =
211
- crc32c::Extend(buffered_data_crc32c_checksum_,
212
- buf_.BufferStart() + pad_start, pad_bytes);
213
- }
238
+
214
239
  return IOStatus::OK();
215
240
  }
216
241
 
217
- IOStatus WritableFileWriter::Close() {
242
+ IOStatus WritableFileWriter::Close(const IOOptions& opts) {
243
+ IOOptions io_options = FinalizeIOOptions(opts);
218
244
  if (seen_error()) {
219
245
  IOStatus interim;
220
246
  if (writable_file_.get() != nullptr) {
221
- interim = writable_file_->Close(IOOptions(), nullptr);
247
+ interim = writable_file_->Close(io_options, nullptr);
222
248
  writable_file_.reset();
223
249
  }
224
250
  if (interim.ok()) {
@@ -240,11 +266,9 @@ IOStatus WritableFileWriter::Close() {
240
266
  }
241
267
 
242
268
  IOStatus s;
243
- s = Flush(); // flush cache to OS
269
+ s = Flush(io_options); // flush cache to OS
244
270
 
245
271
  IOStatus interim;
246
- IOOptions io_options;
247
- io_options.rate_limiter_priority = writable_file_->GetIOPriority();
248
272
  // In direct I/O mode we write whole pages so
249
273
  // we need to let the file know where data ends.
250
274
  if (use_direct_io()) {
@@ -322,11 +346,13 @@ IOStatus WritableFileWriter::Close() {
322
346
 
323
347
  // write out the cached data to the OS cache or storage if direct I/O
324
348
  // enabled
325
- IOStatus WritableFileWriter::Flush(Env::IOPriority op_rate_limiter_priority) {
349
+ IOStatus WritableFileWriter::Flush(const IOOptions& opts) {
326
350
  if (seen_error()) {
327
351
  return AssertFalseAndGetStatusForPrevError();
328
352
  }
329
353
 
354
+ const IOOptions io_options = FinalizeIOOptions(opts);
355
+
330
356
  IOStatus s;
331
357
  TEST_KILL_RANDOM_WITH_WEIGHT("WritableFileWriter::Flush:0", REDUCE_ODDS2);
332
358
 
@@ -334,18 +360,17 @@ IOStatus WritableFileWriter::Flush(Env::IOPriority op_rate_limiter_priority) {
334
360
  if (use_direct_io()) {
335
361
  if (pending_sync_) {
336
362
  if (perform_data_verification_ && buffered_data_with_checksum_) {
337
- s = WriteDirectWithChecksum(op_rate_limiter_priority);
363
+ s = WriteDirectWithChecksum(io_options);
338
364
  } else {
339
- s = WriteDirect(op_rate_limiter_priority);
365
+ s = WriteDirect(io_options);
340
366
  }
341
367
  }
342
368
  } else {
343
369
  if (perform_data_verification_ && buffered_data_with_checksum_) {
344
- s = WriteBufferedWithChecksum(buf_.BufferStart(), buf_.CurrentSize(),
345
- op_rate_limiter_priority);
370
+ s = WriteBufferedWithChecksum(io_options, buf_.BufferStart(),
371
+ buf_.CurrentSize());
346
372
  } else {
347
- s = WriteBuffered(buf_.BufferStart(), buf_.CurrentSize(),
348
- op_rate_limiter_priority);
373
+ s = WriteBuffered(io_options, buf_.BufferStart(), buf_.CurrentSize());
349
374
  }
350
375
  }
351
376
  if (!s.ok()) {
@@ -359,10 +384,6 @@ IOStatus WritableFileWriter::Flush(Env::IOPriority op_rate_limiter_priority) {
359
384
  if (ShouldNotifyListeners()) {
360
385
  start_ts = FileOperationInfo::StartNow();
361
386
  }
362
- IOOptions io_options;
363
- io_options.rate_limiter_priority =
364
- WritableFileWriter::DecideRateLimiterPriority(
365
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
366
387
  s = writable_file_->Flush(io_options, nullptr);
367
388
  if (ShouldNotifyListeners()) {
368
389
  auto finish_ts = std::chrono::steady_clock::now();
@@ -400,7 +421,8 @@ IOStatus WritableFileWriter::Flush(Env::IOPriority op_rate_limiter_priority) {
400
421
  assert(offset_sync_to >= last_sync_size_);
401
422
  if (offset_sync_to > 0 &&
402
423
  offset_sync_to - last_sync_size_ >= bytes_per_sync_) {
403
- s = RangeSync(last_sync_size_, offset_sync_to - last_sync_size_);
424
+ s = RangeSync(io_options, last_sync_size_,
425
+ offset_sync_to - last_sync_size_);
404
426
  if (!s.ok()) {
405
427
  set_seen_error();
406
428
  }
@@ -429,19 +451,25 @@ const char* WritableFileWriter::GetFileChecksumFuncName() const {
429
451
  }
430
452
  }
431
453
 
432
- IOStatus WritableFileWriter::Sync(bool use_fsync) {
454
+ IOStatus WritableFileWriter::PrepareIOOptions(const WriteOptions& wo,
455
+ IOOptions& opts) {
456
+ return PrepareIOFromWriteOptions(wo, opts);
457
+ }
458
+
459
+ IOStatus WritableFileWriter::Sync(const IOOptions& opts, bool use_fsync) {
433
460
  if (seen_error()) {
434
461
  return AssertFalseAndGetStatusForPrevError();
435
462
  }
436
463
 
437
- IOStatus s = Flush();
464
+ IOOptions io_options = FinalizeIOOptions(opts);
465
+ IOStatus s = Flush(io_options);
438
466
  if (!s.ok()) {
439
467
  set_seen_error();
440
468
  return s;
441
469
  }
442
470
  TEST_KILL_RANDOM("WritableFileWriter::Sync:0");
443
471
  if (!use_direct_io() && pending_sync_) {
444
- s = SyncInternal(use_fsync);
472
+ s = SyncInternal(io_options, use_fsync);
445
473
  if (!s.ok()) {
446
474
  set_seen_error();
447
475
  return s;
@@ -452,17 +480,19 @@ IOStatus WritableFileWriter::Sync(bool use_fsync) {
452
480
  return IOStatus::OK();
453
481
  }
454
482
 
455
- IOStatus WritableFileWriter::SyncWithoutFlush(bool use_fsync) {
483
+ IOStatus WritableFileWriter::SyncWithoutFlush(const IOOptions& opts,
484
+ bool use_fsync) {
456
485
  if (seen_error()) {
457
486
  return AssertFalseAndGetStatusForPrevError();
458
487
  }
488
+ IOOptions io_options = FinalizeIOOptions(opts);
459
489
  if (!writable_file_->IsSyncThreadSafe()) {
460
490
  return IOStatus::NotSupported(
461
491
  "Can't WritableFileWriter::SyncWithoutFlush() because "
462
492
  "WritableFile::IsSyncThreadSafe() is false");
463
493
  }
464
494
  TEST_SYNC_POINT("WritableFileWriter::SyncWithoutFlush:1");
465
- IOStatus s = SyncInternal(use_fsync);
495
+ IOStatus s = SyncInternal(io_options, use_fsync);
466
496
  TEST_SYNC_POINT("WritableFileWriter::SyncWithoutFlush:2");
467
497
  if (!s.ok()) {
468
498
  #ifndef NDEBUG
@@ -473,7 +503,8 @@ IOStatus WritableFileWriter::SyncWithoutFlush(bool use_fsync) {
473
503
  return s;
474
504
  }
475
505
 
476
- IOStatus WritableFileWriter::SyncInternal(bool use_fsync) {
506
+ IOStatus WritableFileWriter::SyncInternal(const IOOptions& opts,
507
+ bool use_fsync) {
477
508
  // Caller is supposed to check seen_error_
478
509
  IOStatus s;
479
510
  IOSTATS_TIMER_GUARD(fsync_nanos);
@@ -487,12 +518,10 @@ IOStatus WritableFileWriter::SyncInternal(bool use_fsync) {
487
518
  start_ts = FileOperationInfo::StartNow();
488
519
  }
489
520
 
490
- IOOptions io_options;
491
- io_options.rate_limiter_priority = writable_file_->GetIOPriority();
492
521
  if (use_fsync) {
493
- s = writable_file_->Fsync(io_options, nullptr);
522
+ s = writable_file_->Fsync(opts, nullptr);
494
523
  } else {
495
- s = writable_file_->Sync(io_options, nullptr);
524
+ s = writable_file_->Sync(opts, nullptr);
496
525
  }
497
526
  if (ShouldNotifyListeners()) {
498
527
  auto finish_ts = std::chrono::steady_clock::now();
@@ -511,7 +540,8 @@ IOStatus WritableFileWriter::SyncInternal(bool use_fsync) {
511
540
  return s;
512
541
  }
513
542
 
514
- IOStatus WritableFileWriter::RangeSync(uint64_t offset, uint64_t nbytes) {
543
+ IOStatus WritableFileWriter::RangeSync(const IOOptions& opts, uint64_t offset,
544
+ uint64_t nbytes) {
515
545
  if (seen_error()) {
516
546
  return AssertFalseAndGetStatusForPrevError();
517
547
  }
@@ -522,9 +552,7 @@ IOStatus WritableFileWriter::RangeSync(uint64_t offset, uint64_t nbytes) {
522
552
  if (ShouldNotifyListeners()) {
523
553
  start_ts = FileOperationInfo::StartNow();
524
554
  }
525
- IOOptions io_options;
526
- io_options.rate_limiter_priority = writable_file_->GetIOPriority();
527
- IOStatus s = writable_file_->RangeSync(offset, nbytes, io_options, nullptr);
555
+ IOStatus s = writable_file_->RangeSync(offset, nbytes, opts, nullptr);
528
556
  if (!s.ok()) {
529
557
  set_seen_error();
530
558
  }
@@ -541,8 +569,8 @@ IOStatus WritableFileWriter::RangeSync(uint64_t offset, uint64_t nbytes) {
541
569
 
542
570
  // This method writes to disk the specified data and makes use of the rate
543
571
  // limiter if available
544
- IOStatus WritableFileWriter::WriteBuffered(
545
- const char* data, size_t size, Env::IOPriority op_rate_limiter_priority) {
572
+ IOStatus WritableFileWriter::WriteBuffered(const IOOptions& opts,
573
+ const char* data, size_t size) {
546
574
  if (seen_error()) {
547
575
  return AssertFalseAndGetStatusForPrevError();
548
576
  }
@@ -553,11 +581,7 @@ IOStatus WritableFileWriter::WriteBuffered(
553
581
  size_t left = size;
554
582
  DataVerificationInfo v_info;
555
583
  char checksum_buf[sizeof(uint32_t)];
556
- Env::IOPriority rate_limiter_priority_used =
557
- WritableFileWriter::DecideRateLimiterPriority(
558
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
559
- IOOptions io_options;
560
- io_options.rate_limiter_priority = rate_limiter_priority_used;
584
+ Env::IOPriority rate_limiter_priority_used = opts.rate_limiter_priority;
561
585
 
562
586
  while (left > 0) {
563
587
  size_t allowed = left;
@@ -573,7 +597,7 @@ IOStatus WritableFileWriter::WriteBuffered(
573
597
  TEST_SYNC_POINT("WritableFileWriter::Flush:BeforeAppend");
574
598
 
575
599
  FileOperationInfo::StartTimePoint start_ts;
576
- uint64_t old_size = writable_file_->GetFileSize(io_options, nullptr);
600
+ uint64_t old_size = writable_file_->GetFileSize(opts, nullptr);
577
601
  if (ShouldNotifyListeners()) {
578
602
  start_ts = FileOperationInfo::StartNow();
579
603
  old_size = next_write_offset_;
@@ -585,10 +609,10 @@ IOStatus WritableFileWriter::WriteBuffered(
585
609
  if (perform_data_verification_) {
586
610
  Crc32cHandoffChecksumCalculation(src, allowed, checksum_buf);
587
611
  v_info.checksum = Slice(checksum_buf, sizeof(uint32_t));
588
- s = writable_file_->Append(Slice(src, allowed), io_options, v_info,
612
+ s = writable_file_->Append(Slice(src, allowed), opts, v_info,
589
613
  nullptr);
590
614
  } else {
591
- s = writable_file_->Append(Slice(src, allowed), io_options, nullptr);
615
+ s = writable_file_->Append(Slice(src, allowed), opts, nullptr);
592
616
  }
593
617
  if (!s.ok()) {
594
618
  // If writable_file_->Append() failed, then the data may or may not
@@ -635,8 +659,9 @@ IOStatus WritableFileWriter::WriteBuffered(
635
659
  return s;
636
660
  }
637
661
 
638
- IOStatus WritableFileWriter::WriteBufferedWithChecksum(
639
- const char* data, size_t size, Env::IOPriority op_rate_limiter_priority) {
662
+ IOStatus WritableFileWriter::WriteBufferedWithChecksum(const IOOptions& opts,
663
+ const char* data,
664
+ size_t size) {
640
665
  if (seen_error()) {
641
666
  return AssertFalseAndGetStatusForPrevError();
642
667
  }
@@ -648,11 +673,7 @@ IOStatus WritableFileWriter::WriteBufferedWithChecksum(
648
673
  size_t left = size;
649
674
  DataVerificationInfo v_info;
650
675
  char checksum_buf[sizeof(uint32_t)];
651
- Env::IOPriority rate_limiter_priority_used =
652
- WritableFileWriter::DecideRateLimiterPriority(
653
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
654
- IOOptions io_options;
655
- io_options.rate_limiter_priority = rate_limiter_priority_used;
676
+ Env::IOPriority rate_limiter_priority_used = opts.rate_limiter_priority;
656
677
  // Check how much is allowed. Here, we loop until the rate limiter allows to
657
678
  // write the entire buffer.
658
679
  // TODO: need to be improved since it sort of defeats the purpose of the rate
@@ -673,7 +694,7 @@ IOStatus WritableFileWriter::WriteBufferedWithChecksum(
673
694
  TEST_SYNC_POINT("WritableFileWriter::Flush:BeforeAppend");
674
695
 
675
696
  FileOperationInfo::StartTimePoint start_ts;
676
- uint64_t old_size = writable_file_->GetFileSize(io_options, nullptr);
697
+ uint64_t old_size = writable_file_->GetFileSize(opts, nullptr);
677
698
  if (ShouldNotifyListeners()) {
678
699
  start_ts = FileOperationInfo::StartNow();
679
700
  old_size = next_write_offset_;
@@ -685,7 +706,7 @@ IOStatus WritableFileWriter::WriteBufferedWithChecksum(
685
706
 
686
707
  EncodeFixed32(checksum_buf, buffered_data_crc32c_checksum_);
687
708
  v_info.checksum = Slice(checksum_buf, sizeof(uint32_t));
688
- s = writable_file_->Append(Slice(src, left), io_options, v_info, nullptr);
709
+ s = writable_file_->Append(Slice(src, left), opts, v_info, nullptr);
689
710
  SetPerfLevel(prev_perf_level);
690
711
  }
691
712
  if (ShouldNotifyListeners()) {
@@ -755,8 +776,7 @@ void WritableFileWriter::Crc32cHandoffChecksumCalculation(const char* data,
755
776
  // whole number of pages to be written again on the next flush because we can
756
777
  // only write on aligned
757
778
  // offsets.
758
- IOStatus WritableFileWriter::WriteDirect(
759
- Env::IOPriority op_rate_limiter_priority) {
779
+ IOStatus WritableFileWriter::WriteDirect(const IOOptions& opts) {
760
780
  if (seen_error()) {
761
781
  assert(false);
762
782
 
@@ -785,11 +805,7 @@ IOStatus WritableFileWriter::WriteDirect(
785
805
  size_t left = buf_.CurrentSize();
786
806
  DataVerificationInfo v_info;
787
807
  char checksum_buf[sizeof(uint32_t)];
788
- Env::IOPriority rate_limiter_priority_used =
789
- WritableFileWriter::DecideRateLimiterPriority(
790
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
791
- IOOptions io_options;
792
- io_options.rate_limiter_priority = rate_limiter_priority_used;
808
+ Env::IOPriority rate_limiter_priority_used = opts.rate_limiter_priority;
793
809
 
794
810
  while (left > 0) {
795
811
  // Check how much is allowed
@@ -813,10 +829,10 @@ IOStatus WritableFileWriter::WriteDirect(
813
829
  Crc32cHandoffChecksumCalculation(src, size, checksum_buf);
814
830
  v_info.checksum = Slice(checksum_buf, sizeof(uint32_t));
815
831
  s = writable_file_->PositionedAppend(Slice(src, size), write_offset,
816
- io_options, v_info, nullptr);
832
+ opts, v_info, nullptr);
817
833
  } else {
818
834
  s = writable_file_->PositionedAppend(Slice(src, size), write_offset,
819
- io_options, nullptr);
835
+ opts, nullptr);
820
836
  }
821
837
 
822
838
  if (ShouldNotifyListeners()) {
@@ -859,8 +875,7 @@ IOStatus WritableFileWriter::WriteDirect(
859
875
  return s;
860
876
  }
861
877
 
862
- IOStatus WritableFileWriter::WriteDirectWithChecksum(
863
- Env::IOPriority op_rate_limiter_priority) {
878
+ IOStatus WritableFileWriter::WriteDirectWithChecksum(const IOOptions& opts) {
864
879
  if (seen_error()) {
865
880
  return AssertFalseAndGetStatusForPrevError();
866
881
  }
@@ -895,11 +910,7 @@ IOStatus WritableFileWriter::WriteDirectWithChecksum(
895
910
  DataVerificationInfo v_info;
896
911
  char checksum_buf[sizeof(uint32_t)];
897
912
 
898
- Env::IOPriority rate_limiter_priority_used =
899
- WritableFileWriter::DecideRateLimiterPriority(
900
- writable_file_->GetIOPriority(), op_rate_limiter_priority);
901
- IOOptions io_options;
902
- io_options.rate_limiter_priority = rate_limiter_priority_used;
913
+ Env::IOPriority rate_limiter_priority_used = opts.rate_limiter_priority;
903
914
  // Check how much is allowed. Here, we loop until the rate limiter allows to
904
915
  // write the entire buffer.
905
916
  // TODO: need to be improved since it sort of defeats the purpose of the rate
@@ -925,8 +936,8 @@ IOStatus WritableFileWriter::WriteDirectWithChecksum(
925
936
  // direct writes must be positional
926
937
  EncodeFixed32(checksum_buf, buffered_data_crc32c_checksum_);
927
938
  v_info.checksum = Slice(checksum_buf, sizeof(uint32_t));
928
- s = writable_file_->PositionedAppend(Slice(src, left), write_offset,
929
- io_options, v_info, nullptr);
939
+ s = writable_file_->PositionedAppend(Slice(src, left), write_offset, opts,
940
+ v_info, nullptr);
930
941
 
931
942
  if (ShouldNotifyListeners()) {
932
943
  auto finish_ts = std::chrono::steady_clock::now();
@@ -986,4 +997,14 @@ Env::IOPriority WritableFileWriter::DecideRateLimiterPriority(
986
997
  }
987
998
  }
988
999
 
1000
+ IOOptions WritableFileWriter::FinalizeIOOptions(const IOOptions& opts) const {
1001
+ Env::IOPriority op_rate_limiter_priority = opts.rate_limiter_priority;
1002
+ IOOptions io_options(opts);
1003
+ if (writable_file_.get() != nullptr) {
1004
+ io_options.rate_limiter_priority =
1005
+ WritableFileWriter::DecideRateLimiterPriority(
1006
+ writable_file_->GetIOPriority(), op_rate_limiter_priority);
1007
+ }
1008
+ return io_options;
1009
+ }
989
1010
  } // namespace ROCKSDB_NAMESPACE
@@ -13,6 +13,7 @@
13
13
 
14
14
  #include "db/version_edit.h"
15
15
  #include "env/file_system_tracer.h"
16
+ #include "monitoring/thread_status_util.h"
16
17
  #include "port/port.h"
17
18
  #include "rocksdb/file_checksum.h"
18
19
  #include "rocksdb/file_system.h"
@@ -159,6 +160,7 @@ class WritableFileWriter {
159
160
  uint64_t bytes_per_sync_;
160
161
  RateLimiter* rate_limiter_;
161
162
  Statistics* stats_;
163
+ Histograms hist_type_;
162
164
  std::vector<std::shared_ptr<EventListener>> listeners_;
163
165
  std::unique_ptr<FileChecksumGenerator> checksum_generator_;
164
166
  bool checksum_finalized_;
@@ -173,6 +175,7 @@ class WritableFileWriter {
173
175
  const FileOptions& options, SystemClock* clock = nullptr,
174
176
  const std::shared_ptr<IOTracer>& io_tracer = nullptr,
175
177
  Statistics* stats = nullptr,
178
+ Histograms hist_type = Histograms::HISTOGRAM_ENUM_MAX,
176
179
  const std::vector<std::shared_ptr<EventListener>>& listeners = {},
177
180
  FileChecksumGenFactory* file_checksum_gen_factory = nullptr,
178
181
  bool perform_data_verification = false,
@@ -191,6 +194,7 @@ class WritableFileWriter {
191
194
  bytes_per_sync_(options.bytes_per_sync),
192
195
  rate_limiter_(options.rate_limiter),
193
196
  stats_(stats),
197
+ hist_type_(hist_type),
194
198
  listeners_(),
195
199
  checksum_generator_(nullptr),
196
200
  checksum_finalized_(false),
@@ -222,35 +226,42 @@ class WritableFileWriter {
222
226
  const std::string& fname, const FileOptions& file_opts,
223
227
  std::unique_ptr<WritableFileWriter>* writer,
224
228
  IODebugContext* dbg);
229
+
230
+ static IOStatus PrepareIOOptions(const WriteOptions& wo, IOOptions& opts);
231
+
225
232
  WritableFileWriter(const WritableFileWriter&) = delete;
226
233
 
227
234
  WritableFileWriter& operator=(const WritableFileWriter&) = delete;
228
235
 
229
236
  ~WritableFileWriter() {
230
- auto s = Close();
237
+ ThreadStatus::OperationType cur_op_type =
238
+ ThreadStatusUtil::GetThreadOperation();
239
+ ThreadStatusUtil::SetThreadOperation(
240
+ ThreadStatus::OperationType::OP_UNKNOWN);
241
+ auto s = Close(IOOptions());
231
242
  s.PermitUncheckedError();
243
+ ThreadStatusUtil::SetThreadOperation(cur_op_type);
232
244
  }
233
245
 
234
246
  std::string file_name() const { return file_name_; }
235
247
 
236
248
  // When this Append API is called, if the crc32c_checksum is not provided, we
237
249
  // will calculate the checksum internally.
238
- IOStatus Append(const Slice& data, uint32_t crc32c_checksum = 0,
239
- Env::IOPriority op_rate_limiter_priority = Env::IO_TOTAL);
250
+ IOStatus Append(const IOOptions& opts, const Slice& data,
251
+ uint32_t crc32c_checksum = 0);
240
252
 
241
- IOStatus Pad(const size_t pad_bytes,
242
- Env::IOPriority op_rate_limiter_priority = Env::IO_TOTAL);
253
+ IOStatus Pad(const IOOptions& opts, const size_t pad_bytes);
243
254
 
244
- IOStatus Flush(Env::IOPriority op_rate_limiter_priority = Env::IO_TOTAL);
255
+ IOStatus Flush(const IOOptions& opts);
245
256
 
246
- IOStatus Close();
257
+ IOStatus Close(const IOOptions& opts);
247
258
 
248
- IOStatus Sync(bool use_fsync);
259
+ IOStatus Sync(const IOOptions& opts, bool use_fsync);
249
260
 
250
261
  // Sync only the data that was already Flush()ed. Safe to call concurrently
251
262
  // with Append() and Flush(). If !writable_file_->IsSyncThreadSafe(),
252
263
  // returns NotSupported status.
253
- IOStatus SyncWithoutFlush(bool use_fsync);
264
+ IOStatus SyncWithoutFlush(const IOOptions& opts, bool use_fsync);
254
265
 
255
266
  uint64_t GetFileSize() const {
256
267
  return filesize_.load(std::memory_order_acquire);
@@ -307,14 +318,20 @@ class WritableFileWriter {
307
318
 
308
319
  // Used when os buffering is OFF and we are writing
309
320
  // DMA such as in Direct I/O mode
310
- IOStatus WriteDirect(Env::IOPriority op_rate_limiter_priority);
311
- IOStatus WriteDirectWithChecksum(Env::IOPriority op_rate_limiter_priority);
321
+ // `opts` should've been called with `FinalizeIOOptions()` before passing in
322
+ IOStatus WriteDirect(const IOOptions& opts);
323
+ // `opts` should've been called with `FinalizeIOOptions()` before passing in
324
+ IOStatus WriteDirectWithChecksum(const IOOptions& opts);
312
325
  // Normal write.
313
- IOStatus WriteBuffered(const char* data, size_t size,
314
- Env::IOPriority op_rate_limiter_priority);
315
- IOStatus WriteBufferedWithChecksum(const char* data, size_t size,
316
- Env::IOPriority op_rate_limiter_priority);
317
- IOStatus RangeSync(uint64_t offset, uint64_t nbytes);
318
- IOStatus SyncInternal(bool use_fsync);
326
+ // `opts` should've been called with `FinalizeIOOptions()` before passing in
327
+ IOStatus WriteBuffered(const IOOptions& opts, const char* data, size_t size);
328
+ // `opts` should've been called with `FinalizeIOOptions()` before passing in
329
+ IOStatus WriteBufferedWithChecksum(const IOOptions& opts, const char* data,
330
+ size_t size);
331
+ // `opts` should've been called with `FinalizeIOOptions()` before passing in
332
+ IOStatus RangeSync(const IOOptions& opts, uint64_t offset, uint64_t nbytes);
333
+ // `opts` should've been called with `FinalizeIOOptions()` before passing in
334
+ IOStatus SyncInternal(const IOOptions& opts, bool use_fsync);
335
+ IOOptions FinalizeIOOptions(const IOOptions& opts) const;
319
336
  };
320
337
  } // namespace ROCKSDB_NAMESPACE
@@ -603,6 +603,14 @@ class CacheWrapper : public Cache {
603
603
  return target_->HasStrictCapacityLimit();
604
604
  }
605
605
 
606
+ size_t GetOccupancyCount() const override {
607
+ return target_->GetOccupancyCount();
608
+ }
609
+
610
+ size_t GetTableAddressCount() const override {
611
+ return target_->GetTableAddressCount();
612
+ }
613
+
606
614
  size_t GetCapacity() const override { return target_->GetCapacity(); }
607
615
 
608
616
  size_t GetUsage() const override { return target_->GetUsage(); }
@@ -638,6 +646,14 @@ class CacheWrapper : public Cache {
638
646
  target_->WaitAll(async_handles, count);
639
647
  }
640
648
 
649
+ uint32_t GetHashSeed() const override { return target_->GetHashSeed(); }
650
+
651
+ void ReportProblems(const std::shared_ptr<Logger>& info_log) const override {
652
+ target_->ReportProblems(info_log);
653
+ }
654
+
655
+ const std::shared_ptr<Cache>& GetTarget() { return target_; }
656
+
641
657
  protected:
642
658
  std::shared_ptr<Cache> target_;
643
659
  };