@nxtedition/rocksdb 15.4.1 → 15.5.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 (399) hide show
  1. package/binding.cc +24 -15
  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/iterator.js +2 -2
  395. package/package.json +1 -1
  396. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  397. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
@@ -14,11 +14,13 @@
14
14
  #include "db/db_test_util.h"
15
15
  #include "db/dbformat.h"
16
16
  #include "env/mock_env.h"
17
+ #include "file/filename.h"
17
18
  #include "port/port.h"
18
19
  #include "port/stack_trace.h"
19
20
  #include "rocksdb/advanced_options.h"
20
21
  #include "rocksdb/concurrent_task_limiter.h"
21
22
  #include "rocksdb/experimental.h"
23
+ #include "rocksdb/file_checksum.h"
22
24
  #include "rocksdb/iostats_context.h"
23
25
  #include "rocksdb/sst_file_writer.h"
24
26
  #include "test_util/mock_time_env.h"
@@ -797,6 +799,13 @@ TEST_F(DBCompactionTest, CompactRangeBottomPri) {
797
799
  // and one compact to L2 in bottom pri pool.
798
800
  int low_pri_count = 0;
799
801
  int bottom_pri_count = 0;
802
+ bool bottom_running_seen = false;
803
+ SyncPoint::GetInstance()->SetCallBack(
804
+ "BackgroundCallCompaction:1", [&](void*) {
805
+ if (dbfull()->TEST_NumRunningBottomCompactions() > 0) {
806
+ bottom_running_seen = true;
807
+ }
808
+ });
800
809
  SyncPoint::GetInstance()->SetCallBack(
801
810
  "ThreadPoolImpl::Impl::BGThread:BeforeRun", [&](void* arg) {
802
811
  Env::Priority* pri = static_cast<Env::Priority*>(arg);
@@ -815,6 +824,7 @@ TEST_F(DBCompactionTest, CompactRangeBottomPri) {
815
824
  ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
816
825
  ASSERT_EQ(1, low_pri_count);
817
826
  ASSERT_EQ(1, bottom_pri_count);
827
+ ASSERT_TRUE(bottom_running_seen);
818
828
  ASSERT_EQ("0,0,2", FilesPerLevel(0));
819
829
 
820
830
  // Recompact bottom most level uses bottom pool
@@ -2208,7 +2218,8 @@ TEST_P(DBDeleteFileRangeTest, DeleteFileRange) {
2208
2218
  std::string end_string = Key(2000);
2209
2219
  Slice begin(begin_string);
2210
2220
  Slice end(end_string);
2211
- ASSERT_OK(DeleteFilesInRange(db_, db_->DefaultColumnFamily(), &begin, &end));
2221
+ ASSERT_OK(
2222
+ DeleteFilesInRange(db_.get(), db_->DefaultColumnFamily(), &begin, &end));
2212
2223
 
2213
2224
  int32_t deleted_count = 0;
2214
2225
  for (int32_t i = 0; i < 4300; i++) {
@@ -2229,8 +2240,8 @@ TEST_P(DBDeleteFileRangeTest, DeleteFileRange) {
2229
2240
  Slice begin1(begin_string);
2230
2241
  Slice end1(end_string);
2231
2242
  // Try deleting files in range which contain no keys
2232
- ASSERT_OK(
2233
- DeleteFilesInRange(db_, db_->DefaultColumnFamily(), &begin1, &end1));
2243
+ ASSERT_OK(DeleteFilesInRange(db_.get(), db_->DefaultColumnFamily(), &begin1,
2244
+ &end1));
2234
2245
 
2235
2246
  // Push data from level 0 to level 1 to force all data to be deleted
2236
2247
  // Note that we don't delete level 0 files
@@ -2239,8 +2250,8 @@ TEST_P(DBDeleteFileRangeTest, DeleteFileRange) {
2239
2250
  ASSERT_OK(db_->CompactRange(compact_options, nullptr, nullptr));
2240
2251
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
2241
2252
 
2242
- ASSERT_OK(
2243
- DeleteFilesInRange(db_, db_->DefaultColumnFamily(), nullptr, nullptr));
2253
+ ASSERT_OK(DeleteFilesInRange(db_.get(), db_->DefaultColumnFamily(), nullptr,
2254
+ nullptr));
2244
2255
 
2245
2256
  int32_t deleted_count2 = 0;
2246
2257
  for (int32_t i = 0; i < 4300; i++) {
@@ -2308,7 +2319,7 @@ TEST_P(DBDeleteFileRangeTest, DeleteFilesInRanges) {
2308
2319
  ranges.emplace_back(begin_str1, end_str1);
2309
2320
  ranges.emplace_back(begin_str2, end_str2);
2310
2321
  ranges.emplace_back(begin_str3, end_str3);
2311
- ASSERT_OK(DeleteFilesInRanges(db_, db_->DefaultColumnFamily(),
2322
+ ASSERT_OK(DeleteFilesInRanges(db_.get(), db_->DefaultColumnFamily(),
2312
2323
  ranges.data(), ranges.size()));
2313
2324
  ASSERT_EQ("0,3,7", FilesPerLevel(0));
2314
2325
 
@@ -2335,7 +2346,7 @@ TEST_P(DBDeleteFileRangeTest, DeleteFilesInRanges) {
2335
2346
  ranges.emplace_back(&begin1, &end1);
2336
2347
  ranges.emplace_back(&begin2, &end2);
2337
2348
  ranges.emplace_back(&begin3, &end3);
2338
- ASSERT_OK(DeleteFilesInRanges(db_, db_->DefaultColumnFamily(),
2349
+ ASSERT_OK(DeleteFilesInRanges(db_.get(), db_->DefaultColumnFamily(),
2339
2350
  ranges.data(), ranges.size(), false));
2340
2351
  ASSERT_EQ("0,1,4", FilesPerLevel(0));
2341
2352
 
@@ -2356,7 +2367,8 @@ TEST_P(DBDeleteFileRangeTest, DeleteFilesInRanges) {
2356
2367
  // Delete all files.
2357
2368
  {
2358
2369
  RangeOpt range;
2359
- ASSERT_OK(DeleteFilesInRanges(db_, db_->DefaultColumnFamily(), &range, 1));
2370
+ ASSERT_OK(
2371
+ DeleteFilesInRanges(db_.get(), db_->DefaultColumnFamily(), &range, 1));
2360
2372
  ASSERT_EQ("", FilesPerLevel(0));
2361
2373
 
2362
2374
  for (auto i = 0; i < 1000; i++) {
@@ -2418,7 +2430,8 @@ TEST_P(DBDeleteFileRangeTest, DeleteFileRangeFileEndpointsOverlapBug) {
2418
2430
  // "1 -> vals[0]" to reappear.
2419
2431
  std::string begin_str = Key(0), end_str = Key(1);
2420
2432
  Slice begin = begin_str, end = end_str;
2421
- ASSERT_OK(DeleteFilesInRange(db_, db_->DefaultColumnFamily(), &begin, &end));
2433
+ ASSERT_OK(
2434
+ DeleteFilesInRange(db_.get(), db_->DefaultColumnFamily(), &begin, &end));
2422
2435
  ASSERT_EQ(vals[1], GetValue(Key(1)));
2423
2436
 
2424
2437
  db_->ReleaseSnapshot(snapshot);
@@ -3657,7 +3670,7 @@ TEST_F(DBCompactionTest, SuggestCompactRangeNoTwoLevel0Compactions) {
3657
3670
 
3658
3671
  GenerateNewRandomFile(&rnd, /* nowait */ true);
3659
3672
  ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
3660
- ASSERT_OK(experimental::SuggestCompactRange(db_, nullptr, nullptr));
3673
+ ASSERT_OK(experimental::SuggestCompactRange(db_.get(), nullptr, nullptr));
3661
3674
  for (int num = 0; num < options.level0_file_num_compaction_trigger + 1;
3662
3675
  num++) {
3663
3676
  GenerateNewRandomFile(&rnd, /* nowait */ true);
@@ -4533,7 +4546,8 @@ TEST_F(DBCompactionTest, DeleteFilesInRangeConflictWithCompaction) {
4533
4546
  std::string end_string = Key(kMaxKey + 1);
4534
4547
  Slice begin(begin_string);
4535
4548
  Slice end(end_string);
4536
- ASSERT_OK(DeleteFilesInRange(db_, db_->DefaultColumnFamily(), &begin, &end));
4549
+ ASSERT_OK(
4550
+ DeleteFilesInRange(db_.get(), db_->DefaultColumnFamily(), &begin, &end));
4537
4551
  SyncPoint::GetInstance()->DisableProcessing();
4538
4552
  }
4539
4553
 
@@ -7840,7 +7854,7 @@ class DBCompactionTestL0FilesMisorderCorruption : public DBCompactionTest {
7840
7854
  options_.level0_file_num_compaction_trigger = 3;
7841
7855
 
7842
7856
  CompactionOptionsFIFO fifo_options;
7843
- if (compaction_path_to_test == "FindIntraL0Compaction" ||
7857
+ if (compaction_path_to_test == "PickCostBasedIntraL0Compaction" ||
7844
7858
  compaction_path_to_test == "CompactRange") {
7845
7859
  fifo_options.allow_compaction = true;
7846
7860
  } else if (compaction_path_to_test == "CompactFile") {
@@ -7940,7 +7954,7 @@ class DBCompactionTestL0FilesMisorderCorruption : public DBCompactionTest {
7940
7954
 
7941
7955
  void SetupSyncPoints(const std::string& compaction_path_to_test) {
7942
7956
  compaction_path_sync_point_called_.store(false);
7943
- if (compaction_path_to_test == "FindIntraL0Compaction" &&
7957
+ if (compaction_path_to_test == "PickCostBasedIntraL0Compaction" &&
7944
7958
  options_.compaction_style == CompactionStyle::kCompactionStyleLevel) {
7945
7959
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
7946
7960
  "PostPickFileToCompact", [&](void* arg) {
@@ -7950,7 +7964,7 @@ class DBCompactionTestL0FilesMisorderCorruption : public DBCompactionTest {
7950
7964
  *picked_file_to_compact = false;
7951
7965
  });
7952
7966
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
7953
- "FindIntraL0Compaction", [&](void* /*arg*/) {
7967
+ "PickCostBasedIntraL0Compaction", [&](void* /*arg*/) {
7954
7968
  compaction_path_sync_point_called_.store(true);
7955
7969
  });
7956
7970
 
@@ -7986,12 +8000,12 @@ class DBCompactionTestL0FilesMisorderCorruption : public DBCompactionTest {
7986
8000
  "PickDeleteTriggeredCompactionReturnNonnullptr", [&](void* /*arg*/) {
7987
8001
  compaction_path_sync_point_called_.store(true);
7988
8002
  });
7989
- } else if ((compaction_path_to_test == "FindIntraL0Compaction" ||
8003
+ } else if ((compaction_path_to_test == "PickCostBasedIntraL0Compaction" ||
7990
8004
  compaction_path_to_test == "CompactRange") &&
7991
8005
  options_.compaction_style ==
7992
8006
  CompactionStyle::kCompactionStyleFIFO) {
7993
8007
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
7994
- "FindIntraL0Compaction", [&](void* /*arg*/) {
8008
+ "PickCostBasedIntraL0Compaction", [&](void* /*arg*/) {
7995
8009
  compaction_path_sync_point_called_.store(true);
7996
8010
  });
7997
8011
  }
@@ -8063,7 +8077,7 @@ TEST_F(DBCompactionTest, CompactFilesSupportKeyPlacementRangeConflict) {
8063
8077
  ASSERT_OK(Flush());
8064
8078
  ASSERT_OK(Put("k4", "v"));
8065
8079
  ASSERT_OK(Flush());
8066
- ASSERT_OK(experimental::PromoteL0(db_, db_->DefaultColumnFamily(), 1));
8080
+ ASSERT_OK(experimental::PromoteL0(db_.get(), db_->DefaultColumnFamily(), 1));
8067
8081
  ASSERT_EQ("0,2,1", FilesPerLevel());
8068
8082
 
8069
8083
  ASSERT_OK(Put("k2", "v"));
@@ -8151,7 +8165,7 @@ TEST_F(DBCompactionTestL0FilesMisorderCorruption,
8151
8165
  IngestOneKeyValue(dbfull(), Key(i), "new", options_);
8152
8166
  }
8153
8167
 
8154
- SetupSyncPoints("FindIntraL0Compaction");
8168
+ SetupSyncPoints("PickCostBasedIntraL0Compaction");
8155
8169
  ResumeCompactionThread();
8156
8170
 
8157
8171
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
@@ -8284,7 +8298,8 @@ TEST_F(DBCompactionTestL0FilesMisorderCorruption,
8284
8298
 
8285
8299
  TEST_F(DBCompactionTestL0FilesMisorderCorruption,
8286
8300
  FlushAfterIntraL0FIFOCompactionWithIngestedFile) {
8287
- for (const std::string compaction_path_to_test : {"FindIntraL0Compaction"}) {
8301
+ for (const std::string compaction_path_to_test :
8302
+ {"PickCostBasedIntraL0Compaction"}) {
8288
8303
  SetupOptions(CompactionStyle::kCompactionStyleFIFO,
8289
8304
  compaction_path_to_test);
8290
8305
  DestroyAndReopen(options_);
@@ -11483,20 +11498,24 @@ TEST_F(DBCompactionTest, RecordNewestKeyTimeForTtlCompaction) {
11483
11498
  // Check that we are populating newest_key_time on flush
11484
11499
  std::vector<FileMetaData*> file_metadatas = GetLevelFileMetadatas(0);
11485
11500
  ASSERT_EQ(file_metadatas.size(), 4);
11486
- uint64_t first_newest_key_time =
11487
- file_metadatas[0]->fd.table_reader->GetTableProperties()->newest_key_time;
11501
+ uint64_t first_newest_key_time = file_metadatas[0]
11502
+ ->fd.pinned_reader.Get()
11503
+ ->GetTableProperties()
11504
+ ->newest_key_time;
11488
11505
  ASSERT_NE(first_newest_key_time, kUnknownNewestKeyTime);
11489
11506
  // Check that the newest_key_times are in expected ordering
11490
11507
  uint64_t prev_newest_key_time = first_newest_key_time;
11491
11508
  for (size_t idx = 1; idx < file_metadatas.size(); idx++) {
11492
11509
  uint64_t newest_key_time = file_metadatas[idx]
11493
- ->fd.table_reader->GetTableProperties()
11510
+ ->fd.pinned_reader.Get()
11511
+ ->GetTableProperties()
11494
11512
  ->newest_key_time;
11495
11513
 
11496
11514
  ASSERT_LT(newest_key_time, prev_newest_key_time);
11497
11515
  prev_newest_key_time = newest_key_time;
11498
11516
  ASSERT_EQ(newest_key_time, file_metadatas[idx]
11499
- ->fd.table_reader->GetTableProperties()
11517
+ ->fd.pinned_reader.Get()
11518
+ ->GetTableProperties()
11500
11519
  ->creation_time);
11501
11520
  }
11502
11521
  // The delta between the first and last newest_key_times is 15s
@@ -11511,14 +11530,18 @@ TEST_F(DBCompactionTest, RecordNewestKeyTimeForTtlCompaction) {
11511
11530
  ASSERT_EQ(NumTableFilesAtLevel(0), 1);
11512
11531
  file_metadatas = GetLevelFileMetadatas(0);
11513
11532
  ASSERT_EQ(file_metadatas.size(), 1);
11514
- ASSERT_EQ(
11515
- file_metadatas[0]->fd.table_reader->GetTableProperties()->newest_key_time,
11516
- first_newest_key_time);
11533
+ ASSERT_EQ(file_metadatas[0]
11534
+ ->fd.pinned_reader.Get()
11535
+ ->GetTableProperties()
11536
+ ->newest_key_time,
11537
+ first_newest_key_time);
11517
11538
  // Contrast newest_key_time with creation_time, which records the oldest
11518
11539
  // ancestor time (15s older than newest_key_time)
11519
- ASSERT_EQ(
11520
- file_metadatas[0]->fd.table_reader->GetTableProperties()->creation_time,
11521
- last_newest_key_time);
11540
+ ASSERT_EQ(file_metadatas[0]
11541
+ ->fd.pinned_reader.Get()
11542
+ ->GetTableProperties()
11543
+ ->creation_time,
11544
+ last_newest_key_time);
11522
11545
  ASSERT_EQ(file_metadatas[0]->oldest_ancester_time, last_newest_key_time);
11523
11546
 
11524
11547
  // Make sure TTL of 5s causes compaction
@@ -11658,6 +11681,283 @@ TEST_F(DBCompactionTest, PeriodicTask) {
11658
11681
  ASSERT_EQ(listener->num_periodic_compactions, 1);
11659
11682
  Close();
11660
11683
  }
11684
+
11685
+ // Regression test for a bug in SetupOtherFilesWithRoundRobinExpansion where
11686
+ // duplicate files are added to the compaction input, corrupting
11687
+ // ExpandInputsToCleanCut and violating the clean-cut invariant. The bug
11688
+ // requires: (1) kRoundRobin compaction priority, (2) files at a non-L0 level
11689
+ // with shared user key boundaries (adjacent files whose boundary keys share
11690
+ // the same user key), and (3) ExpandInputsToCleanCut expanding the initially
11691
+ // picked file to include multiple adjacent files in PickFileToCompact.
11692
+ TEST_F(DBCompactionTest, RoundRobinCleanCutWithSharedBoundary) {
11693
+ Options options = CurrentOptions();
11694
+ options.compaction_style = kCompactionStyleLevel;
11695
+ options.compaction_pri = kRoundRobin;
11696
+ options.level_compaction_dynamic_level_bytes = false;
11697
+ options.max_bytes_for_level_base = 100;
11698
+ options.disable_auto_compactions = true;
11699
+
11700
+ DestroyAndReopen(options);
11701
+
11702
+ std::vector<const Snapshot*> snapshots;
11703
+ for (int v = 0; v < 5; v++) {
11704
+ for (int k = 0; k < 3; k++) {
11705
+ ASSERT_OK(Put("key" + std::to_string(k), "v" + std::to_string(v)));
11706
+ }
11707
+ snapshots.push_back(db_->GetSnapshot());
11708
+ ASSERT_OK(Flush());
11709
+ }
11710
+
11711
+ // Force L0->L1 compaction output to split every 3 keys. With 3 keys x 5
11712
+ // versions (15 KVs) sorted by (user_key asc, seq desc), splitting every 3
11713
+ // creates 5 files where adjacent files share boundaries across different
11714
+ // user keys (e.g., File0 ends with key0, File1 starts with key0 and ends
11715
+ // with key1, etc.). This chain of 4+ shared boundaries across 3 different
11716
+ // user keys is needed so that ExpandInputsToCleanCut expands the picked
11717
+ // file to multiple files, and the duplicate in the round-robin loop causes
11718
+ // GetRange to return a truncated range that drops files from the set.
11719
+ std::atomic<int> key_count{0};
11720
+ SyncPoint::GetInstance()->SetCallBack(
11721
+ "CompactionOutputs::ShouldStopBefore::manual_decision", [&](void* arg) {
11722
+ auto* p = static_cast<std::pair<bool*, const Slice>*>(arg);
11723
+ int n = key_count.fetch_add(1);
11724
+ if (n > 0 && n % 3 == 0) {
11725
+ *(p->first) = true;
11726
+ }
11727
+ });
11728
+ SyncPoint::GetInstance()->EnableProcessing();
11729
+ ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, nullptr));
11730
+ SyncPoint::GetInstance()->DisableProcessing();
11731
+ SyncPoint::GetInstance()->ClearAllCallBacks();
11732
+
11733
+ ColumnFamilyMetaData cf_meta;
11734
+ db_->GetColumnFamilyMetaData(&cf_meta);
11735
+ ASSERT_EQ(cf_meta.levels[1].files.size(), 5U);
11736
+
11737
+ for (auto s : snapshots) {
11738
+ db_->ReleaseSnapshot(s);
11739
+ }
11740
+
11741
+ ASSERT_OK(dbfull()->SetOptions({{"disable_auto_compactions", "false"}}));
11742
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
11743
+
11744
+ for (int k = 0; k < 3; k++) {
11745
+ ASSERT_EQ(Get("key" + std::to_string(k)), "v4");
11746
+ }
11747
+ }
11748
+
11749
+ // Regression test:
11750
+ // 1. Compaction succeeds at subcompaction level, VerifyOutputFiles adds cache
11751
+ // entries for output files via table_cache()->NewIterator().
11752
+ // 2. A post-verification step fails (injected here via sync point), setting
11753
+ // compact_->status to error while each subcompaction's status stays OK.
11754
+ // 3. SubcompactionState::Cleanup checks individual status (OK) and skips
11755
+ // ReleaseObsolete — the cache entries leak.
11756
+ // 4. FaultInjectionTestFS injects metadata read errors, causing GetChildren
11757
+ // to fail in FindObsoleteFiles.
11758
+ // 5. Close()'s FindObsoleteFiles also fails to find the orphan for the same
11759
+ // reason. TEST_VerifyNoObsoleteFilesCached finds the leaked entry.
11760
+ TEST_F(DBCompactionTest, LeakedTableCacheEntryOnCompactionFailure) {
11761
+ auto fault_fs = std::make_shared<FaultInjectionTestFS>(env_->GetFileSystem());
11762
+ std::unique_ptr<Env> fault_env(NewCompositeEnv(fault_fs));
11763
+
11764
+ Options options = CurrentOptions();
11765
+ options.env = fault_env.get();
11766
+ options.paranoid_file_checks = true;
11767
+ options.level0_file_num_compaction_trigger = 2;
11768
+ options.disable_auto_compactions = true;
11769
+ options.num_levels = 3;
11770
+ DestroyAndReopen(options);
11771
+
11772
+ // Write overlapping data to force a real (non-trivial) compaction.
11773
+ ASSERT_OK(Put("a", std::string(1024, 'x')));
11774
+ ASSERT_OK(Put("z", std::string(1024, 'x')));
11775
+ ASSERT_OK(Flush());
11776
+ ASSERT_OK(Put("a", std::string(1024, 'y')));
11777
+ ASSERT_OK(Put("z", std::string(1024, 'y')));
11778
+ ASSERT_OK(Flush());
11779
+ ASSERT_EQ(NumTableFilesAtLevel(0), 2);
11780
+
11781
+ // After VerifyOutputFiles succeeds (cache entries created), inject error
11782
+ // and deactivate the filesystem. The error makes the overall compaction
11783
+ // fail while individual subcompaction statuses stay OK (so Cleanup skips
11784
+ // ReleaseObsolete). The filesystem deactivation makes GetChildren fail
11785
+ // in FindObsoleteFiles, preventing the backstop from evicting the leaked
11786
+ // cache entries — matching the crash test's metadata read fault injection.
11787
+ std::atomic<bool> inject_error{true};
11788
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
11789
+ "CompactionJob::Run():AfterVerifyOutputFiles", [&](void* arg) {
11790
+ if (inject_error.exchange(false)) {
11791
+ *static_cast<Status*>(arg) = Status::Corruption("injected");
11792
+ }
11793
+ });
11794
+
11795
+ // Enable metadata read fault injection on the bg compaction thread after
11796
+ // the compaction job finishes but before FindObsoleteFiles runs. This
11797
+ // makes GetChildren fail (metadata read), matching crash test's
11798
+ // --open_metadata_read_fault_one_in=8. Only metadata reads fail —
11799
+ // logging and other IO operations continue normally.
11800
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
11801
+ "BackgroundCallCompaction:1", [&](void*) {
11802
+ fault_fs->SetThreadLocalErrorContext(
11803
+ FaultInjectionIOType::kMetadataRead, /*seed=*/0, /*one_in=*/1,
11804
+ /*retryable=*/false, /*has_data_loss=*/false);
11805
+ fault_fs->EnableThreadLocalErrorInjection(
11806
+ FaultInjectionIOType::kMetadataRead);
11807
+ });
11808
+
11809
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
11810
+
11811
+ // Trigger compaction — fails after VerifyOutputFiles.
11812
+ Status s = dbfull()->TEST_CompactRange(0, nullptr, nullptr);
11813
+ ASSERT_NOK(s);
11814
+
11815
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
11816
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
11817
+
11818
+ // Enable metadata read fault injection on the main thread too, so
11819
+ // Close()'s FindObsoleteFiles also fails to find the orphan file.
11820
+ fault_fs->SetThreadLocalErrorContext(
11821
+ FaultInjectionIOType::kMetadataRead, /*seed=*/0, /*one_in=*/1,
11822
+ /*retryable=*/false, /*has_data_loss=*/false);
11823
+ fault_fs->EnableThreadLocalErrorInjection(
11824
+ FaultInjectionIOType::kMetadataRead);
11825
+
11826
+ // TEST_VerifyNoObsoleteFilesCached asserted within Close on ASAN builds
11827
+ s = db_->Close();
11828
+ ASSERT_OK(s);
11829
+ // Release DB before fault_env goes out of scope to avoid use-after-free.
11830
+ db_ = nullptr;
11831
+ }
11832
+
11833
+ TEST_F(DBCompactionTest, VerifyFileChecksumOnCompactionOutput) {
11834
+ Options options = CurrentOptions();
11835
+ options.disable_auto_compactions = true;
11836
+ options.file_checksum_gen_factory = GetFileChecksumGenCrc32cFactory();
11837
+ options.verify_output_flags = VerifyOutputFlags::kVerifyFileChecksum |
11838
+ VerifyOutputFlags::kEnableForLocalCompaction;
11839
+ DestroyAndReopen(options);
11840
+
11841
+ // Create 2 L0 files to trigger compaction
11842
+ for (int i = 0; i < 10; i++) {
11843
+ ASSERT_OK(Put(Key(i), "value" + std::to_string(i)));
11844
+ }
11845
+ ASSERT_OK(Flush());
11846
+
11847
+ for (int i = 5; i < 15; i++) {
11848
+ ASSERT_OK(Put(Key(i), "value2_" + std::to_string(i)));
11849
+ }
11850
+ ASSERT_OK(Flush());
11851
+
11852
+ // Corrupt output files right before verification
11853
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
11854
+ "CompactionJob::Run:BeforeVerify", [&](void* /*arg*/) {
11855
+ // Find and corrupt the newest SST file (compaction output)
11856
+ std::vector<std::string> filenames;
11857
+ ASSERT_OK(env_->GetChildren(dbname_, &filenames));
11858
+ uint64_t max_number = 0;
11859
+ std::string target_fname;
11860
+ for (const auto& f : filenames) {
11861
+ uint64_t number;
11862
+ FileType type;
11863
+ if (ParseFileName(f, &number, &type) && type == kTableFile &&
11864
+ number > max_number) {
11865
+ max_number = number;
11866
+ target_fname = dbname_ + "/" + f;
11867
+ }
11868
+ }
11869
+ ASSERT_FALSE(target_fname.empty());
11870
+ ASSERT_OK(test::CorruptFile(env_, target_fname, 0, 1,
11871
+ false /* verifyChecksum */));
11872
+ });
11873
+ SyncPoint::GetInstance()->EnableProcessing();
11874
+
11875
+ Status s = db_->CompactRange(CompactRangeOptions(), nullptr, nullptr);
11876
+ ASSERT_TRUE(s.IsCorruption()) << s.ToString();
11877
+ ASSERT_TRUE(
11878
+ std::strstr(s.getState(), "File checksum mismatch for compaction output"))
11879
+ << s.ToString();
11880
+
11881
+ SyncPoint::GetInstance()->DisableProcessing();
11882
+ SyncPoint::GetInstance()->ClearAllCallBacks();
11883
+ }
11884
+
11885
+ // Regression test: verify_output_flags with kVerifyIteration should work
11886
+ // correctly even when paranoid_file_checks is false. Before the fix, the
11887
+ // OutputValidator hash was only computed during writing when
11888
+ // paranoid_file_checks was true, but the verification always computed the
11889
+ // hash, leading to a false positive "Key-value checksum of compaction output
11890
+ // doesn't match" error.
11891
+ TEST_F(DBCompactionTest, VerifyIterationWithoutParanoidFileChecks) {
11892
+ Options options = CurrentOptions();
11893
+ options.disable_auto_compactions = true;
11894
+ options.paranoid_file_checks = false;
11895
+ options.verify_output_flags = VerifyOutputFlags::kVerifyIteration |
11896
+ VerifyOutputFlags::kEnableForLocalCompaction;
11897
+ DestroyAndReopen(options);
11898
+
11899
+ // Create 2 L0 files to trigger compaction
11900
+ for (int i = 0; i < 10; i++) {
11901
+ ASSERT_OK(Put(Key(i), "value" + std::to_string(i)));
11902
+ }
11903
+ ASSERT_OK(Flush());
11904
+
11905
+ for (int i = 5; i < 15; i++) {
11906
+ ASSERT_OK(Put(Key(i), "value2_" + std::to_string(i)));
11907
+ }
11908
+ ASSERT_OK(Flush());
11909
+
11910
+ // Compaction should succeed without false corruption errors
11911
+ ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
11912
+
11913
+ // Verify data is intact
11914
+ for (int i = 0; i < 15; i++) {
11915
+ std::string expected;
11916
+ if (i >= 5) {
11917
+ expected = "value2_" + std::to_string(i);
11918
+ } else {
11919
+ expected = "value" + std::to_string(i);
11920
+ }
11921
+ ASSERT_EQ(Get(Key(i)), expected);
11922
+ }
11923
+ }
11924
+
11925
+ // Also test all verification types combined without paranoid_file_checks
11926
+ TEST_F(DBCompactionTest, VerifyAllOutputFlagsWithoutParanoidFileChecks) {
11927
+ Options options = CurrentOptions();
11928
+ options.disable_auto_compactions = true;
11929
+ options.paranoid_file_checks = false;
11930
+ options.file_checksum_gen_factory = GetFileChecksumGenCrc32cFactory();
11931
+ options.verify_output_flags = VerifyOutputFlags::kVerifyBlockChecksum |
11932
+ VerifyOutputFlags::kVerifyIteration |
11933
+ VerifyOutputFlags::kVerifyFileChecksum |
11934
+ VerifyOutputFlags::kEnableForLocalCompaction;
11935
+ DestroyAndReopen(options);
11936
+
11937
+ for (int i = 0; i < 10; i++) {
11938
+ ASSERT_OK(Put(Key(i), "value" + std::to_string(i)));
11939
+ }
11940
+ ASSERT_OK(Flush());
11941
+
11942
+ for (int i = 5; i < 15; i++) {
11943
+ ASSERT_OK(Put(Key(i), "value2_" + std::to_string(i)));
11944
+ }
11945
+ ASSERT_OK(Flush());
11946
+
11947
+ // Compaction should succeed with all verification types enabled
11948
+ ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
11949
+
11950
+ for (int i = 0; i < 15; i++) {
11951
+ std::string expected;
11952
+ if (i >= 5) {
11953
+ expected = "value2_" + std::to_string(i);
11954
+ } else {
11955
+ expected = "value" + std::to_string(i);
11956
+ }
11957
+ ASSERT_EQ(Get(Key(i)), expected);
11958
+ }
11959
+ }
11960
+
11661
11961
  } // namespace ROCKSDB_NAMESPACE
11662
11962
 
11663
11963
  int main(int argc, char** argv) {