@nxtedition/rocksdb 6.0.1 → 7.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/BUILDING.md +12 -4
  2. package/binding.cc +421 -40
  3. package/deps/rocksdb/build_version.cc +4 -10
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +26 -3
  5. package/deps/rocksdb/rocksdb/Makefile +73 -91
  6. package/deps/rocksdb/rocksdb/TARGETS +27 -2
  7. package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
  8. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
  10. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
  12. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  13. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  14. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  15. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  16. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  17. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  18. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  19. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  20. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  21. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  22. package/deps/rocksdb/rocksdb/common.mk +30 -0
  23. package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
  24. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
  25. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
  26. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
  27. package/deps/rocksdb/rocksdb/db/builder.cc +22 -7
  28. package/deps/rocksdb/rocksdb/db/c.cc +71 -0
  29. package/deps/rocksdb/rocksdb/db/c_test.c +28 -2
  30. package/deps/rocksdb/rocksdb/db/column_family.cc +12 -5
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +54 -16
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +14 -2
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +85 -18
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +23 -22
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +151 -32
  46. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  47. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  48. package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
  49. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
  50. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +404 -32
  51. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
  52. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
  53. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
  54. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
  55. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
  56. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +11 -20
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +15 -1
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +12 -9
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +42 -10
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +14 -4
  67. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
  68. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
  69. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
  70. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
  71. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
  72. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
  73. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
  74. package/deps/rocksdb/rocksdb/db/db_options_test.cc +28 -12
  75. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
  76. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
  77. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
  78. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +11 -6
  79. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
  80. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
  81. package/deps/rocksdb/rocksdb/db/db_test.cc +60 -42
  82. package/deps/rocksdb/rocksdb/db/db_test2.cc +244 -111
  83. package/deps/rocksdb/rocksdb/db/db_test_util.cc +101 -19
  84. package/deps/rocksdb/rocksdb/db/db_test_util.h +52 -2
  85. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
  87. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +5 -175
  88. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
  89. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
  90. package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
  91. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  92. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
  93. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
  94. package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
  95. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +91 -12
  96. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -2
  97. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
  98. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
  99. package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
  100. package/deps/rocksdb/rocksdb/db/flush_job.cc +28 -15
  101. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
  102. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
  103. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  104. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +14 -1
  105. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
  106. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
  107. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
  108. package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
  109. package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
  110. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
  111. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
  112. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
  113. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
  114. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
  115. package/deps/rocksdb/rocksdb/db/repair.cc +13 -2
  116. package/deps/rocksdb/rocksdb/db/repair_test.cc +37 -15
  117. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
  118. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
  119. package/deps/rocksdb/rocksdb/db/table_cache.cc +20 -130
  120. package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
  122. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +133 -133
  124. package/deps/rocksdb/rocksdb/db/version_edit.cc +22 -2
  125. package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
  126. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
  127. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -214
  128. package/deps/rocksdb/rocksdb/db/version_set.h +14 -3
  129. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
  130. package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
  131. package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
  132. package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
  133. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
  135. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
  136. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -6
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +44 -6
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +374 -275
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
  147. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
  148. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
  149. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
  150. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
  152. package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
  153. package/deps/rocksdb/rocksdb/env/env.cc +0 -60
  154. package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
  155. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  156. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
  157. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
  158. package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
  159. package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
  160. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
  161. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
  162. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +44 -22
  163. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  164. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
  165. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
  166. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
  167. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +60 -40
  168. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -0
  169. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
  170. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +49 -1
  171. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
  172. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
  173. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  174. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
  175. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
  176. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
  177. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  178. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
  179. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -3
  181. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
  182. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
  183. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  184. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
  185. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
  186. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
  187. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
  188. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
  189. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +378 -103
  191. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
  192. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  193. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
  194. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  195. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
  196. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
  197. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
  198. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
  199. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
  200. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
  201. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
  202. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
  203. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
  204. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
  205. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +7 -8
  206. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
  207. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
  208. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
  209. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
  212. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
  213. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
  214. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
  215. package/deps/rocksdb/rocksdb/options/cf_options.cc +47 -38
  216. package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
  217. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
  218. package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
  219. package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
  220. package/deps/rocksdb/rocksdb/options/db_options.cc +46 -17
  221. package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
  222. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  223. package/deps/rocksdb/rocksdb/options/options_helper.cc +86 -39
  224. package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
  225. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +12 -7
  226. package/deps/rocksdb/rocksdb/options/options_test.cc +222 -68
  227. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
  228. package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
  229. package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
  230. package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
  231. package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
  232. package/deps/rocksdb/rocksdb/src.mk +6 -1
  233. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  234. package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
  235. package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
  236. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
  237. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +23 -8
  238. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
  239. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +81 -7
  240. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
  241. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +94 -726
  242. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
  243. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -73
  246. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -5
  247. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +2 -11
  249. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
  250. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
  251. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
  252. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
  253. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
  254. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
  255. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
  256. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -2
  257. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
  258. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
  259. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  260. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +8 -4
  261. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
  262. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
  263. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +65 -7
  264. package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
  265. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
  266. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
  267. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
  268. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
  269. package/deps/rocksdb/rocksdb/table/format.cc +22 -20
  270. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
  271. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
  272. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  273. package/deps/rocksdb/rocksdb/table/multiget_context.h +60 -13
  274. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
  275. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
  276. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
  277. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
  278. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
  279. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  280. package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
  281. package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
  282. package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
  283. package/deps/rocksdb/rocksdb/table/unique_id.cc +84 -25
  284. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +37 -4
  285. package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -1
  286. package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
  287. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
  288. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
  289. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
  290. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  291. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +277 -105
  292. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
  293. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
  294. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
  295. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
  296. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
  297. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  298. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +26 -4
  299. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  300. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
  301. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
  302. package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
  303. package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
  304. package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
  305. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
  306. package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
  307. package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
  308. package/deps/rocksdb/rocksdb/util/compression.h +56 -7
  309. package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
  310. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
  311. package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
  312. package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
  313. package/deps/rocksdb/rocksdb/util/heap.h +5 -3
  314. package/deps/rocksdb/rocksdb/util/random.cc +1 -5
  315. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
  316. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
  317. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
  318. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
  319. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
  320. package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
  321. package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
  322. package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
  323. package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
  324. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
  325. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
  326. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
  327. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
  328. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
  329. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
  330. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  331. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  332. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
  333. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
  334. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
  335. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
  336. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
  337. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
  338. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
  339. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
  340. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
  341. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
  342. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
  343. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
  344. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
  345. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
  346. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
  351. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
  352. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
  353. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
  356. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  357. package/deps/rocksdb/rocksdb.gyp +20 -13
  358. package/index.js +187 -3
  359. package/iterator.js +1 -0
  360. package/package-lock.json +23687 -0
  361. package/package.json +2 -30
  362. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  363. package/snapshot.js +23 -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/darwin-x64/node.napi.node +0 -0
  489. package/prebuilds/linux-arm64/node.napi.node +0 -0
  490. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -901,6 +901,154 @@ TEST_F(DBWritableFileWriterTest, IOErrorNotification) {
901
901
  fwf->CheckCounters(1, 1);
902
902
  }
