@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
@@ -47,6 +47,7 @@
47
47
  #include "options/cf_options.h"
48
48
  #include "port/port.h"
49
49
  #include "port/stack_trace.h"
50
+ #include "rocksdb/advanced_compression.h"
50
51
  #include "rocksdb/cache.h"
51
52
  #include "rocksdb/convenience.h"
52
53
  #include "rocksdb/db.h"
@@ -93,6 +94,7 @@
93
94
  #include "utilities/merge_operators/bytesxor.h"
94
95
  #include "utilities/merge_operators/sortlist.h"
95
96
  #include "utilities/persistent_cache/block_cache_tier.h"
97
+ #include "utilities/trie_index/trie_index_factory.h"
96
98
  #ifdef MEMKIND
97
99
  #include "memory/memkind_kmem_allocator.h"
98
100
  #endif
@@ -454,6 +456,10 @@ DEFINE_int32(max_manifest_space_amp_pct,
454
456
  ROCKSDB_NAMESPACE::Options().max_manifest_space_amp_pct,
455
457
  "Max manifest space amp percentage for auto-tuning");
456
458
 
459
+ DEFINE_bool(verify_manifest_content_on_close,
460
+ ROCKSDB_NAMESPACE::Options().verify_manifest_content_on_close,
461
+ "If true, verify MANIFEST content (CRC + decode) on DB close");
462
+
457
463
  DEFINE_bool(cost_write_buffer_to_cache, false,
458
464
  "The usage of memtable is costed to the block cache");
459
465
 
@@ -625,14 +631,6 @@ DEFINE_int32(compressed_secondary_cache_compression_level,
625
631
  "dependent. If unset, we try to use the default for the library "
626
632
  "specified in `--compressed_secondary_cache_compression_type`");
627
633
 
