@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
@@ -39,7 +39,7 @@ class DBTest2 : public DBTestBase {
39
39
  };
40
40
 
41
41
  TEST_F(DBTest2, OpenForReadOnly) {
42
- DB* db_ptr = nullptr;
42
+ std::unique_ptr<DB> db_ptr;
43
43
  std::string dbname = test::PerThreadDBPath("db_readonly");
44
44
  Options options = CurrentOptions();
45
45
  options.create_if_missing = true;
@@ -63,7 +63,7 @@ TEST_F(DBTest2, OpenForReadOnly) {
63
63
  }
64
64
 
65
65
  TEST_F(DBTest2, OpenForReadOnlyWithColumnFamilies) {
66
- DB* db_ptr = nullptr;
66
+ std::unique_ptr<DB> db_ptr;
67
67
  std::string dbname = test::PerThreadDBPath("db_readonly");
68
68
  Options options = CurrentOptions();
69
69
  options.create_if_missing = true;
@@ -94,6 +94,44 @@ TEST_F(DBTest2, OpenForReadOnlyWithColumnFamilies) {
94
94
  ASSERT_NOK(env_->FileExists(dbname));
95
95
  }
96
96
 
97
+ // Regression test: wal_in_db_path_ was not initialized in the read-only DB
98
+ // open path, causing UBSan "invalid-bool-load" when CloseHelper calls
99
+ // PurgeObsoleteFiles -> DeleteObsoleteFileImpl which reads wal_in_db_path_.
100
+ TEST_F(DBTest2, ReadOnlyDBWalInDbPathInitialized) {
101
+ // Create a normal DB with some data and WAL files
102
+ Options options = CurrentOptions();
103
+ options.create_if_missing = true;
104
+ DestroyAndReopen(options);
105
+ ASSERT_OK(Put("key1", "value1"));
106
+ ASSERT_OK(Flush());
107
+ ASSERT_OK(Put("key2", "value2"));
108
+ Close();
109
+
110
+ // Reopen as read-only — wal_in_db_path_ must be properly initialized.
111
+ // Before the fix, closing this DB would read an uninitialized bool in
112
+ // DeleteObsoleteFileImpl, which UBSan catches as undefined behavior.
113
+ std::unique_ptr<DB> db_ptr;
114
+ ASSERT_OK(DB::OpenForReadOnly(options, dbname_, &db_ptr));
115
+ std::string value;
116
+ ASSERT_OK(db_ptr->Get(ReadOptions(), "key1", &value));
117
+ ASSERT_EQ("value1", value);
118
+ // Close the read-only DB — this triggers PurgeObsoleteFiles which reads
119
+ // wal_in_db_path_. Under UBSan, an uninitialized bool here would fail.
120
+ db_ptr.reset();
121
+
122
+ // Also test the column-families variant
123
+ std::vector<ColumnFamilyDescriptor> column_families;
124
+ column_families.emplace_back(kDefaultColumnFamilyName,
125
+ ColumnFamilyOptions(options));
126
+ std::vector<ColumnFamilyHandle*> handles;
127
+ ASSERT_OK(DB::OpenForReadOnly(DBOptions(options), dbname_, column_families,
128
+ &handles, &db_ptr));
129
+ for (auto* h : handles) {
130
+ delete h;
131
+ }
132
+ db_ptr.reset();
133
+ }
134
+
97
135
  class PartitionedIndexTestListener : public EventListener {
98
136
  public:
99
137
  void OnFlushCompleted(DB* /*db*/, const FlushJobInfo& info) override {
@@ -349,9 +387,9 @@ TEST_P(DBTestSharedWriteBufferAcrossCFs, SharedWriteBufferAcrossCFs) {
349
387
  ASSERT_OK(Put(3, Key(1), DummyString(1), wo));
350
388
  ASSERT_OK(Put(0, Key(1), DummyString(1), wo));
351
389
  ASSERT_OK(Flush(0));
352
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default"),
390
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default"),
353
391
  static_cast<uint64_t>(1));
354
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "nikitich"),
392
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "nikitich"),
355
393
  static_cast<uint64_t>(1));
356
394
 
357
395
  flush_listener->expected_flush_reason = FlushReason::kWriteBufferManager;
@@ -371,13 +409,13 @@ TEST_P(DBTestSharedWriteBufferAcrossCFs, SharedWriteBufferAcrossCFs) {
371
409
  // No flush should trigger
372
410
  wait_flush();
373
411
  {
374
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default"),
412
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default"),
375
413
  static_cast<uint64_t>(1));
376
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "pikachu"),
414
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "pikachu"),
377
415
  static_cast<uint64_t>(0));