903
903
  #endif // ROCKSDB_LITE
904
+
905
+ class WritableFileWriterIOPriorityTest : public testing::Test {
906
+ protected:
907
+ // This test is to check whether the rate limiter priority can be passed
908
+ // correctly from WritableFileWriter functions to FSWritableFile functions.
909
+
910
+ void SetUp() override {
911
+ // When op_rate_limiter_priority parameter in WritableFileWriter functions
912
+ // is the default (Env::IO_TOTAL).
913
+ std::unique_ptr<FakeWF> wf{new FakeWF(Env::IO_HIGH)};
914
+ FileOptions file_options;
915
+ writer_.reset(new WritableFileWriter(std::move(wf), "" /* don't care */,
916
+ file_options));
917
+ }
918
+
919
+ class FakeWF : public FSWritableFile {
920
+ public:
921
+ explicit FakeWF(Env::IOPriority io_priority) { SetIOPriority(io_priority); }
922
+ ~FakeWF() override {}
923
+
924
+ IOStatus Append(const Slice& /*data*/, const IOOptions& options,
925
+ IODebugContext* /*dbg*/) override {
926
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
927
+ return IOStatus::OK();
928
+ }
929
+ IOStatus Append(const Slice& data, const IOOptions& options,
930
+ const DataVerificationInfo& /* verification_info */,
931
+ IODebugContext* dbg) override {
932
+ return Append(data, options, dbg);
933
+ }
934
+ IOStatus PositionedAppend(const Slice& /*data*/, uint64_t /*offset*/,
935
+ const IOOptions& options,
936
+ IODebugContext* /*dbg*/) override {
937
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
938
+ return IOStatus::OK();
939
+ }
940
+ IOStatus PositionedAppend(
941
+ const Slice& /* data */, uint64_t /* offset */,
942
+ const IOOptions& options,
943
+ const DataVerificationInfo& /* verification_info */,
944
+ IODebugContext* /*dbg*/) override {
945
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
946
+ return IOStatus::OK();
947
+ }
948
+ IOStatus Truncate(uint64_t /*size*/, const IOOptions& options,
949
+ IODebugContext* /*dbg*/) override {
950
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
951
+ return IOStatus::OK();
952
+ }
953
+ IOStatus Close(const IOOptions& options, IODebugContext* /*dbg*/) override {
954
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
955
+ return IOStatus::OK();
956
+ }
957
+ IOStatus Flush(const IOOptions& options, IODebugContext* /*dbg*/) override {
958
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
959
+ return IOStatus::OK();
960
+ }
961
+ IOStatus Sync(const IOOptions& options, IODebugContext* /*dbg*/) override {
962
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
963
+ return IOStatus::OK();
964
+ }
965
+ IOStatus Fsync(const IOOptions& options, IODebugContext* /*dbg*/) override {
966
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
967
+ return IOStatus::OK();
968
+ }
969
+ uint64_t GetFileSize(const IOOptions& options,
970
+ IODebugContext* /*dbg*/) override {
971
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
972
+ return 0;
973
+ }
974
+ void GetPreallocationStatus(size_t* /*block_size*/,
975
+ size_t* /*last_allocated_block*/) override {}
976
+ size_t GetUniqueId(char* /*id*/, size_t /*max_size*/) const override {
977
+ return 0;
978
+ }
979
+ IOStatus InvalidateCache(size_t /*offset*/, size_t /*length*/) override {
980
+ return IOStatus::OK();
981
+ }
982
+
983
+ IOStatus Allocate(uint64_t /*offset*/, uint64_t /*len*/,
984
+ const IOOptions& options,
985
+ IODebugContext* /*dbg*/) override {
986
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
987
+ return IOStatus::OK();
988
+ }
989
+ IOStatus RangeSync(uint64_t /*offset*/, uint64_t /*nbytes*/,
990
+ const IOOptions& options,
991
+ IODebugContext* /*dbg*/) override {
992
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
993
+ return IOStatus::OK();
994
+ }
995
+
996
+ void PrepareWrite(size_t /*offset*/, size_t /*len*/,
997
+ const IOOptions& options,
998
+ IODebugContext* /*dbg*/) override {
999
+ EXPECT_EQ(options.rate_limiter_priority, io_priority_);
1000
+ }
1001
+
1002
+ bool IsSyncThreadSafe() const override { return true; }
1003
+ };
1004
+
1005
+ std::unique_ptr<WritableFileWriter> writer_;
1006
+ };
1007
+
1008
+ TEST_F(WritableFileWriterIOPriorityTest, Append) {
1009
+ ASSERT_OK(writer_->Append(Slice("abc")));
1010
+ }
1011
+
1012
+ TEST_F(WritableFileWriterIOPriorityTest, Pad) { ASSERT_OK(writer_->Pad(500)); }
1013
+
1014
+ TEST_F(WritableFileWriterIOPriorityTest, Flush) { ASSERT_OK(writer_->Flush()); }
1015
+
1016
+ TEST_F(WritableFileWriterIOPriorityTest, Close) { ASSERT_OK(writer_->Close()); }
1017
+
1018
+ TEST_F(WritableFileWriterIOPriorityTest, Sync) {
1019
+ ASSERT_OK(writer_->Sync(false));
1020
+ ASSERT_OK(writer_->Sync(true));
1021
+ }
1022
+
1023
+ TEST_F(WritableFileWriterIOPriorityTest, SyncWithoutFlush) {
1024
+ ASSERT_OK(writer_->SyncWithoutFlush(false));
1025
+ ASSERT_OK(writer_->SyncWithoutFlush(true));
1026
+ }
1027
+
1028
+ TEST_F(WritableFileWriterIOPriorityTest, BasicOp) {
1029
+ EnvOptions env_options;
1030
+ env_options.bytes_per_sync = kMb;
1031
+ std::unique_ptr<FakeWF> wf(new FakeWF(Env::IO_HIGH));
1032
+ std::unique_ptr<WritableFileWriter> writer(
1033
+ new WritableFileWriter(std::move(wf), "" /* don't care */, env_options));
1034
+ Random r(301);
1035
+ Status s;
1036
+ std::unique_ptr<char[]> large_buf(new char[10 * kMb]);
1037
+ for (int i = 0; i < 1000; i++) {
1038
+ int skew_limit = (i < 700) ? 10 : 15;
1039
+ uint32_t num = r.Skewed(skew_limit) * 100 + r.Uniform(100);
1040
+ s = writer->Append(Slice(large_buf.get(), num));
1041
+ ASSERT_OK(s);
1042
+
1043
+ // Flush in a chance of 1/10.
1044
+ if (r.Uniform(10) == 0) {
1045
+ s = writer->Flush();
1046
+ ASSERT_OK(s);
1047
+ }
1048
+ }
1049
+ s = writer->Close();
1050
+ ASSERT_OK(s);
1051
+ }
904
1052
  } // namespace ROCKSDB_NAMESPACE
