@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
@@ -676,8 +676,8 @@ class CompactionJobTestBase : public testing::Test {
676
676
  &event_logger, false, false, dbname_, &compaction_job_stats_,
677
677
  Env::Priority::USER, nullptr /* IOTracer */,
678
678
  /*manual_compaction_canceled=*/kManualCompactionCanceledFalse,
679
- env_->GenerateUniqueId(), DBImpl::GenerateDbSessionId(nullptr),
680
- full_history_ts_low_);
679
+ CompactionJob::kCompactionAbortedFalse, env_->GenerateUniqueId(),
680
+ DBImpl::GenerateDbSessionId(nullptr), full_history_ts_low_);
681
681
  VerifyInitializationOfCompactionJobStats(compaction_job_stats_);
682
682
 
683
683
  compaction_job.Prepare(std::nullopt /*subcompact to be computed*/);
@@ -2409,459 +2409,6 @@ TEST_F(CompactionJobIOPriorityTest, GetRateLimiterPriority) {
2409
2409
  kMaxSequenceNumber, 1, false, {kInvalidBlobFileNumber}, true,
2410
2410
  Env::IO_LOW, Env::IO_LOW);
2411
2411
  }
2412
-
2413
- class ResumableCompactionJobTest : public CompactionJobTestBase {
2414
- public:
2415
- ResumableCompactionJobTest()
2416
- : CompactionJobTestBase(
2417
- test::PerThreadDBPath("allow_resumption_job_test"),
2418
- BytewiseComparator(), [](uint64_t /*ts*/) { return ""; },
2419
- /*test_io_priority=*/false, TableTypeForTest::kBlockBasedTable) {}
2420
-
2421
- protected:
2422
- static constexpr const char* kCancelBeforeThisKey = "cancel_before_this_key";
2423
- std::string progress_dir_;
2424
- bool enable_cancel_ = false;
2425
- std::atomic<int> stop_count_{0};
2426
- std::atomic<bool> cancel_{false};
2427
- SequenceNumber cancel_before_seqno = kMaxSequenceNumber;
2428
-
2429
- void SetUp() override {
2430
- CompactionJobTestBase::SetUp();
2431
- SyncPoint::GetInstance()->SetCallBack(
2432
- "CompactionOutputs::ShouldStopBefore::manual_decision",
2433
- [this](void* p) {
2434
- auto* pair = static_cast<std::pair<bool*, const Slice>*>(p);
2435
- *(pair->first) = true;
2436
-
2437
- // Cancel after outputting a specific key
2438
- if (enable_cancel_) {
2439
- ParsedInternalKey parsed_key;
2440
- if (ParseInternalKey(pair->second, &parsed_key, true).ok()) {
2441
- if (parsed_key.user_key == kCancelBeforeThisKey &&
2442
- (cancel_before_seqno == kMaxSequenceNumber ||
2443
- parsed_key.sequence == cancel_before_seqno)) {
2444
- cancel_.store(true);
2445
- }
2446
- }
2447
- }
2448
- });
2449
- SyncPoint::GetInstance()->EnableProcessing();
2450
- }
2451
-
2452
- void TearDown() override {
2453
- SyncPoint::GetInstance()->DisableProcessing();
2454
- SyncPoint::GetInstance()->ClearAllCallBacks();
2455
-
2456
- if (env_->FileExists(progress_dir_).ok()) {
2457
- std::vector<std::string> files;
2458
- EXPECT_OK(env_->GetChildren(progress_dir_, &files));
2459
- for (const auto& file : files) {
2460
- if (file != "." && file != "..") {
2461
- EXPECT_OK(env_->DeleteFile(progress_dir_ + "/" + file));
2462
- }
2463
- }
2464
- EXPECT_OK(env_->DeleteDir(progress_dir_));
2465
- }
2466
-
2467
- CompactionJobTestBase::TearDown();
2468
- }
2469
-
2470
- void NewDB() {
2471
- if (env_->FileExists(progress_dir_).ok()) {
2472
- std::vector<std::string> files;
2473
- EXPECT_OK(env_->GetChildren(progress_dir_, &files));
2474
- for (const auto& file : files) {
2475
- if (file != "." && file != "..") {
2476
- EXPECT_OK(env_->DeleteFile(progress_dir_ + "/" + file));
2477
- }
2478
- }
2479
- EXPECT_OK(env_->DeleteDir(progress_dir_));
2480
- }
2481
-
2482
- CompactionJobTestBase::NewDB();
2483
-
2484
- progress_dir_ = test::PerThreadDBPath("compaction_progress");
2485
- ASSERT_OK(env_->CreateDirIfMissing(progress_dir_));
2486
- }
2487
-
2488
- void EnableCompactionCancel() { enable_cancel_ = true; }
2489
-
2490
- void DisableCompactionCancel() {
2491
- enable_cancel_ = false;
2492
- cancel_.store(false);
2493
- }
2494
-
2495
- std::unique_ptr<log::Writer> CreateCompactionProgressWriter(
2496
- const std::string& compaction_progress_file) {
2497
- std::unique_ptr<FSWritableFile> file;
2498
- EXPECT_OK(fs_->NewWritableFile(compaction_progress_file, FileOptions(),
2499
- &file, nullptr));
2500
- auto file_writer = std::make_unique<WritableFileWriter>(
2501
- std::move(file), compaction_progress_file, FileOptions());
2502
- auto compaction_progress_writer =
2503
- std::make_unique<log::Writer>(std::move(file_writer), 0, false);
2504
- return compaction_progress_writer;
2505
- }
2506
-
2507
- Status RunCompactionWithProgressTracking(
2508
- const CompactionProgress& compaction_progress,
2509
- log::Writer* compaction_progress_writer,
2510
- std::vector<SequenceNumber> snapshots = {},
2511
- std::shared_ptr<Statistics> stats = nullptr) {
2512
- mutex_.Lock();
2513
-
2514
- auto cfd = versions_->GetColumnFamilySet()->GetDefault();
2515
- auto files = cfd->current()->storage_info()->LevelFiles(0);
2516
-
2517
- db_options_.statistics = stats;
2518
- db_options_.stats = db_options_.statistics.get();
2519
-
2520
- std::vector<CompactionInputFiles> compaction_input_files;
2521
- CompactionInputFiles level;
2522
- level.level = 0;
2523
- level.files = files;
2524
- compaction_input_files.push_back(level);
2525
-
2526
- Compaction compaction(
2527
- cfd->current()->storage_info(), cfd->ioptions(),
2528
- cfd->GetLatestMutableCFOptions(), mutable_db_options_,
2529
- compaction_input_files, 1, mutable_cf_options_.target_file_size_base,
2530
- mutable_cf_options_.max_compaction_bytes, 0, kNoCompression,
2531
- cfd->GetLatestMutableCFOptions().compression_opts,
2532
- Temperature::kUnknown, 0, {}, std::nullopt, nullptr,
2533
- CompactionReason::kManualCompaction);
2534
- compaction.FinalizeInputInfo(cfd->current());
2535
-
2536
- LogBuffer log_buffer(InfoLogLevel::INFO_LEVEL, db_options_.info_log.get());
2537
- EventLogger event_logger(db_options_.info_log.get());
2538
- JobContext job_context(1, false);
2539
- job_context.InitSnapshotContext(nullptr, nullptr, kMaxSequenceNumber,
2540
- std::move(snapshots));
2541
- CompactionJobStats job_stats;
2542
-
2543
- CompactionJob compaction_job(
2544
- 0, &compaction, db_options_, mutable_db_options_, env_options_,
2545
- versions_.get(), &shutting_down_, &log_buffer, nullptr, nullptr,
2546
- nullptr, stats.get(), &mutex_, &error_handler_, &job_context,
2547
- table_cache_, &event_logger, false, false, dbname_, &job_stats,
2548
- Env::Priority::USER, nullptr, cancel_, env_->GenerateUniqueId(),
2549
- DBImpl::GenerateDbSessionId(nullptr), "");
2550
-
2551
- compaction_job.Prepare(std::nullopt, compaction_progress,
2552
- compaction_progress_writer);
2553
- mutex_.Unlock();
2554
-
2555
- compaction_job.Run().PermitUncheckedError();
2556
- EXPECT_OK(compaction_job.io_status());
2557
-
2558
- mutex_.Lock();
2559
-
2560
- bool compaction_released = false;
2561
- Status s = compaction_job.Install(&compaction_released);
2562
-
2563
- mutex_.Unlock();
2564
- if (!compaction_released) {
2565
- compaction.ReleaseCompactionFiles(s);
2566
- }
2567
-
2568
- return s;
2569
- }
2570
-
2571
- SubcompactionProgress ReadAndParseProgress(
2572
- const std::string& compaction_progress_file) {
2573
- std::unique_ptr<FSSequentialFile> seq_file;
2574
- EXPECT_OK(fs_->NewSequentialFile(compaction_progress_file, FileOptions(),
2575
- &seq_file, nullptr));
2576
- auto file_reader = std::make_unique<SequentialFileReader>(
2577
- std::move(seq_file), compaction_progress_file, 0, nullptr);
2578
- log::Reader reader(nullptr, std::move(file_reader), nullptr, true, 0);
2579
-
2580
- SubcompactionProgressBuilder builder;
2581
- std::string record;
2582
- Slice slice;
2583
-
2584
- while (reader.ReadRecord(&slice, &record)) {
2585
- VersionEdit edit;
2586
- if (!edit.DecodeFrom(slice).ok()) {
2587
- continue;
2588
- }
2589
- builder.ProcessVersionEdit(edit);
2590
- }
2591
-
2592
- EXPECT_TRUE(builder.HasAccumulatedSubcompactionProgress());
2593
-
2594
- return builder.GetAccumulatedSubcompactionProgress();
2595
- }
2596
-
2597
- // Test utility function to verify that compaction progress was correctly
2598
- // persisted to the progress file after compaction interruption.
2599
- //
2600
- // VERIFIES:
2601
- // - Progress file exists and has expected size (empty if no progress
2602
- // expected)
2603
- // - Next internal key to compact matches expected user key with proper format
2604
- // - Number of processed input records matches position in ordered input keys
2605
- // - Number of processed output records equals number of processed input
2606
- // records (by test design to simplify verification)
2607
- // - Each output file contains exactly one user key (by test design to
2608
- // simplify verification)
2609
- void VerifyCompactionProgressPersisted(
2610
- const std::string& compaction_progress_file,
2611
- const std::string& next_user_key_to_compact,
2612
- const std::vector<std::string>& ordered_intput_keys) {
2613
- ASSERT_OK(env_->FileExists(compaction_progress_file));
2614
-
2615
- uint64_t file_size;
2616
- ASSERT_OK(env_->GetFileSize(compaction_progress_file, &file_size));
2617
-
2618
- if (next_user_key_to_compact.empty()) {
2619
- ASSERT_EQ(file_size, 0);
2620
- return;
2621
- }
2622
-
2623
- const auto& subcompaction_progress =
2624
- ReadAndParseProgress(compaction_progress_file);
2625
-
2626
- ASSERT_FALSE(subcompaction_progress.next_internal_key_to_compact.empty());
2627
- ParsedInternalKey parsed_next_key;
2628
- ASSERT_OK(
2629
- ParseInternalKey(subcompaction_progress.next_internal_key_to_compact,
2630
- &parsed_next_key, true /* log_err_key */));
2631
- ASSERT_EQ(parsed_next_key.user_key, next_user_key_to_compact);
2632
- ASSERT_EQ(parsed_next_key.sequence, kMaxSequenceNumber);
2633
- ASSERT_EQ(parsed_next_key.type, kValueTypeForSeek);
2634
-
2635
- auto it = std::find(ordered_intput_keys.begin(), ordered_intput_keys.end(),
2636
- next_user_key_to_compact);
2637
- ASSERT_TRUE(it != ordered_intput_keys.end());
2638
-
2639
- auto next_key_index = std::distance(ordered_intput_keys.begin(), it);
2640
-
2641
- ASSERT_EQ(subcompaction_progress.num_processed_input_records,
2642
- next_key_index);
2643
-
2644
- ASSERT_EQ(subcompaction_progress.output_level_progress
2645
- .GetNumProcessedOutputRecords(),
2646
- next_key_index);
2647
-
2648
- ASSERT_EQ(
2649
- subcompaction_progress.output_level_progress.GetOutputFiles().size(),
2650
-
2651
- next_key_index);
2652
-
2653
- for (size_t i = 0;
2654
- i <
2655
- subcompaction_progress.output_level_progress.GetOutputFiles().size();
2656
- ++i) {
2657
- const auto& output_file =
2658
- subcompaction_progress.output_level_progress.GetOutputFiles()[i];
2659
- ASSERT_EQ(output_file.smallest.user_key().ToString(),
2660
- output_file.largest.user_key().ToString());
2661
- ASSERT_EQ(output_file.largest.user_key().ToString(),
2662
- ordered_intput_keys[i]);
2663
- }
2664
- }
2665
-
2666
- void RunCancelAndResumeTest(
2667
- const std::initializer_list<mock::KVPair>& input_file_1,
2668
- const std::initializer_list<mock::KVPair>& input_file_2,
2669
- uint64_t last_sequence, const std::vector<uint64_t>& snapshots,
2670
- const std::string& expected_next_key_to_compact,
2671
- const std::vector<std::string>& expected_input_keys,
2672
- bool cancelled_past_mid_point = false) {
2673
- std::shared_ptr<Statistics> stats = ROCKSDB_NAMESPACE::CreateDBStatistics();
2674
-
2675
- auto file1 = mock::MakeMockFile(input_file_1);
2676
- AddMockFile(file1);
2677
- auto file2 = mock::MakeMockFile(input_file_2);
2678
- AddMockFile(file2);
2679
- SetLastSequence(last_sequence);
2680
-
2681
- // First compaction (will be cancelled)
2682
- std::string compaction_progress_file =
2683
- CompactionProgressFileName(progress_dir_, 123);
2684
- std::unique_ptr<log::Writer> compaction_progress_writer =
2685
- CreateCompactionProgressWriter(compaction_progress_file);
2686
-
2687
- ASSERT_OK(stats->Reset());
2688
- EnableCompactionCancel();
2689
-
2690
- Status status = RunCompactionWithProgressTracking(
2691
- CompactionProgress{}, compaction_progress_writer.get(), snapshots,
2692
- stats);
2693
-
2694
- ASSERT_TRUE(status.IsManualCompactionPaused());
2695
- DisableCompactionCancel();
2696
-
2697
- HistogramData cancelled_compaction_stats;
2698
- stats->histogramData(FILE_WRITE_COMPACTION_MICROS,
2699
- &cancelled_compaction_stats);
2700
-
2701
- VerifyCompactionProgressPersisted(compaction_progress_file,
2702
- expected_next_key_to_compact,
2703
- expected_input_keys);
2704
-
2705
- // Resume compaction
2706
- CompactionProgress compaction_progress;
2707
- if (expected_next_key_to_compact != "") {
2708
- compaction_progress.push_back(
2709
- ReadAndParseProgress(compaction_progress_file));
2710
- }
2711
-
2712
- std::string compaction_progress_file_2 =
2713
- CompactionProgressFileName(progress_dir_, 234);
2714
- std::unique_ptr<log::Writer> compaction_progress_writer_2 =
2715
- CreateCompactionProgressWriter(compaction_progress_file_2);
2716
-
2717
- ASSERT_OK(stats->Reset());
2718
-
2719
- status = RunCompactionWithProgressTracking(
2720
- compaction_progress, compaction_progress_writer_2.get(),
2721
- {} /* snapshots */, stats);
2722
-
2723
- ASSERT_OK(status);
2724
-
2725
- if (cancelled_past_mid_point) {
2726
- HistogramData resumed_compaction_stats;
2727
- stats->histogramData(FILE_WRITE_COMPACTION_MICROS,
2728
- &resumed_compaction_stats);
2729
- ASSERT_GT(cancelled_compaction_stats.count,
2730
- resumed_compaction_stats.count);
2731
- }
2732
- }
2733
- };
2734
-
2735
- TEST_F(ResumableCompactionJobTest, BasicProgressPersistence) {
2736
- NewDB();
2737
-
2738
- auto file1 = mock::MakeMockFile({
2739
- {KeyStr("a", 1U, kTypeValue), "val1"},
2740
- {KeyStr("b", 2U, kTypeValue), "val2"},
2741
- });
2742
- AddMockFile(file1);
2743
-
2744
- auto file2 = mock::MakeMockFile({
2745
- {KeyStr("c", 3U, kTypeValue), "val3"},
2746
- {KeyStr("d", 4U, kTypeValue), "val4"},
2747
- });
2748
- AddMockFile(file2);
2749
-
2750
- SetLastSequence(4U);
2751
-
2752
- std::string compaction_progress_file =
2753
- CompactionProgressFileName(progress_dir_, 123);
2754
-
2755
- std::unique_ptr<log::Writer> compaction_progress_writer =
2756
- CreateCompactionProgressWriter(compaction_progress_file);
2757
-
2758
- Status status = RunCompactionWithProgressTracking(
2759
- CompactionProgress(), compaction_progress_writer.get());
2760
-
2761
- ASSERT_OK(status);
2762
-
2763
- VerifyCompactionProgressPersisted(
2764
- compaction_progress_file, "d" /* next_user_key_to_compact */,
2765
- {"a", "b", "c", "d"} /* ordered_intput_keys */);
2766
- }
2767
-
2768
- TEST_F(ResumableCompactionJobTest, BasicProgressResume) {
2769
- NewDB();
2770
-
2771
- RunCancelAndResumeTest(
2772
- {{KeyStr("a", 1U, kTypeValue), "val1"},
2773
- {KeyStr("b", 2U, kTypeValue), "val2"}} /* input_file_1 */,
2774
- {{KeyStr("bb", 3U, kTypeValue), "val3"},
2775
- {KeyStr(kCancelBeforeThisKey, 4U, kTypeValue),
2776
- "val4"}} /* input_file_2 */,
2777
- 4U /* last_sequence */, {} /* snapshots */,
2778
- kCancelBeforeThisKey /* expected_next_key_to_compact */,
2779
- {"a", "b", "bb", kCancelBeforeThisKey} /* expected_input_keys */,
2780
- true /* cancelled_past_mid_point */);
2781
- }
2782
-
2783
- TEST_F(ResumableCompactionJobTest, NoProgressResumeOnSameKey) {
2784
- NewDB();
2785
-
2786
- // `cancel_before_seqno` is set to 0U to force cancellation after
2787
- // `kCancelBeforeThisKey@1` instead of `kCancelBeforeThisKey@2`.
2788
- // The seqno is 0 because `kCancelBeforeThisKey@1` will have its sequence
2789
- // number zeroed during compaction while `kCancelBeforeThisKey@2` won't be
2790
- cancel_before_seqno = 0U;
2791
- RunCancelAndResumeTest(
2792
- {{KeyStr(kCancelBeforeThisKey, 1U, kTypeValue),
2793
- "val1"}} /* input_file_1 */,
2794
- {{KeyStr(kCancelBeforeThisKey, 2U, kTypeValue), "val11"},
2795
- {KeyStr("d", 3U, kTypeValue), "val2"}} /* input_file_2 */,
2796
- 3U /* last_sequence */, {1U} /* snapshots */,
2797
- "" /* expected_next_key_to_compact */,
2798
- {kCancelBeforeThisKey, kCancelBeforeThisKey,
2799
- "d"} /* expected_input_keys */);
2800
- }
2801
-
2802
- TEST_F(ResumableCompactionJobTest, NoProgressResumeOnDeleteRange) {
2803
- NewDB();
2804
-
2805
- RunCancelAndResumeTest(
2806
- {{KeyStr("a", 1U, kTypeValue), "val1"},
2807
- {KeyStr("b", 2U, kTypeValue), "val2"},
2808
- {KeyStr(kCancelBeforeThisKey, 3U, kTypeValue),
2809
- "val3"}} /* input_file_1 */,
2810
- {{KeyStr(kCancelBeforeThisKey, 4U, kTypeRangeDeletion),
2811
- "range_deletion_end_key"},
2812
- {KeyStr("d", 5U, kTypeValue), "val4"}} /* input_file_2 */,
2813
- 5U /* last_sequence */, {3U} /* snapshots */,
2814
- "b" /* expected_next_key_to_compact */,
2815
- {"a", "b", kCancelBeforeThisKey, kCancelBeforeThisKey,
2816
- "d"} /* expected_input_keys */);
2817
- }
2818
-
2819
- TEST_F(ResumableCompactionJobTest, NoProgressResumeOnMerge) {
2820
- merge_op_ = MergeOperators::CreateStringAppendOperator();
2821
- NewDB();
2822
-
2823
- RunCancelAndResumeTest(
2824
- {{KeyStr("a", 1U, kTypeValue), "val1"},
2825
- {KeyStr("b", 2U, kTypeValue), "val2"}} /* input_file_1 */,
2826
- {{KeyStr("bb", 3U, kTypeValue), "val3"},
2827
- {KeyStr(kCancelBeforeThisKey, 4U, kTypeMerge),
2828
- "val4"}} /* input_file_2 */,
2829
- 4U /* last_sequence */, {} /* snapshots */,
2830
- "bb" /* expected_next_key_to_compact */,
2831
- {"a", "b", "bb", kCancelBeforeThisKey} /* expected_input_keys */);
2832
- }
2833
-
2834
- TEST_F(ResumableCompactionJobTest, NoProgressResumeOnSingleDelete) {
2835
- NewDB();
2836
-
2837
- RunCancelAndResumeTest(
2838
- {{KeyStr("a", 1U, kTypeValue), "val1"},
2839
- {KeyStr("b", 2U, kTypeValue), "val2"},
2840
- {KeyStr(kCancelBeforeThisKey, 3U, kTypeValue),
2841
- "val3"}} /* input_file_1 */,
2842
- {{KeyStr(kCancelBeforeThisKey, 4U, kTypeSingleDeletion), ""},
2843
- {KeyStr("d", 5U, kTypeValue), "val4"}} /* input_file_2 */,
2844
- 5U /* last_sequence */, {3U} /* snapshots */,
2845
- "b" /* expected_next_key_to_compact */,
2846
- {"a", "b", kCancelBeforeThisKey, kCancelBeforeThisKey,
2847
- "d"} /* expected_input_keys */);
2848
- }
2849
-
2850
- TEST_F(ResumableCompactionJobTest, NoProgressResumeOnDeletionAtBottom) {
2851
- NewDB();
2852
-
2853
- RunCancelAndResumeTest(
2854
- {{KeyStr("a", 1U, kTypeValue), "val1"},
2855
- {KeyStr("b", 2U, kTypeValue), "val2"},
2856
- {KeyStr(kCancelBeforeThisKey, 3U, kTypeValue),
2857
- "val3"}} /* input_file_1 */,
2858
- {{KeyStr(kCancelBeforeThisKey, 4U, kTypeDeletion), ""},
2859
- {KeyStr("d", 5U, kTypeValue), "val4"}} /* input_file_2 */,
2860
- 5U /* last_sequence */, {3U} /* snapshots */,
2861
- "b" /* expected_next_key_to_compact */,
2862
- {"a", "b", kCancelBeforeThisKey, kCancelBeforeThisKey,
2863
- "d"} /* expected_input_keys */);
2864
- }
2865
2412
  } // namespace ROCKSDB_NAMESPACE
