@nxtedition/rocksdb 15.4.0 → 15.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/binding.cc +24 -19
  2. package/cache.js +1 -1
  3. package/chained-batch.js +12 -3
  4. package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
  5. package/deps/rocksdb/rocksdb/BUCK +42 -0
  6. package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
  7. package/deps/rocksdb/rocksdb/Makefile +59 -32
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
  9. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
  10. package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
  11. package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
  12. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
  13. package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
  15. package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
  19. package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
  26. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
  27. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
  28. package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
  29. package/deps/rocksdb/rocksdb/db/builder.h +7 -0
  30. package/deps/rocksdb/rocksdb/db/c.cc +373 -57
  31. package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
  33. package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
  34. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
  53. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
  54. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
  55. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
  56. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
  57. package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
  58. package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
  59. package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
  60. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
  61. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
  62. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
  63. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
  64. package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
  65. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
  66. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
  67. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
  68. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
  79. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
  80. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
  81. package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
  82. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
  83. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
  84. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
  85. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
  86. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
  87. package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
  88. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
  89. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
  90. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
  91. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
  92. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
  93. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
  94. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
  95. package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
  96. package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
  97. package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
  98. package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
  99. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
  100. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
  101. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
  102. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
  103. package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
  104. package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
  105. package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
  106. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
  107. package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
  108. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
  110. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
  111. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
  112. package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
  113. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
  115. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
  116. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  118. package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
  119. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
  121. package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
  122. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
  123. package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
  124. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
  125. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  126. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
  127. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
  128. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
  129. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
  130. package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
  131. package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
  132. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
  133. package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
  134. package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
  135. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
  136. package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
  137. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  138. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
  139. package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
  140. package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
  141. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
  142. package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
  143. package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
  144. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
  145. package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
  146. package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
  147. package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
  148. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
  149. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
  150. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
  151. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
  152. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
  153. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
  159. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
  160. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
  161. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
  162. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
  163. package/deps/rocksdb/rocksdb/env/env.cc +1 -0
  164. package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
  165. package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
  166. package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
  167. package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
  168. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
  169. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
  171. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
  173. package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
  174. package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
  175. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
  176. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
  177. package/deps/rocksdb/rocksdb/folly.mk +22 -5
  178. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
  179. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
  180. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
  181. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
  182. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
  183. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
  184. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
  185. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
  186. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
  187. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
  188. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
  189. package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
  191. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
  192. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
  194. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
  197. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
  198. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
  199. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
  200. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
  202. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
  204. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
  205. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
  206. package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
  207. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
  208. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
  209. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
  210. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
  211. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
  212. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  213. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
  214. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
  215. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
  216. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
  217. package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
  218. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
  219. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
  220. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
  221. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
  222. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
  223. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
  224. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
  225. package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
  226. package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
  227. package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
  228. package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
  229. package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
  230. package/deps/rocksdb/rocksdb/options/options.cc +5 -1
  231. package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
  232. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
  233. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
  234. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
  235. package/deps/rocksdb/rocksdb/port/lang.h +4 -0
  236. package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
  237. package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
  238. package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
  239. package/deps/rocksdb/rocksdb/src.mk +12 -0
  240. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
  241. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
  243. package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
  246. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
  247. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
  248. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
  249. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
  250. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
  251. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
  252. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
  253. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
  254. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
  255. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
  256. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
  257. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
  258. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
  259. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
  260. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
  261. package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
  262. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
  263. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
  264. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
  265. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
  266. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
  267. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
  268. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
  269. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
  270. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
  271. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
  272. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
  273. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
  274. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
  275. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
  276. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
  277. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
  278. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
  279. package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
  280. package/deps/rocksdb/rocksdb/table/format.cc +27 -15
  281. package/deps/rocksdb/rocksdb/table/format.h +41 -15
  282. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
  283. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
  284. package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
  285. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
  286. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  287. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
  288. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
  289. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
  290. package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
  291. package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
  292. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
  293. package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
  294. package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
  295. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
  296. package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
  297. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
  298. package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
  299. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
  300. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
  301. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
  302. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
  303. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
  304. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
  305. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
  306. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
  307. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
  308. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
  309. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
  310. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
  311. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
  312. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
  313. package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
  314. package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
  315. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
  316. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
  317. package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
  318. package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
  319. package/deps/rocksdb/rocksdb/util/coding.h +14 -27
  320. package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
  321. package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
  322. package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
  323. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
  324. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
  325. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
  326. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
  328. package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
  329. package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
  330. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
  331. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
  332. package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
  333. package/deps/rocksdb/rocksdb/util/math.h +3 -1
  334. package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
  335. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
  336. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
  337. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
  338. package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
  339. package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
  340. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
  341. package/deps/rocksdb/rocksdb/util/status.cc +3 -1
  342. package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
  343. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
  344. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
  345. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
  346. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
  347. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
  348. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
  349. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
  350. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
  351. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
  352. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
  353. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
  354. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
  355. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
  356. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
  357. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
  358. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
  359. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
  360. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  361. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
  362. package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
  363. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
  364. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
  365. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
  366. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
  367. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
  368. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
  369. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
  370. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
  371. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
  372. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
  373. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
  374. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
  375. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
  376. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
  377. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
  378. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  379. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
  380. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
  381. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
  382. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
  383. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
  384. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
  385. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
  386. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
  387. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
  388. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
  389. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
  390. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
  391. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  392. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
  393. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
  394. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
  395. package/deps/rocksdb/rocksdb.gyp +7 -0
  396. package/index.js +11 -2
  397. package/iterator.js +15 -7
  398. package/package.json +1 -1
  399. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  400. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
