@nxtedition/rocksdb 7.1.30 → 7.1.32

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 (381) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +2 -2
  2. package/deps/rocksdb/rocksdb/cache/cache_test.cc +15 -23
  3. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +0 -1
  4. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +4 -5
  5. package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -1
  6. package/deps/rocksdb/rocksdb/crash_test.mk +1 -1
  7. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +15 -0
  8. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +1 -1
  9. package/deps/rocksdb/rocksdb/db/column_family.cc +4 -1
  10. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +78 -6
  11. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +32 -6
  12. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -8
  13. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  14. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +47 -8
  15. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -3
  16. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +105 -166
  17. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +3 -4
  18. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +46 -15
  19. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +47 -26
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +17 -10
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +11 -5
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +12 -6
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -2
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +337 -103
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +43 -5
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -2
  27. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +524 -1
  28. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +164 -0
  29. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +6 -6
  30. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
  31. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5 -7
  32. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +11 -1
  33. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +4 -4
  34. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +1 -0
  35. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +2 -3
  36. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
  38. package/deps/rocksdb/rocksdb/db/memtable.cc +16 -23
  39. package/deps/rocksdb/rocksdb/db/merge_helper.cc +30 -0
  40. package/deps/rocksdb/rocksdb/db/merge_helper.h +9 -0
  41. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +29 -9
  42. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +10 -7
  43. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +12 -8
  44. package/deps/rocksdb/rocksdb/db/version_set.cc +11 -6
  45. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +142 -0
  46. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +59 -53
  47. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -2
  48. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
  49. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -3
  50. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +7 -4
  51. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +0 -2
  52. package/deps/rocksdb/rocksdb/env/env.cc +16 -19
  53. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -1
  54. package/deps/rocksdb/rocksdb/env/env_chroot.cc +20 -20
  55. package/deps/rocksdb/rocksdb/env/env_encryption.cc +62 -60
  56. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  57. package/deps/rocksdb/rocksdb/env/env_test.cc +179 -176
  58. package/deps/rocksdb/rocksdb/env/file_system.cc +3 -4
  59. package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -2
  60. package/deps/rocksdb/rocksdb/env/io_posix.h +1 -2
  61. package/deps/rocksdb/rocksdb/env/mock_env.h +1 -0
  62. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +4 -4
  63. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +6 -5
  64. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +2 -5
  65. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +6 -7
  66. package/deps/rocksdb/rocksdb/file/file_util.cc +1 -1
  67. package/deps/rocksdb/rocksdb/file/filename.cc +16 -17
  68. package/deps/rocksdb/rocksdb/file/filename.h +4 -5
  69. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +492 -496
  70. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +1 -1
  71. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +1 -3
  72. package/deps/rocksdb/rocksdb/file/read_write_util.cc +1 -0
  73. package/deps/rocksdb/rocksdb/file/read_write_util.h +1 -0
  74. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +6 -8
  75. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +1 -2
  76. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +4 -4
  77. package/deps/rocksdb/rocksdb/include/rocksdb/block_cache_trace_writer.h +4 -4
  78. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +166 -167
  79. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +1 -0
  80. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +0 -1
  81. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +12 -12
  82. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +2 -0
  83. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +1 -0
  84. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +1 -0
  85. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -1
  86. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +1 -0
  87. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +1 -0
  88. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +0 -4
  89. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -3
  90. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +1 -1
  91. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -0
  92. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +1 -0
  93. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +1 -0
  94. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +1 -0
  95. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +1 -0
  96. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +4 -4
  97. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -0
  98. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -4
  99. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +1 -1
  100. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +2 -2
  101. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  102. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +3 -3
  103. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +3 -7
  104. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +20 -23
  105. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
  106. package/deps/rocksdb/rocksdb/logging/event_logger.cc +1 -3
  107. package/deps/rocksdb/rocksdb/logging/event_logger.h +4 -5
  108. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +2 -1
  109. package/deps/rocksdb/rocksdb/logging/log_buffer.cc +2 -3
  110. package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -2
  111. package/deps/rocksdb/rocksdb/logging/logging.h +3 -3
  112. package/deps/rocksdb/rocksdb/memory/allocator.h +1 -0
  113. package/deps/rocksdb/rocksdb/memory/arena_test.cc +1 -1
  114. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +2 -0
  115. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -0
  116. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -0
  117. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +17 -20
  118. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +13 -15
  119. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +11 -10
  120. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +3 -3
  121. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +2 -2
  122. package/deps/rocksdb/rocksdb/memtable/skiplist.h +30 -28
  123. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +4 -6
  124. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +73 -70
  125. package/deps/rocksdb/rocksdb/memtable/stl_wrappers.h +1 -1
  126. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +21 -23
  127. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
  128. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +24 -38
  129. package/deps/rocksdb/rocksdb/monitoring/histogram.h +10 -17
  130. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +19 -19
  131. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +22 -30
  132. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +4 -6
  133. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -0
  134. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +4 -12
  135. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +2 -3
  136. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
  137. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +12 -14
  138. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +2 -3
  139. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -1
  140. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -3
  141. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +1 -0
  142. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
  143. package/deps/rocksdb/rocksdb/monitoring/statistics.h +7 -7
  144. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +12 -22
  145. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +7 -10
  146. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  147. package/deps/rocksdb/rocksdb/port/lang.h +3 -1
  148. package/deps/rocksdb/rocksdb/port/likely.h +2 -2
  149. package/deps/rocksdb/rocksdb/port/mmap.h +2 -2
  150. package/deps/rocksdb/rocksdb/port/port_dirent.h +2 -2
  151. package/deps/rocksdb/rocksdb/port/port_posix.cc +32 -27
  152. package/deps/rocksdb/rocksdb/port/port_posix.h +31 -30
  153. package/deps/rocksdb/rocksdb/port/stack_trace.cc +1 -1
  154. package/deps/rocksdb/rocksdb/port/sys_time.h +1 -1
  155. package/deps/rocksdb/rocksdb/port/win/io_win.h +6 -7
  156. package/deps/rocksdb/rocksdb/port/win/port_win.h +12 -20
  157. package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +5 -4
  158. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -5
  159. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -4
  160. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +30 -49
  161. package/deps/rocksdb/rocksdb/port/win/win_thread.h +5 -5
  162. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +51 -62
  163. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +2 -2
  164. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +4 -3
  165. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -0
  166. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -2
  167. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +2 -1
  168. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +0 -1
  169. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -4
  170. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -1
  171. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +0 -1
  172. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +2 -0
  173. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +2 -1
  174. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -30
  175. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.cc +2 -1
  176. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
  177. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +3 -3
  178. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -0
  179. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +4 -5
  180. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -3
  181. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -2
  182. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +1 -0
  183. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +0 -1
  184. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +1 -1
  185. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +0 -1
  186. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -6
  187. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +0 -1
  188. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +1 -0
  189. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -6
  190. package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -2
  191. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +90 -80
  192. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +5 -4
  193. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +63 -69
  194. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +2 -1
  195. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +58 -57
  196. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +3 -3
  197. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +35 -30
  198. package/deps/rocksdb/rocksdb/table/get_context.cc +16 -10
  199. package/deps/rocksdb/rocksdb/table/iter_heap.h +2 -0
  200. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -1
  201. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +1 -3
  202. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +31 -16
  203. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +6 -6
  204. package/deps/rocksdb/rocksdb/table/multiget_context.h +5 -6
  205. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +1 -0
  206. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.cc +1 -1
  207. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +7 -10
  208. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +3 -1
  209. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +2 -2
  210. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +4 -3
  211. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +2 -2
  212. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -0
  213. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +10 -21
  214. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +14 -12
  215. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +2 -5
  216. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -3
  217. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +0 -6
  218. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +0 -33
  219. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -6
  220. package/deps/rocksdb/rocksdb/table/table_properties.cc +24 -37
  221. package/deps/rocksdb/rocksdb/table/table_reader.h +3 -2
  222. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +9 -8
  223. package/deps/rocksdb/rocksdb/table/table_test.cc +77 -82
  224. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +1 -0
  225. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
  226. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +8 -18
  227. package/deps/rocksdb/rocksdb/test_util/sync_point.h +2 -2
  228. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +4 -3
  229. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +13 -18
  230. package/deps/rocksdb/rocksdb/test_util/testharness.cc +1 -2
  231. package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -7
  232. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +3 -4
  233. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +1 -1
  234. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +1 -0
  235. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -7
  236. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +3 -2
  237. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +296 -314
  238. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +6 -6
  239. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +2 -1
  240. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +57 -64
  241. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +6 -5
  242. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +2 -2
  243. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  244. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  245. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +1 -2
  246. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +10 -10
  247. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -1
  248. package/deps/rocksdb/rocksdb/tools/write_stress.cc +6 -3
  249. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +12 -31
  250. package/deps/rocksdb/rocksdb/util/autovector.h +3 -6
  251. package/deps/rocksdb/rocksdb/util/autovector_test.cc +12 -12
  252. package/deps/rocksdb/rocksdb/util/bloom_test.cc +8 -12
  253. package/deps/rocksdb/rocksdb/util/coding.cc +1 -0
  254. package/deps/rocksdb/rocksdb/util/coding.h +17 -15
  255. package/deps/rocksdb/rocksdb/util/coding_test.cc +14 -15
  256. package/deps/rocksdb/rocksdb/util/comparator.cc +4 -4
  257. package/deps/rocksdb/rocksdb/util/compression.h +6 -3
  258. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +2 -2
  259. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.cc +5 -8
  260. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +1 -1
  261. package/deps/rocksdb/rocksdb/util/crc32c.cc +202 -297
  262. package/deps/rocksdb/rocksdb/util/crc32c.h +2 -3
  263. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +2 -0
  264. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +39 -54
  265. package/deps/rocksdb/rocksdb/util/defer.h +2 -1
  266. package/deps/rocksdb/rocksdb/util/defer_test.cc +2 -1
  267. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +2 -1
  268. package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +1 -1
  269. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  270. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -1
  271. package/deps/rocksdb/rocksdb/util/filelock_test.cc +24 -29
  272. package/deps/rocksdb/rocksdb/util/filter_bench.cc +4 -4
  273. package/deps/rocksdb/rocksdb/util/hash_test.cc +2 -2
  274. package/deps/rocksdb/rocksdb/util/heap.h +5 -4
  275. package/deps/rocksdb/rocksdb/util/heap_test.cc +15 -25
  276. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  277. package/deps/rocksdb/rocksdb/util/murmurhash.cc +7 -2
  278. package/deps/rocksdb/rocksdb/util/murmurhash.h +4 -3
  279. package/deps/rocksdb/rocksdb/util/mutexlock.h +5 -11
  280. package/deps/rocksdb/rocksdb/util/random.cc +1 -0
  281. package/deps/rocksdb/rocksdb/util/random.h +2 -4
  282. package/deps/rocksdb/rocksdb/util/random_test.cc +2 -1
  283. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +4 -3
  284. package/deps/rocksdb/rocksdb/util/slice.cc +1 -1
  285. package/deps/rocksdb/rocksdb/util/slice_test.cc +1 -2
  286. package/deps/rocksdb/rocksdb/util/status.cc +2 -0
  287. package/deps/rocksdb/rocksdb/util/string_util.cc +2 -0
  288. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +64 -76
  289. package/deps/rocksdb/rocksdb/util/thread_local.cc +18 -32
  290. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -3
  291. package/deps/rocksdb/rocksdb/util/thread_operation.h +34 -43
  292. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +54 -73
  293. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +18 -18
  294. package/deps/rocksdb/rocksdb/util/timer.h +4 -9
  295. package/deps/rocksdb/rocksdb/util/timer_queue.h +1 -0
  296. package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +1 -0
  297. package/deps/rocksdb/rocksdb/util/xxhash.cc +1 -2
  298. package/deps/rocksdb/rocksdb/util/xxhash.h +7 -4
  299. package/deps/rocksdb/rocksdb/util/xxph3.h +3 -1
  300. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +16 -24
  301. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +1 -1
  302. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +106 -104
  303. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +3 -4
  304. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +6 -6
  305. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +1 -2
  306. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +3 -4
  307. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -1
  308. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +11 -15
  309. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +1 -2
  310. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +3 -3
  311. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +12 -12
  312. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +56 -55
  313. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +91 -74
  314. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +17 -34
  315. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +21 -45
  316. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +74 -97
  317. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +17 -18
  318. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -4
  319. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +19 -19
  320. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +19 -18
  321. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +7 -10
  322. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +3 -4
  323. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +2 -2
  324. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +10 -15
  325. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +1 -0
  327. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +5 -3
  328. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -2
  329. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +4 -5
  330. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -7
  331. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -13
  332. package/deps/rocksdb/rocksdb/utilities/leveldb_options/leveldb_options.cc +1 -0
  333. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.cc +7 -9
  334. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +4 -5
  335. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +4 -3
  336. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +1 -1
  337. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +3 -3
  338. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +2 -4
  339. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +2 -2
  340. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +39 -50
  341. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +2 -2
  342. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +4 -3
  343. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +2 -2
  344. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +5 -7
  345. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +5 -4
  346. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  347. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +3 -6
  348. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +1 -1
  349. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +2 -2
  350. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -1
  351. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +1 -0
  352. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -1
  353. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +18 -13
  355. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +1 -3
  356. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +15 -14
  357. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +14 -12
  358. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -2
  359. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +4 -7
  360. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1 -2
  361. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  362. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +1 -1
  363. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -1
  364. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +3 -2
  365. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +1 -2
  366. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +3 -2
  367. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +5 -5
  368. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -4
  369. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -2
  370. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +5 -4
  371. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -1
  372. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +1 -0
  373. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +3 -4
  374. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +2 -6
  375. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +80 -79
  376. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -3
  377. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +9 -17
  378. package/package.json +1 -1
  379. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  380. package/prebuilds/darwin-x64/node.napi.node +0 -0
  381. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -51,15 +51,24 @@ class CompactionPicker {
51
51
  virtual ~CompactionPicker();
52
52
 
53
53
  // Pick level and inputs for a new compaction.
54
+ //
55
+ // `earliest_mem_seqno` is the earliest seqno of unflushed memtables.
56
+ // It is needed to compare with compaction input SST files' largest seqnos
57
+ // in order to exclude those of seqnos potentially overlap with memtables'
58
+ // seqnos when doing compaction to L0. This will avoid creating a SST files in
59
+ // L0 newer than a unflushed memtable. Such SST file can exist in the first
60
+ // place when it's ingested or resulted from compaction involving files
61
+ // ingested.
62
+ //
54
63
  // Returns nullptr if there is no compaction to be done.
55
64
  // Otherwise returns a pointer to a heap-allocated object that
56
65
  // describes the compaction. Caller should delete the result.
57
66
  virtual Compaction* PickCompaction(
58
67
  const std::string& cf_name, const MutableCFOptions& mutable_cf_options,
59
68
  const MutableDBOptions& mutable_db_options, VersionStorageInfo* vstorage,
60
- LogBuffer* log_buffer,
61
- SequenceNumber earliest_memtable_seqno = kMaxSequenceNumber) = 0;
69
+ LogBuffer* log_buffer, const SequenceNumber earliest_mem_seqno) = 0;
62
70
 
