@nxtedition/rocksdb 15.4.1 → 16.0.0

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 (401) hide show
  1. package/binding.cc +70 -23
  2. package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
  3. package/deps/rocksdb/rocksdb/BUCK +42 -0
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
  5. package/deps/rocksdb/rocksdb/Makefile +59 -32
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
  7. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
  8. package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
  10. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
  11. package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
  12. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
  14. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
  16. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
  17. package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
  24. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
  26. package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
  27. package/deps/rocksdb/rocksdb/db/builder.h +7 -0
  28. package/deps/rocksdb/rocksdb/db/c.cc +373 -57
  29. package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
  30. package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
  51. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
  52. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
  53. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
  54. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
  55. package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
  56. package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
  57. package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
  58. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
  59. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
  60. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
  61. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
  62. package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
  63. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
  64. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
  65. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
  66. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
  79. package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
  80. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
  81. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
  82. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
  83. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
  84. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
  85. package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
  86. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
  87. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
  88. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
  90. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
  91. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
  92. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
  93. package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
  94. package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
  95. package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
  96. package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
  97. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
  98. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
  99. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
  100. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
  101. package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
  102. package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
  103. package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
  104. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
  105. package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
  108. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
  109. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
  111. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
  112. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
  113. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
  114. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
  115. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  116. package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
  117. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
  118. package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
  119. package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
  120. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
  121. package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
  122. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
  123. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  124. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
  125. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
  126. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
  127. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
  128. package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
  129. package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
  130. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
  131. package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
  132. package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
  133. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
  134. package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
  135. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  136. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
  137. package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
  138. package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
  139. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
  140. package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
  141. package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
  142. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
  143. package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
  144. package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
  145. package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
  146. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
  147. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
  148. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
  149. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
  150. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
  151. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
  159. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
  160. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
  161. package/deps/rocksdb/rocksdb/env/env.cc +1 -0
  162. package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
  163. package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
  164. package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
  165. package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
  166. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
  167. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
  168. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
  169. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
  170. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
  171. package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
  172. package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
  173. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
  174. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
  175. package/deps/rocksdb/rocksdb/folly.mk +22 -5
  176. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
  177. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
  178. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
  179. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
  180. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
  181. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
  182. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
  183. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
  185. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
  186. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
  187. package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
  188. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
  189. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
  191. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
  192. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
  193. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
  194. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
  198. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
  200. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
  202. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
  203. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
  204. package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
  205. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
  206. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
  207. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
  208. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
  209. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
  210. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  211. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
  212. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
  213. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
  214. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
  215. package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
  216. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
  217. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
  218. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
  219. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
  220. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
  221. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
  222. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
  223. package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
  224. package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
  225. package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
  226. package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
  227. package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
  228. package/deps/rocksdb/rocksdb/options/options.cc +5 -1
  229. package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
  230. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
  231. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
  232. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
  233. package/deps/rocksdb/rocksdb/port/lang.h +4 -0
  234. package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
  235. package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
  236. package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
  237. package/deps/rocksdb/rocksdb/src.mk +12 -0
  238. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
  239. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  240. package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
  241. package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
  242. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
  243. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
  246. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
  247. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
  248. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
  249. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
  250. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
  251. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
  252. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
  253. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
  254. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
  255. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
  256. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
  257. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
  258. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
  259. package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
  260. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
  261. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
  262. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
  264. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
  265. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
  266. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
  267. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
  268. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
  269. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
  270. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
  271. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
  272. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
  273. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
  274. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
  275. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
  276. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
  277. package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
  278. package/deps/rocksdb/rocksdb/table/format.cc +27 -15
  279. package/deps/rocksdb/rocksdb/table/format.h +41 -15
  280. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
  281. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
  282. package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
  283. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
  284. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  285. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
  286. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
  287. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
  288. package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
  289. package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
  290. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
  291. package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
  292. package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
  293. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
  294. package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
  295. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
  296. package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
  297. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
  298. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
  299. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
  300. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
  301. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
  302. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
  303. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
  304. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
  305. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
  306. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
  307. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
  308. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
  309. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
  310. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
  311. package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
  312. package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
  313. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
  314. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
  315. package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
  316. package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
  317. package/deps/rocksdb/rocksdb/util/coding.h +14 -27
  318. package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
  319. package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
  320. package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
  321. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
  322. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
  323. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
  324. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
  325. package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
  326. package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
  327. package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
  328. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
  329. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
  330. package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
  331. package/deps/rocksdb/rocksdb/util/math.h +3 -1
  332. package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
  333. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
  334. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
  335. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
  336. package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
  337. package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
  338. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
  339. package/deps/rocksdb/rocksdb/util/status.cc +3 -1
  340. package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
  341. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
  342. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
  343. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
  344. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
  345. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
  346. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
  347. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
  348. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
  349. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
  350. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
  351. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
  352. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
  353. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
  354. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
  355. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
  356. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
  357. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
  358. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  359. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
  360. package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
  361. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
  362. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
  363. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
  364. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
  365. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
  366. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
  367. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
  368. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
  369. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
  370. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
  371. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
  372. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
  373. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
  374. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
  375. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
  376. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  377. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
  378. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
  379. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
  380. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
  381. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
  382. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
  383. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
  384. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
  385. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
  386. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
  387. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
  388. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
  389. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  390. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
  391. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
  392. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
  393. package/deps/rocksdb/rocksdb.gyp +7 -0
  394. package/index.js +70 -10
  395. package/iterator.js +25 -3
  396. package/max_rev_operator.h +9 -5
  397. package/package.json +1 -1
  398. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  399. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