905
1053
 
906
1054
  int main(int argc, char** argv) {
@@ -129,8 +129,8 @@ TEST_F(LockTest, LockBySameThread) {
129
129
  ASSERT_TRUE(s.IsIOError());
130
130
  #ifndef OS_WIN
131
131
  // Validate that error message contains current thread ID.
132
- ASSERT_TRUE(s.ToString().find(ToString(Env::Default()->GetThreadID())) !=
133
- std::string::npos);
132
+ ASSERT_TRUE(s.ToString().find(std::to_string(
133
+ Env::Default()->GetThreadID())) != std::string::npos);
134
134
  #endif
135
135
 
136
136
  // check the file is locked
@@ -21,6 +21,7 @@ int main() {
21
21
  #include "port/stack_trace.h"
22
22
  #include "rocksdb/cache.h"
23
23
  #include "rocksdb/system_clock.h"
24
+ #include "rocksdb/table.h"
24
25
  #include "table/block_based/filter_policy_internal.h"
25
26
  #include "table/block_based/full_filter_block.h"
26
27
  #include "table/block_based/mock_block_based_table.h"
@@ -103,9 +104,10 @@ DEFINE_uint32(block_cache_capacity_MB, 8,
103
104
  "Setting for "
104
105
  "LRUCacheOptions::capacity");
105
106
 
106
- DEFINE_bool(reserve_table_builder_memory, false,
107
+ DEFINE_bool(charge_filter_construction, false,
107
108
  "Setting for "
108
- "BlockBasedTableOptions::reserve_table_builder_memory");
109
+ "CacheEntryRoleOptions::charged of"
110
+ "CacheEntryRole::kFilterConstruction");
109
111
 
110
112
  DEFINE_bool(strict_capacity_limit, false,
111
113
  "Setting for "
@@ -145,6 +147,8 @@ using ROCKSDB_NAMESPACE::BloomLikeFilterPolicy;
145
147
  using ROCKSDB_NAMESPACE::BuiltinFilterBitsBuilder;
146
148
  using ROCKSDB_NAMESPACE::CachableEntry;
147
149
  using ROCKSDB_NAMESPACE::Cache;
150
+ using ROCKSDB_NAMESPACE::CacheEntryRole;
151
+ using ROCKSDB_NAMESPACE::CacheEntryRoleOptions;
148
152
  using ROCKSDB_NAMESPACE::EncodeFixed32;
149
153
  using ROCKSDB_NAMESPACE::FastRange32;
150
154
  using ROCKSDB_NAMESPACE::FilterBitsReader;
@@ -321,8 +325,12 @@ struct FilterBench : public MockBlockBasedTableTester {
321
325
  FLAGS_optimize_filters_for_memory;
322
326
  table_options_.detect_filter_construct_corruption =
323
327
  FLAGS_detect_filter_construct_corruption;
324
- if (FLAGS_reserve_table_builder_memory) {
325
- table_options_.reserve_table_builder_memory = true;
328
+ table_options_.cache_usage_options.options_overrides.insert(
329
+ {CacheEntryRole::kFilterConstruction,
330
+ {/*.charged = */ FLAGS_charge_filter_construction
331
+ ? CacheEntryRoleOptions::Decision::kEnabled
332
+ : CacheEntryRoleOptions::Decision::kDisabled}});
333
+ if (FLAGS_charge_filter_construction) {
326
334
  table_options_.no_block_cache = false;
327
335
  LRUCacheOptions lo;
328
336
  lo.capacity = FLAGS_block_cache_capacity_MB * 1024 * 1024;
@@ -101,7 +101,9 @@ class BinaryHeap {
101
101
 
102
102
  size_t size() const { return data_.size(); }
103
103
 
104
- void reset_root_cmp_cache() { root_cmp_cache_ = port::kMaxSizet; }
104
+ void reset_root_cmp_cache() {
105
+ root_cmp_cache_ = std::numeric_limits<size_t>::max();
106
+ }
105
107
 
106
108
  private:
107
109
  static inline size_t get_root() { return 0; }
@@ -126,7 +128,7 @@ class BinaryHeap {
126
128
  void downheap(size_t index) {
127
129
  T v = std::move(data_[index]);
128
130
 
129
- size_t picked_child = port::kMaxSizet;
131
+ size_t picked_child = std::numeric_limits<size_t>::max();
130
132
  while (1) {
131
133
  const size_t left_child = get_left(index);
132
134
  if (get_left(index) >= data_.size()) {
@@ -165,7 +167,7 @@ class BinaryHeap {
165
167
  Compare cmp_;
166
168
  autovector<T> data_;
167
169
  // Used to reduce number of cmp_ calls in downheap()
168
- size_t root_cmp_cache_ = port::kMaxSizet;
170
+ size_t root_cmp_cache_ = std::numeric_limits<size_t>::max();
169
171
  };
170
172
 
171
173
  } // namespace ROCKSDB_NAMESPACE
@@ -14,11 +14,7 @@
14
14
  #include "port/likely.h"
15
15
  #include "util/thread_local.h"
16
16
 
17
- #ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
18
- #define STORAGE_DECL static __thread
19
- #else
20
- #define STORAGE_DECL static
21
- #endif
17
+ #define STORAGE_DECL static thread_local
22
18
 
23
19
  namespace ROCKSDB_NAMESPACE {
24
20
 
@@ -31,8 +31,8 @@ size_t RateLimiter::RequestToken(size_t bytes, size_t alignment,
31
31
 
32
32
  if (alignment > 0) {
33
33
  // Here we may actually require more than burst and block
34
- // but we can not write less than one page at a time on direct I/O
35
- // thus we may want not to use ratelimiter
34
+ // as we can not write/read less than one page at a time on direct I/O
35
+ // thus we do not want to be strictly constrained by burst
36
36
  bytes = std::max(alignment, TruncateToPageBoundary(alignment, bytes));
37
37
  }
38
38
  Request(bytes, io_priority, stats, op_type);
@@ -347,10 +347,11 @@ void GenericRateLimiter::RefillBytesAndGrantRequests() {
347
347
 
348
348
  int64_t GenericRateLimiter::CalculateRefillBytesPerPeriod(
349
349
  int64_t rate_bytes_per_sec) {
350
- if (port::kMaxInt64 / rate_bytes_per_sec < options_.refill_period_us) {
350
+ if (std::numeric_limits<int64_t>::max() / rate_bytes_per_sec <
351
+ options_.refill_period_us) {
351
352
  // Avoid unexpected result in the overflow case. The result now is still
352
353
  // inaccurate but is a number that is large enough.
353
- return port::kMaxInt64 / 1000000;
354
+ return std::numeric_limits<int64_t>::max() / 1000000;
354
355
  } else {
355
356
  return rate_bytes_per_sec * options_.refill_period_us / 1000000;
356
357
  }
@@ -374,7 +375,7 @@ Status GenericRateLimiter::Tune() {
374
375
  std::chrono::microseconds(options_.refill_period_us);
375
376
  // We tune every kRefillsPerTune intervals, so the overflow and division-by-
376
377
  // zero conditions should never happen.
377
- assert(num_drains_ <= port::kMaxInt64 / 100);
378
+ assert(num_drains_ <= std::numeric_limits<int64_t>::max() / 100);
378
379
  assert(elapsed_intervals > 0);
379
380
  int64_t drained_pct = num_drains_ * 100 / elapsed_intervals;
380
381
 
@@ -385,14 +386,15 @@ Status GenericRateLimiter::Tune() {
385
386
  } else if (drained_pct < kLowWatermarkPct) {
386
387
  // sanitize to prevent overflow
387
388
  int64_t sanitized_prev_bytes_per_sec =
388
- std::min(prev_bytes_per_sec, port::kMaxInt64 / 100);
389
+ std::min(prev_bytes_per_sec, std::numeric_limits<int64_t>::max() / 100);
389
390
  new_bytes_per_sec =
390
391
  std::max(options_.max_bytes_per_sec / kAllowedRangeFactor,
391
392
  sanitized_prev_bytes_per_sec * 100 / (100 + kAdjustFactorPct));
392
393
  } else if (drained_pct > kHighWatermarkPct) {
393
394
  // sanitize to prevent overflow
394
- int64_t sanitized_prev_bytes_per_sec = std::min(
395
- prev_bytes_per_sec, port::kMaxInt64 / (100 + kAdjustFactorPct));
395
+ int64_t sanitized_prev_bytes_per_sec =
396
+ std::min(prev_bytes_per_sec, std::numeric_limits<int64_t>::max() /
397
+ (100 + kAdjustFactorPct));
396
398
  new_bytes_per_sec =
397
399
  std::min(options_.max_bytes_per_sec,
398
400
  sanitized_prev_bytes_per_sec * (100 + kAdjustFactorPct) / 100);
@@ -433,7 +435,8 @@ static int RegisterBuiltinRateLimiters(ObjectLibrary& library,
433
435
  GenericRateLimiter::kClassName(),
434
436
  [](const std::string& /*uri*/, std::unique_ptr<RateLimiter>* guard,
435
437
  std::string* /*errmsg*/) {
436
- guard->reset(new GenericRateLimiter(port::kMaxInt64));
438
+ guard->reset(
439
+ new GenericRateLimiter(std::numeric_limits<int64_t>::max()));
437
440
  return guard->get();
438
441
  });
439
442
  size_t num_types;
@@ -36,7 +36,7 @@ class RateLimiterTest : public testing::Test {
36
36
  };
37
37
 
38
38
  TEST_F(RateLimiterTest, OverflowRate) {
39
- GenericRateLimiter limiter(port::kMaxInt64, 1000, 10,
39
+ GenericRateLimiter limiter(std::numeric_limits<int64_t>::max(), 1000, 10,
40
40
  RateLimiter::Mode::kWritesOnly,
41
41
  SystemClock::Default(), false /* auto_tuned */);
42
42
  ASSERT_GT(limiter.GetSingleBurstBytes(), 1000000000ll);
@@ -142,7 +142,7 @@ namespace ribbon {
142
142
  // only some small fixed number of columns (typically k=3) to 1 for each
143
143
  // row of C, with remaining entries implicitly 0. This is implemented as
144
144
  // three hash functions over [0,m), and S can be implemented as a vector
145
- // vector of b-bit values. Now, a query only involves looking up k rows
145
+ // of b-bit values. Now, a query only involves looking up k rows
146
146
  // (values) in S and computing their bitwise XOR. Additionally, this
147
147
  // construction can use a linear time algorithm called "peeling" for
148
148
  // finding a solution in many cases of one existing, but peeling
@@ -1128,8 +1128,7 @@ TYPED_TEST(RibbonTypeParamTest, FindOccupancy) {
1128
1128
  return;
1129
1129
  }
1130
1130
 
1131
- KeyGen cur(ROCKSDB_NAMESPACE::ToString(
1132
- testing::UnitTest::GetInstance()->random_seed()),
1131
+ KeyGen cur(std::to_string(testing::UnitTest::GetInstance()->random_seed()),
1133
1132
  0);
1134
1133
 
1135
1134
  Banding banding;
@@ -1247,8 +1246,7 @@ TYPED_TEST(RibbonTypeParamTest, OptimizeHomogAtScale) {
1247
1246
  return;
1248
1247
  }
1249
1248
 
1250
- KeyGen cur(ROCKSDB_NAMESPACE::ToString(
1251
- testing::UnitTest::GetInstance()->random_seed()),
1249
+ KeyGen cur(std::to_string(testing::UnitTest::GetInstance()->random_seed()),
1252
1250
  0);
1253
1251
 
1254
1252
  Banding banding;
@@ -0,0 +1,55 @@
1
+ // Copyright (c) Meta Platforms, Inc. and its affiliates. All Rights Reserved.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+ //
6
+ #pragma once
7
+
8
+ #if USE_COROUTINES
9
+ #include <atomic>
10
+
11
+ #include "folly/CPortability.h"
12
+ #include "folly/CppAttributes.h"
13
+ #include "folly/Executor.h"
14
+ #include "util/async_file_reader.h"
15
+
16
+ namespace ROCKSDB_NAMESPACE {
17
+ // Implements a simple executor that runs callback functions in the same
18
+ // thread, unlike CPUThreadExecutor which may schedule the callback on
19
+ // another thread. Runs in a tight loop calling the queued callbacks,
20
+ // and polls for async IO completions when idle. The completions will
21
+ // resume suspended coroutines and they get added to the queue, which
22
+ // will get picked up by this loop.
23
+ // Any possibility of deadlock is precluded because the file system
24
+ // guarantees that async IO completion callbacks will not be scheduled
25
+ // to run in this thread or this executor.
26
+ class SingleThreadExecutor : public folly::Executor {
27
+ public:
28
+ explicit SingleThreadExecutor(AsyncFileReader& reader)
29
+ : reader_(reader), busy_(false) {}
30
+
31
+ void add(folly::Func callback) override {
32
+ auto& q = q_;
33
+ q.push(std::move(callback));
34
+ if (q.size() == 1 && !busy_) {
35
+ while (!q.empty()) {
36
+ q.front()();
37
+ q.pop();
38
+
39
+ if (q.empty()) {
40
+ // Prevent recursion, as the Wait may queue resumed coroutines
41
+ busy_ = true;
42
+ reader_.Wait();
43
+ busy_ = false;
44
+ }
45
+ }
46
+ }
47
+ }
48
+
49
+ private:
50
+ std::queue<folly::Func> q_;
51
+ AsyncFileReader& reader_;
52
+ bool busy_;
53
+ };
54
+ } // namespace ROCKSDB_NAMESPACE
55
+ #endif // USE_COROUTINES
@@ -30,8 +30,7 @@ class FixedPrefixTransform : public SliceTransform {
30
30
 
31
31
  public:
32
32
  explicit FixedPrefixTransform(size_t prefix_len) : prefix_len_(prefix_len) {
33
- id_ = std::string(kClassName()) + "." +
34
- ROCKSDB_NAMESPACE::ToString(prefix_len_);
33
+ id_ = std::string(kClassName()) + "." + std::to_string(prefix_len_);
35
34
  }
36
35
 
37
36
  static const char* kClassName() { return "rocksdb.FixedPrefix"; }
@@ -43,8 +42,8 @@ class FixedPrefixTransform : public SliceTransform {
43
42
  if (name == id_) {
44
43
  return true;
45
44
  } else if (StartsWith(name, kNickName())) {
46
- std::string alt_id = std::string(kNickName()) + ":" +
47
- ROCKSDB_NAMESPACE::ToString(prefix_len_);
45
+ std::string alt_id =
46
+ std::string(kNickName()) + ":" + std::to_string(prefix_len_);
48
47
  if (name == alt_id) {
49
48
  return true;
50
49
  }
@@ -84,8 +83,7 @@ class CappedPrefixTransform : public SliceTransform {
84
83
 
85
84
  public:
86
85
  explicit CappedPrefixTransform(size_t cap_len) : cap_len_(cap_len) {
87
- id_ =
88
- std::string(kClassName()) + "." + ROCKSDB_NAMESPACE::ToString(cap_len_);
86
+ id_ = std::string(kClassName()) + "." + std::to_string(cap_len_);
89
87
  }
90
88
 
91
89
  static const char* kClassName() { return "rocksdb.CappedPrefix"; }
@@ -98,8 +96,8 @@ class CappedPrefixTransform : public SliceTransform {
98
96
  if (name == id_) {
99
97
  return true;
100
98
  } else if (StartsWith(name, kNickName())) {
101
- std::string alt_id = std::string(kNickName()) + ":" +
102
- ROCKSDB_NAMESPACE::ToString(cap_len_);
99
+ std::string alt_id =
100
+ std::string(kNickName()) + ":" + std::to_string(cap_len_);
103
101
  if (name == alt_id) {
104
102
  return true;
105
103
  }
@@ -291,7 +289,8 @@ std::string SliceTransform::AsString() const {
291
289
 
292
290
  // 2 small internal utility functions, for efficient hex conversions
293
291
  // and no need for snprintf, toupper etc...
294
- // Originally from wdt/util/EncryptionUtils.cpp - for ToString(true)/DecodeHex:
292
+ // Originally from wdt/util/EncryptionUtils.cpp - for
293
+ // std::to_string(true)/DecodeHex:
295
294
  char toHex(unsigned char v) {
296
295
  if (v <= 9) {
297
296
  return '0' + v;
@@ -315,7 +315,8 @@ uint32_t ParseUint32(const std::string& value) {
315
315
 
316
316
  int32_t ParseInt32(const std::string& value) {
317
317
  int64_t num = ParseInt64(value);
318
- if (num <= port::kMaxInt32 && num >= port::kMinInt32) {
318
+ if (num <= std::numeric_limits<int32_t>::max() &&
319
+ num >= std::numeric_limits<int32_t>::min()) {
319
320
  return static_cast<int32_t>(num);
320
321
  } else {
321
322
  throw std::out_of_range(value);
@@ -431,7 +432,7 @@ bool SerializeIntVector(const std::vector<int>& vec, std::string* value) {
431
432
  if (i > 0) {
432
433
  *value += ":";
433
434
  }
434
- *value += ToString(vec[i]);
435
+ *value += std::to_string(vec[i]);
435
436
  }
436
437
  return true;
437
438
  }
@@ -19,19 +19,6 @@ class Slice;
19
19
 
20
20
  extern std::vector<std::string> StringSplit(const std::string& arg, char delim);
21
21
 
22
- template <typename T>
23
- inline std::string ToString(T value) {
24
- #if !(defined OS_ANDROID) && !(defined CYGWIN) && !(defined OS_FREEBSD)
25
- return std::to_string(value);
26
- #else
27
- // Andorid or cygwin doesn't support all of C++11, std::to_string() being
28
- // one of the not supported features.
29
- std::ostringstream os;
30
- os << value;
31
- return os.str();
32
- #endif
33
- }
34
-
35
22
  // Append a human-readable printout of "num" to *str
36
23
  extern void AppendNumberTo(std::string* str, uint64_t num);
37
24
 
@@ -140,20 +140,15 @@ private:
140
140
  // The private mutex. Developers should always use Mutex() instead of
141
141
  // using this variable directly.
142
142
  port::Mutex mutex_;
143
- #ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
144
143
  // Thread local storage
145
- static __thread ThreadData* tls_;
146
- #endif
144
+ static thread_local ThreadData* tls_;
147
145
 
148
146
  // Used to make thread exit trigger possible if !defined(OS_MACOSX).
149
147
  // Otherwise, used to retrieve thread data.
150
148
  pthread_key_t pthread_key_;
151
149
  };
152
150
 
153
-
154
- #ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
155
- __thread ThreadData* ThreadLocalPtr::StaticMeta::tls_ = nullptr;
156
- #endif
151
+ thread_local ThreadData* ThreadLocalPtr::StaticMeta::tls_ = nullptr;
157
152
 
158
153
  // Windows doesn't support a per-thread destructor with its
159
154
  // TLS primitives. So, we build it manually by inserting a
@@ -263,13 +258,10 @@ ThreadLocalPtr::StaticMeta* ThreadLocalPtr::Instance() {
263
258
  // the following variable will go first, then OnThreadExit, therefore causing
264
259
  // invalid access.
265
260
  //
266
- // The above problem can be solved by using thread_local to store tls_ instead
267
- // of using __thread. The major difference between thread_local and __thread
268
- // is that thread_local supports dynamic construction and destruction of
261
+ // The above problem can be solved by using thread_local to store tls_.
262
+ // thread_local supports dynamic construction and destruction of
269
263
  // non-primitive typed variables. As a result, we can guarantee the
270
264
  // destruction order even when the main thread dies before any child threads.
271
- // However, thread_local is not supported in all compilers that accept -std=c++11
272
- // (e.g., eg Mac with XCode < 8. XCode 8+ supports thread_local).
273
265
  static ThreadLocalPtr::StaticMeta* inst = new ThreadLocalPtr::StaticMeta();
274
266
  return inst;
275
267
  }
@@ -328,10 +320,6 @@ ThreadLocalPtr::StaticMeta::StaticMeta()
328
320
  #if !defined(OS_WIN)
329
321
  static struct A {
330
322
  ~A() {
331
- #ifndef ROCKSDB_SUPPORT_THREAD_LOCAL
332
- ThreadData* tls_ =
333
- static_cast<ThreadData*>(pthread_getspecific(Instance()->pthread_key_));
334
- #endif
335
323
  if (tls_) {
336
324
  OnThreadExit(tls_);
337
325
  }
@@ -366,13 +354,6 @@ void ThreadLocalPtr::StaticMeta::RemoveThreadData(
366
354
  }
367
355
 
368
356
  ThreadData* ThreadLocalPtr::StaticMeta::GetThreadLocal() {
369
- #ifndef ROCKSDB_SUPPORT_THREAD_LOCAL
370
- // Make this local variable name look like a member variable so that we
371
- // can share all the code below
372
- ThreadData* tls_ =
373
- static_cast<ThreadData*>(pthread_getspecific(Instance()->pthread_key_));
374
- #endif
375
-
376
357
  if (UNLIKELY(tls_ == nullptr)) {
377
358
  auto* inst = Instance();
378
359
  tls_ = new ThreadData(inst);