628
- DEFINE_uint32(
629
- compressed_secondary_cache_compress_format_version, 2,
630
- "compress_format_version can have two values: "
631
- "compress_format_version == 1 -- decompressed size is not included"
632
- " in the block header."
633
- "compress_format_version == 2 -- decompressed size is included"
634
- " in the block header in varint32 format.");
635
-
636
634
  DEFINE_bool(use_tiered_cache, false,
637
635
  "If use_compressed_secondary_cache is true and "
638
636
  "use_tiered_volatile_cache is true, then allocate a tiered cache "
@@ -669,6 +667,12 @@ DEFINE_bool(partition_index, false, "Partition index blocks");
669
667
 
670
668
  DEFINE_bool(index_with_first_key, false, "Include first key in the index");
671
669
 
670
+ DEFINE_bool(use_trie_index, false,
671
+ "Use trie-based user-defined index (UDI) for block-based tables. "
672
+ "Builds a LOUDS-encoded succinct trie from separator keys, "
673
+ "providing space reduction compared to the default binary search "
674
+ "index. Requires BytewiseComparator.");
675
+
672
676
  DEFINE_bool(
673
677
  optimize_filters_for_memory,
674
678
  ROCKSDB_NAMESPACE::BlockBasedTableOptions().optimize_filters_for_memory,
@@ -739,9 +743,15 @@ DEFINE_uint64(super_block_alignment_space_overhead_ratio,
739
743
  .super_block_alignment_space_overhead_ratio,
740
744
  "Configure space overhead for super block alignment");
741
745
 
746
+ DEFINE_bool(separate_key_value_in_data_block,
747
+ ROCKSDB_NAMESPACE::BlockBasedTableOptions()
748
+ .separate_key_value_in_data_block,
749
+ "If true, data blocks store keys and values separately.");
750
+
742
751
  DEFINE_int64(prepopulate_block_cache, 0,
743
- "Pre-populate hot/warm blocks in block cache. 0 to disable and 1 "
744
- "to insert during flush");
752
+ "Pre-populate hot/warm blocks in block cache. 0 to disable, 1 "
753
+ "to insert during flush, and 2 to insert during flush and "
754
+ "compaction");
745
755
 
746
756
  DEFINE_uint32(uncache_aggressiveness,
747
757
  ROCKSDB_NAMESPACE::ColumnFamilyOptions().uncache_aggressiveness,
@@ -759,6 +769,11 @@ DEFINE_double(data_block_hash_table_util_ratio, 0.75,
759
769
  "This is only valid if use_data_block_hash_index is "
760
770
  "set to true");
761
771
 
772
+ DEFINE_double(uniform_cv_threshold,
773
+ ROCKSDB_NAMESPACE::BlockBasedTableOptions().uniform_cv_threshold,
774
+ "Coefficient of variation threshold for determining if keys in "
775
+ "an index block are uniformly distributed.");
776
+
762
777
  DEFINE_int64(compressed_cache_size, -1,
763
778
  "Number of bytes to use as a cache of compressed data.");
764
779
 
@@ -797,6 +812,8 @@ DEFINE_bool(memtable_whole_key_filtering, false,
797
812
  "Try to use whole key bloom filter in memtables.");
798
813
  DEFINE_bool(memtable_use_huge_page, false,
799
814
  "Try to use huge page in memtables.");
815
+ DEFINE_bool(memtable_batch_lookup_optimization, false,
816
+ "Use batch lookup optimization for memtable MultiGet.");
800
817
 
801
818
  DEFINE_bool(whole_key_filtering,
802
819
  ROCKSDB_NAMESPACE::BlockBasedTableOptions().whole_key_filtering,
@@ -1041,6 +1058,14 @@ DEFINE_uint64(fifo_compaction_ttl, 0, "TTL for the SST Files in seconds.");
1041
1058
 
1042
1059
  DEFINE_uint64(fifo_age_for_warm, 0, "age_for_warm for FIFO compaction.");
1043
1060
 
1061
+ DEFINE_uint64(fifo_compaction_max_data_files_size_mb, 0,
1062
+ "Combined SST + blob file size limit for FIFO compaction "
1063
+ "trimming. 0 means use max_table_files_size (SST-only).");
1064
+
1065
+ DEFINE_bool(fifo_compaction_use_kv_ratio_compaction, false,
1066
+ "Enable capacity-derived intra-L0 compaction for FIFO with "
1067
+ "BlobDB. Requires fifo_compaction_max_data_files_size_mb > 0.");
1068
+
1044
1069
  // Stacked BlobDB Options
1045
1070
  DEFINE_bool(use_blob_db, false, "[Stacked BlobDB] Open a BlobDB instance.");
1046
1071
 
@@ -1049,15 +1074,6 @@ DEFINE_bool(
1049
1074
  ROCKSDB_NAMESPACE::blob_db::BlobDBOptions().enable_garbage_collection,
1050
1075
  "[Stacked BlobDB] Enable BlobDB garbage collection.");
1051
1076
 
1052
- DEFINE_double(
1053
- blob_db_gc_cutoff,
1054
- ROCKSDB_NAMESPACE::blob_db::BlobDBOptions().garbage_collection_cutoff,
1055
- "[Stacked BlobDB] Cutoff ratio for BlobDB garbage collection.");
1056
-
1057
- DEFINE_bool(blob_db_is_fifo,
1058
- ROCKSDB_NAMESPACE::blob_db::BlobDBOptions().is_fifo,
1059
- "[Stacked BlobDB] Enable FIFO eviction strategy in BlobDB.");
1060
-
1061
1077
  DEFINE_uint64(blob_db_max_db_size,
1062
1078
  ROCKSDB_NAMESPACE::blob_db::BlobDBOptions().max_db_size,
1063
1079
  "[Stacked BlobDB] Max size limit of the directory where blob "
@@ -1072,26 +1088,10 @@ DEFINE_uint64(
1072
1088
  ROCKSDB_NAMESPACE::blob_db::BlobDBOptions().ttl_range_secs,
1073
1089
  "[Stacked BlobDB] TTL bucket size to use when creating blob files.");
1074
1090
 
1075
- DEFINE_uint64(
1076
- blob_db_min_blob_size,
1077
- ROCKSDB_NAMESPACE::blob_db::BlobDBOptions().min_blob_size,
1078
- "[Stacked BlobDB] Smallest blob to store in a file. Blobs "
1079
- "smaller than this will be inlined with the key in the LSM tree.");
1080
-
1081
- DEFINE_uint64(blob_db_bytes_per_sync,
1082
- ROCKSDB_NAMESPACE::blob_db::BlobDBOptions().bytes_per_sync,
1083
- "[Stacked BlobDB] Bytes to sync blob file at.");
1084
-
1085
1091
  DEFINE_uint64(blob_db_file_size,
1086
1092
  ROCKSDB_NAMESPACE::blob_db::BlobDBOptions().blob_file_size,
1087
1093
  "[Stacked BlobDB] Target size of each blob file.");
1088
1094
 
1089
- DEFINE_string(
1090
- blob_db_compression_type, "snappy",
1091
- "[Stacked BlobDB] Algorithm to use to compress blobs in blob files.");
1092
- static enum ROCKSDB_NAMESPACE::CompressionType
1093
- FLAGS_blob_db_compression_type_e = ROCKSDB_NAMESPACE::kSnappyCompression;
1094
-
1095
1095
  // Integrated BlobDB options
1096
1096
  DEFINE_bool(
1097
1097
  enable_blob_files,
@@ -1654,6 +1654,12 @@ DEFINE_bool(print_malloc_stats, false,
1654
1654
 
1655
1655
  DEFINE_bool(disable_auto_compactions, false, "Do not auto trigger compactions");
1656
1656
 
1657
+ DEFINE_bool(open_files_async, false,
1658
+ "Open SST files asynchronously during DB open");
1659
+
1660
+ DEFINE_bool(skip_stats_update_on_db_open, false,
1661
+ "Skip loading table properties to update stats during DB open");
1662
+
1657
1663
  DEFINE_uint64(wal_ttl_seconds, 0, "Set the TTL for the WAL Files in seconds.");
1658
1664
  DEFINE_uint64(wal_size_limit_MB, 0,
1659
1665
  "Set the size limit for the WAL Files in MB.");
@@ -1792,6 +1798,9 @@ DEFINE_double(cuckoo_hash_ratio, 0.9, "Hash ratio for Cuckoo SST table.");
1792
1798
  DEFINE_bool(use_hash_search, false,
1793
1799
  "if use kHashSearch instead of kBinarySearch. "
1794
1800
  "This is valid if only we use BlockTable");
1801
+ DEFINE_string(index_block_search_type, "binary_search",
1802
+ "Search algorithm for reading index blocks: binary_search, "
1803
+ "interpolation_search, or auto_search.");
1795
1804
  DEFINE_string(merge_operator, "",
1796
1805
  "The merge operator to use with the database."
1797
1806
  "If a new merge operator is specified, be sure to use fresh"
@@ -2079,6 +2088,7 @@ static void AppendWithSpace(std::string* str, Slice msg) {
2079
2088
 
2080
2089
  struct DBWithColumnFamilies {
2081
2090
  std::vector<ColumnFamilyHandle*> cfh;
2091
+ std::unique_ptr<DB> db_owner;
2082
2092
  DB* db;
2083
2093
  OptimisticTransactionDB* opt_txn_db;
2084
2094
  std::atomic<size_t> num_created; // Need to be updated after all the
@@ -2108,13 +2118,9 @@ struct DBWithColumnFamilies {
2108
2118
  std::for_each(cfh.begin(), cfh.end(),
2109
2119
  [](ColumnFamilyHandle* cfhi) { delete cfhi; });
2110
2120
  cfh.clear();
2111
- if (opt_txn_db) {
2112
- delete opt_txn_db;
2113
- opt_txn_db = nullptr;
2114
- } else {
2115
- delete db;
2116
- db = nullptr;
2117
- }
2121
+ db_owner.reset();
2122
+ db = nullptr;
2123
+ opt_txn_db = nullptr;
2118
2124
  }
2119
2125
 
2120
2126
  ColumnFamilyHandle* GetCfh(int64_t rand_num) {
@@ -2856,6 +2862,7 @@ class Benchmark {
2856
2862
  int64_t max_num_range_tombstones_;
2857
2863
  ReadOptions read_options_;
2858
2864
  WriteOptions write_options_;
2865
+ std::shared_ptr<ROCKSDB_NAMESPACE::UserDefinedIndexFactory> udi_factory_;
2859
2866
  Options open_options_; // keep options around to properly destroy db later
2860
2867
  TraceOptions trace_options_;
2861
2868
  TraceOptions block_cache_trace_options_;
@@ -2930,12 +2937,18 @@ class Benchmark {
2930
2937
  return true;
2931
2938
  }
2932
2939
 
2933
- inline bool CompressSlice(const CompressionInfo& compression_info,
2934
- const Slice& input, std::string* compressed) {
2935
- constexpr uint32_t compress_format_version = 2;
2936
-
2937
- return OLD_CompressData(input, compression_info, compress_format_version,
2938
- compressed);
2940
+ std::unique_ptr<Compressor> GetCompressor() {
2941
+ CompressionOptions opts;
2942
+ opts.level = FLAGS_compression_level;
2943
+ // TODO: inter-operate with FLAGS_compression_manager
2944
+ auto compressor = GetBuiltinV2CompressionManager()->GetCompressor(
2945
+ opts, FLAGS_compression_type_e);
2946
+ if (compressor &&
2947
+ compressor->GetPreferredCompressionType() != FLAGS_compression_type_e) {
2948
+ // For benchmarking, don't fall back on a different compression type
2949
+ compressor.reset();
2950
+ }
2951
+ return compressor;
2939
2952
  }
2940
2953
 
2941
2954
  void PrintHeader(const Options& options) {
@@ -3021,18 +3034,30 @@ class Benchmark {
3021
3034
  // The test string should not be too small.
3022
3035
  const int len = FLAGS_block_size;
3023
3036
  std::string input_str(len, 'y');
3024
- std::string compressed;
3025
- CompressionOptions opts;
3026
- CompressionContext context(FLAGS_compression_type_e, opts);
3027
- CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(),
3028
- FLAGS_compression_type_e);
3029
- bool result = CompressSlice(info, Slice(input_str), &compressed);
3030
-
3031
- if (!result) {
3032
- fprintf(stdout, "WARNING: %s compression is not enabled\n",
3033
- compression);
3034
- } else if (compressed.size() >= input_str.size()) {
3035
- fprintf(stdout, "WARNING: %s compression is not effective\n",
3037
+ auto compressor = GetCompressor();
3038
+ if (compressor) {
3039
+ GrowableBuffer compressed;
3040
+ compressed.ResetForSize(input_str.size());
3041
+ CompressionType actual_type = kNoCompression;
3042
+ auto working_area = compressor->ObtainWorkingArea();
3043
+ Status s = compressor->CompressBlock(
3044
+ Slice(input_str), compressed.data(), &compressed.MutableSize(),
3045
+ &actual_type, &working_area);
3046
+ if (!s.ok()) {
3047
+ fprintf(stdout, "WARNING: compression test run failure: %s\n",
3048
+ s.ToString().c_str());
3049
+ } else if (actual_type == kNoCompression) {
3050
+ fprintf(stdout,
3051
+ "WARNING: %s compression is not effective or declined\n",
3052
+ compression);
3053
+ } else if (actual_type != FLAGS_compression_type_e) {
3054
+ fprintf(
3055
+ stdout,
3056
+ "WARNING: using %s compression in place of %s (unsupported?)\n",
3057
+ CompressionTypeToString(actual_type).c_str(), compression);
3058
+ }
3059
+ } else {
3060
+ fprintf(stdout, "WARNING: %s compression is not available\n",
3036
3061
  compression);
3037
3062
  }
3038
3063
  }
@@ -3221,8 +3246,6 @@ class Benchmark {
3221
3246
  FLAGS_compressed_secondary_cache_compression_type_e;
3222
3247
  secondary_cache_opts.compression_opts.level =
3223
3248
  FLAGS_compressed_secondary_cache_compression_level;
3224
- secondary_cache_opts.compress_format_version =
3225
- FLAGS_compressed_secondary_cache_compress_format_version;
3226
3249
  if (FLAGS_use_tiered_cache) {
3227
3250
  use_tiered_cache = true;
3228
3251
  adm_policy = StringToAdmissionPolicy(FLAGS_tiered_adm_policy.c_str());
@@ -3417,8 +3440,8 @@ class Benchmark {
3417
3440
 
3418
3441
  void DeleteDBs() {
3419
3442
  db_.DeleteDBs();
3420
- for (const DBWithColumnFamilies& dbwcf : multi_dbs_) {
3421
- delete dbwcf.db;
3443
+ for (auto& dbwcf : multi_dbs_) {
3444
+ dbwcf.DeleteDBs();
3422
3445
  }
3423
3446
  }
3424
3447
 
@@ -3523,11 +3546,13 @@ class Benchmark {
3523
3546
 
3524
3547
  void VerifyDBFromDB(std::string& truth_db_name) {
3525
3548
  DBWithColumnFamilies truth_db;
3526
- auto s = DB::OpenForReadOnly(open_options_, truth_db_name, &truth_db.db);
3549
+ auto s =
3550
+ DB::OpenForReadOnly(open_options_, truth_db_name, &truth_db.db_owner);
3527
3551
  if (!s.ok()) {
3528
3552
  fprintf(stderr, "open error: %s\n", s.ToString().c_str());
3529
3553
  db_bench_exit(1);
3530
3554
  }
3555
+ truth_db.db = truth_db.db_owner.get();
3531
3556
  ReadOptions ro;
3532
3557
  ro.total_order_seek = true;
3533
3558
  std::unique_ptr<Iterator> truth_iter(truth_db.db->NewIterator(ro));
@@ -3602,6 +3627,9 @@ class Benchmark {
3602
3627
  read_options_.auto_readahead_size = FLAGS_auto_readahead_size;
3603
3628
  read_options_.auto_refresh_iterator_with_snapshot =
3604
3629
  FLAGS_auto_refresh_iterator_with_snapshot;
3630
+ if (FLAGS_use_trie_index && udi_factory_) {
3631
+ read_options_.table_index_factory = udi_factory_.get();
3632
+ }
3605
3633
 
3606
3634
  void (Benchmark::*method)(ThreadState*) = nullptr;
3607
3635
  void (Benchmark::*post_process_method)() = nullptr;
@@ -3908,7 +3936,7 @@ class Benchmark {
3908
3936
  }
3909
3937
  Options options = open_options_;
3910
3938
  for (size_t i = 0; i < multi_dbs_.size(); i++) {
3911
- delete multi_dbs_[i].db;
3939
+ multi_dbs_[i].DeleteDBs();
3912
3940
  if (!open_options_.wal_dir.empty()) {
3913
3941
  options.wal_dir = GetPathForMultiple(open_options_.wal_dir, i);
3914
3942
  }
@@ -4248,24 +4276,37 @@ class Benchmark {
4248
4276
  Slice input = gen.Generate(FLAGS_block_size);
4249
4277
  int64_t bytes = 0;
4250
4278
  int64_t produced = 0;
4251
- bool ok = true;
4252
- std::string compressed;
4253
- CompressionOptions opts;
4254
- opts.level = FLAGS_compression_level;
4255
- CompressionContext context(FLAGS_compression_type_e, opts);
4256
- CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(),
4257
- FLAGS_compression_type_e);
4279
+ Status s;
4280
+
4281
+ auto compressor = GetCompressor();
4282
+ if (!compressor) {
4283
+ thread->stats.AddMessage("(compression type not supported)");
4284
+ return;
4285
+ }
4286
+ auto working_area = compressor->ObtainWorkingArea();
4287
+
4288
+ GrowableBuffer compressed;
4258
4289
  // Compress 1G
4259
- while (ok && bytes < int64_t(1) << 30) {
4260
- compressed.clear();
4261
- ok = CompressSlice(info, input, &compressed);
4290
+ while (bytes < int64_t(1) << 30) {
4291
+ compressed.ResetForSize(input.size());
4292
+ CompressionType actual_type = kNoCompression;
4293
+ s = compressor->CompressBlock(input, compressed.data(),
4294
+ &compressed.MutableSize(), &actual_type,
4295
+ &working_area);
4296
+ if (UNLIKELY(!s.ok())) {
4297
+ break;
4298
+ }
4299
+ if (UNLIKELY(actual_type == kNoCompression)) {
4300
+ s = Status::Aborted("Unable to compress smaller than input");
4301
+ break;
4302
+ }
4262
4303
  produced += compressed.size();
4263
4304
  bytes += input.size();
4264
4305
  thread->stats.FinishedOps(nullptr, nullptr, 1, kCompress);
4265
4306
  }
4266
4307
 
4267
- if (!ok) {
4268
- thread->stats.AddMessage("(compression failure)");
4308
+ if (!s.ok()) {
4309
+ thread->stats.AddMessage("(compression failure: " + s.ToString() + ")");
4269
4310
  } else {
4270
4311
  char buf[340];
4271
4312
  snprintf(buf, sizeof(buf), "(output: %.1f%%)",
@@ -4278,37 +4319,59 @@ class Benchmark {
4278
4319
  void Uncompress(ThreadState* thread) {
4279
4320
  RandomGenerator gen;
4280
4321
  Slice input = gen.Generate(FLAGS_block_size);
4281
- std::string compressed;
4282
-
4283
- CompressionOptions compression_opts;
4284
- compression_opts.level = FLAGS_compression_level;
4285
- CompressionContext compression_ctx(FLAGS_compression_type_e,
4286
- compression_opts);
4287
- CompressionInfo compression_info(compression_opts, compression_ctx,
4288
- CompressionDict::GetEmptyDict(),
4289
- FLAGS_compression_type_e);
4290
- UncompressionContext uncompression_ctx(FLAGS_compression_type_e);
4291
- UncompressionInfo uncompression_info(uncompression_ctx,
4292
- UncompressionDict::GetEmptyDict(),
4293
- FLAGS_compression_type_e);
4294
-
4295
- bool ok = CompressSlice(compression_info, input, &compressed);
4296
- int64_t bytes = 0;
4297
- size_t uncompressed_size = 0;
4298
- while (ok && bytes < 1024 * 1048576) {
4299
- constexpr uint32_t compress_format_version = 2;
4300
4322
 
4301
- CacheAllocationPtr uncompressed = OLD_UncompressData(
4302
- uncompression_info, compressed.data(), compressed.size(),
4303
- &uncompressed_size, compress_format_version);
4323
+ auto compressor = GetCompressor();
4324
+ if (!compressor) {
4325
+ thread->stats.AddMessage("(compression type not supported)");
4326
+ return;
4327
+ }
4304
4328
 
4305
- ok = uncompressed.get() != nullptr;
4329
+ // Compress the input first
4330
+ GrowableBuffer compressed;
4331
+ compressed.ResetForSize(input.size());
4332
+ CompressionType actual_type = kNoCompression;
4333
+ Status s = compressor->CompressBlock(
4334
+ input, compressed.data(), &compressed.MutableSize(), &actual_type,
4335
+ /*working_area=*/nullptr);
4336
+ if (!s.ok()) {
4337
+ thread->stats.AddMessage("(compression failure: " + s.ToString() + ")");
4338
+ return;
4339
+ }
4340
+ if (actual_type != FLAGS_compression_type_e) {
4341
+ thread->stats.AddMessage("(failed to compress smaller than input)");
4342
+ return;
4343
+ }
4344
+
4345
+ // TODO: inter-operate with FLAGS_compression_manager
4346
+ auto decompressor =
4347
+ GetBuiltinV2CompressionManager()->GetDecompressorOptimizeFor(
4348
+ actual_type);
4349
+ auto decomp_working_area = decompressor->ObtainWorkingArea(actual_type);
4350
+
4351
+ int64_t bytes = 0;
4352
+ while (bytes < 1024 * 1048576) {
4353
+ Decompressor::Args args;
4354
+ args.compression_type = actual_type;
4355
+ args.compressed_data = compressed.AsSlice();
4356
+ args.working_area = &decomp_working_area;
4357
+
4358
+ s = decompressor->ExtractUncompressedSize(args);
4359
+ if (UNLIKELY(!s.ok())) {
4360
+ break;
4361
+ }
4362
+
4363
+ CacheAllocationPtr uncompressed = AllocateBlock(args.uncompressed_size,
4364
+ /*allocator=*/nullptr);
4365
+ s = decompressor->DecompressBlock(args, uncompressed.get());
4366
+ if (UNLIKELY(!s.ok())) {
4367
+ break;
4368
+ }
4306
4369
  bytes += input.size();
4307
4370
  thread->stats.FinishedOps(nullptr, nullptr, 1, kUncompress);
4308
4371
  }
4309
4372
 
4310
- if (!ok) {
4311
- thread->stats.AddMessage("(compression failure)");
4373
+ if (!s.ok()) {
4374
+ thread->stats.AddMessage("(decompression failure: " + s.ToString() + ")");
4312
4375
  } else {
4313
4376
  thread->stats.AddBytes(bytes);
4314
4377
  }
@@ -4378,6 +4441,8 @@ class Benchmark {
4378
4441
  }
4379
4442
  options.max_manifest_file_size = FLAGS_max_manifest_file_size;
4380
4443
  options.max_manifest_space_amp_pct = FLAGS_max_manifest_space_amp_pct;
4444
+ options.verify_manifest_content_on_close =
4445
+ FLAGS_verify_manifest_content_on_close;
4381
4446
  options.arena_block_size = FLAGS_arena_block_size;
4382
4447
  options.write_buffer_size = FLAGS_write_buffer_size;
4383
4448
  options.max_write_buffer_number = FLAGS_max_write_buffer_number;
@@ -4403,6 +4468,10 @@ class Benchmark {
4403
4468
  FLAGS_fifo_compaction_max_table_files_size_mb * 1024 * 1024,
4404
4469
  FLAGS_fifo_compaction_allow_compaction);
4405
4470
  options.compaction_options_fifo.age_for_warm = FLAGS_fifo_age_for_warm;
4471
+ options.compaction_options_fifo.max_data_files_size =
4472
+ FLAGS_fifo_compaction_max_data_files_size_mb * 1024 * 1024;
4473
+ options.compaction_options_fifo.use_kv_ratio_compaction =
4474
+ FLAGS_fifo_compaction_use_kv_ratio_compaction;
4406
4475
  options.prefix_extractor = prefix_extractor_;
4407
4476
  if (FLAGS_use_uint64_comparator) {
4408
4477
  options.comparator = test::Uint64Comparator();
@@ -4417,6 +4486,8 @@ class Benchmark {
4417
4486
  options.memtable_huge_page_size = FLAGS_memtable_use_huge_page ? 2048 : 0;
4418
4487
  options.memtable_prefix_bloom_size_ratio = FLAGS_memtable_bloom_size_ratio;
4419
4488
  options.memtable_whole_key_filtering = FLAGS_memtable_whole_key_filtering;
4489
+ options.memtable_batch_lookup_optimization =
4490
+ FLAGS_memtable_batch_lookup_optimization;
4420
4491
  if (FLAGS_memtable_insert_with_hint_prefix_size > 0) {
4421
4492
  options.memtable_insert_with_hint_prefix_extractor.reset(
4422
4493
  NewCappedPrefixTransform(
@@ -4499,6 +4570,21 @@ class Benchmark {
4499
4570
  } else {
4500
4571
  block_based_options.index_type = BlockBasedTableOptions::kBinarySearch;
4501
4572
  }
4573
+
4574
+ if (FLAGS_index_block_search_type == "binary_search") {
4575
+ block_based_options.index_block_search_type =
4576
+ BlockBasedTableOptions::kBinary;
4577
+ } else if (FLAGS_index_block_search_type == "interpolation_search") {
4578
+ block_based_options.index_block_search_type =
4579
+ BlockBasedTableOptions::kInterpolation;
4580
+ } else if (FLAGS_index_block_search_type == "auto_search") {
4581
+ block_based_options.index_block_search_type =
4582
+ BlockBasedTableOptions::kAuto;
4583
+ } else {
4584
+ fprintf(stderr, "Unknown index_block_search_type: %s\n",
4585
+ FLAGS_index_block_search_type.c_str());
4586
+ db_bench_exit(1);
4587
+ }
4502
4588
  block_based_options.decouple_partitioned_filters =
4503
4589
  FLAGS_decouple_partitioned_filters;
4504
4590
  if (FLAGS_partition_index_and_filters || FLAGS_partition_index) {
@@ -4599,6 +4685,9 @@ class Benchmark {
4599
4685
  block_based_options.enable_index_compression =
4600
4686
  FLAGS_enable_index_compression;
4601
4687
  block_based_options.block_align = FLAGS_block_align;
4688
+ block_based_options.separate_key_value_in_data_block =
4689
+ FLAGS_separate_key_value_in_data_block;
4690
+ block_based_options.uniform_cv_threshold = FLAGS_uniform_cv_threshold;
4602
4691
  block_based_options.whole_key_filtering = FLAGS_whole_key_filtering;
4603
4692
  block_based_options.max_auto_readahead_size =
4604
4693
  FLAGS_max_auto_readahead_size;
@@ -4618,6 +4707,10 @@ class Benchmark {
4618
4707
  prepopulate_block_cache =
4619
4708
  BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly;
4620
4709
  break;
4710
+ case 2:
4711
+ prepopulate_block_cache = BlockBasedTableOptions::
4712
+ PrepopulateBlockCache::kFlushAndCompaction;
4713
+ break;
4621
4714
  default:
4622
4715
  fprintf(stderr, "Unknown prepopulate block cache mode\n");
4623
4716
  }
@@ -4712,6 +4805,11 @@ class Benchmark {
4712
4805
  fprintf(stdout, "Integrated BlobDB: blob cache disabled\n");
4713
4806
  }
4714
4807
 
4808
+ if (FLAGS_use_trie_index) {
4809
+ udi_factory_ = std::make_shared<trie_index::TrieIndexFactory>();
4810
+ block_based_options.user_defined_index_factory = udi_factory_;
4811
+ }
4812
+
4715
4813
  options.table_factory.reset(
4716
4814
  NewBlockBasedTableFactory(block_based_options));
4717
4815
  }
@@ -4802,6 +4900,14 @@ class Benchmark {
4802
4900
  options.table_cache_numshardbits = FLAGS_table_cache_numshardbits;
4803
4901
  options.max_compaction_bytes = FLAGS_max_compaction_bytes;
4804
4902
  options.disable_auto_compactions = FLAGS_disable_auto_compactions;
4903
+ options.open_files_async = FLAGS_open_files_async;
4904
+ if (FLAGS_open_files_async && !FLAGS_skip_stats_update_on_db_open) {
4905
+ FLAGS_skip_stats_update_on_db_open = true;
4906
+ fprintf(stderr,
4907
+ "open_files_async requires skip_stats_update_on_db_open, "
4908
+ "enabling it automatically\n");
4909
+ }
4910
+ options.skip_stats_update_on_db_open = FLAGS_skip_stats_update_on_db_open;
4805
4911
  options.optimize_filters_for_hits = FLAGS_optimize_filters_for_hits;
4806
4912
  options.paranoid_checks = FLAGS_paranoid_checks;
4807
4913
  options.force_consistency_checks = FLAGS_force_consistency_checks;
@@ -5090,11 +5196,15 @@ class Benchmark {
5090
5196
  }
5091
5197
  if (FLAGS_readonly) {
5092
5198
  s = hooks.OpenForReadOnly(options, db_name, column_families, &db->cfh,
5093
- &db->db);
5199
+ &db->db_owner);
5200
+ if (s.ok()) {
5201
+ db->db = db->db_owner.get();
5202
+ }
5094
5203
  } else if (FLAGS_optimistic_transaction_db) {
5095
5204
  s = hooks.OpenOptimisticTransactionDB(options, db_name, column_families,
5096
5205
  &db->cfh, &db->opt_txn_db);
5097
5206
  if (s.ok()) {
5207
+ db->db_owner.reset(db->opt_txn_db);
5098
5208
  db->db = db->opt_txn_db->GetBaseDB();
5099
5209
  }
5100
5210
  } else if (FLAGS_transaction_db) {
@@ -5108,20 +5218,29 @@ class Benchmark {
5108
5218
  s = hooks.OpenTransactionDB(options, txn_db_options, db_name,
5109
5219
  column_families, &db->cfh, &ptr);
5110
5220
  if (s.ok()) {
5221
+ db->db_owner.reset(ptr);
5111
5222
  db->db = ptr;
5112
5223
  }
5113
5224
  } else {
5114
- s = hooks.Open(options, db_name, column_families, &db->cfh, &db->db);
5225
+ s = hooks.Open(options, db_name, column_families, &db->cfh,
5226
+ &db->db_owner);
5227
+ if (s.ok()) {
5228
+ db->db = db->db_owner.get();
5229
+ }
5115
5230
  }
5116
5231
  db->cfh.resize(FLAGS_num_column_families);
5117
5232
  db->num_created = num_hot;
5118
5233
  db->num_hot = num_hot;
5119
5234
  db->cfh_idx_to_prob = std::move(cfh_idx_to_prob);
5120
5235
  } else if (FLAGS_readonly) {
5121
- s = hooks.OpenForReadOnly(options, db_name, &db->db, false);
5236
+ s = hooks.OpenForReadOnly(options, db_name, &db->db_owner, false);
5237
+ if (s.ok()) {
5238
+ db->db = db->db_owner.get();
5239
+ }
5122
5240
  } else if (FLAGS_optimistic_transaction_db) {
5123
5241
  s = hooks.OpenOptimisticTransactionDB(options, db_name, &db->opt_txn_db);
5124
5242
  if (s.ok()) {
5243
+ db->db_owner.reset(db->opt_txn_db);
5125
5244
  db->db = db->opt_txn_db->GetBaseDB();
5126
5245
  }
5127
5246
  } else if (FLAGS_transaction_db) {
@@ -5137,23 +5256,20 @@ class Benchmark {
5137
5256
  s = hooks.OpenTransactionDB(options, txn_db_options, db_name, &ptr);
5138
5257
  }
5139
5258
  if (s.ok()) {
5259
+ db->db_owner.reset(ptr);
5140
5260
  db->db = ptr;
5141
5261
  }
5142
5262
  } else if (FLAGS_use_blob_db) {
5143
5263
  // Stacked BlobDB
5144
5264
  blob_db::BlobDBOptions blob_db_options;
5145
5265
  blob_db_options.enable_garbage_collection = FLAGS_blob_db_enable_gc;
5146
- blob_db_options.garbage_collection_cutoff = FLAGS_blob_db_gc_cutoff;
5147
- blob_db_options.is_fifo = FLAGS_blob_db_is_fifo;
5148
5266
  blob_db_options.max_db_size = FLAGS_blob_db_max_db_size;
5149
5267
  blob_db_options.ttl_range_secs = FLAGS_blob_db_ttl_range_secs;
5150
- blob_db_options.min_blob_size = FLAGS_blob_db_min_blob_size;
5151
- blob_db_options.bytes_per_sync = FLAGS_blob_db_bytes_per_sync;
5152
5268
  blob_db_options.blob_file_size = FLAGS_blob_db_file_size;
5153
- blob_db_options.compression = FLAGS_blob_db_compression_type_e;
5154
5269
  blob_db::BlobDB* ptr = nullptr;
5155
5270
  s = hooks.Open(options, blob_db_options, db_name, &ptr);
5156
5271
  if (s.ok()) {
5272
+ db->db_owner.reset(ptr);
5157
5273
  db->db = ptr;
5158
5274
  }
5159
5275
  } else if (FLAGS_use_secondary_db) {
@@ -5164,7 +5280,10 @@ class Benchmark {
5164
5280
  FLAGS_secondary_path = default_secondary_path;
5165
5281
  }
5166
5282
  s = hooks.OpenAsSecondary(options, db_name, FLAGS_secondary_path,
5167
- &db->db);
5283
+ &db->db_owner);
5284
+ if (s.ok()) {
5285
+ db->db = db->db_owner.get();
5286
+ }
5168
5287
  if (s.ok() && FLAGS_secondary_update_interval > 0) {
5169
5288
  secondary_update_thread_.reset(new port::Thread(
5170
5289
  [this](int interval, DBWithColumnFamilies* _db) {
@@ -5184,13 +5303,16 @@ class Benchmark {
5184
5303
  FLAGS_secondary_update_interval, db));
5185
5304
  }
5186
5305
  } else if (FLAGS_open_as_follower) {
5187
- std::unique_ptr<DB> dbptr;
5188
- s = hooks.OpenAsFollower(options, db_name, FLAGS_leader_path, &dbptr);
5306
+ s = hooks.OpenAsFollower(options, db_name, FLAGS_leader_path,
5307
+ &db->db_owner);
5189
5308
  if (s.ok()) {
5190
- db->db = dbptr.release();
5309
+ db->db = db->db_owner.get();
5191
5310
  }
5192
5311
  } else {
5193
- s = hooks.Open(options, db_name, &db->db);
5312
+ s = hooks.Open(options, db_name, &db->db_owner);
5313
+ if (s.ok()) {
5314
+ db->db = db->db_owner.get();
5315
+ }
5194
5316
  }
5195
5317
  if (FLAGS_report_open_timing) {
5196
5318
  std::cout << "OpenDb: "
@@ -9137,10 +9259,6 @@ int db_bench_tool(int argc, char** argv, ToolHooks& hooks) {
9137
9259
  FLAGS_compressed_secondary_cache_compression_type_e = StringToCompressionType(
9138
9260
  FLAGS_compressed_secondary_cache_compression_type.c_str());
9139
9261
 
9140
- // Stacked BlobDB
9141
- FLAGS_blob_db_compression_type_e =
9142
- StringToCompressionType(FLAGS_blob_db_compression_type.c_str());
9143
-
9144
9262
  int env_opts = !FLAGS_env_uri.empty() + !FLAGS_fs_uri.empty();
9145
9263
  if (env_opts > 1) {
9146
9264
  fprintf(stderr, "Error: --env_uri and --fs_uri are mutually exclusive\n");