@@ -955,6 +955,10 @@ Status DBImpl::CompactRange(const CompactRangeOptions& options,
955
955
  return Status::Incomplete(Status::SubCode::kManualCompactionPaused);
956
956
  }
957
957
 
958
+ if (compaction_aborted_.load(std::memory_order_acquire) > 0) {
959
+ return Status::Incomplete(Status::SubCode::kCompactionAborted);
960
+ }
961
+
958
962
  if (options.canceled && options.canceled->load(std::memory_order_acquire)) {
959
963
  return Status::Incomplete(Status::SubCode::kManualCompactionPaused);
960
964
  }
@@ -1449,7 +1453,8 @@ Status DBImpl::PerformTrivialMove(Compaction& c, LogBuffer* log_buffer,
1449
1453
  f->file_creation_time, f->epoch_number,
1450
1454
  f->file_checksum, f->file_checksum_func_name,
1451
1455
  f->unique_id, f->compensated_range_deletion_size,
1452
- f->tail_size, f->user_defined_timestamps_persisted);
1456
+ f->tail_size, f->user_defined_timestamps_persisted,
1457
+ f->min_timestamp, f->max_timestamp);
1453
1458
  moved_bytes += static_cast<size_t>(c.input(l, i)->fd.GetFileSize());
1454
1459
  ROCKS_LOG_BUFFER(
1455
1460
  log_buffer, "[%s] Moved #%" PRIu64 " to level-%d %" PRIu64 " bytes\n",
@@ -1486,6 +1491,11 @@ Status DBImpl::CompactFilesImpl(
1486
1491
  return Status::ShutdownInProgress();
1487
1492
  }
1488
1493
 
1494
+ // triggered by AbortAllCompactions
1495
+ if (compaction_aborted_.load(std::memory_order_acquire) > 0) {
1496
+ return Status::Incomplete(Status::SubCode::kCompactionAborted);
1497
+ }
1498
+
1489
1499
  // triggered by DisableManualCompactions or by user-set canceled flag in
1490
1500
  // CompactionOptions
1491
1501
  if (manual_compaction_paused_.load(std::memory_order_acquire) > 0 ||
@@ -1636,17 +1646,17 @@ Status DBImpl::CompactFilesImpl(
1636
1646
  c->mutable_cf_options().paranoid_file_checks,
1637
1647
  c->mutable_cf_options().report_bg_io_stats, dbname_,
1638
1648
  &compaction_job_stats, Env::Priority::USER, io_tracer_,
1639
- kManualCompactionCanceledFalse_, db_id_, db_session_id_,
1640
- c->column_family_data()->GetFullHistoryTsLow(), c->trim_ts(),
1641
- &blob_callback_, &bg_compaction_scheduled_,
1649
+ kManualCompactionCanceledFalse_, compaction_aborted_, db_id_,
1650
+ db_session_id_, c->column_family_data()->GetFullHistoryTsLow(),
1651
+ c->trim_ts(), &blob_callback_, &bg_compaction_scheduled_,
1642
1652
  &bg_bottom_compaction_scheduled_);
1643
1653
 
1644
1654
  // Creating a compaction influences the compaction score because the score
1645
1655
  // takes running compactions into account (by skipping files that are already
1646
1656
  // being compacted). Since we just changed compaction score, we recalculate it
1647
1657
  // here.
1648
- version->storage_info()->ComputeCompactionScore(cfd->ioptions(),
1649
- c->mutable_cf_options());
1658
+ version->storage_info()->ComputeCompactionScore(
1659
+ cfd->ioptions(), c->mutable_cf_options(), cfd->GetFullHistoryTsLow());
1650
1660
 
1651
1661
  compaction_job.Prepare(std::nullopt /*subcompact to be computed*/);
1652
1662
 
@@ -1709,6 +1719,11 @@ Status DBImpl::CompactFilesImpl(
1709
1719
  "[%s] [JOB %d] Stopping manual compaction",
1710
1720
  c->column_family_data()->GetName().c_str(),
1711
1721
  job_context->job_id);
1722
+ } else if (status.IsCompactionAborted()) {
1723
+ // Don't report aborted compaction as error
1724
+ ROCKS_LOG_INFO(
1725
+ immutable_db_options_.info_log, "[%s] [JOB %d] Compaction aborted",
1726
+ c->column_family_data()->GetName().c_str(), job_context->job_id);
1712
1727
  } else {
1713
1728
  ROCKS_LOG_WARN(immutable_db_options_.info_log,
1714
1729
  "[%s] [JOB %d] Compaction error: %s",
@@ -1971,7 +1986,8 @@ Status DBImpl::ReFitLevel(ColumnFamilyData* cfd, int level, int target_level) {
1971
1986
  f->oldest_ancester_time, f->file_creation_time, f->epoch_number,
1972
1987
  f->file_checksum, f->file_checksum_func_name, f->unique_id,
1973
1988
  f->compensated_range_deletion_size, f->tail_size,
1974
- f->user_defined_timestamps_persisted);
1989
+ f->user_defined_timestamps_persisted, f->min_timestamp,
1990
+ f->max_timestamp);
1975
1991
  }
1976
1992
  ROCKS_LOG_DEBUG(immutable_db_options_.info_log,
1977
1993
  "[%s] Apply version edit:\n%s", cfd->GetName().c_str(),
@@ -2009,10 +2025,6 @@ int DBImpl::NumberLevels(ColumnFamilyHandle* column_family) {
2009
2025
  return cfh->cfd()->NumberLevels();
2010
2026
  }
2011
2027
 
2012
- int DBImpl::MaxMemCompactionLevel(ColumnFamilyHandle* /*column_family*/) {
2013
- return 0;
2014
- }
2015
-
2016
2028
  int DBImpl::Level0StopWriteTrigger(ColumnFamilyHandle* column_family) {
2017
2029
  auto cfh = static_cast_with_check<ColumnFamilyHandleImpl>(column_family);
2018
2030
  InstrumentedMutexLock l(&mutex_);
@@ -2168,6 +2180,17 @@ Status DBImpl::RunManualCompaction(
2168
2180
  return manual.status;
2169
2181
  }
2170
2182
 
2183
+ if (compaction_aborted_.load(std::memory_order_acquire) > 0) {
2184
+ // All compactions are being aborted. Return immediately.
2185
+ int counter = compaction_aborted_.load(std::memory_order_acquire);
2186
+ ROCKS_LOG_INFO(
2187
+ immutable_db_options_.info_log,
2188
+ "RunManualCompaction: Aborting due to compaction_aborted_=%d", counter);
2189
+ manual.status = Status::Incomplete(Status::SubCode::kCompactionAborted);
2190
+ manual.done = true;
2191
+ return manual.status;
2192
+ }
2193
+
2171
2194
  // When a manual compaction arrives, temporarily disable scheduling of
2172
2195
  // non-manual compactions and wait until the number of scheduled compaction
2173
2196
  // jobs drops to zero. This used to be needed to ensure that this manual
@@ -2192,6 +2215,13 @@ Status DBImpl::RunManualCompaction(
2192
2215
  // and `CompactRangeOptions::canceled` might not work well together.
2193
2216
  while (bg_bottom_compaction_scheduled_ > 0 ||
2194
2217
  bg_compaction_scheduled_ > 0) {
2218
+ if (compaction_aborted_.load(std::memory_order_acquire) > 0) {
2219
+ // Pretend the error came from compaction so the below cleanup/error
2220
+ // handling code can process it.
2221
+ manual.done = true;
2222
+ manual.status = Status::Incomplete(Status::SubCode::kCompactionAborted);
2223
+ break;
2224
+ }
2195
2225
  if (manual_compaction_paused_ > 0 || manual.canceled == true) {
2196
2226
  // Pretend the error came from compaction so the below cleanup/error
2197
2227
  // handling code can process it.
@@ -2310,7 +2340,12 @@ Status DBImpl::RunManualCompaction(
2310
2340
  if (!scheduled) {
2311
2341
  // There is nothing scheduled to wait on, so any cancellation can end the
2312
2342
  // manual now.
2313
- if (manual_compaction_paused_ > 0 || manual.canceled == true) {
2343
+ if (compaction_aborted_.load(std::memory_order_acquire) > 0) {
2344
+ // Stop waiting since it was canceled. Pretend the error came from
2345
+ // compaction so the below cleanup/error handling code can process it.
2346
+ manual.done = true;
2347
+ manual.status = Status::Incomplete(Status::SubCode::kCompactionAborted);
2348
+ } else if (manual_compaction_paused_ > 0 || manual.canceled == true) {
2314
2349
  // Stop waiting since it was canceled. Pretend the error came from
2315
2350
  // compaction so the below cleanup/error handling code can process it.
2316
2351
  manual.done = true;
@@ -2889,16 +2924,8 @@ Status DBImpl::WaitForFlushMemTables(
2889
2924
 
2890
2925
  Status DBImpl::EnableAutoCompaction(
2891
2926
  const std::vector<ColumnFamilyHandle*>& column_family_handles) {
2892
- Status s;
2893
- for (auto cf_ptr : column_family_handles) {
2894
- Status status =
2895
- this->SetOptions(cf_ptr, {{"disable_auto_compactions", "false"}});
2896
- if (!status.ok()) {
2897
- s = status;
2898
- }
2899
- }
2900
-
2901
- return s;
2927
+ return SetOptions(column_family_handles,
2928
+ {{"disable_auto_compactions", "false"}});
2902
2929
  }
2903
2930
 
2904
2931
  // NOTE: Calling DisableManualCompaction() may overwrite the
@@ -2936,6 +2963,61 @@ void DBImpl::EnableManualCompaction() {
2936
2963
  manual_compaction_paused_.fetch_sub(1, std::memory_order_release);
2937
2964
  }
2938
2965
 
2966
+ void DBImpl::AbortAllCompactions() {
2967
+ InstrumentedMutexLock l(&mutex_);
2968
+
2969
+ // Increment the abort counter to signal all compactions to abort
2970
+ compaction_aborted_.fetch_add(1, std::memory_order_release);
2971
+
2972
+ TEST_SYNC_POINT("DBImpl::AbortAllCompactions:FlagSet");
2973
+
2974
+ // Mark all manual compactions as canceled
2975
+ for (const auto& manual_compaction : manual_compaction_dequeue_) {
2976
+ manual_compaction->canceled = true;
2977
+ }
2978
+
2979
+ // Wake up any waiting compaction threads to check the abort signal
2980
+ bg_cv_.SignalAll();
2981
+
2982
+ // Wait for all running compactions (both manual and automatic) to finish
2983
+ // or abort before returning.
2984
+ // Note: bg_cv_.Wait() releases the mutex while waiting, so other threads
2985
+ // can make progress and signal when compactions complete.
2986
+ while (bg_bottom_compaction_scheduled_ > 0 || bg_compaction_scheduled_ > 0 ||
2987
+ HasPendingManualCompaction()) {
2988
+ bg_cv_.Wait();
2989
+ }
2990
+ }
2991
+
2992
+ void DBImpl::ResumeAllCompactions() {
2993
+ InstrumentedMutexLock l(&mutex_);
2994
+ int before = compaction_aborted_.load(std::memory_order_acquire);
2995
+
2996
+ // Guard against calling Resume without prior Abort
2997
+ if (before <= 0) {
2998
+ ROCKS_LOG_WARN(immutable_db_options_.info_log,
2999
+ "ResumeAllCompactions called without prior "
3000
+ "AbortAllCompactions (counter=%d)",
3001
+ before);
3002
+ return;
3003
+ }
3004
+
3005
+ // Decrement the abort counter
3006
+ compaction_aborted_.fetch_sub(1, std::memory_order_release);
3007
+
3008
+ // As the operation is executed under db mutex, we could just use before value
3009
+ // to calculate the current value.
3010
+ int current = before - 1;
3011
+ ROCKS_LOG_INFO(immutable_db_options_.info_log,
3012
+ "ResumeAllCompactions: counter %d -> %d", before, current);
3013
+
3014
+ // If this is the last resume call (abort counter back to 0), schedule
3015
+ // compactions that may have been waiting
3016
+ if (current == 0) {
3017
+ MaybeScheduleFlushOrCompaction();
3018
+ }
3019
+ }
3020
+
2939
3021
  void DBImpl::MaybeScheduleFlushOrCompaction() {
2940
3022
  mutex_.AssertHeld();
2941
3023
  TEST_SYNC_POINT("DBImpl::MaybeScheduleFlushOrCompaction:Start");
@@ -3000,6 +3082,9 @@ void DBImpl::MaybeScheduleFlushOrCompaction() {
3000
3082
  if (bg_compaction_paused_ > 0) {
3001
3083
  // we paused the background compaction
3002
3084
  return;
3085
+ } else if (compaction_aborted_.load(std::memory_order_acquire) > 0) {
3086
+ // we are aborting all compactions
3087
+ return;
3003
3088
  } else if (error_handler_.IsBGWorkStopped()) {
3004
3089
  // Compaction is not part of the recovery sequence from a hard error. We
3005
3090
  // might get here because recovery might do a flush and install a new
@@ -3060,6 +3145,93 @@ DBImpl::BGJobLimits DBImpl::GetBGJobLimits(int max_background_flushes,
3060
3145
  return res;
3061
3146
  }
3062
3147
 
3148
+ BackgroundJobPressure DBImpl::CaptureBackgroundJobPressure() const {
3149
+ mutex_.AssertHeld();
3150
+
3151
+ BackgroundJobPressure snapshot;
3152
+
3153
+ // Compaction: LOW + BOTTOM combined (matches RocksDB's scheduling check)
3154
+ snapshot.compaction_scheduled =
3155
+ bg_compaction_scheduled_ + bg_bottom_compaction_scheduled_;
3156
+ snapshot.compaction_running = num_running_compactions_;
3157
+
3158
+ // Per-priority breakdown for pool-specific expansion
3159
+ assert(num_running_compactions_ >= num_running_bottom_compactions_);
3160
+ snapshot.compaction_low_scheduled = bg_compaction_scheduled_;
3161
+ snapshot.compaction_low_running =
3162
+ std::max(0, num_running_compactions_ - num_running_bottom_compactions_);
3163
+ snapshot.compaction_bottom_scheduled = bg_bottom_compaction_scheduled_;
3164
+ snapshot.compaction_bottom_running = num_running_bottom_compactions_;
3165
+
3166
+ // Flush
3167
+ snapshot.flush_scheduled = bg_flush_scheduled_;
3168
+ snapshot.flush_running = num_running_flushes_;
3169
+
3170
+ snapshot.compaction_speedup_active =
3171
+ write_controller_.NeedSpeedupCompaction();
3172
+
3173
+ // Compute write_stall_proximity_pct: max across all CFs.
3174
+ // Uses the same inputs as RecalculateWriteStallConditions() in
3175
+ // column_family.cc:
3176
+ // - l0_delay_trigger_count(): sorted run count used for write stall
3177
+ // decisions. Equals NumLevelFiles(0) for level compaction; for universal
3178
+ // compaction, also counts non-empty levels from L1+ as sorted runs.
3179
+ // - estimated_compaction_needed_bytes(): pending compaction bytes.
3180
+ // Prefers slowdown/soft triggers (gradual); falls back to stop/hard triggers.
3181
+ // level0_slowdown_writes_trigger is sanitized to always be > 0;
3182
+ // soft_pending_compaction_bytes_limit can be 0 (disabled).
3183
+ int max_proximity = 0;
3184
+ for (auto cfd : *versions_->GetColumnFamilySet()) {
3185
+ if (cfd->IsDropped() || !cfd->initialized()) {
3186
+ continue;
3187
+ }
3188
+ const auto* vstorage = cfd->current()->storage_info();
3189
+ const auto& mutable_cf_options = cfd->GetCurrentMutableCFOptions();
3190
+
3191
+ int l0_proximity = 0;
3192
+ int l0_trigger = mutable_cf_options.level0_slowdown_writes_trigger > 0
3193
+ ? mutable_cf_options.level0_slowdown_writes_trigger
3194
+ : mutable_cf_options.level0_stop_writes_trigger;
3195
+ if (l0_trigger > 0) {
3196
+ l0_proximity = static_cast<int>(
3197
+ 100.0 * vstorage->l0_delay_trigger_count() / l0_trigger);
3198
+ }
3199
+
3200
+ int bytes_proximity = 0;
3201
+ uint64_t bytes_limit =
3202
+ mutable_cf_options.soft_pending_compaction_bytes_limit > 0
3203
+ ? mutable_cf_options.soft_pending_compaction_bytes_limit
3204
+ : mutable_cf_options.hard_pending_compaction_bytes_limit;
3205
+ if (bytes_limit > 0) {
3206
+ bytes_proximity = static_cast<int>(
3207
+ 100.0 *
3208
+ static_cast<double>(vstorage->estimated_compaction_needed_bytes()) /
3209
+ static_cast<double>(bytes_limit));
3210
+ }
3211
+
3212
+ max_proximity =
3213
+ std::max(max_proximity, std::max(l0_proximity, bytes_proximity));
3214
+ }
3215
+ snapshot.write_stall_proximity_pct = max_proximity;
3216
+
3217
+ return snapshot;
3218
+ }
3219
+
3220
+ void DBImpl::NotifyOnBackgroundJobPressureChanged() {
3221
+ mutex_.AssertHeld();
3222
+ if (immutable_db_options_.listeners.empty()) {
3223
+ return;
3224
+ }
3225
+ BackgroundJobPressure pressure = CaptureBackgroundJobPressure();
3226
+ bg_pressure_callback_in_progress_++;
3227
+ mutex_.Unlock();
3228
+ for (const auto& listener : immutable_db_options_.listeners) {
3229
+ listener->OnBackgroundJobPressureChanged(this, pressure);
3230
+ }
3231
+ mutex_.Lock();
3232
+ bg_pressure_callback_in_progress_--;
3233
+ }
3234
+
3063
3235
  void DBImpl::AddToCompactionQueue(ColumnFamilyData* cfd) {
3064
3236
  assert(!cfd->queued_for_compaction());
3065
3237
  cfd->Ref();
@@ -3495,6 +3667,9 @@ void DBImpl::BackgroundCallFlush(Env::Priority thread_pri) {
3495
3667
  bg_flush_scheduled_--;
3496
3668
  // See if there's more work to be done
3497
3669
  MaybeScheduleFlushOrCompaction();
3670
+
3671
+ NotifyOnBackgroundJobPressureChanged();
3672
+
3498
3673
  atomic_flush_install_cv_.SignalAll();
3499
3674
  bg_cv_.SignalAll();
3500
3675
  // IMPORTANT: there should be no code after calling SignalAll. This call may
@@ -3519,6 +3694,9 @@ void DBImpl::BackgroundCallCompaction(PrepickedCompaction* prepicked_compaction,
3519
3694
  InstrumentedMutexLock l(&mutex_);
3520
3695
 
3521
3696
  num_running_compactions_++;
3697
+ if (bg_thread_pri == Env::Priority::BOTTOM) {
3698
+ num_running_bottom_compactions_++;
3699
+ }
3522
3700
 
3523
3701
  std::unique_ptr<std::list<uint64_t>::iterator>
3524
3702
  pending_outputs_inserted_elem(new std::list<uint64_t>::iterator(
@@ -3537,7 +3715,8 @@ void DBImpl::BackgroundCallCompaction(PrepickedCompaction* prepicked_compaction,
3537
3715
  10000); // prevent hot loop
3538
3716
  mutex_.Lock();
3539
3717
  } else if (!s.ok() && !s.IsShutdownInProgress() &&
3540
- !s.IsManualCompactionPaused() && !s.IsColumnFamilyDropped()) {
3718
+ !s.IsManualCompactionPaused() && !s.IsColumnFamilyDropped() &&
3719
+ !s.IsCompactionAborted()) {
3541
3720
  // Wait a little bit before retrying background compaction in
3542
3721
  // case this is an environmental problem and we do not want to
3543
3722
  // chew up resources for failed compactions for the duration of
@@ -3569,6 +3748,7 @@ void DBImpl::BackgroundCallCompaction(PrepickedCompaction* prepicked_compaction,
3569
3748
  // case of a failure). Thus, we force full scan in FindObsoleteFiles()
3570
3749
  FindObsoleteFiles(&job_context, !s.ok() && !s.IsShutdownInProgress() &&
3571
3750
  !s.IsManualCompactionPaused() &&
3751
+ !s.IsCompactionAborted() &&
3572
3752
  !s.IsColumnFamilyDropped() &&
3573
3753
  !s.IsBusy());
3574
3754
  TEST_SYNC_POINT("DBImpl::BackgroundCallCompaction:FoundObsoleteFiles");
@@ -3599,11 +3779,15 @@ void DBImpl::BackgroundCallCompaction(PrepickedCompaction* prepicked_compaction,
3599
3779
  } else {
3600
3780
  assert(bg_thread_pri == Env::Priority::BOTTOM);
3601
3781
  bg_bottom_compaction_scheduled_--;
3782
+ assert(num_running_bottom_compactions_ > 0);
3783
+ num_running_bottom_compactions_--;
3602
3784
  }
3603
3785
 
3604
3786
  // See if there's more work to be done
3605
3787
  MaybeScheduleFlushOrCompaction();
3606
3788
 
3789
+ NotifyOnBackgroundJobPressureChanged();
3790
+
3607
3791
  if (prepicked_compaction != nullptr &&
3608
3792
  prepicked_compaction->task_token != nullptr) {
3609
3793
  // Releasing task tokens affects (and asserts on) the DB state, so
@@ -3673,6 +3857,8 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3673
3857
  if (!error_handler_.IsBGWorkStopped()) {
3674
3858
  if (shutting_down_.load(std::memory_order_acquire)) {
3675
3859
  status = Status::ShutdownInProgress();
3860
+ } else if (compaction_aborted_.load(std::memory_order_acquire) > 0) {
3861
+ status = Status::Incomplete(Status::SubCode::kCompactionAborted);
3676
3862
  } else if (is_manual &&
3677
3863
  manual_compaction->canceled.load(std::memory_order_acquire)) {
3678
3864
  status = Status::Incomplete(Status::SubCode::kManualCompactionPaused);
@@ -3839,7 +4025,8 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3839
4025
  ->current()
3840
4026
  ->storage_info()
3841
4027
  ->ComputeCompactionScore(c->immutable_options(),
3842
- c->mutable_cf_options());
4028
+ c->mutable_cf_options(),
4029
+ cfd->GetFullHistoryTsLow());
3843
4030
  EnqueuePendingCompaction(cfd);
3844
4031
 
3845
4032
  c.reset();
@@ -4096,7 +4283,9 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
4096
4283
  in_file->unique_id,
4097
4284
  in_file->compensated_range_deletion_size,
4098
4285
  in_file->tail_size,
4099
- in_file->user_defined_timestamps_persisted};
4286
+ in_file->user_defined_timestamps_persisted,
4287
+ in_file->min_timestamp,
4288
+ in_file->max_timestamp};
4100
4289
 
4101
4290
  out_files.push_back(std::move(out_file_metadata));
4102
4291
  }
@@ -4286,8 +4475,9 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
4286
4475
  &compaction_job_stats, thread_pri, io_tracer_,
4287
4476
  is_manual ? manual_compaction->canceled
4288
4477
  : kManualCompactionCanceledFalse_,
4289
- db_id_, db_session_id_, c->column_family_data()->GetFullHistoryTsLow(),
4290
- c->trim_ts(), &blob_callback_, &bg_compaction_scheduled_,
4478
+ compaction_aborted_, db_id_, db_session_id_,
4479
+ c->column_family_data()->GetFullHistoryTsLow(), c->trim_ts(),
4480
+ &blob_callback_, &bg_compaction_scheduled_,
4291
4481
  &bg_bottom_compaction_scheduled_);
4292
4482
  compaction_job.Prepare(std::nullopt /*subcompact to be computed*/);
4293
4483
 
@@ -4370,7 +4560,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
4370
4560
  }
4371
4561
 
4372
4562
  if (status.ok() || status.IsCompactionTooLarge() ||
4373
- status.IsManualCompactionPaused()) {
4563
+ status.IsManualCompactionPaused() || status.IsCompactionAborted()) {
4374
4564
  // Done
4375
4565
  } else if (status.IsColumnFamilyDropped() || status.IsShutdownInProgress()) {
4376
4566
  // Ignore compaction errors found during shutting down
@@ -4401,7 +4591,8 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
4401
4591
  ->current()
4402
4592
  ->storage_info()
4403
4593
  ->ComputeCompactionScore(c->immutable_options(),
4404
- c->mutable_cf_options());
4594
+ c->mutable_cf_options(),
4595
+ cfd->GetFullHistoryTsLow());
4405
4596
  EnqueuePendingCompaction(cfd);
4406
4597
  }
4407
4598
  }
@@ -4507,7 +4698,7 @@ Compaction* DBImpl::CreateIntendedCompactionForwardedToBottomPriorityPool(
4507
4698
  nullptr /* snapshot_checker */, c->compaction_reason());
4508
4699
 
4509
4700
  cfd->compaction_picker()->RegisterCompaction(intended_compaction);
4510
- vstorage->ComputeCompactionScore(io, mo);
4701
+ vstorage->ComputeCompactionScore(io, mo, cfd->GetFullHistoryTsLow());
4511
4702
  intended_compaction->FinalizeInputInfo(cfd->current());
4512
4703
 
4513
4704
  return intended_compaction;
@@ -4632,6 +4823,7 @@ void DBImpl::BuildCompactionJobInfo(
4632
4823
  compaction_job_info->cf_id = cfd->GetID();
4633
4824
  compaction_job_info->cf_name = cfd->GetName();
4634
4825
  compaction_job_info->status = st;
4826
+ compaction_job_info->aborted = st.IsCompactionAborted();
4635
4827
  compaction_job_info->thread_id = env_->GetThreadID();
4636
4828
  compaction_job_info->job_id = job_id;
4637
4829
  compaction_job_info->base_input_level = c->start_level();
@@ -4879,7 +5071,8 @@ void DBImpl::ResetBottomPriCompactionIntent(ColumnFamilyData* cfd,
4879
5071
  std::unique_ptr<Compaction>& c) {
4880
5072
  c->ReleaseCompactionFiles(Status::OK());
4881
5073
  cfd->current()->storage_info()->ComputeCompactionScore(
4882
- c->immutable_options(), c->mutable_cf_options());
5074
+ c->immutable_options(), c->mutable_cf_options(),
5075
+ cfd->GetFullHistoryTsLow());
4883
5076
  c.reset();
4884
5077
  }
4885
5078
 
@@ -282,6 +282,11 @@ int DBImpl::TEST_BGFlushesAllowed() const {
282
282
  return GetBGJobLimits().max_flushes;
283
283
  }
284
284
 
285
+ int DBImpl::TEST_NumRunningBottomCompactions() const {
286
+ mutex_.AssertHeld();
287
+ return num_running_bottom_compactions_;
288
+ }
289
+
285
290
  SequenceNumber DBImpl::TEST_GetLastVisibleSequence() const {
286
291
  if (last_seq_same_as_publish_seq_) {
287
292
  return versions_->LastSequence();
@@ -46,7 +46,8 @@ Status DBImpl::SuggestCompactRange(ColumnFamilyHandle* column_family,
46
46
  // Since we have some more files to compact, we should also recompute
47
47
  // compaction score
48
48
  vstorage->ComputeCompactionScore(cfd->ioptions(),
49
- cfd->GetLatestMutableCFOptions());
49
+ cfd->GetLatestMutableCFOptions(),
50
+ cfd->GetFullHistoryTsLow());
50
51
  EnqueuePendingCompaction(cfd);
51
52
  MaybeScheduleFlushOrCompaction();
52
53
  }
@@ -143,7 +144,8 @@ Status DBImpl::PromoteL0(ColumnFamilyHandle* column_family, int target_level) {
143
144
  f->file_creation_time, f->epoch_number, f->file_checksum,
144
145
  f->file_checksum_func_name, f->unique_id,
145
146
  f->compensated_range_deletion_size, f->tail_size,
146
- f->user_defined_timestamps_persisted);
147
+ f->user_defined_timestamps_persisted, f->min_timestamp,
148
+ f->max_timestamp);
147
149
  }
148
150
 
149
151
  status = versions_->LogAndApply(cfd, read_options, write_options, &edit,
@@ -446,7 +446,7 @@ void DBImpl::PurgeObsoleteFiles(JobContext& state, bool schedule_only) {
446
446
  state.manifest_delete_files.size());
447
447
  // We may ignore the dbname when generating the file names.
448
448
  for (auto& file : state.sst_delete_files) {
449
- auto* handle = file.metadata->table_reader_handle;
449
+ auto* handle = file.metadata->fd.pinned_reader.GetCacheHandle();
450
450
  if (file.only_delete_metadata) {
451
451
  if (handle) {
452
452
  // Simply release handle of file that is not being deleted
@@ -321,6 +321,7 @@ Status DB::OpenAsFollower(
321
321
  sv_context.NewSuperVersion();
322
322
  cfd->InstallSuperVersion(&sv_context, &impl->mutex_);
323
323
  }
324
+ impl->MarkAsyncFileOpenNotNeeded();
324
325
  }
325
326
  impl->mutex_.Unlock();
326
327
  sv_context.Clean();