@nxtedition/rocksdb 8.2.7 → 9.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 (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -386,7 +386,8 @@ class CompactionJobTestBase : public testing::Test {
386
386
  kUnknownFileCreationTime,
387
387
  versions_->GetColumnFamilySet()->GetDefault()->NewEpochNumber(),
388
388
  kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2,
389
- 0, 0);
389
+ /*compensated_range_deletion_size=*/0, /*tail_size=*/0,
390
+ /*user_defined_timestamps_persisted=*/true);
390
391
 
391
392
  mutex_.Lock();
392
393
  EXPECT_OK(versions_->LogAndApply(
@@ -654,11 +655,12 @@ class CompactionJobTestBase : public testing::Test {
654
655
  ASSERT_TRUE(full_history_ts_low_.empty() ||
655
656
  ucmp_->timestamp_size() == full_history_ts_low_.size());
656
657
  const std::atomic<bool> kManualCompactionCanceledFalse{false};
658
+ JobContext job_context(1, false /* create_superversion */);
657
659
  CompactionJob compaction_job(
658
660
  0, &compaction, db_options_, mutable_db_options_, env_options_,
659
661
  versions_.get(), &shutting_down_, &log_buffer, nullptr, nullptr,
660
662
  nullptr, nullptr, &mutex_, &error_handler_, snapshots,
661
- earliest_write_conflict_snapshot, snapshot_checker, nullptr,
663
+ earliest_write_conflict_snapshot, snapshot_checker, &job_context,
662
664
  table_cache_, &event_logger, false, false, dbname_,
663
665
  &compaction_job_stats_, Env::Priority::USER, nullptr /* IOTracer */,
664
666
  /*manual_compaction_canceled=*/kManualCompactionCanceledFalse,
@@ -45,6 +45,8 @@ Status CompactionOutputs::Finish(const Status& intput_status,
45
45
  meta->fd.file_size = current_bytes;
46
46
  meta->tail_size = builder_->GetTailSize();
47
47
  meta->marked_for_compaction = builder_->NeedCompact();
48
+ meta->user_defined_timestamps_persisted = static_cast<bool>(
49
+ builder_->GetTableProperties().user_defined_timestamps_persisted);
48
50
  }
49
51
  current_output().finished = true;
50
52
  stats_.bytes_written += current_bytes;
@@ -125,11 +127,6 @@ size_t CompactionOutputs::UpdateGrandparentBoundaryInfo(
125
127
  if (grandparents.empty()) {
126
128
  return curr_key_boundary_switched_num;
127
129
  }
128
- assert(!internal_key.empty());
129
- InternalKey ikey;
130
- ikey.DecodeFrom(internal_key);
131
- assert(ikey.Valid());
132
-
133
130
  const Comparator* ucmp = compaction_->column_family_data()->user_comparator();
134
131
 
135
132
  // Move the grandparent_index_ to the file containing the current user_key.
@@ -137,7 +134,7 @@ size_t CompactionOutputs::UpdateGrandparentBoundaryInfo(
137
134
  // index points to the last file containing the key.
138
135
  while (grandparent_index_ < grandparents.size()) {
139
136
  if (being_grandparent_gap_) {
140
- if (sstableKeyCompare(ucmp, ikey,
137
+ if (sstableKeyCompare(ucmp, internal_key,
141
138
  grandparents[grandparent_index_]->smallest) < 0) {
142
139
  break;
143
140
  }
@@ -150,13 +147,13 @@ size_t CompactionOutputs::UpdateGrandparentBoundaryInfo(
150
147
  being_grandparent_gap_ = false;
151
148
  } else {
152
149
  int cmp_result = sstableKeyCompare(
153
- ucmp, ikey, grandparents[grandparent_index_]->largest);
150
+ ucmp, internal_key, grandparents[grandparent_index_]->largest);
154
151
  // If it's same key, make sure grandparent_index_ is pointing to the last
155
152
  // one.
156
153
  if (cmp_result < 0 ||
157
154
  (cmp_result == 0 &&
158
155
  (grandparent_index_ == grandparents.size() - 1 ||
159
- sstableKeyCompare(ucmp, ikey,
156
+ sstableKeyCompare(ucmp, internal_key,
160
157
  grandparents[grandparent_index_ + 1]->smallest) <
161
158
  0))) {
162
159
  break;
@@ -598,10 +595,12 @@ Status CompactionOutputs::AddRangeDels(
598
595
  // in any snapshot. trim_ts_ is passed to the constructor for
599
596
  // range_del_agg_, and range_del_agg_ internally drops tombstones above
600
597
  // trim_ts_.
601
- if (bottommost_level && tombstone.seq_ <= earliest_snapshot &&
598
+ bool consider_drop =
599
+ tombstone.seq_ <= earliest_snapshot &&
602
600
  (ts_sz == 0 ||
603
601
  (!full_history_ts_low.empty() &&
604
- ucmp->CompareTimestamp(tombstone.ts_, full_history_ts_low) < 0))) {
602
+ ucmp->CompareTimestamp(tombstone.ts_, full_history_ts_low) < 0));
603
+ if (consider_drop && bottommost_level) {
605
604
  // TODO(andrewkr): tombstones that span multiple output files are
606
605
  // counted for each compaction output file, so lots of double
607
606
  // counting.
@@ -635,6 +634,20 @@ Status CompactionOutputs::AddRangeDels(
635
634
  icmp.Compare(*upper_bound, tombstone_start.Encode()) < 0) {
636
635
  break;
637
636
  }
637
+ if (lower_bound &&
638
+ icmp.Compare(tombstone_start.Encode(), *lower_bound) < 0) {
639
+ tombstone_start.DecodeFrom(*lower_bound);
640
+ }
641
+ if (upper_bound && icmp.Compare(*upper_bound, tombstone_end.Encode()) < 0) {
642
+ tombstone_end.DecodeFrom(*upper_bound);
643
+ }
644
+ if (consider_drop && compaction_->KeyRangeNotExistsBeyondOutputLevel(
645
+ tombstone_start.user_key(),
646
+ tombstone_end.user_key(), &level_ptrs_)) {
647
+ range_del_out_stats.num_range_del_drop_obsolete++;
648
+ range_del_out_stats.num_record_drop_obsolete++;
649
+ continue;
650
+ }
638
651
  // Here we show that *only* range tombstones that overlap with
639
652
  // [lower_bound, upper_bound] are added to the current file, and
640
653
  // sanity checking invariants that should hold:
@@ -688,13 +701,6 @@ Status CompactionOutputs::AddRangeDels(
688
701
 
689
702
  // Range tombstone is not supported by output validator yet.
690
703
  builder_->Add(kv.first.Encode(), kv.second);
691
- if (lower_bound &&
692
- icmp.Compare(tombstone_start.Encode(), *lower_bound) < 0) {
693
- tombstone_start.DecodeFrom(*lower_bound);
694
- }
695
- if (upper_bound && icmp.Compare(*upper_bound, tombstone_end.Encode()) < 0) {
696
- tombstone_end.DecodeFrom(*upper_bound);
697
- }
698
704
  assert(icmp.Compare(tombstone_start, tombstone_end) <= 0);
699
705
  meta.UpdateBoundariesForRange(tombstone_start, tombstone_end,
700
706
  tombstone.seq_, icmp);
@@ -779,6 +785,8 @@ CompactionOutputs::CompactionOutputs(const Compaction* compaction,
779
785
  if (compaction->output_level() != 0) {
780
786
  FillFilesToCutForTtl();
781
787
  }
788
+
789
+ level_ptrs_ = std::vector<size_t>(compaction_->number_levels(), 0);
782
790
  }
783
791
 
784
792
  } // namespace ROCKSDB_NAMESPACE
@@ -206,10 +206,10 @@ class CompactionOutputs {
206
206
  // We may only split the output when the cursor is in the range. Split
207
207
  if ((!end.has_value() ||
208
208
  icmp->user_comparator()->Compare(
209
- ExtractUserKey(output_split_key->Encode()), end.value()) < 0) &&
210
- (!start.has_value() || icmp->user_comparator()->Compare(
211
- ExtractUserKey(output_split_key->Encode()),
212
- start.value()) > 0)) {
209
+ ExtractUserKey(output_split_key->Encode()), *end) < 0) &&
210
+ (!start.has_value() ||
211
+ icmp->user_comparator()->Compare(
212
+ ExtractUserKey(output_split_key->Encode()), *start) > 0)) {
213
213
  local_output_split_key_ = output_split_key;
214
214
  }
215
215
  }
@@ -356,6 +356,15 @@ class CompactionOutputs {
356
356
  // The smallest key of the current output file, this is set when current
357
357
  // output file's smallest key is a range tombstone start key.
358
358
  InternalKey range_tombstone_lower_bound_;
359
+
360
+ // Used for calls to compaction->KeyRangeNotExistsBeyondOutputLevel() in
361
+ // CompactionOutputs::AddRangeDels().
362
+ // level_ptrs_[i] holds index of the file that was checked during the last
363
+ // call to compaction->KeyRangeNotExistsBeyondOutputLevel(). This allows
364
+ // future calls to the function to pick up where it left off, since each
365
+ // range tombstone added to output file within each subcompaction is in
366
+ // increasing key range.
367
+ std::vector<size_t> level_ptrs_;
359
368
  };
360
369
 
361
370
  // helper struct to concatenate the last level and penultimate level outputs
@@ -611,23 +611,21 @@ Compaction* CompactionPicker::CompactRange(
611
611
  // Universal compaction with more than one level always compacts all the
612
612
  // files together to the last level.
613
613
  assert(vstorage->num_levels() > 1);
614
+ int max_output_level =
615
+ vstorage->MaxOutputLevel(ioptions_.allow_ingest_behind);
614
616
  // DBImpl::CompactRange() set output level to be the last level
615
- if (ioptions_.allow_ingest_behind) {
616
- assert(output_level == vstorage->num_levels() - 2);
617
- } else {
618
- assert(output_level == vstorage->num_levels() - 1);
619
- }
617
+ assert(output_level == max_output_level);
620
618
  // DBImpl::RunManualCompaction will make full range for universal compaction
621
619
  assert(begin == nullptr);
622
620
  assert(end == nullptr);
623
621
  *compaction_end = nullptr;
624
622
 
625
623
  int start_level = 0;
626
- for (; start_level < vstorage->num_levels() &&
624
+ for (; start_level <= max_output_level &&
627
625
  vstorage->NumLevelFiles(start_level) == 0;
628
626
  start_level++) {
629
627
  }
630
- if (start_level == vstorage->num_levels()) {
628
+ if (start_level > max_output_level) {
631
629
  return nullptr;
632
630
  }
633
631
 
@@ -637,9 +635,9 @@ Compaction* CompactionPicker::CompactRange(
637
635
  return nullptr;
638
636
  }
639
637
 
640
- std::vector<CompactionInputFiles> inputs(vstorage->num_levels() -
638
+ std::vector<CompactionInputFiles> inputs(max_output_level + 1 -
641
639
  start_level);
642
- for (int level = start_level; level < vstorage->num_levels(); level++) {
640
+ for (int level = start_level; level <= max_output_level; level++) {
643
641
  inputs[level - start_level].level = level;
644
642
  auto& files = inputs[level - start_level].files;
645
643
  for (FileMetaData* f : vstorage->LevelFiles(level)) {
@@ -753,8 +751,10 @@ Compaction* CompactionPicker::CompactRange(
753
751
 
754
752
  // for BOTTOM LEVEL compaction only, use max_file_num_to_ignore to filter out
755
753
  // files that are created during the current compaction.
756
- if (compact_range_options.bottommost_level_compaction ==
757
- BottommostLevelCompaction::kForceOptimized &&
754
+ if ((compact_range_options.bottommost_level_compaction ==
755
+ BottommostLevelCompaction::kForceOptimized ||
756
+ compact_range_options.bottommost_level_compaction ==
757
+ BottommostLevelCompaction::kIfHaveCompactionFilter) &&
758
758
  max_file_num_to_ignore != std::numeric_limits<uint64_t>::max()) {
759
759
  assert(input_level == output_level);
760
760
  // inputs_shrunk holds a continuous subset of input files which were all
@@ -70,6 +70,11 @@ class CompactionPickerTestBase : public testing::Test {
70
70
  mutable_cf_options_.RefreshDerivedOptions(ioptions_);
71
71
  ioptions_.cf_paths.emplace_back("dummy",
72
72
  std::numeric_limits<uint64_t>::max());
73
+ // When the default value of this option is true, universal compaction
74
+ // tests can encounter assertion failure since SanitizeOption() is
75
+ // not run to set this option to false. So we do the sanitization
76
+ // here. Tests that test this option set this option to true explicitly.
77
+ ioptions_.level_compaction_dynamic_level_bytes = false;
73
78
  }
74
79
 
75
80
  ~CompactionPickerTestBase() override {}
@@ -79,7 +84,8 @@ class CompactionPickerTestBase : public testing::Test {
79
84
  options_.num_levels = num_levels;
80
85
  vstorage_.reset(new VersionStorageInfo(
81
86
  &icmp_, ucmp_, options_.num_levels, style, nullptr, false,
82
- EpochNumberRequirement::kMustPresent));
87
+ EpochNumberRequirement::kMustPresent, ioptions_.clock,
88
+ options_.bottommost_file_compaction_delay));
83
89
  vstorage_->PrepareForVersionAppend(ioptions_, mutable_cf_options_);
84
90
  }
85
91
 
@@ -88,7 +94,8 @@ class CompactionPickerTestBase : public testing::Test {
88
94
  void AddVersionStorage() {
89
95
  temp_vstorage_.reset(new VersionStorageInfo(
90
96
  &icmp_, ucmp_, options_.num_levels, ioptions_.compaction_style,
91
- vstorage_.get(), false, EpochNumberRequirement::kMustPresent));
97
+ vstorage_.get(), false, EpochNumberRequirement::kMustPresent,
98
+ ioptions_.clock, options_.bottommost_file_compaction_delay));
92
99
  }
93
100
 
94
101
  void DeleteVersionStorage() {
@@ -148,7 +155,8 @@ class CompactionPickerTestBase : public testing::Test {
148
155
  smallest_seq, largest_seq, marked_for_compact, temperature,
149
156
  kInvalidBlobFileNumber, kUnknownOldestAncesterTime,
150
157
  kUnknownFileCreationTime, epoch_number, kUnknownFileChecksum,
151
- kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0);
158
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0,
159
+ true /* user_defined_timestamps_persisted */);
152
160
  f->compensated_file_size =
153
161
  (compensated_file_size != 0) ? compensated_file_size : file_size;
154
162
  f->oldest_ancester_time = oldest_ancestor_time;
@@ -505,7 +513,7 @@ TEST_F(CompactionPickerTest, NeedsCompactionUniversal) {
505
513
 
506
514
  TEST_F(CompactionPickerTest, CompactionUniversalIngestBehindReservedLevel) {
507
515
  const uint64_t kFileSize = 100000;
508
- NewVersionStorage(1, kCompactionStyleUniversal);
516
+ NewVersionStorage(3 /* num_levels */, kCompactionStyleUniversal);
509
517
  ioptions_.allow_ingest_behind = true;
510
518
  ioptions_.num_levels = 3;
511
519
  UniversalCompactionPicker universal_compaction_picker(ioptions_, &icmp_);
@@ -532,6 +540,14 @@ TEST_F(CompactionPickerTest, CompactionUniversalIngestBehindReservedLevel) {
532
540
 
533
541
  // output level should be the one above the bottom-most
534
542
  ASSERT_EQ(1, compaction->output_level());
543
+
544
+ // input should not include the reserved level
545
+ const std::vector<CompactionInputFiles>* inputs = compaction->inputs();
546
+ for (const auto& compaction_input : *inputs) {
547
+ if (!compaction_input.empty()) {
548
+ ASSERT_LT(compaction_input.level, 2);
549
+ }
550
+ }
535
551
  }
536
552
  // Tests if the files can be trivially moved in multi level
537
553
  // universal compaction when allow_trivial_move option is set
@@ -1954,6 +1970,15 @@ TEST_F(CompactionPickerTest, OverlappingUserKeys11) {
1954
1970
  ASSERT_EQ(7U, compaction->input(1, 0)->fd.GetNumber());
1955
1971
  }
1956
1972
 
1973
+ TEST_F(CompactionPickerTest, FileTtlBoosterLargeNumLevels) {
1974
+ const uint64_t kCurrentTime = 1000000;
1975
+ FileTtlBooster booster(kCurrentTime, /*ttl=*/2048,
1976
+ /*num_non_empty_levels=*/100, /*level=*/1);
1977
+ FileMetaData meta;
1978
+ meta.oldest_ancester_time = kCurrentTime - 1023;
1979
+ ASSERT_EQ(1, booster.GetBoostScore(&meta));
1980
+ }
1981
+
1957
1982
  TEST_F(CompactionPickerTest, FileTtlBooster) {
1958
1983
  // Set TTL to 2048
1959
1984
  // TTL boosting for all levels starts at 1024,
@@ -133,8 +133,8 @@ class UniversalCompactionBuilder {
133
133
  UniversalCompactionPicker* picker_;
134
134
  LogBuffer* log_buffer_;
135
135
 
136
- static std::vector<SortedRun> CalculateSortedRuns(
137
- const VersionStorageInfo& vstorage);
136
+ static std::vector<UniversalCompactionBuilder::SortedRun> CalculateSortedRuns(
137
+ const VersionStorageInfo& vstorage, int last_level);
138
138
 
139
139
  // Pick a path ID to place a newly generated file, with its estimated file
140
140
  // size.
@@ -339,13 +339,13 @@ void UniversalCompactionBuilder::SortedRun::DumpSizeInfo(
339
339
 
340
340
  std::vector<UniversalCompactionBuilder::SortedRun>
341
341
  UniversalCompactionBuilder::CalculateSortedRuns(
342
- const VersionStorageInfo& vstorage) {
342
+ const VersionStorageInfo& vstorage, int last_level) {
343
343
  std::vector<UniversalCompactionBuilder::SortedRun> ret;
344
344
  for (FileMetaData* f : vstorage.LevelFiles(0)) {
345
345
  ret.emplace_back(0, f, f->fd.GetFileSize(), f->compensated_file_size,
346
346
  f->being_compacted);
347
347
  }
348
- for (int level = 1; level < vstorage.num_levels(); level++) {
348
+ for (int level = 1; level <= last_level; level++) {
349
349
  uint64_t total_compensated_size = 0U;
350
350
  uint64_t total_size = 0U;
351
351
  bool being_compacted = false;
@@ -374,7 +374,9 @@ UniversalCompactionBuilder::CalculateSortedRuns(
374
374
  Compaction* UniversalCompactionBuilder::PickCompaction() {
375
375
  const int kLevel0 = 0;
376
376
  score_ = vstorage_->CompactionScore(kLevel0);
377
- sorted_runs_ = CalculateSortedRuns(*vstorage_);
377
+ int max_output_level =
378
+ vstorage_->MaxOutputLevel(ioptions_.allow_ingest_behind);
379
+ sorted_runs_ = CalculateSortedRuns(*vstorage_, max_output_level);
378
380
 
379
381
  if (sorted_runs_.size() == 0 ||
380
382
  (vstorage_->FilesMarkedForPeriodicCompaction().empty() &&
@@ -471,6 +473,8 @@ Compaction* UniversalCompactionBuilder::PickCompaction() {
471
473
  "UniversalCompactionBuilder::PickCompaction:Return", nullptr);
472
474
  return nullptr;
473
475
  }
476
+ assert(c->output_level() <=
477
+ vstorage_->MaxOutputLevel(ioptions_.allow_ingest_behind));
474
478
 
475
479
  if (mutable_cf_options_.compaction_options_universal.allow_trivial_move ==
476
480
  true &&
@@ -698,22 +702,18 @@ Compaction* UniversalCompactionBuilder::PickCompactionToReduceSortedRuns(
698
702
  GetPathId(ioptions_, mutable_cf_options_, estimated_total_size);
699
703
  int start_level = sorted_runs_[start_index].level;
700
704
  int output_level;
705
+ // last level is reserved for the files ingested behind
706
+ int max_output_level =
707
+ vstorage_->MaxOutputLevel(ioptions_.allow_ingest_behind);
701
708
  if (first_index_after == sorted_runs_.size()) {
702
- output_level = vstorage_->num_levels() - 1;
709
+ output_level = max_output_level;
703
710
  } else if (sorted_runs_[first_index_after].level == 0) {
704
711
  output_level = 0;
705
712
  } else {
706
713
  output_level = sorted_runs_[first_index_after].level - 1;
707
714
  }
708
715
 
709
- // last level is reserved for the files ingested behind
710
- if (ioptions_.allow_ingest_behind &&
711
- (output_level == vstorage_->num_levels() - 1)) {
712
- assert(output_level > 1);
713
- output_level--;
714
- }
715
-
716
- std::vector<CompactionInputFiles> inputs(vstorage_->num_levels());
716
+ std::vector<CompactionInputFiles> inputs(max_output_level + 1);
717
717
  for (size_t i = 0; i < inputs.size(); ++i) {
718
718
  inputs[i].level = start_level + static_cast<int>(i);
719
719
  }
@@ -1192,8 +1192,10 @@ Compaction* UniversalCompactionBuilder::PickDeleteTriggeredCompaction() {
1192
1192
  return nullptr;
1193
1193
  }
1194
1194
 
1195
+ int max_output_level =
1196
+ vstorage_->MaxOutputLevel(ioptions_.allow_ingest_behind);
1195
1197
  // Pick the first non-empty level after the start_level
1196
- for (output_level = start_level + 1; output_level < vstorage_->num_levels();
1198
+ for (output_level = start_level + 1; output_level <= max_output_level;
1197
1199
  output_level++) {
1198
1200
  if (vstorage_->NumLevelFiles(output_level) != 0) {
1199
1201
  break;
@@ -1201,9 +1203,9 @@ Compaction* UniversalCompactionBuilder::PickDeleteTriggeredCompaction() {
1201
1203
  }
1202
1204
 
1203
1205
  // If all higher levels are empty, pick the highest level as output level
1204
- if (output_level == vstorage_->num_levels()) {
1206
+ if (output_level > max_output_level) {
1205
1207
  if (start_level == 0) {
1206
- output_level = vstorage_->num_levels() - 1;
1208
+ output_level = max_output_level;
1207
1209
  } else {
1208
1210
  // If start level is non-zero and all higher levels are empty, this
1209
1211
  // compaction will translate into a trivial move. Since the idea is
@@ -1212,11 +1214,7 @@ Compaction* UniversalCompactionBuilder::PickDeleteTriggeredCompaction() {
1212
1214
  return nullptr;
1213
1215
  }
1214
1216
  }
1215
- if (ioptions_.allow_ingest_behind &&
1216
- output_level == vstorage_->num_levels() - 1) {
1217
- assert(output_level > 1);
1218
- output_level--;
1219
- }
1217
+ assert(output_level <= max_output_level);
1220
1218
 
1221
1219
  if (output_level != 0) {
1222
1220
  if (start_level == 0) {
@@ -1293,8 +1291,9 @@ Compaction* UniversalCompactionBuilder::PickCompactionWithSortedRunRange(
1293
1291
  uint32_t path_id =
1294
1292
  GetPathId(ioptions_, mutable_cf_options_, estimated_total_size);
1295
1293
  int start_level = sorted_runs_[start_index].level;
1296
-
1297
- std::vector<CompactionInputFiles> inputs(vstorage_->num_levels());
1294
+ int max_output_level =
1295
+ vstorage_->MaxOutputLevel(ioptions_.allow_ingest_behind);
1296
+ std::vector<CompactionInputFiles> inputs(max_output_level + 1);
1298
1297
  for (size_t i = 0; i < inputs.size(); ++i) {
1299
1298
  inputs[i].level = start_level + static_cast<int>(i);
1300
1299
  }
@@ -1331,13 +1330,7 @@ Compaction* UniversalCompactionBuilder::PickCompactionWithSortedRunRange(
1331
1330
 
1332
1331
  int output_level;
1333
1332
  if (end_index == sorted_runs_.size() - 1) {
1334
- // output files at the last level, unless it's reserved
1335
- output_level = vstorage_->num_levels() - 1;
1336
- // last level is reserved for the files ingested behind
1337
- if (ioptions_.allow_ingest_behind) {
1338
- assert(output_level > 1);
1339
- output_level--;
1340
- }
1333
+ output_level = max_output_level;
1341
1334
  } else {
1342
1335
  // if it's not including all sorted_runs, it can only output to the level
1343
1336
  // above the `end_index + 1` sorted_run.
@@ -53,8 +53,10 @@ class FileTtlBooster {
53
53
  enabled_ = true;
54
54
  uint64_t all_boost_start_age = ttl / 2;
55
55
  uint64_t all_boost_age_range = (ttl / 32) * 31 - all_boost_start_age;
56
+ // TODO(cbi): more reasonable algorithm that gives different values
57
+ // when num_non_empty_levels - level - 1 > 63.
56
58
  uint64_t boost_age_range =
57
- all_boost_age_range >> (num_non_empty_levels - level - 1);
59
+ all_boost_age_range >> std::min(63, num_non_empty_levels - level - 1);
58
60
  boost_age_start_ = all_boost_start_age + boost_age_range;
59
61
  const uint64_t kBoostRatio = 16;
60
62
  // prevent 0 value to avoid divide 0 error.
@@ -209,7 +209,7 @@ TEST_P(TieredCompactionTest, SequenceBasedTieredStorageUniversal) {
209
209
  seq_history.emplace_back(dbfull()->GetLatestSequenceNumber());
210
210
  expect_stats[0].Add(kBasicFlushStats);
211
211
  }
212
- ASSERT_OK(dbfull()->WaitForCompact());
212
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
213
213
 
214
214
  // the penultimate level file temperature is not cold, all data are output to
215
215
  // the penultimate level.
@@ -374,7 +374,7 @@ TEST_P(TieredCompactionTest, RangeBasedTieredStorageUniversal) {
374
374
  ASSERT_OK(Flush());
375
375
  expect_stats[0].Add(kBasicFlushStats);
376
376
  }
377
- ASSERT_OK(dbfull()->WaitForCompact());
377
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
378
378
  ASSERT_EQ("0,0,0,0,0,1,1", FilesPerLevel());
379
379
  ASSERT_GT(GetSstSizeHelper(Temperature::kUnknown), 0);
380
380
  ASSERT_GT(GetSstSizeHelper(Temperature::kCold), 0);
@@ -446,7 +446,7 @@ TEST_P(TieredCompactionTest, RangeBasedTieredStorageUniversal) {
446
446
  ASSERT_OK(Flush());
447
447
  }
448
448
  // make sure the compaction is able to finish
449
- ASSERT_OK(dbfull()->WaitForCompact());
449
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
450
450
  ASSERT_EQ("0,0,0,0,0,1,1", FilesPerLevel());
451
451
  ASSERT_GT(GetSstSizeHelper(Temperature::kUnknown), 0);
452
452
  ASSERT_GT(GetSstSizeHelper(Temperature::kCold), 0);
@@ -911,7 +911,7 @@ TEST_P(TieredCompactionTest, SequenceBasedTieredStorageLevel) {
911
911
  ASSERT_OK(Flush());
912
912
  expect_stats[0].Add(kBasicFlushStats);
913
913
  }
914
- ASSERT_OK(dbfull()->WaitForCompact());
914
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
915
915
 
916
916
  // non last level is hot
917
917
  ASSERT_EQ("0,1", FilesPerLevel());
@@ -954,7 +954,7 @@ TEST_P(TieredCompactionTest, SequenceBasedTieredStorageLevel) {
954
954
  ASSERT_OK(Flush());
955
955
  seq_history.emplace_back(dbfull()->GetLatestSequenceNumber());
956
956
  }
957
- ASSERT_OK(dbfull()->WaitForCompact());
957
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
958
958
  ASSERT_EQ("0,1,0,0,0,0,1", FilesPerLevel());
959
959
  ASSERT_GT(GetSstSizeHelper(Temperature::kUnknown), 0);
960
960
  ASSERT_GT(GetSstSizeHelper(Temperature::kCold), 0);
@@ -1005,7 +1005,7 @@ TEST_P(TieredCompactionTest, SequenceBasedTieredStorageLevel) {
1005
1005
  ASSERT_OK(Flush());
1006
1006
  seq_history.emplace_back(dbfull()->GetLatestSequenceNumber());
1007
1007
  }
1008
- ASSERT_OK(dbfull()->WaitForCompact());
1008
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1009
1009
 
1010
1010
  latest_cold_seq = seq_history[0];
1011
1011
  ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
@@ -1135,7 +1135,7 @@ TEST_P(TieredCompactionTest, RangeBasedTieredStorageLevel) {
1135
1135
  }
1136
1136
  ASSERT_OK(Flush());
1137
1137
  }
1138
- ASSERT_OK(dbfull()->WaitForCompact());
1138
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1139
1139
  ASSERT_EQ("0,0,0,0,0,1,1", FilesPerLevel());
1140
1140
  ASSERT_GT(GetSstSizeHelper(Temperature::kUnknown), 0);
1141
1141
  ASSERT_GT(GetSstSizeHelper(Temperature::kCold), 0);
@@ -1265,7 +1265,7 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimeManualCompaction) {
1265
1265
  }
1266
1266
  ASSERT_OK(Flush());
1267
1267
  }
1268
- ASSERT_OK(dbfull()->WaitForCompact());
1268
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1269
1269
 
1270
1270
  // all data is pushed to the last level
1271
1271
  ASSERT_EQ("0,0,0,0,0,0,1", FilesPerLevel());
@@ -1327,7 +1327,7 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimeAutoCompaction) {
1327
1327
  }
1328
1328
  ASSERT_OK(Flush());
1329
1329
  }
1330
- ASSERT_OK(dbfull()->WaitForCompact());
1330
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1331
1331
 
1332
1332
  // all data is pushed to the last level
1333
1333
  ASSERT_EQ("0,0,0,0,0,0,1", FilesPerLevel());
@@ -1360,7 +1360,7 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimeAutoCompaction) {
1360
1360
  });
1361
1361
  }
1362
1362
  ASSERT_OK(Flush());
1363
- ASSERT_OK(dbfull()->WaitForCompact());
1363
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1364
1364
  }
1365
1365
 
1366
1366
  // all data is moved up to the penultimate level
@@ -1403,7 +1403,7 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimePartial) {
1403
1403
  }
1404
1404
  ASSERT_OK(Flush());
1405
1405
  }
1406
- ASSERT_OK(dbfull()->WaitForCompact());
1406
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1407
1407
 
1408
1408
  // all data is pushed to the last level
1409
1409
  ASSERT_EQ("0,0,0,0,0,0,1", FilesPerLevel());
@@ -1530,7 +1530,7 @@ TEST_F(PrecludeLastLevelTest, LastLevelOnlyCompactionPartial) {
1530
1530
  }
1531
1531
  ASSERT_OK(Flush());
1532
1532
  }
1533
- ASSERT_OK(dbfull()->WaitForCompact());
1533
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1534
1534
 
1535
1535
  // all data is pushed to the last level
1536
1536
  ASSERT_EQ("0,0,0,0,0,0,1", FilesPerLevel());
@@ -1609,7 +1609,7 @@ TEST_P(PrecludeLastLevelTestWithParms, LastLevelOnlyCompactionNoPreclude) {
1609
1609
  }
1610
1610
  ASSERT_OK(Flush());
1611
1611
  }
1612
- ASSERT_OK(dbfull()->WaitForCompact());
1612
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1613
1613
 
1614
1614
  // all data is pushed to the last level
1615
1615
  ASSERT_EQ("0,0,0,0,0,0,1", FilesPerLevel());
@@ -1705,7 +1705,7 @@ TEST_P(PrecludeLastLevelTestWithParms, LastLevelOnlyCompactionNoPreclude) {
1705
1705
 
1706
1706
  manual_compaction_thread.join();
1707
1707
 
1708
- ASSERT_OK(dbfull()->WaitForCompact());
1708
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1709
1709
 
1710
1710
  if (enable_preclude_last_level) {
1711
1711
  ASSERT_NE("0,0,0,0,0,1,1", FilesPerLevel());
@@ -1841,7 +1841,7 @@ TEST_P(PrecludeLastLevelTestWithParms, PeriodicCompactionToPenultimateLevel) {
1841
1841
  }
1842
1842
  ASSERT_OK(Flush());
1843
1843
 
1844
- ASSERT_OK(dbfull()->WaitForCompact());
1844
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1845
1845
 
1846
1846
  stop_token.reset();
1847
1847
 
@@ -1940,7 +1940,7 @@ TEST_F(PrecludeLastLevelTest, PartialPenultimateLevelCompaction) {
1940
1940
  ASSERT_OK(Flush());
1941
1941
  }
1942
1942
 
1943
- ASSERT_OK(dbfull()->WaitForCompact());
1943
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1944
1944
 
1945
1945
  // L5: [0,19] [20,39] [40,299]
1946
1946
  // L6: [0, 299]
@@ -2106,7 +2106,7 @@ TEST_F(PrecludeLastLevelTest, RangeDelsCauseFileEndpointsToOverlap) {
2106
2106
  Slice begin_key(begin_key_buf), end_key(end_key_buf);
2107
2107
  ASSERT_OK(db_->SuggestCompactRange(db_->DefaultColumnFamily(), &begin_key,
2108
2108
  &end_key));
2109
- ASSERT_OK(dbfull()->WaitForCompact());
2109
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
2110
2110
  ASSERT_EQ("0,0,0,0,0,3,3", FilesPerLevel());
2111
2111
  ASSERT_EQ(1, per_key_comp_num);
2112
2112
  verify_db();
@@ -2116,7 +2116,7 @@ TEST_F(PrecludeLastLevelTest, RangeDelsCauseFileEndpointsToOverlap) {
2116
2116
  db_->ReleaseSnapshot(snap2);
2117
2117
  ASSERT_OK(db_->SuggestCompactRange(db_->DefaultColumnFamily(), &begin_key,
2118
2118
  &end_key));
2119
- ASSERT_OK(dbfull()->WaitForCompact());
2119
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
2120
2120
  ASSERT_EQ("0,0,0,0,0,3,3", FilesPerLevel());
2121
2121
  ASSERT_EQ(2, per_key_comp_num);
2122
2122
  verify_db();
@@ -2126,7 +2126,7 @@ TEST_F(PrecludeLastLevelTest, RangeDelsCauseFileEndpointsToOverlap) {
2126
2126
  db_->ReleaseSnapshot(snap1);
2127
2127
  ASSERT_OK(db_->SuggestCompactRange(db_->DefaultColumnFamily(), &begin_key,
2128
2128
  &end_key));
2129
- ASSERT_OK(dbfull()->WaitForCompact());
2129
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
2130
2130
  ASSERT_EQ("0,0,0,0,0,2,3", FilesPerLevel());
2131
2131
  ASSERT_EQ(3, per_key_comp_num);
2132
2132
  verify_db();
@@ -77,7 +77,7 @@ void DoRandomIteraratorTest(DB* db, std::vector<std::string> source_strings,
77
77
 
78
78
  for (int i = 0; i < num_writes; i++) {
79
79
  if (num_trigger_flush > 0 && i != 0 && i % num_trigger_flush == 0) {
80
- db->Flush(FlushOptions());
80
+ ASSERT_OK(db->Flush(FlushOptions()));
81
81
  }
82
82
 
83
83
  int type = rnd->Uniform(2);
@@ -156,6 +156,7 @@ void DoRandomIteraratorTest(DB* db, std::vector<std::string> source_strings,
156
156
  if (map.find(key) == map.end()) {
157
157
  ASSERT_TRUE(status.IsNotFound());
158
158
  } else {
159
+ ASSERT_OK(status);
159
160
  ASSERT_EQ(map[key], result);
160
161
  }
161
162
  break;