@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
@@ -3596,6 +3596,14 @@ int main(int argc, char** argv) {
3596
3596
  100000 ==
3597
3597
  rocksdb_fifo_compaction_options_get_max_table_files_size(fco));
3598
3598
 
3599
+ rocksdb_fifo_compaction_options_set_max_data_files_size(fco, 200000);
3600
+ CheckCondition(
3601
+ 200000 == rocksdb_fifo_compaction_options_get_max_data_files_size(fco));
3602
+
3603
+ rocksdb_fifo_compaction_options_set_use_kv_ratio_compaction(fco, 1);
3604
+ CheckCondition(
3605
+ 1 == rocksdb_fifo_compaction_options_get_use_kv_ratio_compaction(fco));
3606
+
3599
3607
  rocksdb_fifo_compaction_options_destroy(fco);
3600
3608
  }
3601
3609
 
@@ -4447,7 +4455,7 @@ int main(int argc, char** argv) {
4447
4455
 
4448
4456
  StartPhase("statistics");
4449
4457
  {
4450
- const uint32_t BYTES_WRITTEN_TICKER = 60;
4458
+ const uint32_t BYTES_WRITTEN_TICKER = 61;
4451
4459
  const uint32_t DB_WRITE_HIST = 1;
4452
4460
 
4453
4461
  rocksdb_statistics_histogram_data_t* hist =
@@ -4717,9 +4725,86 @@ int main(int argc, char** argv) {
4717
4725
  rocksdb_compaction_service_options_override_set_comparator(override_opts,
4718
4726
  cmp);
4719
4727
 
4728
+ // Test file checksum gen factory
4729
+ rocksdb_file_checksum_gen_factory_t* checksum_factory =
4730
+ rocksdb_file_checksum_gen_crc32c_factory_create();
4731
+ CheckCondition(checksum_factory != NULL);
4732
+ rocksdb_compaction_service_options_override_set_file_checksum_gen_factory(
4733
+ override_opts, checksum_factory);
4734
+
4735
+ // Test SST partitioner factory
4736
+ rocksdb_sst_partitioner_factory_t* partitioner_factory =
4737
+ rocksdb_sst_partitioner_fixed_prefix_factory_create(4);
4738
+ CheckCondition(partitioner_factory != NULL);
4739
+ rocksdb_compaction_service_options_override_set_sst_partitioner_factory(
4740
+ override_opts, partitioner_factory);
4741
+
4742
+ // Test merge operator
4743
+ rocksdb_compaction_service_options_override_set_merge_operator(
4744
+ override_opts, NULL);
4745
+
4746
+ // Test compaction filter
4747
+ rocksdb_compaction_service_options_override_set_compaction_filter(
4748
+ override_opts, NULL);
4749
+
4750
+ // Test prefix extractor
4751
+ rocksdb_compaction_service_options_override_set_prefix_extractor(
4752
+ override_opts, NULL);
4753
+
4754
+ // Test table factory - block based
4755
+ rocksdb_block_based_table_options_t* table_opts =
4756
+ rocksdb_block_based_options_create();
4757
+ rocksdb_compaction_service_options_override_set_block_based_table_factory(
4758
+ override_opts, table_opts);
4759
+ rocksdb_block_based_options_destroy(table_opts);
4760
+
4761
+ // Test statistics via options
4762
+ rocksdb_options_t* stats_opts = rocksdb_options_create();
4763
+ rocksdb_options_enable_statistics(stats_opts);
4764
+ rocksdb_compaction_service_options_override_set_statistics(override_opts,
4765
+ stats_opts);
4766
+ rocksdb_options_destroy(stats_opts);
4767
+
4768
+ // Test info log
4769
+ rocksdb_logger_t* logger =
4770
+ rocksdb_logger_create_stderr_logger(1, "test_prefix");
4771
+ rocksdb_compaction_service_options_override_set_info_log(override_opts,
4772
+ logger);
4773
+ rocksdb_logger_destroy(logger);
4774
+
4775
+ // Test options map
4776
+ rocksdb_compaction_service_options_override_set_option(
4777
+ override_opts, "max_bytes_for_level_base", "67108864");
4778
+
4779
+ // Cleanup
4780
+ rocksdb_file_checksum_gen_factory_destroy(checksum_factory);
4781
+ rocksdb_sst_partitioner_factory_destroy(partitioner_factory);
4720
4782
  rocksdb_compaction_service_options_override_destroy(override_opts);
4721
4783
  }
4722
4784
 
4785
+ StartPhase("factory_options_on_regular_options");
4786
+ {
4787
+ // Test that the new factory types work with regular rocksdb_options_t
4788
+ rocksdb_options_t* test_opts = rocksdb_options_create();
4789
+
4790
+ // Test file checksum gen factory on regular options
4791
+ rocksdb_file_checksum_gen_factory_t* checksum_factory =
4792
+ rocksdb_file_checksum_gen_crc32c_factory_create();
4793
+ CheckCondition(checksum_factory != NULL);
4794
+ rocksdb_options_set_file_checksum_gen_factory(test_opts, checksum_factory);
4795
+
4796
+ // Test SST partitioner factory on regular options
4797
+ rocksdb_sst_partitioner_factory_t* partitioner_factory =
4798
+ rocksdb_sst_partitioner_fixed_prefix_factory_create(8);
4799
+ CheckCondition(partitioner_factory != NULL);
4800
+ rocksdb_options_set_sst_partitioner_factory(test_opts, partitioner_factory);
4801
+
4802
+ // Cleanup
4803
+ rocksdb_file_checksum_gen_factory_destroy(checksum_factory);
4804
+ rocksdb_sst_partitioner_factory_destroy(partitioner_factory);
4805
+ rocksdb_options_destroy(test_opts);
4806
+ }
4807
+
4723
4808
  StartPhase("remote_compaction_null_callback_handling");
4724
4809
  {
4725
4810
  // Test that NULL callback returns are handled gracefully
@@ -4795,6 +4880,21 @@ int main(int argc, char** argv) {
4795
4880
  rocksdb_sst_file_manager_destroy(sst_file_manager);
4796
4881
  }
4797
4882
 
4883
+ StartPhase("create_column_family_error_returns_null");
4884
+ {
4885
+ // Creating a column family with a name that already exists should fail
4886
+ // and return NULL. Without the fix, the handle is leaked and a non-NULL
4887
+ // pointer with an indeterminate rep field is returned.
4888
+ char* cf_err = NULL;
4889
+ rocksdb_column_family_handle_t* cf_handle =
4890
+ rocksdb_create_column_family(db, options, "default", &cf_err);
4891
+ // Should have an error since "default" already exists
4892
+ CheckCondition(cf_err != NULL);
4893
+ // The handle should be NULL on error (this is the bug fix)
4894
+ CheckCondition(cf_handle == NULL);
4895
+ free(cf_err);
4896
+ }
4897
+
4798
4898
  StartPhase("cancel_all_background_work");
4799
4899
  rocksdb_cancel_all_background_work(db, 1);
4800
4900
 
@@ -401,7 +401,13 @@ ColumnFamilyOptions SanitizeCfOptions(const ImmutableDBOptions& db_options,
401
401
  }
402
402
 
403
403
  if (result.max_compaction_bytes == 0) {
404
- result.max_compaction_bytes = result.target_file_size_base * 25;
404
+ // For FIFO with use_kv_ratio_compaction, leave max_compaction_bytes as 0
405
+ // to signal "auto-calculate target from capacity and SST/blob ratio."
406
+ // When explicitly set by the user, it overrides the auto-calculated target.
407
+ if (result.compaction_style != kCompactionStyleFIFO ||
408
+ !result.compaction_options_fifo.use_kv_ratio_compaction) {
409
+ result.max_compaction_bytes = result.target_file_size_base * 25;
410
+ }
405
411
  }
406
412
 
407
413
  bool is_block_based_table = (result.table_factory->IsInstanceOf(
@@ -1248,7 +1254,7 @@ Compaction* ColumnFamilyData::PickCompaction(
1248
1254
  auto* result = compaction_picker_->PickCompaction(
1249
1255
  GetName(), mutable_options, mutable_db_options, existing_snapshots,
1250
1256
  snapshot_checker, current_->storage_info(), log_buffer,
1251
- require_max_output_level);
1257
+ GetFullHistoryTsLow(), require_max_output_level);
1252
1258
  if (result != nullptr) {
1253
1259
  result->FinalizeInputInfo(current_);
1254
1260
  }
@@ -1336,7 +1342,7 @@ Compaction* ColumnFamilyData::CompactRange(
1336
1342
  GetName(), mutable_cf_options, mutable_db_options,
1337
1343
  current_->storage_info(), input_level, output_level,
1338
1344
  compact_range_options, begin, end, compaction_end, conflict,
1339
- max_file_num_to_ignore, trim_ts);
1345
+ max_file_num_to_ignore, trim_ts, GetFullHistoryTsLow());
1340
1346
  if (result != nullptr) {
1341
1347
  result->FinalizeInputInfo(current_);
1342
1348
  }
@@ -1563,6 +1569,28 @@ Status ColumnFamilyData::ValidateOptions(
1563
1569
  "FIFO compaction only supported with max_open_files = -1.");
1564
1570
  }
1565
1571
 
1572
+ if (db_options.open_files_async) {
1573
+ // FIFO TTL picker relies on reading the files table properties inside a
1574
+ // DB mutex. This can be slow if files are opened asynchronously, so we
1575
+ // disable it.
1576
+ //
1577
+ // TODO: consider blocking fifo compaction until async file open task
1578
+ // completes.
1579
+ if (cf_options.compaction_style == kCompactionStyleFIFO) {
1580
+ return Status::NotSupported(
1581
+ "FIFO compaction is not supported with open_files_async = true.");
1582
+ }
1583
+ // Open files async is not useful if skip_stats_update_on_db_open=true
1584
+ // because DB open will still block on IO.
1585
+ //
1586
+ // TODO: consider moving stats update inside async file open background
1587
+ // task.
1588
+ if (!db_options.skip_stats_update_on_db_open) {
1589
+ return Status::InvalidArgument(
1590
+ "open_files_async requires skip_stats_update_on_db_open = true.");
1591
+ }
1592
+ }
1593
+
1566
1594
  std::vector<uint32_t> supported{0, 1, 2, 4, 8};
1567
1595
  if (std::find(supported.begin(), supported.end(),
1568
1596
  cf_options.memtable_protection_bytes_per_key) ==
@@ -118,8 +118,7 @@ class ColumnFamilyTestBase : public testing::Test {
118
118
 
119
119
  for (int i = 0; i < n; i++) {
120
120
  if (flush_every != 0 && i != 0 && i % flush_every == 0) {
121
- DBImpl* dbi = static_cast_with_check<DBImpl>(db_);
122
- dbi->TEST_FlushMemTable();
121
+ dbfull()->TEST_FlushMemTable();
123
122
  }
124
123
 
125
124
  int keyi = base + i;
@@ -177,8 +176,7 @@ class ColumnFamilyTestBase : public testing::Test {
177
176
  }
178
177
  handles_.clear();
179
178
  names_.clear();
180
- delete db_;
181
- db_ = nullptr;
179
+ db_.reset();
182
180
  }
183
181
 
184
182
  Status TryOpen(std::vector<std::string> cf,
@@ -218,7 +216,7 @@ class ColumnFamilyTestBase : public testing::Test {
218
216
 
219
217
  void Open() { Open({"default"}); }
220
218
 
221
- DBImpl* dbfull() { return static_cast_with_check<DBImpl>(db_); }
219
+ DBImpl* dbfull() { return static_cast_with_check<DBImpl>(db_.get()); }
222
220
 
223
221
  int GetProperty(int cf, std::string property) {
224
222
  std::string value;
@@ -500,7 +498,7 @@ class ColumnFamilyTestBase : public testing::Test {
500
498
  ColumnFamilyOptions column_family_options_;
501
499
  DBOptions db_options_;
502
500
  std::string dbname_;
503
- DB* db_ = nullptr;
501
+ std::unique_ptr<DB> db_;
504
502
  EnvCounter* env_;
505
503
  std::shared_ptr<Env> env_guard_;
506
504
  Random rnd_;
@@ -517,7 +515,7 @@ class ColumnFamilyTest
517
515
  INSTANTIATE_TEST_CASE_P(FormatDef, ColumnFamilyTest,
518
516
  testing::Values(test::kDefaultFormatVersion));
519
517
  INSTANTIATE_TEST_CASE_P(FormatLatest, ColumnFamilyTest,
520
- testing::Values(kLatestFormatVersion));
518
+ testing::Values(kLatestBbtFormatVersion));
521
519
 
522
520
  TEST_P(ColumnFamilyTest, DontReuseColumnFamilyID) {
523
521
  for (int iter = 0; iter < 3; ++iter) {
@@ -707,8 +705,8 @@ INSTANTIATE_TEST_CASE_P(
707
705
  std::make_tuple(test::kDefaultFormatVersion, false)));
708
706
  INSTANTIATE_TEST_CASE_P(
709
707
  FormatLatest, FlushEmptyCFTestWithParam,
710
- testing::Values(std::make_tuple(kLatestFormatVersion, true),
711
- std::make_tuple(kLatestFormatVersion, false)));
708
+ testing::Values(std::make_tuple(kLatestBbtFormatVersion, true),
709
+ std::make_tuple(kLatestBbtFormatVersion, false)));
712
710
 
713
711
  TEST_P(ColumnFamilyTest, AddDrop) {
714
712
  Open();
@@ -3542,11 +3540,10 @@ TEST_P(ColumnFamilyTest, MultipleCFPathsTest) {
3542
3540
 
3543
3541
  // Re-open and verify the keys.
3544
3542
  Reopen({ColumnFamilyOptions(), cf_opt1, cf_opt2});
3545
- DBImpl* dbi = static_cast_with_check<DBImpl>(db_);
3546
3543
  for (int cf = 1; cf != 3; ++cf) {
3547
3544
  ReadOptions read_options;
3548
3545
  read_options.readahead_size = 0;
3549
- auto it = dbi->NewIterator(read_options, handles_[cf]);
3546
+ auto it = db_->NewIterator(read_options, handles_[cf]);
3550
3547
  for (it->SeekToFirst(); it->Valid(); it->Next()) {
3551
3548
  ASSERT_OK(it->status());
3552
3549
  Slice key(it->key());
@@ -3636,7 +3633,7 @@ TEST(ColumnFamilyTest, ValidateMemtableKVChecksumOption) {
3636
3633
  // the behavior of manual flush is that it skips retaining UDTs.
3637
3634
  class ColumnFamilyRetainUDTTest : public ColumnFamilyTestBase {
3638
3635
  public:
3639
- ColumnFamilyRetainUDTTest() : ColumnFamilyTestBase(kLatestFormatVersion) {}
3636
+ ColumnFamilyRetainUDTTest() : ColumnFamilyTestBase(kLatestBbtFormatVersion) {}
3640
3637
 
3641
3638
  void SetUp() override {
3642
3639
  db_options_.allow_concurrent_memtable_write = false;
@@ -3886,7 +3883,7 @@ TEST_F(ManualFlushSkipRetainUDTTest, FlushRemovesStaleEntries) {
3886
3883
  static_cast_with_check<ColumnFamilyHandleImpl>(cfh)->cfd();
3887
3884
  for (int version = 0; version < 100; version++) {
3888
3885
  if (version == 50) {
3889
- ASSERT_OK(static_cast_with_check<DBImpl>(db_)->TEST_SwitchMemtable(cfd));
3886
+ ASSERT_OK(dbfull()->TEST_SwitchMemtable(cfd));
3890
3887
  }
3891
3888
  ASSERT_OK(
3892
3889
  Put(0, "foo", EncodeAsUint64(version), "v" + std::to_string(version)));
@@ -75,10 +75,9 @@ TEST_F(CompactFilesTest, L0ConflictsFiles) {
75
75
  options.level0_file_num_compaction_trigger = kLevel0Trigger;
76
76
  options.compression = kNoCompression;
77
77
 
78
- DB* db = nullptr;
78
+ std::unique_ptr<DB> db;
79
79
  ASSERT_OK(DestroyDB(db_name_, options));
80
- Status s = DB::Open(options, db_name_, &db);
81
- assert(s.ok());
80
+ ASSERT_OK(DB::Open(options, db_name_, &db));
82
81
  assert(db);
83
82
 
84
83
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency({
@@ -114,7 +113,6 @@ TEST_F(CompactFilesTest, L0ConflictsFiles) {
114
113
  }
115
114
  }
116
115
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
117
- delete db;
118
116
  }
119
117
 
120
118
  TEST_F(CompactFilesTest, MultipleLevel) {
@@ -128,11 +126,11 @@ TEST_F(CompactFilesTest, MultipleLevel) {
128
126
  FlushedFileCollector* collector = new FlushedFileCollector();
129
127
  options.listeners.emplace_back(collector);
130
128
 
131
- DB* db = nullptr;
129
+ std::unique_ptr<DB> db;
132
130
  ASSERT_OK(DestroyDB(db_name_, options));
133
131
  Status s = DB::Open(options, db_name_, &db);
134
132
  ASSERT_OK(s);
135
- ASSERT_NE(db, nullptr);
133
+ ASSERT_NE(db.get(), nullptr);
136
134
 
137
135
  // create couple files in L0, L3, L4 and L5
138
136
  for (int i = 5; i > 2; --i) {
@@ -141,7 +139,8 @@ TEST_F(CompactFilesTest, MultipleLevel) {
141
139
  ASSERT_OK(db->Flush(FlushOptions()));
142
140
  // Ensure background work is fully finished including listener callbacks
143
141
  // before accessing listener state.
144
- ASSERT_OK(static_cast_with_check<DBImpl>(db)->TEST_WaitForBackgroundWork());
142
+ ASSERT_OK(
143
+ static_cast_with_check<DBImpl>(db.get())->TEST_WaitForBackgroundWork());
145
144
  auto l0_files = collector->GetFlushedFiles();
146
145
  ASSERT_OK(db->CompactFiles(CompactionOptions(), l0_files, i));
147
146
 
@@ -191,8 +190,6 @@ TEST_F(CompactFilesTest, MultipleLevel) {
191
190
  ASSERT_OK(db->CompactFiles(CompactionOptions(), files, 5));
192
191
  SyncPoint::GetInstance()->DisableProcessing();
193
192
  thread.join();
194
-
195
- delete db;
196
193
  }
197
194
 
198
195
  TEST_F(CompactFilesTest, ObsoleteFiles) {
@@ -212,11 +209,11 @@ TEST_F(CompactFilesTest, ObsoleteFiles) {
212
209
  FlushedFileCollector* collector = new FlushedFileCollector();
213
210
  options.listeners.emplace_back(collector);
214
211
 
215
- DB* db = nullptr;
212
+ std::unique_ptr<DB> db;
216
213
  ASSERT_OK(DestroyDB(db_name_, options));
217
214
  Status s = DB::Open(options, db_name_, &db);
218
215
  ASSERT_OK(s);
219
- ASSERT_NE(db, nullptr);
216
+ ASSERT_NE(db.get(), nullptr);
220
217
 
221
218
  // create couple files
222
219
  for (int i = 1000; i < 2000; ++i) {
@@ -226,13 +223,12 @@ TEST_F(CompactFilesTest, ObsoleteFiles) {
226
223
 
227
224
  auto l0_files = collector->GetFlushedFiles();
228
225
  ASSERT_OK(db->CompactFiles(CompactionOptions(), l0_files, 1));
229
- ASSERT_OK(static_cast_with_check<DBImpl>(db)->TEST_WaitForCompact());
226
+ ASSERT_OK(static_cast_with_check<DBImpl>(db.get())->TEST_WaitForCompact());
230
227
 
231
228
  // verify all compaction input files are deleted
232
229
  for (const auto& fname : l0_files) {
233
230
  ASSERT_EQ(Status::NotFound(), env_->FileExists(fname));
234
231
  }
235
- delete db;
236
232
  }
237
233
 
238
234
  TEST_F(CompactFilesTest, NotCutOutputOnLevel0) {
@@ -251,10 +247,9 @@ TEST_F(CompactFilesTest, NotCutOutputOnLevel0) {
251
247
  FlushedFileCollector* collector = new FlushedFileCollector();
252
248
  options.listeners.emplace_back(collector);
253
249
 
254
- DB* db = nullptr;
250
+ std::unique_ptr<DB> db;
255
251
  ASSERT_OK(DestroyDB(db_name_, options));
256
- Status s = DB::Open(options, db_name_, &db);
257
- assert(s.ok());
252
+ ASSERT_OK(DB::Open(options, db_name_, &db));
258
253
  assert(db);
259
254
 
260
255
  // create couple files
@@ -262,19 +257,20 @@ TEST_F(CompactFilesTest, NotCutOutputOnLevel0) {
262
257
  ASSERT_OK(db->Put(WriteOptions(), std::to_string(i),
263
258
  std::string(1000, 'a' + (i % 26))));
264
259
  }
265
- ASSERT_OK(static_cast_with_check<DBImpl>(db)->TEST_WaitForFlushMemTable());
260
+ ASSERT_OK(
261
+ static_cast_with_check<DBImpl>(db.get())->TEST_WaitForFlushMemTable());
266
262
  auto l0_files_1 = collector->GetFlushedFiles();
267
263
  collector->ClearFlushedFiles();
268
264
  for (int i = 0; i < 500; ++i) {
269
265
  ASSERT_OK(db->Put(WriteOptions(), std::to_string(i),
270
266
  std::string(1000, 'a' + (i % 26))));
271
267
  }
272
- ASSERT_OK(static_cast_with_check<DBImpl>(db)->TEST_WaitForFlushMemTable());
268
+ ASSERT_OK(
269
+ static_cast_with_check<DBImpl>(db.get())->TEST_WaitForFlushMemTable());
273
270
  auto l0_files_2 = collector->GetFlushedFiles();
274
271
  ASSERT_OK(db->CompactFiles(CompactionOptions(), l0_files_1, 0));
275
272
  ASSERT_OK(db->CompactFiles(CompactionOptions(), l0_files_2, 0));
276
273
  // no assertion failure
277
- delete db;
278
274
  }
279
275
 
280
276
  TEST_F(CompactFilesTest, CapturingPendingFiles) {
@@ -289,7 +285,7 @@ TEST_F(CompactFilesTest, CapturingPendingFiles) {
289
285
  FlushedFileCollector* collector = new FlushedFileCollector();
290
286
  options.listeners.emplace_back(collector);
291
287
 
292
- DB* db = nullptr;
288
+ std::unique_ptr<DB> db;
293
289
  ASSERT_OK(DestroyDB(db_name_, options));
294
290
  Status s = DB::Open(options, db_name_, &db);
295
291
  ASSERT_OK(s);
@@ -303,7 +299,8 @@ TEST_F(CompactFilesTest, CapturingPendingFiles) {
303
299
 
304
300
  // Ensure background work is fully finished including listener callbacks
305
301
  // before accessing listener state.
306
- ASSERT_OK(static_cast_with_check<DBImpl>(db)->TEST_WaitForBackgroundWork());
302
+ ASSERT_OK(
303
+ static_cast_with_check<DBImpl>(db.get())->TEST_WaitForBackgroundWork());
307
304
  auto l0_files = collector->GetFlushedFiles();
308
305
  EXPECT_EQ(5, l0_files.size());
309
306
 
@@ -327,13 +324,12 @@ TEST_F(CompactFilesTest, CapturingPendingFiles) {
327
324
 
328
325
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
329
326
 
330
- delete db;
327
+ db.reset();
331
328
 
332
329
  // Make sure we can reopen the DB.
333
330
  s = DB::Open(options, db_name_, &db);
334
331
  ASSERT_OK(s);
335
332
  assert(db);
336
- delete db;
337
333
  }
338
334
 
339
335
  TEST_F(CompactFilesTest, CompactionFilterWithGetSv) {
@@ -365,12 +361,12 @@ TEST_F(CompactFilesTest, CompactionFilterWithGetSv) {
365
361
  options.create_if_missing = true;
366
362
  options.compaction_filter = cf.get();
367
363
 
368
- DB* db = nullptr;
364
+ std::unique_ptr<DB> db;
369
365
  ASSERT_OK(DestroyDB(db_name_, options));
370
366
  Status s = DB::Open(options, db_name_, &db);
371
367
  ASSERT_OK(s);
372
368
 
373
- cf->SetDB(db);
369
+ cf->SetDB(db.get());
374
370
 
375
371
  // Write one L0 file
376
372
  ASSERT_OK(db->Put(WriteOptions(), "K1", "V1"));
@@ -384,8 +380,6 @@ TEST_F(CompactFilesTest, CompactionFilterWithGetSv) {
384
380
  ASSERT_OK(
385
381
  db->CompactFiles(ROCKSDB_NAMESPACE::CompactionOptions(), {fname}, 0));
386
382
  }
387
-
388
- delete db;
389
383
  }
390
384
 
391
385
  TEST_F(CompactFilesTest, SentinelCompressionType) {
@@ -413,7 +407,7 @@ TEST_F(CompactFilesTest, SentinelCompressionType) {
413
407
  options.create_if_missing = true;
414
408
  FlushedFileCollector* collector = new FlushedFileCollector();
415
409
  options.listeners.emplace_back(collector);
416
- DB* db = nullptr;
410
+ std::unique_ptr<DB> db;
417
411
  ASSERT_OK(DB::Open(options, db_name_, &db));
418
412
 
419
413
  ASSERT_OK(db->Put(WriteOptions(), "key", "val"));
@@ -421,7 +415,8 @@ TEST_F(CompactFilesTest, SentinelCompressionType) {
421
415
 
422
416
  // Ensure background work is fully finished including listener callbacks
423
417
  // before accessing listener state.
424
- ASSERT_OK(static_cast_with_check<DBImpl>(db)->TEST_WaitForBackgroundWork());
418
+ ASSERT_OK(
419
+ static_cast_with_check<DBImpl>(db.get())->TEST_WaitForBackgroundWork());
425
420
  auto l0_files = collector->GetFlushedFiles();
426
421
  ASSERT_EQ(1, l0_files.size());
427
422
 
@@ -433,10 +428,10 @@ TEST_F(CompactFilesTest, SentinelCompressionType) {
433
428
  ROCKSDB_NAMESPACE::TablePropertiesCollection all_tables_props;
434
429
  ASSERT_OK(db->GetPropertiesOfAllTables(&all_tables_props));
435
430
  for (const auto& name_and_table_props : all_tables_props) {
436
- ASSERT_EQ(CompressionTypeToString(CompressionType::kZlibCompression),
437
- name_and_table_props.second->compression_name);
431
+ // As of format_version 7, more elaborate information is encoded into the
432
+ // compression_name property
433
+ ASSERT_EQ("BuiltinV2;02;", name_and_table_props.second->compression_name);
438
434
  }
439
- delete db;
440
435
  }
441
436
  }
442
437
 
@@ -461,11 +456,7 @@ TEST_F(CompactFilesTest, CompressionWithBlockAlign) {
461
456
  }
462
457
 
463
458
  std::unique_ptr<DB> db;
464
- {
465
- DB* _db = nullptr;
466
- ASSERT_OK(DB::Open(options, db_name_, &_db));
467
- db.reset(_db);
468
- }
459
+ ASSERT_OK(DB::Open(options, db_name_, &db));
469
460
 
470
461
  ASSERT_OK(db->Put(WriteOptions(), "key", "val"));
471
462
  ASSERT_OK(db->Flush(FlushOptions()));
@@ -504,7 +495,7 @@ TEST_F(CompactFilesTest, GetCompactionJobInfo) {
504
495
  FlushedFileCollector* collector = new FlushedFileCollector();
505
496
  options.listeners.emplace_back(collector);
506
497
 
507
- DB* db = nullptr;
498
+ std::unique_ptr<DB> db;
508
499
  ASSERT_OK(DestroyDB(db_name_, options));
509
500
  Status s = DB::Open(options, db_name_, &db);
510
501
  ASSERT_OK(s);
@@ -515,7 +506,8 @@ TEST_F(CompactFilesTest, GetCompactionJobInfo) {
515
506
  ASSERT_OK(db->Put(WriteOptions(), std::to_string(i),
516
507
  std::string(1000, 'a' + (i % 26))));
517
508
  }
518
- ASSERT_OK(static_cast_with_check<DBImpl>(db)->TEST_WaitForFlushMemTable());
509
+ ASSERT_OK(
510
+ static_cast_with_check<DBImpl>(db.get())->TEST_WaitForFlushMemTable());
519
511
  auto l0_files_1 = collector->GetFlushedFiles();
520
512
  CompactionOptions co;
521
513
  co.compression = CompressionType::kLZ4Compression;
@@ -531,7 +523,6 @@ TEST_F(CompactFilesTest, GetCompactionJobInfo) {
531
523
  ASSERT_EQ(compaction_job_info.output_level, 0);
532
524
  ASSERT_OK(compaction_job_info.status);
533
525
  // no assertion failure
534
- delete db;
535
526
  }
536
527
 
537
528
  // Helper function to generate zero-padded keys
@@ -547,11 +538,11 @@ TEST_F(CompactFilesTest, TrivialMoveNonOverlappingFiles) {
547
538
  options.compression = kNoCompression;
548
539
  options.level_compaction_dynamic_level_bytes = false;
549
540
 
550
- DB* db = nullptr;
541
+ std::unique_ptr<DB> db;
551
542
  ASSERT_OK(DestroyDB(db_name_, options));
552
543
  Status s = DB::Open(options, db_name_, &db);
553
544
  ASSERT_OK(s);
554
- ASSERT_NE(db, nullptr);
545
+ ASSERT_NE(db.get(), nullptr);
555
546
 
556
547
  // Create 3 non-overlapping files in L0
557
548
  // File 1: keys [a00-a99]
@@ -664,8 +655,6 @@ TEST_F(CompactFilesTest, TrivialMoveNonOverlappingFiles) {
664
655
  ASSERT_OK(db->Get(ReadOptions(), key, &value));
665
656
  ASSERT_EQ(value, "value_" + key);
666
657
  }
667
-
668
- delete db;
669
658
  }
670
659
 
671
660
  TEST_F(CompactFilesTest, TrivialMoveBlockedByOverlap) {
@@ -676,11 +665,11 @@ TEST_F(CompactFilesTest, TrivialMoveBlockedByOverlap) {
676
665
  options.level_compaction_dynamic_level_bytes = false;
677
666
  options.num_levels = 7;
678
667
 
679
- DB* db = nullptr;
668
+ std::unique_ptr<DB> db;
680
669
  ASSERT_OK(DestroyDB(db_name_, options));
681
670
  Status s = DB::Open(options, db_name_, &db);
682
671
  ASSERT_OK(s);
683
- ASSERT_NE(db, nullptr);
672
+ ASSERT_NE(db.get(), nullptr);
684
673
 
685
674
  // Create a file in L6 with keys [m00-m99] (wide range)
686
675
  for (int i = 0; i < 100; i++) {
@@ -756,8 +745,6 @@ TEST_F(CompactFilesTest, TrivialMoveBlockedByOverlap) {
756
745
  ASSERT_OK(db->Get(ReadOptions(), key, &value));
757
746
  ASSERT_EQ(value, "updated_value_" + key);
758
747
  }
759
-
760
- delete db;
761
748
  }
762
749
 
763
750
  } // namespace ROCKSDB_NAMESPACE
@@ -1310,14 +1310,14 @@ void CompactionIterator::PrepareOutput() {
1310
1310
  validity_info_.rep);
1311
1311
  assert(false);
1312
1312
  }
1313
- ikey_.sequence = 0;
1314
- last_key_seq_zeroed_ = true;
1315
- TEST_SYNC_POINT_CALLBACK("CompactionIterator::PrepareOutput:ZeroingSeq",
1316
- &ikey_);
1313
+
1314
+ bool zeroed_seqno = false;
1317
1315
  if (!timestamp_size_) {
1318
1316
  current_key_.UpdateInternalKey(0, ikey_.type);
1317
+ zeroed_seqno = true;
1319
1318
  } else if (full_history_ts_low_ && cmp_with_history_ts_low_ < 0) {
1320
- // We can also zero out timestamp for better compression.
1319
+ // For UDT, the seqno and timestamp could only be zeroed out after the
1320
+ // key is below history_ts_low_.
1321
1321
  // For the same user key (excluding timestamp), the timestamp-based
1322
1322
  // history can be collapsed to save some space if the timestamp is
1323
1323
  // older than *full_history_ts_low_.
@@ -1325,6 +1325,14 @@ void CompactionIterator::PrepareOutput() {
1325
1325
  const Slice ts_slice = kTsMin;
1326
1326
  ikey_.SetTimestamp(ts_slice);
1327
1327
  current_key_.UpdateInternalKey(0, ikey_.type, &ts_slice);
1328
+ zeroed_seqno = true;
1329
+ }
1330
+
1331
+ if (zeroed_seqno) {
1332
+ ikey_.sequence = 0;
1333
+ last_key_seq_zeroed_ = true;
1334
+ TEST_SYNC_POINT_CALLBACK("CompactionIterator::PrepareOutput:ZeroingSeq",
1335
+ &ikey_);
1328
1336
  }
1329
1337
  }
1330
1338
  }