@@ -11,6 +11,7 @@
11
11
  #include <unordered_set>
12
12
  #include <vector>
13
13
 
14
+ #include "db/builder.h"
14
15
  #include "db/db_impl/db_impl.h"
15
16
  #include "db/version_edit.h"
16
17
  #include "file/file_util.h"
@@ -299,6 +300,18 @@ Status ExternalSstFileIngestionJob::Prepare(
299
300
  // ingestion.
300
301
  // TODO: plumb Env::IOActivity
301
302
  ReadOptions ro;
303
+ // Pass user-provided checksums through FileOptions when available.
304
+ // The caller may not have provided checksums at all (empty vectors),
305
+ // so we guard with a bounds check.
306
+ FileOptions fopts;
307
+ if (i < files_checksums.size()) {
308
+ fopts.file_checksum = files_checksums[i];
309
+ }
310
+ if (i < files_checksum_func_names.size()) {
311
+ fopts.file_checksum_func_name = files_checksum_func_names[i];
312
+ } else {
313
+ fopts.file_checksum_func_name = kNoFileChecksumFuncName;
314
+ }
302
315
  IOStatus io_s = GenerateOneFileChecksum(
303
316
  fs_.get(), files_to_ingest_[i].internal_file_path,
304
317
  db_options_.file_checksum_gen_factory.get(),
@@ -307,7 +320,7 @@ Status ExternalSstFileIngestionJob::Prepare(
307
320
  ingestion_options_.verify_checksums_readahead_size,
308
321
  db_options_.allow_mmap_reads, io_tracer_,
309
322
  db_options_.rate_limiter.get(), ro, db_options_.stats,
310
- db_options_.clock);
323
+ db_options_.clock, fopts);
311
324
  if (!io_s.ok()) {
312
325
  status = io_s;
313
326
  ROCKS_LOG_WARN(db_options_.info_log,
@@ -699,9 +712,13 @@ Status ExternalSstFileIngestionJob::AssignLevelsForOneBatch(
699
712
  ? kReservedEpochNumberForFileIngestedBehind
700
713
  : cfd_->NewEpochNumber(), // orders files ingested to L0
701
714
  file->file_checksum, file->file_checksum_func_name, file->unique_id, 0,
702
- tail_size, file->user_defined_timestamps_persisted);
715
+ tail_size, file->user_defined_timestamps_persisted, "", "");
703
716
  f_metadata.temperature = file->file_temperature;
704
717
  f_metadata.marked_for_compaction = marked_for_compaction;
718
+ // Extract min/max timestamps from table properties for UDT support.
719
+ // This ensures ingested files have proper timestamp ranges in FileMetaData,
720
+ // similar to files created by flush and compaction.
721
+ ExtractTimestampFromTableProperties(file->table_properties, &f_metadata);
705
722
  edit_.AddFile(file->picked_level, f_metadata);
706
723
 
707
724
  *batch_uppermost_level =
@@ -1477,13 +1494,15 @@ IOStatus ExternalSstFileIngestionJob::GenerateChecksumForIngestedFile(
1477
1494
  // TODO: rate limit file reads for checksum calculation during file ingestion.
1478
1495
  // TODO: plumb Env::IOActivity
1479
1496
  ReadOptions ro;
1497
+ FileOptions gen_fopts;
1498
+ gen_fopts.file_checksum_func_name = kNoFileChecksumFuncName;
1480
1499
  IOStatus io_s = GenerateOneFileChecksum(
1481
1500
  fs_.get(), file_to_ingest->internal_file_path,
1482
1501
  db_options_.file_checksum_gen_factory.get(), requested_checksum_func_name,
1483
1502
  &file_checksum, &file_checksum_func_name,
1484
1503
  ingestion_options_.verify_checksums_readahead_size,
1485
1504
  db_options_.allow_mmap_reads, io_tracer_, db_options_.rate_limiter.get(),
1486
- ro, db_options_.stats, db_options_.clock);
1505
+ ro, db_options_.stats, db_options_.clock, gen_fopts);
1487
1506
  if (!io_s.ok()) {
1488
1507
  ROCKS_LOG_WARN(
1489
1508
  db_options_.info_log, "Failed to generate checksum for %s: %s",
@@ -80,8 +80,7 @@ class ExternSSTFileLinkFailFallbackTest
80
80
  }
81
81
 
82
82
  void TearDown() override {
83
- delete db_;
84
- db_ = nullptr;
83
+ db_.reset();
85
84
  ASSERT_OK(DestroyDB(dbname_, options_));
86
85
  }
87
86
 
@@ -2570,14 +2569,19 @@ TEST_F(ExternalSSTFileTest, SkipBloomFilter) {
2570
2569
  options.statistics->getTickerCount(Tickers::BLOCK_CACHE_FILTER_ADD), 1);
2571
2570
  }
2572
2571
 
2573
- // Create external SST file but skip bloom filters
2572
+ // Create external SST file but skip bloom filters by using options
2573
+ // with no filter policy
2574
2574
  options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
2575
2575
  DestroyAndReopen(options);
2576
2576
  {
2577
2577
  std::string file_path = sst_files_dir_ + "sst_with_no_bloom.sst";
2578
- SstFileWriter sst_file_writer(EnvOptions(), options, nullptr, true,
2579
- Env::IOPriority::IO_TOTAL,
2580
- true /* skip_filters */);
2578
+ // Use options with no filter policy to skip bloom filters
2579
+ Options no_filter_options = options;
2580
+ BlockBasedTableOptions no_filter_table_options = table_options;
2581
+ no_filter_table_options.filter_policy.reset();
2582
+ no_filter_options.table_factory.reset(
2583
+ NewBlockBasedTableFactory(no_filter_table_options));
2584
+ SstFileWriter sst_file_writer(EnvOptions(), no_filter_options);
2581
2585
  ASSERT_OK(sst_file_writer.Open(file_path));
2582
2586
  ASSERT_OK(sst_file_writer.Put("Key1", "Value1"));
2583
2587
  ASSERT_OK(sst_file_writer.Finish());
@@ -4040,7 +4044,7 @@ TEST_P(IngestDBGeneratedFileTest2, NotOverlapWithDB) {
4040
4044
  std::string db2_path = test::PerThreadDBPath("DB2");
4041
4045
  Options db2_options;
4042
4046
  db2_options.create_if_missing = true;
4043
- DB* db2 = nullptr;
4047
+ std::unique_ptr<DB> db2;
4044
4048
  ASSERT_OK(DB::Open(db2_options, db2_path, &db2));
4045
4049
  // Write some base data.
4046
4050
  expected_value.emplace_back(rnd.RandomString(100));
@@ -4069,10 +4073,10 @@ TEST_P(IngestDBGeneratedFileTest2, NotOverlapWithDB) {
4069
4073
  ASSERT_OK(db_->DropColumnFamily(temp_cfh));
4070
4074
  ASSERT_OK(db_->DestroyColumnFamilyHandle(temp_cfh));
4071
4075
  ASSERT_OK(db2->Close());
4072
- delete db2;
4076
+ db2.reset();
4073
4077
  ASSERT_OK(DB::Open(db2_options, db2_path, &db2));
4074
4078
  ASSERT_OK(db2->Close());
4075
- delete db2;
4079
+ db2.reset();
4076
4080
  ASSERT_OK(DestroyDB(db2_path, db2_options));
4077
4081
  } else {
4078
4082
  ASSERT_OK(db_->DropColumnFamily(temp_cfh));
@@ -4135,6 +4139,7 @@ TEST_P(IngestDBGeneratedFileTest2, NonZeroSeqno) {
4135
4139
  // Create temp CF/DB
4136
4140
  Options temp_cf_opts;
4137
4141
  ColumnFamilyHandle* temp_cfh = nullptr;
4142
+ std::unique_ptr<DB> temp_db_holder;
4138
4143
  DB* from_db = nullptr;
4139
4144
  std::string temp_db_name;
4140
4145
  // Using a separate DB also validates that latest sequence number
@@ -4155,10 +4160,11 @@ TEST_P(IngestDBGeneratedFileTest2, NonZeroSeqno) {
4155
4160
  if (use_temp_db) {
4156
4161
  temp_cf_opts.create_if_missing = true;
4157
4162
  temp_db_name = dbname_ + "/temp_db_" + std::to_string(rnd->Next());
4158
- ASSERT_OK(DB::Open(temp_cf_opts, temp_db_name, &from_db));
4163
+ ASSERT_OK(DB::Open(temp_cf_opts, temp_db_name, &temp_db_holder));
4164
+ from_db = temp_db_holder.get();
4159
4165
  temp_cfh = from_db->DefaultColumnFamily();
4160
4166
  } else {
4161
- from_db = db_;
4167
+ from_db = db_.get();
4162
4168
  ASSERT_OK(
4163
4169
  from_db->CreateColumnFamily(temp_cf_opts, "temp_cf", &temp_cfh));
4164
4170
  }
@@ -4293,7 +4299,7 @@ TEST_P(IngestDBGeneratedFileTest2, NonZeroSeqno) {
4293
4299
  ASSERT_OK(db_->WaitForCompact({}));
4294
4300
  if (use_temp_db) {
4295
4301
  ASSERT_OK(from_db->Close());
4296
- delete from_db;
4302
+ temp_db_holder.reset();
4297
4303
  ASSERT_OK(DestroyDB(temp_db_name, temp_cf_opts));
4298
4304
  } else {
4299
4305
  ASSERT_OK(db_->DropColumnFamily(temp_cfh));
@@ -4381,7 +4387,7 @@ TEST_P(IngestDBGeneratedFileTest2, ZeroAndNonZeroSeqno) {
4381
4387
 
4382
4388
  std::string temp_db_name =
4383
4389
  dbname_ + "/temp_db_" + std::to_string(rnd->Next());
4384
- DB* temp_db = nullptr;
4390
+ std::unique_ptr<DB> temp_db;
4385
4391
  ASSERT_OK(DB::Open(temp_db_opts, temp_db_name, &temp_db));
4386
4392
 
4387
4393
  const Snapshot* snapshot = db_->GetSnapshot();
@@ -4444,7 +4450,7 @@ TEST_P(IngestDBGeneratedFileTest2, ZeroAndNonZeroSeqno) {
4444
4450
  cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
4445
4451
  ASSERT_OK(temp_db->CompactRange(cro, nullptr, nullptr));
4446
4452
  SCOPED_TRACE("Temp DB LSM: " +
4447
- FilesPerLevel(temp_db->DefaultColumnFamily(), temp_db));
4453
+ FilesPerLevel(temp_db->DefaultColumnFamily(), temp_db.get()));
4448
4454
 
4449
4455
  // Base data from snapshot
4450
4456
  std::vector<std::string> sst_file_paths_zero_seqno;
@@ -4539,7 +4545,7 @@ TEST_P(IngestDBGeneratedFileTest2, ZeroAndNonZeroSeqno) {
4539
4545
  ASSERT_OK(db_->DestroyColumnFamilyHandle(live_write_cfh));
4540
4546
 
4541
4547
  ASSERT_OK(temp_db->Close());
4542
- delete temp_db;
4548
+ temp_db.reset();
4543
4549
  ASSERT_OK(DestroyDB(temp_db_name, temp_db_opts));
4544
4550
  } while (ChangeOptions(kSkipPlainTable | kSkipFIFOCompaction));
4545
4551
  }
@@ -76,7 +76,7 @@ class FaultInjectionTest
76
76
  std::string dbname_;
77
77
  std::shared_ptr<Cache> tiny_cache_;
78
78
  Options options_;
79
- DB* db_;
79
+ std::unique_ptr<DB> db_;
80
80
 
81
81
  FaultInjectionTest()
82
82
  : option_config_(std::get<1>(GetParam())),
@@ -260,10 +260,7 @@ class FaultInjectionTest
260
260
  return Slice(*storage);
261
261
  }
262
262
 
263
- void CloseDB() {
264
- delete db_;
265
- db_ = nullptr;
266
- }
263
+ void CloseDB() { db_.reset(); }
267
264
 
268
265
  Status OpenDB() {
269
266
  CloseDB();
@@ -348,7 +345,8 @@ class FaultInjectionTest
348
345
  }
349
346
 
350
347
  void WaitCompactionFinish() {
351
- ASSERT_OK(static_cast<DBImpl*>(db_->GetRootDB())->TEST_WaitForCompact());
348
+ ASSERT_OK(static_cast_with_check<DBImpl>(db_->GetRootDB())
349
+ ->TEST_WaitForCompact());
352
350
  ASSERT_OK(db_->Put(WriteOptions(), "", ""));
353
351
  }
354
352
 
@@ -616,10 +616,17 @@ Status FlushJob::MemPurge() {
616
616
  !(new_mem->ShouldFlushNow())) {
617
617
  // Construct fragmented memtable range tombstones without mutex
618
618
  new_mem->ConstructFragmentedRangeTombstones();
619
+ TEST_SYNC_POINT("FlushJob::MemPurge:BeforeReacquireMutex");
620
+ TEST_SYNC_POINT("FlushJob::MemPurge:AfterWaitForTest");
619
621
  db_mutex_->Lock();
620
622
  // Take the newest id, so that memtables in MemtableList don't have
621
- // out-of-order memtable ids.
622
- uint64_t new_mem_id = mems_.back()->GetID();
623
+ // out-of-order memtable ids. While the db mutex was released during
624
+ // MemPurge, new memtables may have been switched to the immutable
625
+ // list with higher IDs, so we must use the maximum of the original
626
+ // flush batch ID and the current latest immutable memtable ID.
627
+ uint64_t new_mem_id = std::max(
628
+ mems_.back()->GetID(),
629
+ cfd_->imm()->GetLatestMemTableID(false /*for_atomic_flush*/));
623
630
 
624
631
  new_mem->SetID(new_mem_id);
625
632
  // Take the latest memtable's next log number.
@@ -1095,7 +1102,8 @@ Status FlushJob::WriteLevel0Table() {
1095
1102
  meta_.file_creation_time, meta_.epoch_number,
1096
1103
  meta_.file_checksum, meta_.file_checksum_func_name,
1097
1104
  meta_.unique_id, meta_.compensated_range_deletion_size,
1098
- meta_.tail_size, meta_.user_defined_timestamps_persisted);
1105
+ meta_.tail_size, meta_.user_defined_timestamps_persisted,
1106
+ meta_.min_timestamp, meta_.max_timestamp);
1099
1107
  edit_->SetBlobFileAdditions(std::move(blob_file_additions));
1100
1108
  }
1101
1109
  // Piggyback FlushJobInfo on the first first flushed memtable.
@@ -344,19 +344,18 @@ int main(int argc, char** argv) {
344
344
 
345
345
  status = ROCKSDB_NAMESPACE::DestroyDB(path, options);
346
346
  assert(status.ok());
347
- ROCKSDB_NAMESPACE::DB* db_raw;
348
- status = ROCKSDB_NAMESPACE::DB::Open(options, path, &db_raw);
347
+ std::unique_ptr<ROCKSDB_NAMESPACE::DB> db;
348
+ status = ROCKSDB_NAMESPACE::DB::Open(options, path, &db);
349
349
  assert(status.ok());
350
- std::unique_ptr<ROCKSDB_NAMESPACE::DB> db(db_raw);
351
350
 
352
351
  std::vector<ShardState> shard_states(FLAGS_shards + 1);
353
352
  std::deque<Reader> readers;
354
353
  while (static_cast<int>(readers.size()) < FLAGS_readers) {
355
- readers.emplace_back(&shard_states, db_raw);
354
+ readers.emplace_back(&shard_states, db.get());
356
355
  }
357
356
  std::deque<Writer> writers;
358
357
  while (static_cast<int>(writers.size()) < FLAGS_writers) {
359
- writers.emplace_back(&shard_states, db_raw);
358
+ writers.emplace_back(&shard_states, db.get());
360
359
  }
361
360
 
362
361
  // Each shard gets a random reader and random writer assigned to it
@@ -367,7 +366,7 @@ int main(int argc, char** argv) {
367
366
  shard_states[i].writer = &writers[writer_dist(rng)];
368
367
  }
369
368
 
370
- StatsThread stats_thread(db_raw);
369
+ StatsThread stats_thread(db.get());
371
370
  for (Writer& w : writers) {
372
371
  w.start();
373
372
  }
@@ -310,8 +310,10 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
310
310
  std::unique_ptr<FSRandomAccessFile> sst_file;
311
311
  std::unique_ptr<RandomAccessFileReader> sst_file_reader;
312
312
 
313
- status =
314
- fs_->NewRandomAccessFile(external_file, env_options_, &sst_file, nullptr);
313
+ FileOptions fo{env_options_};
314
+ fo.file_checksum = file_meta.file_checksum;
315
+ fo.file_checksum_func_name = file_meta.file_checksum_func_name;
316
+ status = fs_->NewRandomAccessFile(external_file, fo, &sst_file, nullptr);
315
317
  if (!status.ok()) {
316
318
  return status;
317
319
  }
@@ -371,7 +371,7 @@ TEST_F(ImportColumnFamilyTest, ImportExportedSSTFromAnotherCF) {
371
371
  ASSERT_OK(Flush(1));
372
372
 
373
373
  Checkpoint* checkpoint;
374
- ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
374
+ ASSERT_OK(Checkpoint::Create(db_.get(), &checkpoint));
375
375
  ASSERT_OK(checkpoint->ExportColumnFamily(handles_[1], export_files_dir_,
376
376
  &metadata_ptr_));
377
377
  ASSERT_NE(metadata_ptr_, nullptr);
@@ -481,14 +481,14 @@ TEST_F(ImportColumnFamilyTest, ImportExportedSSTFromAnotherDB) {
481
481
  ASSERT_OK(Flush(1));
482
482
 
483
483
  Checkpoint* checkpoint;
484
- ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
484
+ ASSERT_OK(Checkpoint::Create(db_.get(), &checkpoint));
485
485
  ASSERT_OK(checkpoint->ExportColumnFamily(handles_[1], export_files_dir_,
486
486
  &metadata_ptr_));
487
487
  ASSERT_NE(metadata_ptr_, nullptr);
488
488
  delete checkpoint;
489
489
 
490
490
  // Create a new db and import the files.
491
- DB* db_copy;
491
+ std::unique_ptr<DB> db_copy;
492
492
  ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
493
493
  ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy));
494
494
  ColumnFamilyHandle* cfh = nullptr;
@@ -504,7 +504,7 @@ TEST_F(ImportColumnFamilyTest, ImportExportedSSTFromAnotherDB) {
504
504
  }
505
505
  ASSERT_OK(db_copy->DropColumnFamily(cfh));
506
506
  ASSERT_OK(db_copy->DestroyColumnFamilyHandle(cfh));
507
- delete db_copy;
507
+ db_copy.reset();
508
508
  ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
509
509
  }
510
510
 
@@ -529,7 +529,7 @@ TEST_F(ImportColumnFamilyTest,
529
529
  ASSERT_OK(db_->DeleteRange(WriteOptions(), handles_[1], Key(0), Key(2)));
530
530
 
531
531
  Checkpoint* checkpoint;
532
- ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
532
+ ASSERT_OK(Checkpoint::Create(db_.get(), &checkpoint));
533
533
  ASSERT_OK(checkpoint->ExportColumnFamily(handles_[1], export_files_dir_,
534
534
  &metadata_ptr_));
535
535
  ASSERT_NE(metadata_ptr_, nullptr);
@@ -605,14 +605,14 @@ TEST_F(ImportColumnFamilyTest, LevelFilesOverlappingAtEndpoints) {
605
605
  ASSERT_GT(NumTableFilesAtLevel(1, 1), 1);
606
606
 
607
607
  Checkpoint* checkpoint;
608
- ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
608
+ ASSERT_OK(Checkpoint::Create(db_.get(), &checkpoint));
609
609
  ASSERT_OK(checkpoint->ExportColumnFamily(handles_[1], export_files_dir_,
610
610
  &metadata_ptr_));
611
611
  ASSERT_NE(metadata_ptr_, nullptr);
612
612
  delete checkpoint;
613
613
 
614
614
  // Create a new db and import the files.
615
- DB* db_copy;
615
+ std::unique_ptr<DB> db_copy;
616
616
  ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
617
617
  ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy));
618
618
  ColumnFamilyHandle* cfh = nullptr;
@@ -627,7 +627,7 @@ TEST_F(ImportColumnFamilyTest, LevelFilesOverlappingAtEndpoints) {
627
627
  }
628
628
  ASSERT_OK(db_copy->DropColumnFamily(cfh));
629
629
  ASSERT_OK(db_copy->DestroyColumnFamilyHandle(cfh));
630
- delete db_copy;
630
+ db_copy.reset();
631
631
  ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
632
632
  for (const Snapshot* snapshot : snapshots) {
633
633
  db_->ReleaseSnapshot(snapshot);
@@ -771,12 +771,12 @@ TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyTest) {
771
771
 
772
772
  Checkpoint* checkpoint1;
773
773
  Checkpoint* checkpoint2;
774
- ASSERT_OK(Checkpoint::Create(db_, &checkpoint1));
774
+ ASSERT_OK(Checkpoint::Create(db_.get(), &checkpoint1));
775
775
  ASSERT_OK(checkpoint1->ExportColumnFamily(handles_[1], export_files_dir_,
776
776
  &metadata_ptr_));
777
777
 
778
778
  // Create a new db and import the files.
779
- DB* db_copy;
779
+ std::unique_ptr<DB> db_copy;
780
780
  ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
781
781
  ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy));
782
782
  ColumnFamilyHandle* copy_cfh = nullptr;
@@ -796,7 +796,7 @@ TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyTest) {
796
796
  ASSERT_OK(db_copy->Flush(FlushOptions()));
797
797
 
798
798
  // Flush again to create another L0 file. It should have higher sequencer.
799
- ASSERT_OK(Checkpoint::Create(db_copy, &checkpoint2));
799
+ ASSERT_OK(Checkpoint::Create(db_copy.get(), &checkpoint2));
800
800
  ASSERT_OK(checkpoint2->ExportColumnFamily(copy_cfh, export_files_dir2_,
801
801
  &metadata_ptr2_));
802
802
 
@@ -826,7 +826,7 @@ TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyTest) {
826
826
 
827
827
  ASSERT_OK(db_copy->DropColumnFamily(copy_cfh));
828
828
  ASSERT_OK(db_copy->DestroyColumnFamilyHandle(copy_cfh));
829
- delete db_copy;
829
+ db_copy.reset();
830
830
  ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
831
831
  }
832
832
 
@@ -840,12 +840,12 @@ TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyWithOverlap) {
840
840
 
841
841
  Checkpoint* checkpoint1;
842
842
  Checkpoint* checkpoint2;
843
- ASSERT_OK(Checkpoint::Create(db_, &checkpoint1));
843
+ ASSERT_OK(Checkpoint::Create(db_.get(), &checkpoint1));
844
844
  ASSERT_OK(checkpoint1->ExportColumnFamily(handles_[1], export_files_dir_,
845
845
  &metadata_ptr_));
846
846
 
847
847
  // Create a new db and import the files.
848
- DB* db_copy;
848
+ std::unique_ptr<DB> db_copy;
849
849
  ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
850
850
  ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy));
851
851
  ColumnFamilyHandle* copy_cfh = nullptr;
@@ -857,7 +857,7 @@ TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyWithOverlap) {
857
857
  ASSERT_OK(db_copy->Flush(FlushOptions()));
858
858
 
859
859
  // Flush again to create another L0 file. It should have higher sequencer.
860
- ASSERT_OK(Checkpoint::Create(db_copy, &checkpoint2));
860
+ ASSERT_OK(Checkpoint::Create(db_copy.get(), &checkpoint2));
861
861
  ASSERT_OK(checkpoint2->ExportColumnFamily(copy_cfh, export_files_dir2_,
862
862
  &metadata_ptr2_));
863
863
 
@@ -877,7 +877,7 @@ TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyWithOverlap) {
877
877
 
878
878
  ASSERT_OK(db_copy->DropColumnFamily(copy_cfh));
879
879
  ASSERT_OK(db_copy->DestroyColumnFamilyHandle(copy_cfh));
880
- delete db_copy;
880
+ db_copy.reset();
881
881
  ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
882
882
  }
883
883
 
@@ -1017,7 +1017,7 @@ TEST_F(ImportColumnFamilyTest, AssignEpochNumberToMultipleCF) {
1017
1017
  // corruption where two L0 files can have the same epoch number but
1018
1018
  // with overlapping key range.
1019
1019
  Checkpoint* checkpoint1;
1020
- ASSERT_OK(Checkpoint::Create(db_, &checkpoint1));
1020
+ ASSERT_OK(Checkpoint::Create(db_.get(), &checkpoint1));
1021
1021
  ASSERT_OK(checkpoint1->ExportColumnFamily(handles_[1], export_files_dir_,
1022
1022
  &metadata_ptr_));
1023
1023
  ASSERT_OK(checkpoint1->ExportColumnFamily(handles_[2], export_files_dir2_,
@@ -310,6 +310,7 @@ static const std::string aggregated_table_properties_at_level =
310
310
  static const std::string num_running_compactions = "num-running-compactions";
311
311
  static const std::string num_running_compaction_sorted_runs =
312
312
  "num-running-compaction-sorted-runs";
313
+ static const std::string compaction_abort_count = "compaction-abort-count";
313
314
  static const std::string num_running_flushes = "num-running-flushes";
314
315
  static const std::string actual_delayed_write_rate =
315
316
  "actual-delayed-write-rate";
@@ -362,6 +363,8 @@ const std::string DB::Properties::kNumRunningCompactions =
362
363
  rocksdb_prefix + num_running_compactions;
363
364
  const std::string DB::Properties::kNumRunningCompactionSortedRuns =
364
365
  rocksdb_prefix + num_running_compaction_sorted_runs;
366
+ const std::string DB::Properties::kCompactionAbortCount =
367
+ rocksdb_prefix + compaction_abort_count;
365
368
  const std::string DB::Properties::kNumRunningFlushes =
366
369
  rocksdb_prefix + num_running_flushes;
367
370
  const std::string DB::Properties::kBackgroundErrors =
@@ -594,6 +597,9 @@ const UnorderedMap<std::string, DBPropertyInfo>
594
597
  {DB::Properties::kNumRunningCompactionSortedRuns,
595
598
  {false, nullptr, &InternalStats::HandleNumRunningCompactionSortedRuns,
596
599
  nullptr, nullptr}},
600
+ {DB::Properties::kCompactionAbortCount,
601
+ {false, nullptr, &InternalStats::HandleCompactionAbortCount, nullptr,
602
+ nullptr}},
597
603
  {DB::Properties::kActualDelayedWriteRate,
598
604
  {false, nullptr, &InternalStats::HandleActualDelayedWriteRate, nullptr,
599
605
  nullptr}},
@@ -1292,6 +1298,13 @@ bool InternalStats::HandleNumRunningCompactionSortedRuns(uint64_t* value,
1292
1298
  return true;
1293
1299
  }
1294
1300
 
1301
+ bool InternalStats::HandleCompactionAbortCount(uint64_t* value, DBImpl* db,
1302
+ Version* /*version*/) {
1303
+ *value = static_cast<uint64_t>(
1304
+ db->compaction_aborted_.load(std::memory_order_acquire));
1305
+ return true;
1306
+ }
1307
+
1295
1308
  bool InternalStats::HandleBackgroundErrors(uint64_t* value, DBImpl* /*db*/,
1296
1309
  Version* /*version*/) {
1297
1310
  // Accumulated number of errors in background flushes or compactions.
@@ -852,6 +852,8 @@ class InternalStats {
852
852
  Version* version);
853
853
  bool HandleNumRunningCompactionSortedRuns(uint64_t* value, DBImpl* db,
854
854
  Version* version);
855
+ bool HandleCompactionAbortCount(uint64_t* value, DBImpl* db,
856
+ Version* version);
855
857
  bool HandleBackgroundErrors(uint64_t* value, DBImpl* db, Version* version);
856
858
  bool HandleCurSizeActiveMemTable(uint64_t* value, DBImpl* db,
857
859
  Version* version);