378
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "dobrynia"),
416
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "dobrynia"),
379
417
  static_cast<uint64_t>(0));
380
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "nikitich"),
418
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "nikitich"),
381
419
  static_cast<uint64_t>(1));
382
420
  }
383
421
 
@@ -387,13 +425,13 @@ TEST_P(DBTestSharedWriteBufferAcrossCFs, SharedWriteBufferAcrossCFs) {
387
425
  ASSERT_OK(Put(0, Key(1), DummyString(1), wo));
388
426
  wait_flush();
389
427
  {
390
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default"),
428
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default"),
391
429
  static_cast<uint64_t>(1));
392
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "pikachu"),
430
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "pikachu"),
393
431
  static_cast<uint64_t>(0));
394
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "dobrynia"),
432
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "dobrynia"),
395
433
  static_cast<uint64_t>(0));
396
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "nikitich"),
434
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "nikitich"),
397
435
  static_cast<uint64_t>(2));
398
436
  }
399
437
 
@@ -405,13 +443,13 @@ TEST_P(DBTestSharedWriteBufferAcrossCFs, SharedWriteBufferAcrossCFs) {
405
443
  ASSERT_OK(Put(2, Key(1), DummyString(1), wo));
406
444
  wait_flush();
407
445
  {
408
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default"),
446
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default"),
409
447
  static_cast<uint64_t>(1));
410
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "pikachu"),
448
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "pikachu"),
411
449
  static_cast<uint64_t>(0));
412
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "dobrynia"),
450
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "dobrynia"),
413
451
  static_cast<uint64_t>(0));
414
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "nikitich"),
452
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "nikitich"),
415
453
  static_cast<uint64_t>(2));
416
454
  }
417
455
 
@@ -428,13 +466,13 @@ TEST_P(DBTestSharedWriteBufferAcrossCFs, SharedWriteBufferAcrossCFs) {
428
466
  ASSERT_OK(Put(0, Key(1), DummyString(1), wo));
429
467
  wait_flush();
430
468
  {
431
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default"),
469
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default"),
432
470
  static_cast<uint64_t>(2));
433
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "pikachu"),
471
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "pikachu"),
434
472
  static_cast<uint64_t>(0));
435
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "dobrynia"),
473
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "dobrynia"),
436
474
  static_cast<uint64_t>(0));
437
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "nikitich"),
475
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "nikitich"),
438
476
  static_cast<uint64_t>(2));
439
477
  }
440
478
 
@@ -450,13 +488,13 @@ TEST_P(DBTestSharedWriteBufferAcrossCFs, SharedWriteBufferAcrossCFs) {
450
488
  wait_flush();
451
489
 
452
490
  {
453
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default"),
491
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default"),
454
492
  static_cast<uint64_t>(2));
455
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "pikachu"),
493
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "pikachu"),
456
494
  static_cast<uint64_t>(0));
457
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "dobrynia"),
495
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "dobrynia"),
458
496
  static_cast<uint64_t>(1));
459
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "nikitich"),
497
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "nikitich"),
460
498
  static_cast<uint64_t>(2));
461
499
  }
462
500
  if (cost_cache_) {
@@ -506,7 +544,7 @@ TEST_F(DBTest2, SharedWriteBufferLimitAcrossDB) {
506
544
  CreateAndReopenWithCF({"cf1", "cf2"}, options);
507
545
 
508
546
  ASSERT_OK(DestroyDB(dbname2, options));
509
- DB* db2 = nullptr;
547
+ std::unique_ptr<DB> db2;
510
548
  ASSERT_OK(DB::Open(options, dbname2, &db2));
511
549
 
512
550
  WriteOptions wo;
@@ -516,12 +554,12 @@ TEST_F(DBTest2, SharedWriteBufferLimitAcrossDB) {
516
554
  ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable(handles_[0]));
517
555
  ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable(handles_[1]));
518
556
  ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable(handles_[2]));
