@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
@@ -183,11 +183,11 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferAcrossCFs2) {
183
183
  // is waiting to be finished but DBs tries to write meanwhile.
184
184
  TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
185
185
  std::vector<std::string> dbnames;
186
- std::vector<DB*> dbs;
186
+ std::vector<std::unique_ptr<DB>> dbs;
187
187
  int num_dbs = 3;
188
188
 
189
189
  for (int i = 0; i < num_dbs; i++) {
190
- dbs.push_back(nullptr);
190
+ dbs.emplace_back();
191
191
  dbnames.push_back(
192
192
  test::PerThreadDBPath("db_shared_wb_db" + std::to_string(i)));
193
193
  }
@@ -266,7 +266,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
266
266
  // Last writer will write and when its blocked it will signal Flush to
267
267
  // continue to clear the stall.
268
268
 
269
- threads.emplace_back(write_db, db_);
269
+ threads.emplace_back(write_db, db_.get());
270
270
  // Wait untill first DB is blocked and then create the multiple writers for
271
271
  // different DBs which will be blocked from getting added to the queue because
272
272
  // stall is in effect.
@@ -277,7 +277,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
277
277
  }
278
278
  }
279
279
  for (int i = 0; i < num_dbs; i++) {
280
- threads.emplace_back(write_db, dbs[i]);
280
+ threads.emplace_back(write_db, dbs[i].get());
281
281
  }