71
+ // `earliest_mem_seqno`: see PickCompaction() API
63
72
  // Return a compaction object for compacting the range [begin,end] in
64
73
  // the specified level. Returns nullptr if there is nothing in that
65
74
  // level that overlaps the specified range. Caller should delete
@@ -78,7 +87,8 @@ class CompactionPicker {
78
87
  const CompactRangeOptions& compact_range_options,
79
88
  const InternalKey* begin, const InternalKey* end,
80
89
  InternalKey** compaction_end, bool* manual_conflict,
81
- uint64_t max_file_num_to_ignore, const std::string& trim_ts);
90
+ uint64_t max_file_num_to_ignore, const std::string& trim_ts,
91
+ const SequenceNumber earliest_mem_seqno);
82
92
 
83
93
  // The maximum allowed output level. Default value is NumberLevels() - 1.
84
94
  virtual int MaxOutputLevel() const { return NumberLevels() - 1; }
@@ -91,10 +101,18 @@ class CompactionPicker {
91
101
  // files. If it's not possible to conver an invalid input_files
92
102
  // into a valid one by adding more files, the function will return a
93
103
  // non-ok status with specific reason.
104
+ //
105
+ // Cases of returning non-ok status include but not limited to:
106
+ // - When output_level == 0 and input_files contains sst files
107
+ // of largest seqno greater than `earliest_mem_seqno`. This will
108
+ // avoid creating a SST files in L0 newer than a unflushed memtable.
109
+ // Such SST file can exist in the first place when it's ingested or
110
+ // resulted from compaction involving files ingested.
94
111
  #ifndef ROCKSDB_LITE
95
- Status SanitizeCompactionInputFiles(std::unordered_set<uint64_t>* input_files,
96
- const ColumnFamilyMetaData& cf_meta,
97
- const int output_level) const;
112
+ Status SanitizeCompactionInputFiles(
113
+ std::unordered_set<uint64_t>* input_files,
114
+ const ColumnFamilyMetaData& cf_meta, const int output_level,
115
+ const SequenceNumber earliest_mem_seqno) const;
98
116
  #endif // ROCKSDB_LITE
99
117
 
100
118
  // Free up the files that participated in a compaction
@@ -182,7 +200,8 @@ class CompactionPicker {
182
200
  // Returns true if the key range that `inputs` files cover overlap with the
183
201
  // key range of a currently running compaction.
184
202
  bool FilesRangeOverlapWithCompaction(
185
- const std::vector<CompactionInputFiles>& inputs, int level) const;
203
+ const std::vector<CompactionInputFiles>& inputs, int level,
204
+ int penultimate_level) const;
186
205
 
187
206
  bool SetupOtherInputs(const std::string& cf_name,
188
207
  const MutableCFOptions& mutable_cf_options,
@@ -229,7 +248,8 @@ class CompactionPicker {
229
248
  #ifndef ROCKSDB_LITE
230
249
  virtual Status SanitizeCompactionInputFilesForAllLevels(
231
250
  std::unordered_set<uint64_t>* input_files,
232
- const ColumnFamilyMetaData& cf_meta, const int output_level) const;
251
+ const ColumnFamilyMetaData& cf_meta, const int output_level,
252
+ const SequenceNumber earliest_mem_seqno) const;
233
253
  #endif // ROCKSDB_LITE
234
254
 
235
255
  // Keeps track of all compactions that are running on Level0.
@@ -259,23 +279,22 @@ class NullCompactionPicker : public CompactionPicker {
259
279
  const MutableCFOptions& /*mutable_cf_options*/,
260
280
  const MutableDBOptions& /*mutable_db_options*/,
261
281
  VersionStorageInfo* /*vstorage*/, LogBuffer* /* log_buffer */,
262
- SequenceNumber /* earliest_memtable_seqno */) override {
282
+ const SequenceNumber /* earliest_mem_seqno */) override {
263
283
  return nullptr;
264
284
  }
265
285
 
266
286
  // Always return "nullptr"
267
- Compaction* CompactRange(const std::string& /*cf_name*/,
268
- const MutableCFOptions& /*mutable_cf_options*/,
269
- const MutableDBOptions& /*mutable_db_options*/,
270
- VersionStorageInfo* /*vstorage*/,
271
- int /*input_level*/, int /*output_level*/,
272
- const CompactRangeOptions& /*compact_range_options*/,
273
- const InternalKey* /*begin*/,
274
- const InternalKey* /*end*/,
275
- InternalKey** /*compaction_end*/,
276
- bool* /*manual_conflict*/,
277
- uint64_t /*max_file_num_to_ignore*/,
278
- const std::string& /*trim_ts*/) override {
287
+ Compaction* CompactRange(
288
+ const std::string& /*cf_name*/,
289
+ const MutableCFOptions& /*mutable_cf_options*/,
290
+ const MutableDBOptions& /*mutable_db_options*/,
291
+ VersionStorageInfo* /*vstorage*/, int /*input_level*/,
292
+ int /*output_level*/,
293
+ const CompactRangeOptions& /*compact_range_options*/,
294
+ const InternalKey* /*begin*/, const InternalKey* /*end*/,
295
+ InternalKey** /*compaction_end*/, bool* /*manual_conflict*/,
296
+ uint64_t /*max_file_num_to_ignore*/, const std::string& /*trim_ts*/,
297
+ const SequenceNumber /* earliest_mem_seqno */) override {
279
298
  return nullptr;
280
299
  }
281
300
 
@@ -302,12 +321,14 @@ class NullCompactionPicker : public CompactionPicker {
302
321
  // initialized with corresponding input
303
322
  // files. Cannot be nullptr.
304
323
  //
324
+ // @param earliest_mem_seqno See PickCompaction() API
305
325
  // @return true iff compaction was found.
306
- bool FindIntraL0Compaction(
307
- const std::vector<FileMetaData*>& level_files, size_t min_files_to_compact,
308
- uint64_t max_compact_bytes_per_del_file, uint64_t max_compaction_bytes,
309
- CompactionInputFiles* comp_inputs,
310
- SequenceNumber earliest_mem_seqno = kMaxSequenceNumber);
326
+ bool FindIntraL0Compaction(const std::vector<FileMetaData*>& level_files,
327
+ size_t min_files_to_compact,
328
+ uint64_t max_compact_bytes_per_del_file,
329
+ uint64_t max_compaction_bytes,
330
+ CompactionInputFiles* comp_inputs,
331
+ const SequenceNumber earliest_mem_seqno);
311
332
 
312
333
  CompressionType GetCompressionType(const VersionStorageInfo* vstorage,
313
334
  const MutableCFOptions& mutable_cf_options,
@@ -139,7 +139,7 @@ Compaction* FIFOCompactionPicker::PickTTLCompaction(
139
139
  Compaction* FIFOCompactionPicker::PickSizeCompaction(
140
140
  const std::string& cf_name, const MutableCFOptions& mutable_cf_options,
141
141
  const MutableDBOptions& mutable_db_options, VersionStorageInfo* vstorage,
142
- LogBuffer* log_buffer) {
142
+ LogBuffer* log_buffer, const SequenceNumber earliest_mem_seqno) {
143
143
  // compute the total size and identify the last non-empty level
144
144
  int last_level = 0;
145
145
  uint64_t total_size = 0;
@@ -176,7 +176,8 @@ Compaction* FIFOCompactionPicker::PickSizeCompaction(
176
176
  .level0_file_num_compaction_trigger /* min_files_to_compact */
177
177
  ,
178
178
  max_compact_bytes_per_del_file,
179
- mutable_cf_options.max_compaction_bytes, &comp_inputs)) {
179
+ mutable_cf_options.max_compaction_bytes, &comp_inputs,
180
+ earliest_mem_seqno)) {
180
181
  Compaction* c = new Compaction(
181
182
  vstorage, ioptions_, mutable_cf_options, mutable_db_options,
182
183
  {comp_inputs}, 0, 16 * 1024 * 1024 /* output file size limit */,
@@ -275,7 +276,8 @@ Compaction* FIFOCompactionPicker::PickSizeCompaction(
275
276
  Compaction* FIFOCompactionPicker::PickCompactionToWarm(
276
277
  const std::string& cf_name, const MutableCFOptions& mutable_cf_options,
277
278
  const MutableDBOptions& mutable_db_options, VersionStorageInfo* vstorage,
278
- LogBuffer* log_buffer) {
279
+ LogBuffer* log_buffer, const SequenceNumber earliest_mem_seqno) {
280
+ TEST_SYNC_POINT("PickCompactionToWarm");
279
281
  if (mutable_cf_options.compaction_options_fifo.age_for_warm == 0) {
280
282
  return nullptr;
281
283
  }
@@ -299,6 +301,8 @@ Compaction* FIFOCompactionPicker::PickCompactionToWarm(
299
301
  cf_name.c_str(), status.ToString().c_str());
300
302
  return nullptr;
301
303
  }
304
+ TEST_SYNC_POINT_CALLBACK("PickCompactionToWarm::BeforeGetCurrentTime",
305
+ &_current_time);
302
306
  const uint64_t current_time = static_cast<uint64_t>(_current_time);
303
307
 
304
308
  if (!level0_compactions_in_progress_.empty()) {
@@ -345,7 +349,8 @@ Compaction* FIFOCompactionPicker::PickCompactionToWarm(
345
349
  // for warm tier.
346
350
  break;
347
351
  }
348
- if (prev_file != nullptr) {
352
+ if (prev_file != nullptr &&
353
+ prev_file->fd.largest_seqno <= earliest_mem_seqno) {
349
354
  compaction_size += prev_file->fd.GetFileSize();
350
355
  if (compaction_size > mutable_cf_options.max_compaction_bytes) {
351
356
  break;
@@ -389,7 +394,7 @@ Compaction* FIFOCompactionPicker::PickCompactionToWarm(
389
394
  Compaction* FIFOCompactionPicker::PickCompaction(
390
395
  const std::string& cf_name, const MutableCFOptions& mutable_cf_options,
391
396
  const MutableDBOptions& mutable_db_options, VersionStorageInfo* vstorage,
392
- LogBuffer* log_buffer, SequenceNumber /*earliest_memtable_seqno*/) {
397
+ LogBuffer* log_buffer, const SequenceNumber earliest_mem_seqno) {
393
398
  Compaction* c = nullptr;
394
399
  if (mutable_cf_options.ttl > 0) {
395
400
  c = PickTTLCompaction(cf_name, mutable_cf_options, mutable_db_options,
@@ -397,11 +402,11 @@ Compaction* FIFOCompactionPicker::PickCompaction(
397
402
  }
398
403
  if (c == nullptr) {
399
404
  c = PickSizeCompaction(cf_name, mutable_cf_options, mutable_db_options,
400
- vstorage, log_buffer);
405
+ vstorage, log_buffer, earliest_mem_seqno);
401
406
  }
402
407
  if (c == nullptr) {
403
408
  c = PickCompactionToWarm(cf_name, mutable_cf_options, mutable_db_options,
404
- vstorage, log_buffer);
409
+ vstorage, log_buffer, earliest_mem_seqno);
405
410
  }
406
411
  RegisterCompaction(c);
407
412
  return c;
@@ -414,7 +419,8 @@ Compaction* FIFOCompactionPicker::CompactRange(
414
419
  const CompactRangeOptions& /*compact_range_options*/,
415
420
  const InternalKey* /*begin*/, const InternalKey* /*end*/,
416
421
  InternalKey** compaction_end, bool* /*manual_conflict*/,
417
- uint64_t /*max_file_num_to_ignore*/, const std::string& /*trim_ts*/) {
422
+ uint64_t /*max_file_num_to_ignore*/, const std::string& /*trim_ts*/,
423
+ const SequenceNumber earliest_mem_seqno) {
418
424
  #ifdef NDEBUG
419
425
  (void)input_level;
420
426
  (void)output_level;
@@ -423,8 +429,9 @@ Compaction* FIFOCompactionPicker::CompactRange(
423
429
  assert(output_level == 0);
424
430
  *compaction_end = nullptr;
425
431
  LogBuffer log_buffer(InfoLogLevel::INFO_LEVEL, ioptions_.logger);
426
- Compaction* c = PickCompaction(cf_name, mutable_cf_options,
427
- mutable_db_options, vstorage, &log_buffer);
432
+ Compaction* c =
433
+ PickCompaction(cf_name, mutable_cf_options, mutable_db_options, vstorage,
434
+ &log_buffer, earliest_mem_seqno);
428
435
  log_buffer.FlushBufferToLog();
429
436
  return c;
430
437
  }
@@ -22,9 +22,12 @@ class FIFOCompactionPicker : public CompactionPicker {
22
22
  virtual Compaction* PickCompaction(
23
23
  const std::string& cf_name, const MutableCFOptions& mutable_cf_options,
24
24
  const MutableDBOptions& mutable_db_options, VersionStorageInfo* version,
25
- LogBuffer* log_buffer,
26
- SequenceNumber earliest_memtable_seqno = kMaxSequenceNumber) override;
25
+ LogBuffer* log_buffer, const SequenceNumber earliest_mem_seqno) override;
27
26
 
27
+ // `earliest_mem_seqno`: see PickCompaction() API for more. In FIFO's
28
+ // implementation of CompactRange(), different from others, we will not return
29
+ // `nullptr` right away when intput files of compaction to L0 has seqnos
30
+ // potentially overlapping with memtable's but exlucde those files.
28
31
  virtual Compaction* CompactRange(
29
32
  const std::string& cf_name, const MutableCFOptions& mutable_cf_options,
30
33
  const MutableDBOptions& mutable_db_options, VersionStorageInfo* vstorage,
@@ -32,7 +35,8 @@ class FIFOCompactionPicker : public CompactionPicker {
32
35
  const CompactRangeOptions& compact_range_options,
33
36
  const InternalKey* begin, const InternalKey* end,
34
37
  InternalKey** compaction_end, bool* manual_conflict,
35
- uint64_t max_file_num_to_ignore, const std::string& trim_ts) override;
38
+ uint64_t max_file_num_to_ignore, const std::string& trim_ts,
39
+ const SequenceNumber earliest_mem_seqno) override;
36
40
 
37
41
  // The maximum allowed output level. Always returns 0.
38
42
  virtual int MaxOutputLevel() const override { return 0; }
@@ -51,13 +55,15 @@ class FIFOCompactionPicker : public CompactionPicker {
51
55
  const MutableCFOptions& mutable_cf_options,
52
56
  const MutableDBOptions& mutable_db_options,
53
57
  VersionStorageInfo* version,
54
- LogBuffer* log_buffer);
58
+ LogBuffer* log_buffer,
59
+ SequenceNumber earliest_mem_seqno);
55
60
 
56
61
  Compaction* PickCompactionToWarm(const std::string& cf_name,
57
62
  const MutableCFOptions& mutable_cf_options,
58
63
  const MutableDBOptions& mutable_db_options,
59
64
  VersionStorageInfo* version,
60
- LogBuffer* log_buffer);
65
+ LogBuffer* log_buffer,
66
+ const SequenceNumber earliest_mem_seqno);
61
67
  };
62
68
  } // namespace ROCKSDB_NAMESPACE
63
69
  #endif // !ROCKSDB_LITE
@@ -50,7 +50,7 @@ class LevelCompactionBuilder {
50
50
  public:
51
51
  LevelCompactionBuilder(const std::string& cf_name,
52
52
  VersionStorageInfo* vstorage,
53
- SequenceNumber earliest_mem_seqno,
53
+ const SequenceNumber earliest_mem_seqno,
54
54
  CompactionPicker* compaction_picker,
55
55
  LogBuffer* log_buffer,
56
56
  const MutableCFOptions& mutable_cf_options,
@@ -122,7 +122,7 @@ class LevelCompactionBuilder {
122
122
 
123
123
  const std::string& cf_name_;
124
124
  VersionStorageInfo* vstorage_;
125
- SequenceNumber earliest_mem_seqno_;
125
+ const SequenceNumber earliest_mem_seqno_;
126
126
  CompactionPicker* compaction_picker_;
127
127
  LogBuffer* log_buffer_;
128
128
  int start_level_ = -1;
@@ -379,7 +379,9 @@ void LevelCompactionBuilder::SetupOtherFilesWithRoundRobinExpansion() {
379
379
  if (!compaction_picker_->ExpandInputsToCleanCut(cf_name_, vstorage_,
380
380
  &tmp_start_level_inputs) ||
381
381
  compaction_picker_->FilesRangeOverlapWithCompaction(
382
- {tmp_start_level_inputs}, output_level_)) {
382
+ {tmp_start_level_inputs}, output_level_,
383
+ Compaction::EvaluatePenultimateLevel(
384
+ vstorage_, ioptions_, start_level_, output_level_))) {
383
385
  // Constraint 1a
384
386
  tmp_start_level_inputs.clear();
385
387
  return;
@@ -453,7 +455,9 @@ bool LevelCompactionBuilder::SetupOtherInputsIfNeeded() {
453
455
  // (2) AddFile ingest a new file into the LSM tree
454
456
  // We need to disallow this from happening.
455
457
  if (compaction_picker_->FilesRangeOverlapWithCompaction(
456
- compaction_inputs_, output_level_)) {
458
+ compaction_inputs_, output_level_,
459
+ Compaction::EvaluatePenultimateLevel(
460
+ vstorage_, ioptions_, start_level_, output_level_))) {
457
461
  // This compaction output could potentially conflict with the output
458
462
  // of a currently running compaction, we cannot run it.
459
463
  return false;
@@ -755,7 +759,9 @@ bool LevelCompactionBuilder::PickFileToCompact() {
755
759
  if (!compaction_picker_->ExpandInputsToCleanCut(cf_name_, vstorage_,
756
760
  &start_level_inputs_) ||
757
761
  compaction_picker_->FilesRangeOverlapWithCompaction(
758
- {start_level_inputs_}, output_level_)) {
762
+ {start_level_inputs_}, output_level_,
763
+ Compaction::EvaluatePenultimateLevel(
764
+ vstorage_, ioptions_, start_level_, output_level_))) {
759
765
  // A locked (pending compaction) input-level file was pulled in due to
760
766
  // user-key overlap.
761
767
  start_level_inputs_.clear();
@@ -826,7 +832,7 @@ bool LevelCompactionBuilder::PickIntraL0Compaction() {
826
832
  Compaction* LevelCompactionPicker::PickCompaction(
827
833
  const std::string& cf_name, const MutableCFOptions& mutable_cf_options,
828
834
  const MutableDBOptions& mutable_db_options, VersionStorageInfo* vstorage,
829
- LogBuffer* log_buffer, SequenceNumber earliest_mem_seqno) {
835
+ LogBuffer* log_buffer, const SequenceNumber earliest_mem_seqno) {
830
836
  LevelCompactionBuilder builder(cf_name, vstorage, earliest_mem_seqno, this,
831
837
  log_buffer, mutable_cf_options, ioptions_,
832
838
  mutable_db_options);
@@ -23,8 +23,7 @@ class LevelCompactionPicker : public CompactionPicker {
23
23
  virtual Compaction* PickCompaction(
24
24
  const std::string& cf_name, const MutableCFOptions& mutable_cf_options,
25
25
  const MutableDBOptions& mutable_db_options, VersionStorageInfo* vstorage,
26
- LogBuffer* log_buffer,
27
- SequenceNumber earliest_memtable_seqno = kMaxSequenceNumber) override;
26
+ LogBuffer* log_buffer, const SequenceNumber earliest_mem_seqno) override;
28
27
 
29
28
  virtual bool NeedsCompaction(
30
29
  const VersionStorageInfo* vstorage) const override;