519
- ASSERT_OK(static_cast<DBImpl*>(db2)->TEST_WaitForFlushMemTable());
557
+ ASSERT_OK(static_cast<DBImpl*>(db2.get())->TEST_WaitForFlushMemTable());
520
558
  // Ensure background work is fully finished including listener callbacks
521
559
  // before accessing listener state.
522
560
  ASSERT_OK(dbfull()->TEST_WaitForBackgroundWork());
523
- ASSERT_OK(
524
- static_cast_with_check<DBImpl>(db2)->TEST_WaitForBackgroundWork());
561
+ ASSERT_OK(static_cast_with_check<DBImpl>(db2.get())
562
+ ->TEST_WaitForBackgroundWork());
525
563
  };
526
564
 
527
565
  // Trigger a flush on cf2
@@ -537,13 +575,13 @@ TEST_F(DBTest2, SharedWriteBufferLimitAcrossDB) {
537
575
 
538
576
  ASSERT_OK(Put(2, Key(1), DummyString(1), wo));
539
577
  wait_flush();
540
- ASSERT_OK(static_cast<DBImpl*>(db2)->TEST_WaitForFlushMemTable());
578
+ ASSERT_OK(static_cast<DBImpl*>(db2.get())->TEST_WaitForFlushMemTable());
541
579
  {
542
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default") +
543
- GetNumberOfSstFilesForColumnFamily(db_, "cf1") +
544
- GetNumberOfSstFilesForColumnFamily(db_, "cf2"),
580
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default") +
581
+ GetNumberOfSstFilesForColumnFamily(db_.get(), "cf1") +
582
+ GetNumberOfSstFilesForColumnFamily(db_.get(), "cf2"),
545
583
  static_cast<uint64_t>(1));
546
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db2, "default"),
584
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db2.get(), "default"),
547
585
  static_cast<uint64_t>(0));
548
586
  }
549
587
 
@@ -553,13 +591,13 @@ TEST_F(DBTest2, SharedWriteBufferLimitAcrossDB) {
553
591
  ASSERT_OK(Put(2, Key(1), DummyString(1), wo));
554
592
  wait_flush();
555
593
  {
556
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default"),
594
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default"),
557
595
  static_cast<uint64_t>(1));
558
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "cf1"),
596
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "cf1"),
559
597
  static_cast<uint64_t>(0));
560
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "cf2"),
598
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "cf2"),
561
599
  static_cast<uint64_t>(1));
562
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db2, "default"),
600
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db2.get(), "default"),
563
601
  static_cast<uint64_t>(0));
564
602
  }
565
603
 
@@ -568,19 +606,19 @@ TEST_F(DBTest2, SharedWriteBufferLimitAcrossDB) {
568
606
  wait_flush();
569
607
  ASSERT_OK(db2->Put(wo, Key(1), DummyString(1)));
570
608
  wait_flush();
571
- ASSERT_OK(static_cast<DBImpl*>(db2)->TEST_WaitForFlushMemTable());
609
+ ASSERT_OK(static_cast<DBImpl*>(db2.get())->TEST_WaitForFlushMemTable());
572
610
  {
573
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "default"),
611
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "default"),
574
612
  static_cast<uint64_t>(1));
575
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "cf1"),
613
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "cf1"),
576
614
  static_cast<uint64_t>(0));
577
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_, "cf2"),
615
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db_.get(), "cf2"),
578
616
  static_cast<uint64_t>(1));
579
- ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db2, "default"),
617
+ ASSERT_EQ(GetNumberOfSstFilesForColumnFamily(db2.get(), "default"),
580
618
  static_cast<uint64_t>(1));
581
619
  }
582
620
 
583
- delete db2;
621
+ db2.reset();
584
622
  ASSERT_OK(DestroyDB(dbname2, options));
585
623
 