282
282
  for (auto& t : threads) {
283
283
  t.join();
@@ -289,7 +289,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
289
289
  for (int i = 0; i < num_dbs; i++) {
290
290
  ASSERT_OK(dbs[i]->Close());
291
291
  ASSERT_OK(DestroyDB(dbnames[i], options));
292
- delete dbs[i];
292
+ dbs[i].reset();
293
293
  }
294
294
 
295
295
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
@@ -300,11 +300,11 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB) {
300
300
  // blocked when stall by WriteBufferManager is in effect.
301
301
  TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB1) {
302
302
  std::vector<std::string> dbnames;
303
- std::vector<DB*> dbs;
303
+ std::vector<std::unique_ptr<DB>> dbs;
304
304
  int num_dbs = 3;
305
305
 
306
306
  for (int i = 0; i < num_dbs; i++) {
307
- dbs.push_back(nullptr);
307
+ dbs.emplace_back();
308
308
  dbnames.push_back(
309
309
  test::PerThreadDBPath("db_shared_wb_db" + std::to_string(i)));
310
310
  }
@@ -407,7 +407,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB1) {
407
407
  // |
408
408
  // Last writer thread will write and when its blocked it will signal Flush to
409
409
  // continue to clear the stall.
410
- threads.emplace_back(write_db, db_);
410
+ threads.emplace_back(write_db, db_.get());
411
411
  // Wait untill first thread is blocked and then create the multiple writer
412
412
  // threads.
413
413
  {
@@ -421,7 +421,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB1) {
421
421
  // Write to multiple columns of db_.
422
422
  writer_threads.emplace_back(write_cf, i % 3);
423
423
  // Write to different dbs.
424
- threads.emplace_back(write_db, dbs[i]);
424
+ threads.emplace_back(write_db, dbs[i].get());
425
425
  }
426
426
  for (auto& t : threads) {
427
427
  t.join();
@@ -441,7 +441,7 @@ TEST_P(DBWriteBufferManagerTest, SharedWriteBufferLimitAcrossDB1) {
441
441
  for (int i = 0; i < num_dbs; i++) {
442
442
  ASSERT_OK(dbs[i]->Close());
443
443
  ASSERT_OK(DestroyDB(dbnames[i], options));
444
- delete dbs[i];
444
+ dbs[i].reset();
445
445
  }
446
446
 
447
447
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
@@ -604,11 +604,11 @@ TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsSingleDB) {
604
604
  // dbs by passing different values to WriteOption.no_slown_down.
605
605
  TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsMultipleDB) {
606
606
  std::vector<std::string> dbnames;
607
- std::vector<DB*> dbs;
607
+ std::vector<std::unique_ptr<DB>> dbs;
608
608
  int num_dbs = 4;
609
609
 
610
610
  for (int i = 0; i < num_dbs; i++) {
611
- dbs.push_back(nullptr);
611
+ dbs.emplace_back();
612
612
  dbnames.push_back(
613
613
  test::PerThreadDBPath("db_shared_wb_db" + std::to_string(i)));
614
614
  }
@@ -732,7 +732,7 @@ TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsMultipleDB) {
732
732
  // |
733
733
  // Last writer thread will write and when its blocked/return it will signal
734
734
  // Flush to continue to clear the stall.
735
- threads.emplace_back(write_slow_down, db_);
735
+ threads.emplace_back(write_slow_down, db_.get());
736
736
  // Wait untill first thread writing to DB is blocked and then
737
737
  // create the multiple writers.
738
738
  {
@@ -744,11 +744,11 @@ TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsMultipleDB) {
744
744
 
745
745
  for (int i = 0; i < num_dbs; i += 2) {
746
746
  // Write to multiple columns of db_.
747
- writer_threads.emplace_back(write_slow_down, db_);
748
- writer_threads.emplace_back(write_no_slow_down, db_);
747
+ writer_threads.emplace_back(write_slow_down, db_.get());
748
+ writer_threads.emplace_back(write_no_slow_down, db_.get());
749
749
  // Write to different DBs.
750
- threads.emplace_back(write_slow_down, dbs[i]);
751
- threads.emplace_back(write_no_slow_down, dbs[i + 1]);
750
+ threads.emplace_back(write_slow_down, dbs[i].get());
751
+ threads.emplace_back(write_no_slow_down, dbs[i + 1].get());
752
752
  }
753
753
 
754
754
  for (auto& t : threads) {
@@ -773,7 +773,7 @@ TEST_P(DBWriteBufferManagerTest, MixedSlowDownOptionsMultipleDB) {
773
773
  for (int i = 0; i < num_dbs; i++) {
774
774
  ASSERT_OK(dbs[i]->Close());
775
775
  ASSERT_OK(DestroyDB(dbnames[i], options));
776
- delete dbs[i];
776
+ dbs[i].reset();
777
777
  }
778
778
 
779
779
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
@@ -809,7 +809,7 @@ TEST_P(DBWriteBufferManagerTest, StopSwitchingMemTablesOnceFlushing) {
809
809
 
810
810
  Reopen(options);
811
811
  std::string dbname = test::PerThreadDBPath("db_shared_wbm_db");
812
- DB* shared_wbm_db = nullptr;
812
+ std::unique_ptr<DB> shared_wbm_db;
813
813
 
814
814
  ASSERT_OK(DestroyDB(dbname, options));
815
815
  ASSERT_OK(DB::Open(options, dbname, &shared_wbm_db));
@@ -842,7 +842,7 @@ TEST_P(DBWriteBufferManagerTest, StopSwitchingMemTablesOnceFlushing) {
842
842
  sleeping_task_high.WaitUntilDone();
843
843
  ASSERT_OK(shared_wbm_db->Close());
844
844
  ASSERT_OK(DestroyDB(dbname, options));
845
- delete shared_wbm_db;
845
+ shared_wbm_db.reset();
846
846
  }
847
847
 
848
848
  TEST_F(DBWriteBufferManagerTest, RuntimeChangeableAllowStall) {
@@ -913,6 +913,270 @@ TEST_F(DBWriteBufferManagerTest, RuntimeChangeableAllowStall) {
913
913
  sleeping_task->WakeUp();
914
914
  }
915
915
 
916
+ // Test that enforce_write_buffer_manager_during_recovery option controls
917
+ // whether WriteBufferManager limits are respected during WAL recovery.
918
+ // When enabled, flushes are triggered to keep memory bounded.
919
+ // When disabled (default), memory can grow beyond the configured limit.
920
+ TEST_F(DBWriteBufferManagerTest,
921
+ WriteBufferManagerLimitDuringWALRecoverySingleDB) {
922
+ const size_t kWbmLimit = 1 * 1024 * 1024; // 1 MB
923
+ const size_t kWbmLimitForWrites = 100 * 1024 * 1024; // 100 MB (no flush)
924
+
925
+ Options options = CurrentOptions();
926
+ options.arena_block_size = 4096;
927
+ options.write_buffer_size = 10 * 1024 * 1024; // 10MB per CF, never hit
928
+ options.max_write_buffer_number = 10; // Allow many memtables
929
+ options.disable_auto_compactions = true;
930
+
931
+ // Use avoid_flush_during_recovery = true to prevent any flushes triggered
932
+ // during the recovery
933
+ options.avoid_flush_during_recovery = true;
934
+
935
+ const int kNumKeys = 50;
936
+ const int kValueSize = 50 * 1024; // 50 KB each, total ~2.5 MB > 1MB limit
937
+
938
+ // ========== Part 1: Test with enforcement DISABLED (default behavior) =====
939
+ // WBM limits are not enforced during recovery
940
+ options.enforce_write_buffer_manager_during_recovery = false;
941
+
942
+ // Use large WBM limit during writes to avoid triggering flushes
943
+ options.write_buffer_manager =
944
+ std::make_shared<WriteBufferManager>(kWbmLimitForWrites, nullptr, true);
945
+ DestroyAndReopen(options);
946
+
947
+ for (int i = 0; i < kNumKeys; i++) {
948
+ ASSERT_OK(Put(Key(i), DummyString(kValueSize)));
949
+ }
950
+
951
+ // Check to make sure there's no L0 file
952
+ ASSERT_EQ(0, TotalTableFiles());
953
+ Close();
954
+
955
+ // Use smaller WBM limit for recovery
956
+ options.write_buffer_manager =
957
+ std::make_shared<WriteBufferManager>(kWbmLimit, nullptr, true);
958
+
959
+ // Recovery without enforcement - memory should exceed the limit
960
+ Reopen(options);
961
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
962
+ size_t memory_without_enforcement =
963
+ options.write_buffer_manager->mutable_memtable_memory_usage();
964
+
965
+ ASSERT_GT(memory_without_enforcement, kWbmLimit)
966
+ << "Without enforcement, memory (" << memory_without_enforcement
967
+ << ") should exceed the WBM limit (" << kWbmLimit << ")";
968
+
969
+ // Still no L0 file since avoid_flush_during_recovery is true
970
+ ASSERT_EQ(0, TotalTableFiles());
971
+
972
+ // ========== Part 2: Test with enforcement ENABLED ==========================
973
+ options.enforce_write_buffer_manager_during_recovery = true;
974
+
975
+ // Use large WBM limit during writes to avoid triggering flushes
976
+ options.write_buffer_manager =
977
+ std::make_shared<WriteBufferManager>(kWbmLimitForWrites, nullptr, true);
978
+ DestroyAndReopen(options);
979
+
980
+ for (int i = 0; i < kNumKeys; i++) {
981
+ ASSERT_OK(Put(Key(i), DummyString(kValueSize)));
982
+ }
983
+ // Check to make sure there's no L0 file
984
+ ASSERT_EQ(0, TotalTableFiles());
985
+ Close();
986
+
987
+ // Use smaller WBM limit for recovery
988
+ options.write_buffer_manager =
989
+ std::make_shared<WriteBufferManager>(kWbmLimit, nullptr, true);
990
+
991
+ // Recovery with enforcement - memory should be bounded
992
+ Reopen(options);
993
+
994
+ // Wait for flush to finish
995
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
996
+
997
+ // WBM's ShouldFlush() compares active memtable mem usage against
998
+ // mutable_limit_ which is 7/8 of buffer_size.
999
+ size_t expected_num_l0_files =
1000
+ memory_without_enforcement / (kWbmLimit * 7 / 8) + 1;
1001
+ ASSERT_EQ(expected_num_l0_files, TotalTableFiles());
1002
+
1003
+ size_t memory_with_enforcement =
1004
+ options.write_buffer_manager->mutable_memtable_memory_usage();
1005
+
1006
+ ASSERT_LT(memory_with_enforcement, kWbmLimit)
1007
+ << "With enforcement, memory (" << memory_with_enforcement
1008
+ << ") should be less than the limit " << kWbmLimit << ")";
1009
+ }
1010
+
1011
+ TEST_F(DBWriteBufferManagerTest,
1012
+ WriteBufferManagerLimitDuringWALRecoveryMultipleDBs) {
1013
+ // Two DBs with 4MB WBM limit.
1014
+ // First DB writes 2.5MB and closes, no flush (mem usage goes back to 0)
1015
+ // Second DB writes 2.5MB then first DB reopens.
1016
+ const size_t kWbmLimitForTwoDbs = 4 * 1024 * 1024;
1017
+
1018
+ Options options = CurrentOptions();
1019
+ options.arena_block_size = 2048;
1020
+ options.write_buffer_size = 10 * 1024 * 1024; // 10MB per CF, never hit
1021
+ options.max_write_buffer_number = 10; // Allow many memtables
1022
+ options.disable_auto_compactions = true;
1023
+
1024
+ // Use avoid_flush_during_recovery = true to prevent any flushes triggered
1025
+ // during the recovery
1026
+ options.avoid_flush_during_recovery = true;
1027
+
1028
+ const int kNumKeys = 50;
1029
+ const int kValueSize = 50 * 1024;
1030
+
1031
+ // ========== Part 1: Test with enforcement DISABLED (default behavior) =====
1032
+ // WBM limits are not enforced during recovery
1033
+ options.enforce_write_buffer_manager_during_recovery = false;
1034
+
1035
+ options.write_buffer_manager =
1036
+ std::make_shared<WriteBufferManager>(kWbmLimitForTwoDbs, nullptr, true);
1037
+ DestroyAndReopen(options);
1038
+
1039
+ // Use of 2.5MB shouldn't trigger flush
1040
+ for (int i = 0; i < kNumKeys; i++) {
1041
+ ASSERT_OK(Put(Key(i), DummyString(kValueSize)));
1042
+ }
1043
+ ASSERT_EQ(0, TotalTableFiles());
1044
+
1045
+ size_t mem_usage_first_db_only =
1046
+ options.write_buffer_manager->mutable_memtable_memory_usage();
1047
+
1048
+ ASSERT_LT(mem_usage_first_db_only, kWbmLimitForTwoDbs)
1049
+ << "Memory (" << mem_usage_first_db_only
1050
+ << ") should be less than the limit " << kWbmLimitForTwoDbs << ")";
1051
+
1052
+ Close();
1053
+ ASSERT_EQ(0, options.write_buffer_manager->mutable_memtable_memory_usage());
1054
+
1055
+ // Open a second DB sharing the same WBM, write data to consume memory
1056
+ std::string second_dbname = test::PerThreadDBPath("db_shared_wbm_recovery");
1057
+ std::unique_ptr<DB> second_db;
1058
+ ASSERT_OK(DestroyDB(second_dbname, options));
1059
+ ASSERT_OK(DB::Open(options, second_dbname, &second_db));
1060
+
1061
+ WriteOptions wo;
1062
+ for (int i = 0; i < kNumKeys; i++) {
1063
+ ASSERT_OK(second_db->Put(wo, Key(i), DummyString(kValueSize)));
1064
+ }
1065
+
1066
+ // First DB reopens without enforcement
1067
+ Reopen(options);
1068
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
1069
+
1070
+ // No flush
1071
+ ASSERT_EQ(0, TotalTableFiles());
1072
+
1073
+ size_t memory_usage_for_both =
1074
+ options.write_buffer_manager->mutable_memtable_memory_usage();
1075
+ ASSERT_GT(memory_usage_for_both, kWbmLimitForTwoDbs)
1076
+ << "Without enforcement + shared WBM, memory (" << memory_usage_for_both
1077
+ << ") should be greater than the limit (" << kWbmLimitForTwoDbs << ")";
1078
+
1079
+ // Close the first DB
1080
+ Close();
1081
+
1082
+ // ========== Part 2: Test with enforcement ENABLED =====
1083
+ // WBM limits enforced during recovery
1084
+ options.enforce_write_buffer_manager_during_recovery = true;
1085
+
1086
+ // Reopen the first DB with enforcement option enabled.
1087
+ Reopen(options);
1088
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
1089
+
1090
+ // With enforcement enabled, there were flushes
1091
+ ASSERT_GT(TotalTableFiles(), 0);
1092
+
1093
+ memory_usage_for_both =
1094
+ options.write_buffer_manager->mutable_memtable_memory_usage();
1095
+ ASSERT_LT(memory_usage_for_both, kWbmLimitForTwoDbs)
1096
+ << "With enforcement + shared WBM, memory (" << memory_usage_for_both
1097
+ << ") should be less than the limit (" << kWbmLimitForTwoDbs << ")";
1098
+
1099
+ Close();
1100
+
1101
+ // Clean up second DB
1102
+ ASSERT_OK(second_db->Close());
1103
+ ASSERT_OK(DestroyDB(second_dbname, options));
1104
+ second_db.reset();
1105
+ }
1106
+
1107
+ // Regression test: a WriteBatch that exceeds both per-CF memtable limit and
1108
+ // WBM global limit during WAL recovery should not double-schedule a CF on
1109
+ // flush_scheduler_ (which crashes debug builds via assert).
1110
+ TEST_F(DBWriteBufferManagerTest, DoubleSchedulingBugDuringWALRecovery) {
1111
+ Options options = CurrentOptions();
1112
+ options.arena_block_size = 4096;
1113
+ // Small per-CF limit so memtable triggers CheckMemtableFull during recovery
1114
+ options.write_buffer_size = 64 * 1024; // 64KB
1115
+ options.max_write_buffer_number = 10;
1116
+ options.disable_auto_compactions = true;
1117
+ options.avoid_flush_during_recovery = true;
1118
+ options.enforce_write_buffer_manager_during_recovery = true;
1119
+
1120
+ // WBM limit also small so the WBM loop in InsertLogRecordToMemtable fires
1121
+ options.write_buffer_manager =
1122
+ std::make_shared<WriteBufferManager>(128 * 1024, nullptr, true);
1123
+
1124
+ DestroyAndReopen(options);
1125
+
1126
+ // Write enough data to exceed both limits during recovery replay
1127
+ for (int i = 0; i < 50; i++) {
1128
+ ASSERT_OK(Put(Key(i), DummyString(4096))); // ~200KB total > both limits
1129
+ }
1130
+
1131
+ Close();
1132
+
1133
+ // Reopen triggers WAL recovery. Without the fix, this crashes in debug
1134
+ // builds with assert(checking_set_.count(cfd) == 0) in ScheduleWork().
1135
+ ASSERT_OK(TryReopen(options));
1136
+ }
1137
+
1138
+ // Read-only WAL recovery with enforce_write_buffer_manager_during_recovery
1139
+ // should not crash due to duplicate ScheduleWork() calls on the
1140
+ // flush_scheduler_. The flush scheduler was not drained in read-only mode,
1141
+ // causing the same CFD to be scheduled twice on successive WAL records,
1142
+ // triggering assert(checking_set_.count(cfd) == 0).
1143
+ TEST_F(DBWriteBufferManagerTest, ReadOnlyRecoveryWithEnforceWBMDoesNotAssert) {
1144
+ Options options = CurrentOptions();
1145
+ options.arena_block_size = 4096;
1146
+ options.write_buffer_size = 10 * 1024 * 1024; // 10MB, never hit
1147
+ options.max_write_buffer_number = 10;
1148
+ options.disable_auto_compactions = true;
1149
+ options.avoid_flush_during_recovery = true;
1150
+ options.enforce_write_buffer_manager_during_recovery = true;
1151
+
1152
+ const size_t kWbmLimitForWrites = 100 * 1024 * 1024; // 100MB (no flush)
1153
+ options.write_buffer_manager =
1154
+ std::make_shared<WriteBufferManager>(kWbmLimitForWrites, nullptr, true);
1155
+
1156
+ DestroyAndReopen(options);
1157
+
1158
+ // Write enough data so that WAL recovery will trigger
1159
+ // WriteBufferManager::ShouldFlush() multiple times with a small WBM limit.
1160
+ for (int i = 0; i < 50; i++) {
1161
+ ASSERT_OK(Put(Key(i), DummyString(50 * 1024))); // ~2.5MB total
1162
+ }
1163
+ ASSERT_EQ(0, TotalTableFiles());
1164
+ Close();
1165
+
1166
+ // Reopen read-only with a small WBM limit that will trigger ShouldFlush()
1167
+ // during WAL recovery. Without the fix, this crashes in debug builds with
1168
+ // assert(checking_set_.count(cfd) == 0) in FlushScheduler::ScheduleWork().
1169
+ const size_t kWbmLimit = 1 * 1024 * 1024; // 1MB
1170
+ options.write_buffer_manager =
1171
+ std::make_shared<WriteBufferManager>(kWbmLimit, nullptr, true);
1172
+ ASSERT_OK(ReadOnlyReopen(options));
1173
+
1174
+ // Verify data is readable
1175
+ for (int i = 0; i < 50; i++) {
1176
+ ASSERT_EQ(DummyString(50 * 1024), Get(Key(i)));
1177
+ }
1178
+ }
1179
+
916
1180
  INSTANTIATE_TEST_CASE_P(DBWriteBufferManagerTest, DBWriteBufferManagerTest,
917
1181
  testing::Bool());
918
1182
 
@@ -741,7 +741,7 @@ TEST_P(DBWriteTest, LockWALConcurrentRecursive) {
741
741
  ExternalSstFileInfo external_info;
742
742
  ASSERT_OK(sst_file_writer.Finish(&external_info));
743
743
  }
744
- AcqRelAtomic<bool> parallel_ingest_completed{false};
744
+ Atomic<bool> parallel_ingest_completed{false};
745
745
  port::Thread parallel_ingest{[&]() {
746
746
  IngestExternalFileOptions ingest_opts;
747
747
  ingest_opts.move_files = true; // faster than copy
@@ -750,7 +750,7 @@ TEST_P(DBWriteTest, LockWALConcurrentRecursive) {
750
750
  parallel_ingest_completed.Store(true);
751
751
  }};
752
752
 
753
- AcqRelAtomic<bool> flush_completed{false};
753
+ Atomic<bool> flush_completed{false};
754
754
  port::Thread parallel_flush{[&]() {
755
755
  FlushOptions flush_opts;
756
756
  // NB: Flush with wait=false case is tested above in LockWALInEffect
@@ -762,7 +762,7 @@ TEST_P(DBWriteTest, LockWALConcurrentRecursive) {
762
762
  flush_completed.Store(true);
763
763
  }};
764
764
 
765
- AcqRelAtomic<bool> parallel_put_completed{false};
765
+ Atomic<bool> parallel_put_completed{false};
766
766
  port::Thread parallel_put{[&]() {
767
767
  // This can make certain failure scenarios more likely:
768
768
  // sleep(1);
@@ -980,11 +980,6 @@ class InternalKeySliceTransform : public SliceTransform {
980
980
  return transform_->InDomain(user_key);
981
981
  }
982
982
 
983
- bool InRange(const Slice& dst) const override {
984
- auto user_key = ExtractUserKey(dst);
985
- return transform_->InRange(user_key);
986
- }
987
-
988
983
  const SliceTransform* user_prefix_extractor() const { return transform_; }
989
984
 
990
985
  private:
@@ -201,6 +201,25 @@ std::map<std::tuple<BackgroundErrorReason, Status::Code, bool>,
201
201
  {std::make_tuple(BackgroundErrorReason::kManifestWriteNoWAL,
202
202
  Status::Code::kIOError, false),
203
203
  Status::Severity::kFatalError},
204
+ // Errors during BG async file open
205
+ {std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
206
+ Status::Code::kCorruption, true),
207
+ Status::Severity::kUnrecoverableError},
208
+ {std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
209
+ Status::Code::kCorruption, false),
210
+ Status::Severity::kNoError},
211
+ {std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
212
+ Status::Code::kIncomplete, true),
213
+ Status::Severity::kFatalError},
214
+ {std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
215
+ Status::Code::kIncomplete, false),
216
+ Status::Severity::kNoError},
217
+ {std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
218
+ Status::Code::kNotSupported, true),
219
+ Status::Severity::kFatalError},
220
+ {std::make_tuple(BackgroundErrorReason::kAsyncFileOpen,
221
+ Status::Code::kNotSupported, false),
222
+ Status::Severity::kNoError},
204
223
  };
205
224
 
206
225
  std::map<std::tuple<BackgroundErrorReason, bool>, Status::Severity>
@@ -225,6 +244,11 @@ std::map<std::tuple<BackgroundErrorReason, bool>, Status::Severity>
225
244
  Status::Severity::kFatalError},
226
245
  {std::make_tuple(BackgroundErrorReason::kMemTable, false),
227
246
  Status::Severity::kFatalError},
247
+ // Errors during BG async file open
248
+ {std::make_tuple(BackgroundErrorReason::kAsyncFileOpen, true),
249
+ Status::Severity::kSoftError},
250
+ {std::make_tuple(BackgroundErrorReason::kAsyncFileOpen, false),
251
+ Status::Severity::kNoError},
228
252
  };
229
253
 
230
254
  void ErrorHandler::CancelErrorRecoveryForShutDown() {
@@ -1550,7 +1550,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
1550
1550
  std::vector<FaultInjectionTestFS*> fault_fs;
1551
1551
  std::vector<Options> options;
1552
1552
  std::vector<std::shared_ptr<ErrorHandlerFSListener>> listener;
1553
- std::vector<DB*> db;
1553
+ std::vector<std::unique_ptr<DB>> db;
1554
1554
  std::shared_ptr<SstFileManager> sfm(NewSstFileManager(def_env));
1555
1555
  int kNumDbInstances = 3;
1556
1556
  Random rnd(301);
@@ -1567,7 +1567,6 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
1567
1567
  options[i].writable_file_max_buffer_size = 32768;
1568
1568
  options[i].listeners.emplace_back(listener[i]);
1569
1569
  options[i].sst_file_manager = sfm;
1570
- DB* dbptr;
1571
1570
  char buf[16];
1572
1571
 
1573
1572
  listener[i]->EnableAutoRecovery();
@@ -1576,8 +1575,8 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
1576
1575
  IOStatus::NoSpace("Out of space"));
1577
1576
  snprintf(buf, sizeof(buf), "_%d", i);
1578
1577
  ASSERT_OK(DestroyDB(dbname_ + std::string(buf), options[i]));
1579
- ASSERT_OK(DB::Open(options[i], dbname_ + std::string(buf), &dbptr));
1580
- db.emplace_back(dbptr);
1578
+ ASSERT_OK(
1579
+ DB::Open(options[i], dbname_ + std::string(buf), &db.emplace_back()));
1581
1580
  }
1582
1581
 
1583
1582
  for (auto i = 0; i < kNumDbInstances; ++i) {
@@ -1609,7 +1608,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
1609
1608
  }
1610
1609
 
1611
1610
  for (auto i = 0; i < kNumDbInstances; ++i) {
1612
- Status s = static_cast<DBImpl*>(db[i])->TEST_WaitForCompact();
1611
+ Status s = static_cast<DBImpl*>(db[i].get())->TEST_WaitForCompact();
1613
1612
  ASSERT_EQ(s.severity(), Status::Severity::kSoftError);
1614
1613
  fault_fs[i]->SetFilesystemActive(true);
1615
1614
  }
@@ -1618,7 +1617,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
1618
1617
  for (auto i = 0; i < kNumDbInstances; ++i) {
1619
1618
  std::string prop;
1620
1619
  ASSERT_EQ(listener[i]->WaitForRecovery(5000000), true);
1621
- ASSERT_OK(static_cast<DBImpl*>(db[i])->TEST_WaitForCompact());
1620
+ ASSERT_OK(static_cast<DBImpl*>(db[i].get())->TEST_WaitForCompact());
1622
1621
  EXPECT_TRUE(db[i]->GetProperty(
1623
1622
  "rocksdb.num-files-at-level" + std::to_string(0), &prop));
1624
1623
  EXPECT_EQ(atoi(prop.c_str()), 0);
@@ -1634,7 +1633,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) {
1634
1633
  for (auto i = 0; i < kNumDbInstances; ++i) {
1635
1634
  char buf[16];
1636
1635
  snprintf(buf, sizeof(buf), "_%d", i);
1637
- delete db[i];
1636
+ db[i].reset();
1638
1637
  fault_fs[i]->SetFilesystemActive(true);
1639
1638
  if (getenv("KEEP_DB")) {
1640
1639
  printf("DB is still at %s%s\n", dbname_.c_str(), buf);
@@ -1657,7 +1656,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
1657
1656
  std::vector<FaultInjectionTestFS*> fault_fs;
1658
1657
  std::vector<Options> options;
1659
1658
  std::vector<std::shared_ptr<ErrorHandlerFSListener>> listener;
1660
- std::vector<DB*> db;
1659
+ std::vector<std::unique_ptr<DB>> db;
1661
1660
  std::shared_ptr<SstFileManager> sfm(NewSstFileManager(def_env));
1662
1661
  int kNumDbInstances = 3;
1663
1662
  Random rnd(301);
@@ -1674,7 +1673,6 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
1674
1673
  options[i].writable_file_max_buffer_size = 32768;
1675
1674
  options[i].listeners.emplace_back(listener[i]);
1676
1675
  options[i].sst_file_manager = sfm;
1677
- DB* dbptr;
1678
1676
  char buf[16];
1679
1677
 
1680
1678
  listener[i]->EnableAutoRecovery();
@@ -1695,8 +1693,8 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
1695
1693
  }
1696
1694
  snprintf(buf, sizeof(buf), "_%d", i);
1697
1695
  ASSERT_OK(DestroyDB(dbname_ + std::string(buf), options[i]));
1698
- ASSERT_OK(DB::Open(options[i], dbname_ + std::string(buf), &dbptr));
1699
- db.emplace_back(dbptr);
1696
+ ASSERT_OK(
1697
+ DB::Open(options[i], dbname_ + std::string(buf), &db.emplace_back()));
1700
1698
  }
1701
1699
 
1702
1700
  for (auto i = 0; i < kNumDbInstances; ++i) {
@@ -1732,7 +1730,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
1732
1730
  }
1733
1731
 
1734
1732
  for (auto i = 0; i < kNumDbInstances; ++i) {
1735
- Status s = static_cast<DBImpl*>(db[i])->TEST_WaitForCompact();
1733
+ Status s = static_cast<DBImpl*>(db[i].get())->TEST_WaitForCompact();
1736
1734
  switch (i) {
1737
1735
  case 0:
1738
1736
  ASSERT_EQ(s.severity(), Status::Severity::kSoftError);
@@ -1754,7 +1752,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
1754
1752
  ASSERT_EQ(listener[i]->WaitForRecovery(5000000), true);
1755
1753
  }
1756
1754
  if (i == 1) {
1757
- ASSERT_OK(static_cast<DBImpl*>(db[i])->TEST_WaitForCompact());
1755
+ ASSERT_OK(static_cast<DBImpl*>(db[i].get())->TEST_WaitForCompact());
1758
1756
  }
1759
1757
  EXPECT_TRUE(db[i]->GetProperty(
1760
1758
  "rocksdb.num-files-at-level" + std::to_string(0), &prop));
@@ -1772,7 +1770,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
1772
1770
  char buf[16];
1773
1771
  snprintf(buf, sizeof(buf), "_%d", i);
1774
1772
  fault_fs[i]->SetFilesystemActive(true);
1775
- delete db[i];
1773
+ db[i].reset();
1776
1774
  if (getenv("KEEP_DB")) {
1777
1775
  printf("DB is still at %s%s\n", dbname_.c_str(), buf);
1778
1776
  } else {
@@ -158,15 +158,17 @@ Status UpdateManifestForFilesState(
158
158
  // Current state inconsistent with manifest
159
159
  ++files_updated;
160
160
  edit.DeleteFile(level, number);
161
- edit.AddFile(
162
- level, number, lf->fd.GetPathId(), lf->fd.GetFileSize(),
163
- lf->smallest, lf->largest, lf->fd.smallest_seqno,
164
- lf->fd.largest_seqno, lf->marked_for_compaction, temp,
165
- lf->oldest_blob_file_number, lf->oldest_ancester_time,
166
- lf->file_creation_time, lf->epoch_number, lf->file_checksum,
167
- lf->file_checksum_func_name, lf->unique_id,
168
- lf->compensated_range_deletion_size, lf->tail_size,
169
- lf->user_defined_timestamps_persisted);
161
+ edit.AddFile(level, lf->fd.GetNumber(), lf->fd.GetPathId(),
162
+ lf->fd.GetFileSize(), lf->smallest, lf->largest,
163
+ lf->fd.smallest_seqno, lf->fd.largest_seqno,
164
+ lf->marked_for_compaction, temp,
165
+ lf->oldest_blob_file_number,
166
+ lf->oldest_ancester_time, lf->file_creation_time,
167
+ lf->epoch_number, lf->file_checksum,
168
+ lf->file_checksum_func_name, lf->unique_id,
169
+ lf->compensated_range_deletion_size, lf->tail_size,
170
+ lf->user_defined_timestamps_persisted,
171
+ lf->min_timestamp, lf->max_timestamp);
170
172
  }
171
173
  }
172
174
  } else {
@@ -1186,7 +1188,8 @@ class SstQueryFilterConfigsManagerImpl : public SstQueryFilterConfigsManager {
1186
1188
  break;
1187
1189
  default:
1188
1190
  // TODO? Report problem
1189
- {}
1191
+ {
1192
+ }
1190
1193
  // Unknown filter type
1191
1194
  }
1192
1195
  if (!may_match) {
@@ -2816,7 +2816,7 @@ TEST_F(ExternalSSTFileBasicTest, FailIfNotBottommostLevelAndDisallowMemtable) {
2816
2816
 
2817
2817
  {
2818
2818
  const Snapshot* snapshot = db_->GetSnapshot();
2819
- ManagedSnapshot snapshot_guard(db_, snapshot);
2819
+ ManagedSnapshot snapshot_guard(db_.get(), snapshot);
2820
2820
  IngestExternalFileOptions ifo;
2821
2821
  ifo.fail_if_not_bottommost_level = true;
2822
2822
  ifo.snapshot_consistency = true;