2866
2413
 
2867
2414
  int main(int argc, char** argv) {
@@ -49,8 +49,10 @@ Status CompactionOutputs::Finish(
49
49
  meta->fd.file_size = current_bytes;
50
50
  meta->tail_size = builder_->GetTailSize();
51
51
  meta->marked_for_compaction = builder_->NeedCompact();
52
- meta->user_defined_timestamps_persisted = static_cast<bool>(
53
- builder_->GetTableProperties().user_defined_timestamps_persisted);
52
+ const TableProperties& tp = builder_->GetTableProperties();
53
+ meta->user_defined_timestamps_persisted =
54
+ static_cast<bool>(tp.user_defined_timestamps_persisted);
55
+ ExtractTimestampFromTableProperties(tp, meta);
54
56
  }
55
57
  current_output().finished = true;
56
58
  stats_.bytes_written += current_bytes;
@@ -84,6 +84,19 @@ class CompactionOutputs {
84
84
 
85
85
  bool HasBlobFileAdditions() const { return !blob_file_additions_.empty(); }
86
86
 
87
+ // Get all file paths (SST and blob) created during compaction.
88
+ const std::vector<std::string>& GetOutputFilePaths() const {
89
+ return output_file_paths_;
90
+ }
91
+
92
+ std::vector<std::string>* GetOutputFilePathsPtr() {
93
+ return &output_file_paths_;
94
+ }
95
+
96
+ void AddOutputFilePath(const std::string& path) {
97
+ output_file_paths_.push_back(path);
98
+ }
99
+
87
100
  BlobGarbageMeter* CreateBlobGarbageMeter() {
88
101
  assert(!is_proximal_level_);
89
102
  blob_garbage_meter_ = std::make_unique<BlobGarbageMeter>();
@@ -321,6 +334,12 @@ class CompactionOutputs {
321
334
  std::vector<BlobFileAddition> blob_file_additions_;
322
335
  std::unique_ptr<BlobGarbageMeter> blob_garbage_meter_;
323
336
 
337
+ // All file paths (SST and blob) created during compaction.
338
+ // Used for cleanup on abort - ensures orphan files are deleted even if
339
+ // they were removed from outputs_ or blob_file_additions_ (e.g., by
340
+ // RemoveLastEmptyOutput when file_size is 0 because builder was abandoned).
341
+ std::vector<std::string> output_file_paths_;
342
+
324
343
  // Per level's output stat
325
344
  InternalStats::CompactionStats stats_;
326
345
 
@@ -27,12 +27,68 @@
27
27
 
28
28
  namespace ROCKSDB_NAMESPACE {
29
29
 
30
- bool FindIntraL0Compaction(const std::vector<FileMetaData*>& level_files,
31
- size_t min_files_to_compact,
32
- uint64_t max_compact_bytes_per_del_file,
33
- uint64_t max_compaction_bytes,
34
- CompactionInputFiles* comp_inputs) {
35
- TEST_SYNC_POINT("FindIntraL0Compaction");
30
+ #ifndef NDEBUG
31
+ static void AssertCleanCut(const InternalKeyComparator* icmp,
32
+ VersionStorageInfo* vstorage,
33
+ CompactionInputFiles* inputs, int level,
34
+ Logger* logger) {
35
+ const std::vector<FileMetaData*>& level_files = vstorage->LevelFiles(level);
36
+ if (inputs->files.empty() || level_files.empty()) {
37
+ return;
38
+ }
39
+
40
+ const Comparator* ucmp = icmp->user_comparator();
41
+
42
+ // Find first and last input file indices in level
43
+ int first_input_idx = -1;
44
+ int last_input_idx = -1;
45
+ for (size_t i = 0; i < level_files.size(); i++) {
46
+ if (level_files[i] == inputs->files.front()) {
47
+ first_input_idx = static_cast<int>(i);
48
+ }
49
+ if (level_files[i] == inputs->files.back()) {
50
+ last_input_idx = static_cast<int>(i);
51
+ }
52
+ }
53
+
54
+ // Check file before first input
55
+ if (first_input_idx > 0) {
56
+ const FileMetaData* prev_file = level_files[first_input_idx - 1];
57
+ const FileMetaData* first_file = inputs->files.front();
58
+ int cmp = sstableKeyCompare(ucmp, prev_file->largest, first_file->smallest);
59
+ if (cmp == 0) {
60
+ ROCKS_LOG_ERROR(logger,
61
+ "Clean cut violated: L%d unselected file %" PRIu64
62
+ " adjacent to first selected file %" PRIu64,
63
+ level, prev_file->fd.GetNumber(),
64
+ first_file->fd.GetNumber());
65
+ assert(false);
66
+ }
67
+ }
68
+
69
+ // Check file after last input
70
+ if (last_input_idx >= 0 &&
71
+ static_cast<size_t>(last_input_idx) < level_files.size() - 1) {
72
+ const FileMetaData* last_file = inputs->files.back();
73
+ const FileMetaData* next_file = level_files[last_input_idx + 1];
74
+ int cmp = sstableKeyCompare(ucmp, last_file->largest, next_file->smallest);
75
+ if (cmp == 0) {
76
+ ROCKS_LOG_ERROR(logger,
77
+ "Clean cut violated: L%d unselected file %" PRIu64
78
+ " adjacent to last selected file %" PRIu64,
79
+ level, next_file->fd.GetNumber(),
80
+ last_file->fd.GetNumber());
81
+ assert(false);
82
+ }
83
+ }
84
+ }
85
+ #endif // NDEBUG
86
+
87
+ bool PickCostBasedIntraL0Compaction(
88
+ const std::vector<FileMetaData*>& level_files, size_t min_files_to_compact,
89
+ uint64_t max_compact_bytes_per_del_file, uint64_t max_compaction_bytes,
90
+ CompactionInputFiles* comp_inputs) {
91
+ TEST_SYNC_POINT("PickCostBasedIntraL0Compaction");
36
92
 
37
93
  size_t start = 0;
38
94
 
@@ -250,6 +306,10 @@ bool CompactionPicker::ExpandInputsToCleanCut(const std::string& /*cf_name*/,
250
306
  // inputs. thus, inputs should be non-empty here
251
307
  assert(!inputs->empty());
252
308
 
309
+ #ifndef NDEBUG
310
+ AssertCleanCut(icmp_, vstorage, inputs, level, ioptions_.logger);
311
+ #endif // NDEBUG
312
+
253
313
  // If, after the expansion, there are files that are already under
254
314
  // compaction, then we must drop/cancel this compaction.
255
315
  if (AreFilesInCompaction(inputs->files)) {
@@ -611,7 +671,8 @@ Compaction* CompactionPicker::PickCompactionForCompactRange(
611
671
  int input_level, int output_level,
612
672
  const CompactRangeOptions& compact_range_options, const InternalKey* begin,
613
673
  const InternalKey* end, InternalKey** compaction_end, bool* manual_conflict,
614
- uint64_t max_file_num_to_ignore, const std::string& trim_ts) {
674
+ uint64_t max_file_num_to_ignore, const std::string& trim_ts,
675
+ const std::string& full_history_ts_low) {
615
676
  // CompactionPickerFIFO has its own implementation of compact range
616
677
  assert(ioptions_.compaction_style != kCompactionStyleFIFO);
617
678
 
@@ -690,7 +751,8 @@ Compaction* CompactionPicker::PickCompactionForCompactRange(
690
751
  compact_range_options.blob_garbage_collection_age_cutoff);
691
752
 
692
753
  RegisterCompaction(c);
693
- vstorage->ComputeCompactionScore(ioptions_, mutable_cf_options);
754
+ vstorage->ComputeCompactionScore(ioptions_, mutable_cf_options,
755
+ full_history_ts_low);
694
756
  return c;
695
757
  }
696
758
 
@@ -887,7 +949,8 @@ Compaction* CompactionPicker::PickCompactionForCompactRange(
887
949
  // takes running compactions into account (by skipping files that are already
888
950
  // being compacted). Since we just changed compaction score, we recalculate it
889
951
  // here
890
- vstorage->ComputeCompactionScore(ioptions_, mutable_cf_options);
952
+ vstorage->ComputeCompactionScore(ioptions_, mutable_cf_options,
953
+ full_history_ts_low);
891
954
 
892
955
  return compaction;
893
956
  }
@@ -65,7 +65,8 @@ class CompactionPicker {
65
65
  const MutableDBOptions& mutable_db_options,
66
66
  const std::vector<SequenceNumber>& existing_snapshots,
67
67
  const SnapshotChecker* snapshot_checker, VersionStorageInfo* vstorage,
68
- LogBuffer* log_buffer, bool require_max_output_level) = 0;
68
+ LogBuffer* log_buffer, const std::string& full_history_ts_low,
69
+ bool require_max_output_level = false) = 0;
69
70
 
70
71
  // The returned Compaction might not include the whole requested range.
71
72
  // In that case, compaction_end will be set to the next key that needs
@@ -82,7 +83,8 @@ class CompactionPicker {
82
83
  const CompactRangeOptions& compact_range_options,
83
84
  const InternalKey* begin, const InternalKey* end,
84
85
  InternalKey** compaction_end, bool* manual_conflict,
85
- uint64_t max_file_num_to_ignore, const std::string& trim_ts);
86
+ uint64_t max_file_num_to_ignore, const std::string& trim_ts,
87
+ const std::string& full_history_ts_low);
86
88
 
87
89
  // The maximum allowed output level. Default value is NumberLevels() - 1.
88
90
  virtual int MaxOutputLevel() const { return NumberLevels() - 1; }
@@ -284,7 +286,8 @@ class NullCompactionPicker : public CompactionPicker {
284
286
  const std::vector<SequenceNumber>& /*existing_snapshots*/,
285
287
  const SnapshotChecker* /*snapshot_checker*/,
286
288
  VersionStorageInfo* /*vstorage*/, LogBuffer* /* log_buffer */,
287
- bool /*require_max_output_level*/ = false) override {
289
+ const std::string& /*full_history_ts_low*/,
290
+ bool /*require_max_output_level*/) override {
288
291
  return nullptr;
289
292
  }
290
293
 
@@ -298,8 +301,8 @@ class NullCompactionPicker : public CompactionPicker {
298
301
  const CompactRangeOptions& /*compact_range_options*/,
299
302
  const InternalKey* /*begin*/, const InternalKey* /*end*/,
300
303
  InternalKey** /*compaction_end*/, bool* /*manual_conflict*/,
301
- uint64_t /*max_file_num_to_ignore*/,
302
- const std::string& /*trim_ts*/) override {
304
+ uint64_t /*max_file_num_to_ignore*/, const std::string& /*trim_ts*/,
305
+ const std::string& /*full_history_ts_low*/) override {
303
306
  return nullptr;
304
307
  }
305
308
 
@@ -325,11 +328,10 @@ class NullCompactionPicker : public CompactionPicker {
325
328
  // files. Cannot be nullptr.
326
329
  //
327
330
  // @return true iff compaction was found.
328
- bool FindIntraL0Compaction(const std::vector<FileMetaData*>& level_files,
329
- size_t min_files_to_compact,
330
- uint64_t max_compact_bytes_per_del_file,
331
- uint64_t max_compaction_bytes,
332
- CompactionInputFiles* comp_inputs);
331
+ bool PickCostBasedIntraL0Compaction(
332
+ const std::vector<FileMetaData*>& level_files, size_t min_files_to_compact,
333
+ uint64_t max_compact_bytes_per_del_file, uint64_t max_compaction_bytes,
334
+ CompactionInputFiles* comp_inputs);
333
335
 
334
336
  CompressionType GetCompressionType(const VersionStorageInfo* vstorage,
335
337
  const MutableCFOptions& mutable_cf_options,