586
624
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
@@ -785,7 +823,7 @@ TEST_F(DBTest2, WalFilterTest) {
785
823
  while (true) {
786
824
  // Ensure that expected keys exists
787
825
  // and not expected keys don't exist after recovery
788
- ValidateKeyExistence(db_, keys_must_exist, keys_must_not_exist);
826
+ ValidateKeyExistence(db_.get(), keys_must_exist, keys_must_not_exist);
789
827
 
790
828
  if (checked_after_reopen) {
791
829
  break;
@@ -922,7 +960,7 @@ TEST_F(DBTest2, WalFilterTestWithChangeBatch) {
922
960
  while (true) {
923
961
  // Ensure that expected keys exists
924
962
  // and not expected keys don't exist after recovery
925
- ValidateKeyExistence(db_, keys_must_exist, keys_must_not_exist);
963
+ ValidateKeyExistence(db_.get(), keys_must_exist, keys_must_not_exist);
926
964
 
927
965
  if (checked_after_reopen) {
928
966
  break;
@@ -1004,7 +1042,7 @@ TEST_F(DBTest2, WalFilterTestWithChangeBatchExtraKeys) {
1004
1042
  }
1005
1043
  }
1006
1044
 
1007
- ValidateKeyExistence(db_, keys_must_exist, keys_must_not_exist);
1045
+ ValidateKeyExistence(db_.get(), keys_must_exist, keys_must_not_exist);
1008
1046
  }
1009
1047
 
1010
1048
  TEST_F(DBTest2, WalFilterTestWithColumnFamilies) {
@@ -1292,7 +1330,7 @@ TEST_F(DBTest2, DuplicateSnapshot) {
1292
1330
  Options options;
1293
1331
  options = CurrentOptions(options);
1294
1332
  std::vector<const Snapshot*> snapshots;
1295
- DBImpl* dbi = static_cast_with_check<DBImpl>(db_);
1333
+ DBImpl* dbi = dbfull();
1296
1334
  SequenceNumber oldest_ww_snap, first_ww_snap;
1297
1335
 
1298
1336
  ASSERT_OK(Put("k", "v")); // inc seq
@@ -3694,16 +3732,16 @@ TEST_F(DBTest2, TraceAndReplay) {
3694
3732
 
3695
3733
  // Using a different name than db2, to pacify infer's use-after-lifetime
3696
3734
  // warnings (http://fbinfer.com).
3697
- DB* db2_init = nullptr;
3735
+ std::unique_ptr<DB> db2_init;
3698
3736
  options.create_if_missing = true;
3699
3737
  ASSERT_OK(DB::Open(options, dbname2, &db2_init));
3700
3738
  ColumnFamilyHandle* cf;
3701
3739
  ASSERT_OK(
3702
3740
  db2_init->CreateColumnFamily(ColumnFamilyOptions(), "pikachu", &cf));
3703
3741
  delete cf;
3704
- delete db2_init;
3742
+ db2_init.reset();
3705
3743
 
3706
- DB* db2 = nullptr;
3744
+ std::unique_ptr<DB> db2;
3707
3745
  std::vector<ColumnFamilyDescriptor> column_families;
3708
3746
  ColumnFamilyOptions cf_options;
3709
3747
  cf_options.merge_operator = MergeOperators::CreatePutOperator();
@@ -3790,7 +3828,7 @@ TEST_F(DBTest2, TraceAndReplay) {
3790
3828
  for (auto handle : handles) {
3791
3829
  delete handle;
3792
3830
  }
3793
- delete db2;
3831
+ db2.reset();
3794
3832
  ASSERT_OK(DestroyDB(dbname2, options));
3795
3833
  }
3796
3834
 
@@ -3885,16 +3923,16 @@ TEST_F(DBTest2, TraceAndManualReplay) {
3885
3923
 
3886
3924
  // Using a different name than db2, to pacify infer's use-after-lifetime
3887
3925
  // warnings (http://fbinfer.com).
3888
- DB* db2_init = nullptr;
3926
+ std::unique_ptr<DB> db2_init;
3889
3927
  options.create_if_missing = true;
3890
3928
  ASSERT_OK(DB::Open(options, dbname2, &db2_init));
3891
3929
  ColumnFamilyHandle* cf;
3892
3930
  ASSERT_OK(
3893
3931
  db2_init->CreateColumnFamily(ColumnFamilyOptions(), "pikachu", &cf));
3894
3932
  delete cf;
3895
- delete db2_init;
3933
+ db2_init.reset();
3896
3934
 
3897
- DB* db2 = nullptr;
3935
+ std::unique_ptr<DB> db2;
3898
3936
  std::vector<ColumnFamilyDescriptor> column_families;
3899
3937
  ColumnFamilyOptions cf_options;
3900
3938
  cf_options.merge_operator = MergeOperators::CreatePutOperator();
@@ -4130,7 +4168,7 @@ TEST_F(DBTest2, TraceAndManualReplay) {
4130
4168
  for (auto handle : handles) {
4131
4169
  delete handle;
4132
4170
  }
4133
- delete db2;
4171
+ db2.reset();
4134
4172
  ASSERT_OK(DestroyDB(dbname2, options));
4135
4173
  }
4136
4174
 
@@ -4161,16 +4199,16 @@ TEST_F(DBTest2, TraceWithLimit) {
4161
4199
 
4162
4200
  // Using a different name than db2, to pacify infer's use-after-lifetime
4163
4201
  // warnings (http://fbinfer.com).
4164
- DB* db2_init = nullptr;
4202
+ std::unique_ptr<DB> db2_init;
4165
4203
  options.create_if_missing = true;
4166
4204
  ASSERT_OK(DB::Open(options, dbname2, &db2_init));
4167
4205
  ColumnFamilyHandle* cf;
4168
4206
  ASSERT_OK(
4169
4207
  db2_init->CreateColumnFamily(ColumnFamilyOptions(), "pikachu", &cf));
4170
4208
  delete cf;
4171
- delete db2_init;
4209
+ db2_init.reset();
4172
4210
 
4173
- DB* db2 = nullptr;
4211
+ std::unique_ptr<DB> db2;
4174
4212
  std::vector<ColumnFamilyDescriptor> column_families;
4175
4213
  ColumnFamilyOptions cf_options;
4176
4214
  cf_options.merge_operator = MergeOperators::CreatePutOperator();
@@ -4203,7 +4241,7 @@ TEST_F(DBTest2, TraceWithLimit) {
4203
4241
  for (auto handle : handles) {
4204
4242
  delete handle;
4205
4243
  }
4206
- delete db2;
4244
+ db2.reset();
4207
4245
  ASSERT_OK(DestroyDB(dbname2, options));
4208
4246
  }
4209
4247
 
@@ -4235,16 +4273,16 @@ TEST_F(DBTest2, TraceWithSampling) {
4235
4273
 
4236
4274
  // Using a different name than db2, to pacify infer's use-after-lifetime
4237
4275
  // warnings (http://fbinfer.com).
4238
- DB* db2_init = nullptr;
4276
+ std::unique_ptr<DB> db2_init;
4239
4277
  options.create_if_missing = true;
4240
4278
  ASSERT_OK(DB::Open(options, dbname2, &db2_init));
4241
4279
  ColumnFamilyHandle* cf;
4242
4280
  ASSERT_OK(
4243
4281
  db2_init->CreateColumnFamily(ColumnFamilyOptions(), "pikachu", &cf));
4244
4282
  delete cf;
4245
- delete db2_init;
4283
+ db2_init.reset();
4246
4284
 
4247
- DB* db2 = nullptr;
4285
+ std::unique_ptr<DB> db2;
4248
4286
  std::vector<ColumnFamilyDescriptor> column_families;
4249
4287
  ColumnFamilyOptions cf_options;
4250
4288
  column_families.emplace_back("default", cf_options);
@@ -4279,7 +4317,7 @@ TEST_F(DBTest2, TraceWithSampling) {
4279
4317
  for (auto handle : handles) {
4280
4318
  delete handle;
4281
4319
  }
4282
- delete db2;
4320
+ db2.reset();
4283
4321
  ASSERT_OK(DestroyDB(dbname2, options));
4284
4322
  }
4285
4323
 
@@ -4339,16 +4377,16 @@ TEST_F(DBTest2, TraceWithFilter) {
4339
4377
 
4340
4378
  // Using a different name than db2, to pacify infer's use-after-lifetime
4341
4379
  // warnings (http://fbinfer.com).
4342
- DB* db2_init = nullptr;
4380
+ std::unique_ptr<DB> db2_init;
4343
4381
  options.create_if_missing = true;
4344
4382
  ASSERT_OK(DB::Open(options, dbname2, &db2_init));
4345
4383
  ColumnFamilyHandle* cf;
4346
4384
  ASSERT_OK(
4347
4385
  db2_init->CreateColumnFamily(ColumnFamilyOptions(), "pikachu", &cf));
4348
4386
  delete cf;
4349
- delete db2_init;
4387
+ db2_init.reset();
4350
4388
 
4351
- DB* db2 = nullptr;
4389
+ std::unique_ptr<DB> db2;
4352
4390
  std::vector<ColumnFamilyDescriptor> column_families;
4353
4391
  ColumnFamilyOptions cf_options;
4354
4392
  cf_options.merge_operator = MergeOperators::CreatePutOperator();
@@ -4384,28 +4422,28 @@ TEST_F(DBTest2, TraceWithFilter) {
4384
4422
  for (auto handle : handles) {
4385
4423
  delete handle;
4386
4424
  }
4387
- delete db2;
4425
+ db2.reset();
4388
4426
  ASSERT_OK(DestroyDB(dbname2, options));
4389
4427
 
4390
4428
  // Set up a new db.
4391
4429
  std::string dbname3 = test::PerThreadDBPath(env_, "db_not_trace_read");
4392
4430
  ASSERT_OK(DestroyDB(dbname3, options));
4393
4431
 
4394
- DB* db3_init = nullptr;
4432
+ std::unique_ptr<DB> db3_init;
4395
4433
  options.create_if_missing = true;
4396
4434
  ColumnFamilyHandle* cf3;
4397
4435
  ASSERT_OK(DB::Open(options, dbname3, &db3_init));
4398
4436
  ASSERT_OK(
4399
4437
  db3_init->CreateColumnFamily(ColumnFamilyOptions(), "pikachu", &cf3));
4400
4438
  delete cf3;
4401
- delete db3_init;
4439
+ db3_init.reset();
4402
4440
 
4403
4441
  column_families.clear();
4404
4442
  column_families.emplace_back("default", cf_options);
4405
4443
  column_families.emplace_back("pikachu", ColumnFamilyOptions());
4406
4444
  handles.clear();
4407
4445
 
4408
- DB* db3 = nullptr;
4446
+ std::unique_ptr<DB> db3;
4409
4447
  ASSERT_OK(DB::Open(db_opts, dbname3, column_families, &handles, &db3));
4410
4448
 
4411
4449
  env_->SleepForMicroseconds(100);
@@ -4435,7 +4473,7 @@ TEST_F(DBTest2, TraceWithFilter) {
4435
4473
  for (auto handle : handles) {
4436
4474
  delete handle;
4437
4475
  }
4438
- delete db3;
4476
+ db3.reset();
4439
4477
  ASSERT_OK(DestroyDB(dbname3, options));
4440
4478
 
4441
4479
  std::unique_ptr<TraceReader> trace_reader3;
@@ -4626,7 +4664,7 @@ TEST_F(DBTest2, TestGetColumnFamilyHandleUnlocked) {
4626
4664
  CreateColumnFamilies({"test1", "test2"}, Options());
4627
4665
  ASSERT_EQ(handles_.size(), 2);
4628
4666
 
4629
- DBImpl* dbi = static_cast_with_check<DBImpl>(db_);
4667
+ DBImpl* dbi = dbfull();
4630
4668
  port::Thread user_thread1([&]() {
4631
4669
  auto cfh = dbi->GetColumnFamilyHandleUnlocked(handles_[0]->GetID());
4632
4670
  ASSERT_EQ(cfh->GetID(), handles_[0]->GetID());
@@ -4830,7 +4868,7 @@ TEST_F(DBTest2, MultiDBParallelOpenTest) {
4830
4868
 
4831
4869
  // Verify empty DBs can be created in parallel
4832
4870
  std::vector<std::thread> open_threads;
4833
- std::vector<DB*> dbs{static_cast<unsigned int>(kNumDbs), nullptr};
4871
+ std::vector<std::unique_ptr<DB>> dbs(kNumDbs);
4834
4872
  options.create_if_missing = true;
4835
4873
  for (int i = 0; i < kNumDbs; ++i) {
4836
4874
  open_threads.emplace_back(
@@ -4845,7 +4883,7 @@ TEST_F(DBTest2, MultiDBParallelOpenTest) {
4845
4883
  for (int i = 0; i < kNumDbs; ++i) {
4846
4884
  open_threads[i].join();
4847
4885
  ASSERT_OK(dbs[i]->Put(WriteOptions(), "xi", "gua"));
4848
- delete dbs[i];
4886
+ dbs[i].reset();
4849
4887
  }
4850
4888
 
4851
4889
  // Verify non-empty DBs can be recovered in parallel
@@ -4861,7 +4899,7 @@ TEST_F(DBTest2, MultiDBParallelOpenTest) {
4861
4899
  // Wait and cleanup
4862
4900
  for (int i = 0; i < kNumDbs; ++i) {
4863
4901
  open_threads[i].join();
4864
- delete dbs[i];
4902
+ dbs[i].reset();
4865
4903
  ASSERT_OK(DestroyDB(dbnames[i], options));
4866
4904
  }
4867
4905
  }
@@ -4922,8 +4960,7 @@ TEST_F(DBTest2, CloseWithUnreleasedSnapshot) {
4922
4960
  ASSERT_NOK(db_->Close());
4923
4961
  db_->ReleaseSnapshot(ss);
4924
4962
  ASSERT_OK(db_->Close());
4925
- delete db_;
4926
- db_ = nullptr;
4963
+ db_.reset();
4927
4964
  }
4928
4965
 
4929
4966
  TEST_F(DBTest2, PrefixBloomReseek) {
@@ -6544,6 +6581,9 @@ TEST_F(DBTest2, LastLevelStatistics) {
6544
6581
 
6545
6582
  DestroyAndReopen(options);
6546
6583
 
6584
+ get_iostats_context()->Reset();
6585
+ IOStatsContext* iostats = get_iostats_context();
6586
+
6547
6587
  // generate 1 sst on level 0
6548
6588
  ASSERT_OK(Put("foo1", "bar"));
6549
6589
  ASSERT_OK(Put("bar", "bar"));
@@ -6644,9 +6684,87 @@ TEST_F(DBTest2, LastLevelStatistics) {
6644
6684
  // Control
6645
6685
  ASSERT_NE(options.statistics->getTickerCount(LAST_LEVEL_READ_COUNT),
6646
6686
  options.statistics->getTickerCount(NON_LAST_LEVEL_READ_COUNT));
6687
+
6688
+ // Control: unknown temperature iostats should be zero since files have
6689
+ // explicit temperatures (mapped or written)
6690
+ EXPECT_EQ(
6691
+ iostats->file_io_stats_by_temperature.unknown_non_last_level_bytes_read,
6692
+ 0);
6693
+ EXPECT_EQ(
6694
+ iostats->file_io_stats_by_temperature.unknown_non_last_level_read_count,
6695
+ 0);
6696
+ EXPECT_EQ(
6697
+ iostats->file_io_stats_by_temperature.unknown_last_level_bytes_read, 0);
6698
+ EXPECT_EQ(
6699
+ iostats->file_io_stats_by_temperature.unknown_last_level_read_count, 0);
6647
6700
  }
6648
6701
  }
6649
6702
 
6703
+ // Test the iostats for files with Temperature::kUnknown that is not mapped
6704
+ // to another temperature. These stats are used to indicate which non-tiered
6705
+ // workloads are most promising for tiering (so this test doesn't set
6706
+ // temperatures).
6707
+ TEST_F(DBTest2, UnknownLastLevelStatistics) {
6708
+ Options options = CurrentOptions();
6709
+ options.statistics = CreateDBStatistics();
6710
+ BlockBasedTableOptions bbto;
6711
+ bbto.no_block_cache = true;
6712
+ options.table_factory.reset(NewBlockBasedTableFactory(bbto));
6713
+
6714
+ DestroyAndReopen(options);
6715
+
6716
+ get_iostats_context()->Reset();
6717
+ IOStatsContext* iostats = get_iostats_context();
6718
+
6719
+ // Generate 1 sst file on level 0 with kUnknown temperature
6720
+ ASSERT_OK(Put("foo", "bar"));
6721
+ ASSERT_OK(Flush());
6722
+
6723
+ // Read from the kUnknown file on non-last level
6724
+ ASSERT_EQ("bar", Get("foo"));
6725
+
6726
+ // Verify unknown_non_last_level stats are populated
6727
+ EXPECT_GT(
6728
+ iostats->file_io_stats_by_temperature.unknown_non_last_level_bytes_read,
6729
+ 0);
6730
+ EXPECT_GT(
6731
+ iostats->file_io_stats_by_temperature.unknown_non_last_level_read_count,
6732
+ 0);
6733
+ // No reads from last level yet
6734
+ EXPECT_EQ(iostats->file_io_stats_by_temperature.unknown_last_level_bytes_read,
6735
+ 0);
6736
+ EXPECT_EQ(iostats->file_io_stats_by_temperature.unknown_last_level_read_count,
6737
+ 0);
6738
+
6739
+ // Compact to the last level (level 6) explicitly using MoveFilesToLevel
6740
+ ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
6741
+ MoveFilesToLevel(6);
6742
+
6743
+ // Reopen DB to ensure table cache is cleared and files are re-opened
6744
+ // with correct is_last_level flag
6745
+ Reopen(options);
6746
+
6747
+ // Reset iostats to measure only the following reads
6748
+ get_iostats_context()->Reset();
6749
+
6750
+ // Read from the file now on last level (still kUnknown since
6751
+ // last_level_temperature is not set)
6752
+ ASSERT_EQ("bar", Get("foo"));
6753
+
6754
+ // Verify unknown_last_level stats are populated
6755
+ EXPECT_GT(iostats->file_io_stats_by_temperature.unknown_last_level_bytes_read,
6756
+ 0);
6757
+ EXPECT_GT(iostats->file_io_stats_by_temperature.unknown_last_level_read_count,
6758
+ 0);
6759
+ // No new reads from non-last level
6760
+ EXPECT_EQ(
6761
+ iostats->file_io_stats_by_temperature.unknown_non_last_level_bytes_read,
6762
+ 0);
6763
+ EXPECT_EQ(
6764
+ iostats->file_io_stats_by_temperature.unknown_non_last_level_read_count,
6765
+ 0);
6766
+ }
6767
+
6650
6768
  TEST_F(DBTest2, CheckpointFileTemperature) {
6651
6769
  class NoLinkTestFS : public FileTemperatureTestFS {
6652
6770
  using FileTemperatureTestFS::FileTemperatureTestFS;
@@ -6693,7 +6811,7 @@ TEST_F(DBTest2, CheckpointFileTemperature) {
6693
6811
 
6694
6812
  test_fs->PopRequestedSstFileTemperatures();
6695
6813
  Checkpoint* checkpoint;
6696
- ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
6814
+ ASSERT_OK(Checkpoint::Create(db_.get(), &checkpoint));
6697
6815
  ASSERT_OK(
6698
6816
  checkpoint->CreateCheckpoint(dbname_ + kFilePathSeparator + "tempcp"));
6699
6817
 
@@ -7455,7 +7573,7 @@ TEST_F(DBTest2, GetFileChecksumsFromCurrentManifest_CRC32) {
7455
7573
  opts.level0_file_num_compaction_trigger = 10;
7456
7574
 
7457
7575
  // Bootstrap the test database.
7458
- DB* db = nullptr;
7576
+ std::unique_ptr<DB> db;
7459
7577
  std::string dbname = test::PerThreadDBPath("file_chksum");
7460
7578
  ASSERT_OK(DB::Open(opts, dbname, &db));
7461
7579
 
@@ -7489,8 +7607,7 @@ TEST_F(DBTest2, GetFileChecksumsFromCurrentManifest_CRC32) {
7489
7607
  db->GetLiveFilesMetaData(&live_files);
7490
7608
 
7491
7609
  ASSERT_OK(db->Close());
7492
- delete db;
7493
- db = nullptr;
7610
+ db.reset();
7494
7611
 
7495
7612
  // Process current MANIFEST file and build internal file checksum mappings.
7496
7613
  std::unique_ptr<FileChecksumList> checksum_list(NewFileChecksumList());