@nxtedition/rocksdb 15.4.1 → 16.0.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 (401) hide show
  1. package/binding.cc +70 -23
  2. package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
  3. package/deps/rocksdb/rocksdb/BUCK +42 -0
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
  5. package/deps/rocksdb/rocksdb/Makefile +59 -32
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
  7. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
  8. package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
  10. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
  11. package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
  12. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
  14. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
  16. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
  17. package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
  24. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
  26. package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
  27. package/deps/rocksdb/rocksdb/db/builder.h +7 -0
  28. package/deps/rocksdb/rocksdb/db/c.cc +373 -57
  29. package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
  30. package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
  51. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
  52. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
  53. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
  54. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
  55. package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
  56. package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
  57. package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
  58. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
  59. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
  60. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
  61. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
  62. package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
  63. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
  64. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
  65. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
  66. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
  79. package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
  80. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
  81. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
  82. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
  83. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
  84. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
  85. package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
  86. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
  87. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
  88. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
  90. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
  91. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
  92. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
  93. package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
  94. package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
  95. package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
  96. package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
  97. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
  98. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
  99. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
  100. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
  101. package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
  102. package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
  103. package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
  104. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
  105. package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
  108. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
  109. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
  111. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
  112. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
  113. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
  114. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
  115. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  116. package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
  117. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
  118. package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
  119. package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
  120. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
  121. package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
  122. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
  123. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  124. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
  125. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
  126. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
  127. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
  128. package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
  129. package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
  130. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
  131. package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
  132. package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
  133. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
  134. package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
  135. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  136. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
  137. package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
  138. package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
  139. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
  140. package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
  141. package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
  142. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
  143. package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
  144. package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
  145. package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
  146. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
  147. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
  148. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
  149. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
  150. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
  151. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
  159. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
  160. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
  161. package/deps/rocksdb/rocksdb/env/env.cc +1 -0
  162. package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
  163. package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
  164. package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
  165. package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
  166. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
  167. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
  168. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
  169. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
  170. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
  171. package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
  172. package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
  173. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
  174. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
  175. package/deps/rocksdb/rocksdb/folly.mk +22 -5
  176. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
  177. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
  178. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
  179. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
  180. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
  181. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
  182. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
  183. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
  185. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
  186. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
  187. package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
  188. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
  189. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
  191. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
  192. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
  193. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
  194. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
  198. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
  200. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
  202. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
  203. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
  204. package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
  205. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
  206. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
  207. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
  208. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
  209. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
  210. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  211. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
  212. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
  213. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
  214. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
  215. package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
  216. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
  217. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
  218. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
  219. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
  220. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
  221. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
  222. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
  223. package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
  224. package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
  225. package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
  226. package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
  227. package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
  228. package/deps/rocksdb/rocksdb/options/options.cc +5 -1
  229. package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
  230. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
  231. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
  232. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
  233. package/deps/rocksdb/rocksdb/port/lang.h +4 -0
  234. package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
  235. package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
  236. package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
  237. package/deps/rocksdb/rocksdb/src.mk +12 -0
  238. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
  239. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  240. package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
  241. package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
  242. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
  243. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
  246. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
  247. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
  248. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
  249. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
  250. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
  251. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
  252. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
  253. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
  254. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
  255. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
  256. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
  257. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
  258. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
  259. package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
  260. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
  261. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
  262. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
  264. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
  265. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
  266. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
  267. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
  268. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
  269. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
  270. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
  271. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
  272. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
  273. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
  274. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
  275. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
  276. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
  277. package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
  278. package/deps/rocksdb/rocksdb/table/format.cc +27 -15
  279. package/deps/rocksdb/rocksdb/table/format.h +41 -15
  280. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
  281. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
  282. package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
  283. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
  284. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  285. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
  286. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
  287. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
  288. package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
  289. package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
  290. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
  291. package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
  292. package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
  293. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
  294. package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
  295. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
  296. package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
  297. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
  298. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
  299. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
  300. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
  301. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
  302. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
  303. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
  304. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
  305. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
  306. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
  307. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
  308. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
  309. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
  310. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
  311. package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
  312. package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
  313. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
  314. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
  315. package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
  316. package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
  317. package/deps/rocksdb/rocksdb/util/coding.h +14 -27
  318. package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
  319. package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
  320. package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
  321. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
  322. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
  323. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
  324. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
  325. package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
  326. package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
  327. package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
  328. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
  329. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
  330. package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
  331. package/deps/rocksdb/rocksdb/util/math.h +3 -1
  332. package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
  333. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
  334. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
  335. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
  336. package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
  337. package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
  338. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
  339. package/deps/rocksdb/rocksdb/util/status.cc +3 -1
  340. package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
  341. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
  342. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
  343. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
  344. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
  345. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
  346. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
  347. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
  348. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
  349. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
  350. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
  351. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
  352. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
  353. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
  354. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
  355. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
  356. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
  357. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
  358. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  359. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
  360. package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
  361. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
  362. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
  363. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
  364. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
  365. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
  366. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
  367. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
  368. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
  369. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
  370. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
  371. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
  372. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
  373. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
  374. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
  375. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
  376. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  377. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
  378. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
  379. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
  380. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
  381. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
  382. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
  383. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
  384. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
  385. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
  386. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
  387. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
  388. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
  389. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  390. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
  391. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
  392. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
  393. package/deps/rocksdb/rocksdb.gyp +7 -0
  394. package/index.js +70 -10
  395. package/iterator.js +25 -3
  396. package/max_rev_operator.h +9 -5
  397. package/package.json +1 -1
  398. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  399. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
@@ -113,9 +113,9 @@ FilterBlockBuilder* CreateFilterBlockBuilder(
113
113
  // A convenience function for populating the Compressor* fields; see ~Rep()
114
114
  Compressor* MaybeCloneSpecialized(
115
115
  Compressor* compressor, CacheEntryRole block_type,
116
- Compressor::DictSampleArgs&& dict_samples = {}) {
116
+ Compressor::DictConfigArgs&& dict_config = Compressor::DictDisabled{}) {
117
117
  auto specialized =
118
- compressor->MaybeCloneSpecialized(block_type, std::move(dict_samples));
118
+ compressor->MaybeCloneSpecialized(block_type, std::move(dict_config));
119
119
  if (specialized) {
120
120
  // Caller is responsible for freeing when distinct
121
121
  return specialized.release();
@@ -134,9 +134,6 @@ Compressor* MaybeCloneSpecialized(
134
134
  // allocated
135
135
  // it must be not extern in one place.
136
136
  const uint64_t kBlockBasedTableMagicNumber = 0x88e241b785f4cff7ull;
137
- // We also support reading and writing legacy block based table format (for
138
- // backwards compatibility)
139
- const uint64_t kLegacyBlockBasedTableMagicNumber = 0xdb4775248b80fb57ull;
140
137
 
141
138
  // A collector that collects properties of interest to block-based table.
142
139
  // For now this class looks heavy-weight since we only write one additional
@@ -318,7 +315,7 @@ struct BlockBasedTableBuilder::ParallelCompressionRep {
318
315
  // simplify the interesting interleavings that have to be considered and
319
316
  // accommodated.
320
317
  struct State : public BitFields<uint64_t, State> {};
321
- ALIGN_AS(CACHE_LINE_SIZE) AcqRelBitFieldsAtomic<State> atomic_state;
318
+ ALIGN_AS(CACHE_LINE_SIZE) BitFieldsAtomic<State> atomic_state;
322
319
 
323
320
  // The first field is a bit for each ring buffer slot (max 32) for whether
324
321
  // that slot is ready to be claimed for writing by a worker thread. Because
@@ -782,6 +779,35 @@ struct BlockBasedTableBuilder::ParallelCompressionRep {
782
779
  #endif // BBTB_PC_WATCHDOG
783
780
  };
784
781
 
782
+ struct WarmCacheConfig {
783
+ const bool enabled;
784
+ const Cache::Priority priority;
785
+
786
+ static WarmCacheConfig Compute(
787
+ BlockBasedTableOptions::PrepopulateBlockCache mode,
788
+ TableFileCreationReason reason) {
789
+ bool enabled = false;
790
+ Cache::Priority priority = Cache::Priority::LOW;
791
+ switch (mode) {
792
+ case BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly:
793
+ enabled = (reason == TableFileCreationReason::kFlush);
794
+ break;
795
+ case BlockBasedTableOptions::PrepopulateBlockCache::kFlushAndCompaction:
796
+ enabled = (reason == TableFileCreationReason::kFlush ||
797
+ reason == TableFileCreationReason::kCompaction);
798
+ if (reason == TableFileCreationReason::kCompaction) {
799
+ priority = Cache::Priority::BOTTOM;
800
+ }
801
+ break;
802
+ case BlockBasedTableOptions::PrepopulateBlockCache::kDisable:
803
+ break;
804
+ default:
805
+ assert(false);
806
+ }
807
+ return {enabled, priority};
808
+ }
809
+ };
810
+
785
811
  struct BlockBasedTableBuilder::Rep {
786
812
  const ImmutableOptions ioptions;
787
813
  // BEGIN from MutableCFOptions
@@ -822,7 +848,6 @@ struct BlockBasedTableBuilder::Rep {
822
848
  PartitionedIndexBuilder* p_index_builder_ = nullptr;
823
849
 
824
850
  std::string last_ikey; // Internal key or empty (unset)
825
- bool warm_cache = false;
826
851
  bool uses_explicit_compression_manager = false;
827
852
 
828
853
  uint64_t sample_for_compression;
@@ -833,7 +858,8 @@ struct BlockBasedTableBuilder::Rep {
833
858
  RelaxedAtomic<uint64_t> sampled_output_fast_data_bytes{0};
834
859
  uint32_t compression_parallel_threads;
835
860
  int max_compressed_bytes_per_kb;
836
- size_t max_dict_sample_bytes = 0;
861
+ // Dictionary guidance for data blocks (from GetDictGuidance())
862
+ Compressor::DictConfig data_block_dict_guidance;
837
863
 
838
864
  // *** Compressors & decompressors - Yes, it seems like a lot here but ***
839
865
  // *** these are distinct fields to minimize extra conditionals and ***
@@ -842,6 +868,9 @@ struct BlockBasedTableBuilder::Rep {
842
868
 
843
869
  // A compressor for blocks in general, without dictionary compression
844
870
  std::unique_ptr<Compressor> basic_compressor;
871
+ // Built-in compressors for compression size sampling
872
+ std::unique_ptr<Compressor> fast_sample_compressor;
873
+ std::unique_ptr<Compressor> slow_sample_compressor;
845
874
  // A compressor for data blocks, which might be tuned differently and might
846
875
  // use dictionary compression (when applicable). See ~Rep() for some details.
847
876
  UnownedPtr<Compressor> data_block_compressor = nullptr;
@@ -920,6 +949,7 @@ struct BlockBasedTableBuilder::Rep {
920
949
 
921
950
  std::unique_ptr<ParallelCompressionRep> pc_rep;
922
951
  RelaxedAtomic<uint64_t> worker_cpu_micros{0};
952
+ const WarmCacheConfig warm_cache_config;
923
953
  BlockCreateContext create_context;
924
954
 
925
955
  // The size of the "tail" part of a SST file. "Tail" refers to
@@ -1037,13 +1067,16 @@ struct BlockBasedTableBuilder::Rep {
1037
1067
  ? BlockBasedTableOptions::kDataBlockBinarySearch
1038
1068
  : table_options.data_block_index_type,
1039
1069
  table_options.data_block_hash_table_util_ratio, ts_sz,
1040
- persist_user_defined_timestamps),
1070
+ persist_user_defined_timestamps, false /* is_user_key */,
1071
+ table_options.separate_key_value_in_data_block,
1072
+ tbo.ioptions.stats),
1041
1073
  range_del_block(
1042
1074
  1 /* block_restart_interval */, true /* use_delta_encoding */,
1043
1075
  false /* use_value_delta_encoding */,
1044
1076
  BlockBasedTableOptions::kDataBlockBinarySearch /* index_type */,
1045
1077
  0.75 /* data_block_hash_table_util_ratio */, ts_sz,
1046
- persist_user_defined_timestamps),
1078
+ persist_user_defined_timestamps, false /* is_user_key */,
1079
+ false /* use_separated_kv_storage */),
1047
1080
  internal_prefix_transform(prefix_extractor.get()),
1048
1081
  sample_for_compression(tbo.moptions.sample_for_compression),
1049
1082
  compression_parallel_threads(
@@ -1062,13 +1095,17 @@ struct BlockBasedTableBuilder::Rep {
1062
1095
  flush_block_policy(
1063
1096
  table_options.flush_block_policy_factory->NewFlushBlockPolicy(
1064
1097
  table_options, data_block)),
1098
+ warm_cache_config(WarmCacheConfig::Compute(
1099
+ table_options.prepopulate_block_cache, reason)),
1065
1100
  create_context(&table_options, &ioptions, ioptions.stats,
1066
1101
  /*decompressor=*/nullptr,
1067
1102
  tbo.moptions.block_protection_bytes_per_key,
1068
1103
  tbo.internal_comparator.user_comparator(),
1069
1104
  !use_delta_encoding_for_index_values,
1070
1105
  table_opt.index_type ==
1071
- BlockBasedTableOptions::kBinarySearchWithFirstKey),
1106
+ BlockBasedTableOptions::kBinarySearchWithFirstKey,
1107
+ table_options.block_restart_interval,
1108
+ table_options.index_block_restart_interval),
1072
1109
  tail_size(0) {
1073
1110
  FilterBuildingContext filter_context(table_options);
1074
1111
 
@@ -1092,10 +1129,7 @@ struct BlockBasedTableBuilder::Rep {
1092
1129
  auto* mgr = tbo.moptions.compression_manager.get();
1093
1130
  if (mgr == nullptr) {
1094
1131
  uses_explicit_compression_manager = false;
1095
- mgr = GetBuiltinCompressionManager(
1096
- GetCompressFormatForVersion(
1097
- static_cast<uint32_t>(table_opt.format_version)))
1098
- .get();
1132
+ mgr = GetBuiltinV2CompressionManager().get();
1099
1133
  } else {
1100
1134
  uses_explicit_compression_manager = true;
1101
1135
 
@@ -1119,9 +1153,12 @@ struct BlockBasedTableBuilder::Rep {
1119
1153
  index_block_working_area.compress =
1120
1154
  index_block_compressor->ObtainWorkingArea();
1121
1155
  }
1122
- max_dict_sample_bytes = basic_compressor->GetMaxSampleSizeIfWantDict(
1123
- CacheEntryRole::kDataBlock);
1124
- if (max_dict_sample_bytes > 0) {
1156
+ data_block_dict_guidance =
1157
+ basic_compressor->GetDictGuidance(CacheEntryRole::kDataBlock);
1158
+ if (auto* sampling =
1159
+ std::get_if<Compressor::DictSampling>(&data_block_dict_guidance);
1160
+ sampling != nullptr && sampling->max_sample_bytes > 0) {
1161
+ // Sampling mode: collect samples up to max_sample_bytes
1125
1162
  state = State::kBuffered;
1126
1163
  if (tbo.target_file_size == 0) {
1127
1164
  buffer_limit = tbo.compression_opts.max_dict_buffer_bytes;
@@ -1131,7 +1168,22 @@ struct BlockBasedTableBuilder::Rep {
1131
1168
  buffer_limit = std::min(tbo.target_file_size,
1132
1169
  tbo.compression_opts.max_dict_buffer_bytes);
1133
1170
  }
1171
+ } else if (auto* predef = std::get_if<Compressor::DictPreDefined>(
1172
+ &data_block_dict_guidance);
1173
+ predef != nullptr && !predef->dict_data.empty()) {
1174
+ // Pre-defined dictionary mode: use it immediately, no buffering
1175
+ data_block_compressor = MaybeCloneSpecialized(
1176
+ basic_compressor.get(), CacheEntryRole::kDataBlock,
1177
+ Compressor::DictPreDefined{std::string{predef->dict_data}});
1178
+ data_block_working_area.compress =
1179
+ data_block_compressor->ObtainWorkingArea();
1134
1180
  } else {
1181
+ assert(std::holds_alternative<Compressor::DictSampling>(
1182
+ data_block_dict_guidance) ||
1183
+ std::holds_alternative<Compressor::DictPreDefined>(
1184
+ data_block_dict_guidance) ||
1185
+ std::holds_alternative<Compressor::DictDisabled>(
1186
+ data_block_dict_guidance));
1135
1187
  // No distinct data block compressor using dictionary, but
1136
1188
  // implementation might still want to specialize for data blocks
1137
1189
  data_block_compressor = MaybeCloneSpecialized(
@@ -1163,17 +1215,20 @@ struct BlockBasedTableBuilder::Rep {
1163
1215
  }
1164
1216
  }
1165
1217
 
1166
- switch (table_options.prepopulate_block_cache) {
1167
- case BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly:
1168
- warm_cache = (reason == TableFileCreationReason::kFlush);
1169
- break;
1170
- case BlockBasedTableOptions::PrepopulateBlockCache::kDisable:
1171
- warm_cache = false;
1172
- break;
1173
- default:
1174
- // missing case
1175
- assert(false);
1176
- warm_cache = false;
1218
+ if (sample_for_compression > 0) {
1219
+ auto builtin = GetBuiltinV2CompressionManager();
1220
+ if (builtin->SupportsCompressionType(kLZ4Compression)) {
1221
+ fast_sample_compressor = builtin->GetCompressor({}, kLZ4Compression);
1222
+ } else if (builtin->SupportsCompressionType(kSnappyCompression)) {
1223
+ fast_sample_compressor = builtin->GetCompressor({}, kSnappyCompression);
1224
+ }
1225
+ if (builtin->SupportsCompressionType(kZSTD)) {
1226
+ slow_sample_compressor = builtin->GetCompressor({}, kZSTD);
1227
+ } else if (builtin->SupportsCompressionType(kZlibCompression)) {
1228
+ slow_sample_compressor = builtin->GetCompressor({}, kZlibCompression);
1229
+ }
1230
+ // NOTE: even if both sampling compressors are nullptr, we still populate
1231
+ // the table properties with placeholder info
1177
1232
  }
1178
1233
 
1179
1234
  const auto compress_dict_build_buffer_charged =
@@ -1197,13 +1252,15 @@ struct BlockBasedTableBuilder::Rep {
1197
1252
  BlockBasedTableOptions::kTwoLevelIndexSearch) {
1198
1253
  p_index_builder_ = PartitionedIndexBuilder::CreateIndexBuilder(
1199
1254
  &internal_comparator, use_delta_encoding_for_index_values,
1200
- table_options, ts_sz, persist_user_defined_timestamps);
1255
+ table_options, ts_sz, persist_user_defined_timestamps,
1256
+ ioptions.stats);
1201
1257
  index_builder.reset(p_index_builder_);
1202
1258
  } else {
1203
1259
  index_builder.reset(IndexBuilder::CreateIndexBuilder(
1204
1260
  table_options.index_type, &internal_comparator,
1205
1261
  &this->internal_prefix_transform, use_delta_encoding_for_index_values,
1206
- table_options, ts_sz, persist_user_defined_timestamps));
1262
+ table_options, ts_sz, persist_user_defined_timestamps,
1263
+ ioptions.stats));
1207
1264
  }
1208
1265
 
1209
1266
  // If user_defined_index_factory is provided, wrap the index builder with
@@ -1237,9 +1294,6 @@ struct BlockBasedTableBuilder::Rep {
1237
1294
  // Apply optimize_filters_for_hits setting here when applicable by
1238
1295
  // skipping filter generation
1239
1296
  filter_builder.reset();
1240
- } else if (tbo.skip_filters) {
1241
- // For SstFileWriter skip_filters
1242
- filter_builder.reset();
1243
1297
  } else if (!table_options.filter_policy) {
1244
1298
  // Null filter_policy -> no filter
1245
1299
  filter_builder.reset();
@@ -1285,6 +1339,11 @@ struct BlockBasedTableBuilder::Rep {
1285
1339
  props.db_session_id = tbo.db_session_id;
1286
1340
  props.db_host_id = ioptions.db_host_id;
1287
1341
  props.format_version = table_options.format_version;
1342
+ props.data_block_restart_interval = table_options.block_restart_interval;
1343
+ props.index_block_restart_interval =
1344
+ table_options.index_block_restart_interval;
1345
+ props.separate_key_value_in_data_block =
1346
+ table_options.separate_key_value_in_data_block ? 1 : 0;
1288
1347
  if (!ReifyDbHostIdProperty(ioptions.env, &props.db_host_id).ok()) {
1289
1348
  ROCKS_LOG_INFO(ioptions.logger, "db_host_id property will not be set");
1290
1349
  }
@@ -1349,11 +1408,10 @@ struct BlockBasedTableBuilder::Rep {
1349
1408
  // Use legacy compression_name property, populated at the end of
1350
1409
  // building the file. Not compatible with compression managers using
1351
1410
  // custom algorithms / compression types.
1352
- assert(Slice(mgr->CompatibilityName())
1353
- .compare(GetBuiltinCompressionManager(
1354
- GetCompressFormatForVersion(
1355
- static_cast<uint32_t>(props.format_version)))
1356
- ->CompatibilityName()) == 0);
1411
+ assert(
1412
+ Slice(mgr->CompatibilityName())
1413
+ .compare(GetBuiltinV2CompressionManager()->CompatibilityName()) ==
1414
+ 0);
1357
1415
  }
1358
1416
  }
1359
1417
  void PostPopulateCompressionProperties() {
@@ -1586,51 +1644,43 @@ void BlockBasedTableBuilder::Flush(const Slice* first_key_in_next_block) {
1586
1644
  if (r->sample_for_compression > 0 &&
1587
1645
  Random::GetTLSInstance()->OneIn(
1588
1646
  static_cast<int>(r->sample_for_compression))) {
1589
- std::string sampled_output_fast;
1590
- std::string sampled_output_slow;
1647
+ GrowableBuffer sampled_output;
1648
+ sampled_output.ResetForSize(uncompressed_block_data.size());
1649
+ size_t fast_size = uncompressed_block_data.size();
1650
+ size_t slow_size = uncompressed_block_data.size();
1591
1651
 
1592
1652
  // Sampling with a fast compression algorithm
1593
- if (LZ4_Supported() || Snappy_Supported()) {
1594
- CompressionType c =
1595
- LZ4_Supported() ? kLZ4Compression : kSnappyCompression;
1596
- CompressionOptions options;
1597
- CompressionContext context(c, options);
1598
- CompressionInfo info_tmp(options, context,
1599
- CompressionDict::GetEmptyDict(), c);
1600
-
1601
- OLD_CompressData(
1602
- uncompressed_block_data, info_tmp,
1603
- GetCompressFormatForVersion(r->table_options.format_version),
1604
- &sampled_output_fast);
1653
+ if (r->fast_sample_compressor) {
1654
+ CompressionType result_type = kNoCompression;
1655
+ Status s = r->fast_sample_compressor->CompressBlock(
1656
+ uncompressed_block_data, sampled_output.data(), &fast_size,
1657
+ &result_type, /*working_area=*/nullptr);
1658
+ if (!s.ok() || result_type == kNoCompression) {
1659
+ // For accounting, fall back on no compression
1660
+ fast_size = uncompressed_block_data.size();
1661
+ }
1605
1662
  }
1606
1663
 
1607
1664
  // Sampling with a slow but high-compression algorithm
1608
- if (ZSTD_Supported() || Zlib_Supported()) {
1609
- CompressionType c = ZSTD_Supported() ? kZSTD : kZlibCompression;
1610
- CompressionOptions options;
1611
- CompressionContext context(c, options);
1612
- CompressionInfo info_tmp(options, context,
1613
- CompressionDict::GetEmptyDict(), c);
1614
-
1615
- OLD_CompressData(
1616
- uncompressed_block_data, info_tmp,
1617
- GetCompressFormatForVersion(r->table_options.format_version),
1618
- &sampled_output_slow);
1619
- }
1620
-
1621
- if (sampled_output_slow.size() > 0 || sampled_output_fast.size() > 0) {
1622
- // Currently compression sampling is only enabled for data block.
1623
- r->sampled_input_data_bytes.FetchAddRelaxed(
1624
- uncompressed_block_data.size());
1625
- r->sampled_output_slow_data_bytes.FetchAddRelaxed(
1626
- sampled_output_slow.size());
1627
- r->sampled_output_fast_data_bytes.FetchAddRelaxed(
1628
- sampled_output_fast.size());
1665
+ if (r->slow_sample_compressor) {
1666
+ CompressionType result_type = kNoCompression;
1667
+ Status s = r->slow_sample_compressor->CompressBlock(
1668
+ uncompressed_block_data, sampled_output.data(), &slow_size,
1669
+ &result_type, /*working_area=*/nullptr);
1670
+ if (!s.ok() || result_type == kNoCompression) {
1671
+ // For accounting, fall back on no compression
1672
+ slow_size = uncompressed_block_data.size();
1673
+ }
1629
1674
  }
1630
1675
 
1631
- NotifyCollectTableCollectorsOnBlockAdd(
1632
- r->table_properties_collectors, uncompressed_block_data.size(),
1633
- sampled_output_slow.size(), sampled_output_fast.size());
1676
+ // NOTE: Currently compression sampling is only enabled for data block.
1677
+ r->sampled_input_data_bytes.FetchAddRelaxed(uncompressed_block_data.size());
1678
+ r->sampled_output_slow_data_bytes.FetchAddRelaxed(slow_size);
1679
+ r->sampled_output_fast_data_bytes.FetchAddRelaxed(fast_size);
1680
+
1681
+ NotifyCollectTableCollectorsOnBlockAdd(r->table_properties_collectors,
1682
+ uncompressed_block_data.size(),
1683
+ slow_size, fast_size);
1634
1684
  } else {
1635
1685
  NotifyCollectTableCollectorsOnBlockAdd(
1636
1686
  r->table_properties_collectors, uncompressed_block_data.size(),
@@ -1911,6 +1961,10 @@ Status BlockBasedTableBuilder::CompressAndVerifyBlock(
1911
1961
  assert(type == kNoCompression ||
1912
1962
  r->table_options.verify_compression == (verify_decomp != nullptr));
1913
1963
 
1964
+ TEST_SYNC_POINT_CALLBACK(
1965
+ "BlockBasedTableBuilder::CompressAndVerifyBlock:TamperWithResultType",
1966
+ &type);
1967
+
1914
1968
  // Some of the compression algorithms are known to be unreliable. If
1915
1969
  // the verify_compression flag is set then try to de-compress the
1916
1970
  // compressed data and compare to the input.
@@ -2105,7 +2159,7 @@ IOStatus BlockBasedTableBuilder::WriteMaybeCompressedBlockImpl(
2105
2159
  }
2106
2160
  }
2107
2161
 
2108
- if (r->warm_cache) {
2162
+ if (r->warm_cache_config.enabled) {
2109
2163
  io_s = status_to_io_status(
2110
2164
  InsertBlockInCacheHelper(*uncompressed_block_data, handle, block_type));
2111
2165
  if (UNLIKELY(!io_s.ok())) {
@@ -2235,8 +2289,8 @@ Status BlockBasedTableBuilder::InsertBlockInCacheHelper(
2235
2289
  // (de)compression dictionary, which will clone and save a dict-based
2236
2290
  // decompressor from the corresponding non-dict decompressor.
2237
2291
  s = WarmInCache(block_cache, key.AsSlice(), block_contents,
2238
- &rep_->create_context, helper, Cache::Priority::LOW,
2239
- &charge);
2292
+ &rep_->create_context, helper,
2293
+ rep_->warm_cache_config.priority, &charge);
2240
2294
  if (LIKELY(s.ok())) {
2241
2295
  BlockBasedTable::UpdateCacheInsertionMetrics(
2242
2296
  block_type, nullptr /*get_context*/, charge, s.IsOkOverwritten(),
@@ -2532,9 +2586,6 @@ void BlockBasedTableBuilder::WriteFooter(BlockHandle& metaindex_block_handle,
2532
2586
  BlockHandle& index_block_handle) {
2533
2587
  assert(LIKELY(ok()));
2534
2588
  Rep* r = rep_.get();
2535
- // this is guaranteed by BlockBasedTableBuilder's constructor
2536
- assert(r->table_options.checksum == kCRC32c ||
2537
- r->table_options.format_version != 0);
2538
2589
  FooterBuilder footer;
2539
2590
  Status s = footer.Build(kBlockBasedTableMagicNumber,
2540
2591
  r->table_options.format_version, r->get_offset(),
@@ -2616,14 +2667,18 @@ void BlockBasedTableBuilder::MaybeEnterUnbuffered(
2616
2667
  kPrimeGenerator % static_cast<uint64_t>(kNumBlocksBuffered));
2617
2668
  const size_t kInitSampleIdx = kNumBlocksBuffered / 2;
2618
2669
 
2619
- Compressor::DictSampleArgs samples;
2670
+ Compressor::DictSamples samples;
2620
2671
  size_t buffer_idx = kInitSampleIdx;
2621
- for (size_t i = 0; i < kNumBlocksBuffered &&
2622
- samples.sample_data.size() < r->max_dict_sample_bytes;
2672
+ // Get max_sample_bytes from the DictSampling guidance
2673
+ auto* sampling =
2674
+ std::get_if<Compressor::DictSampling>(&r->data_block_dict_guidance);
2675
+ assert(sampling != nullptr);
2676
+ size_t max_sample_bytes = sampling->max_sample_bytes;
2677
+ for (size_t i = 0;
2678
+ i < kNumBlocksBuffered && samples.sample_data.size() < max_sample_bytes;
2623
2679
  ++i) {
2624
- size_t copy_len =
2625
- std::min(r->max_dict_sample_bytes - samples.sample_data.size(),
2626
- r->data_block_buffers[buffer_idx].size());
2680
+ size_t copy_len = std::min(max_sample_bytes - samples.sample_data.size(),
2681
+ r->data_block_buffers[buffer_idx].size());
2627
2682
  samples.sample_data.append(r->data_block_buffers[buffer_idx], 0, copy_len);
2628
2683
  samples.sample_lens.emplace_back(copy_len);
2629
2684
 
@@ -2668,7 +2723,10 @@ void BlockBasedTableBuilder::MaybeEnterUnbuffered(
2668
2723
  auto& data_block = r->data_block_buffers[i];
2669
2724
  assert(!data_block.empty());
2670
2725
 
2671
- Block reader{BlockContents{data_block}};
2726
+ Block reader{
2727
+ BlockContents{data_block}, 0 /* read_amp_bytes_per_bit */,
2728
+ nullptr /* statistics */,
2729
+ static_cast<uint32_t>(r->table_options.block_restart_interval)};
2672
2730
  DataBlockIter* iter = reader.NewDataIterator(
2673
2731
  r->internal_comparator.user_comparator(), kDisableGlobalSequenceNumber,
2674
2732
  nullptr /* iter */, nullptr /* stats */,
@@ -2819,6 +2877,12 @@ void BlockBasedTableBuilder::Abandon() {
2819
2877
  rep_->GetIOStatus().PermitUncheckedError();
2820
2878
  }
2821
2879
 
2880
+ #ifndef NDEBUG
2881
+ void BlockBasedTableBuilder::TEST_InjectIOError() {
2882
+ rep_->SetIOStatus(IOStatus::IOError("Injected IOError for testing"));
2883
+ }
2884
+ #endif // !NDEBUG
2885
+
2822
2886
  uint64_t BlockBasedTableBuilder::NumEntries() const {
2823
2887
  return rep_->props.num_entries;
2824
2888
  }
@@ -35,7 +35,6 @@ class WritableFile;
35
35
  struct BlockBasedTableOptions;
36
36
 
37
37
  extern const uint64_t kBlockBasedTableMagicNumber;
38
- extern const uint64_t kLegacyBlockBasedTableMagicNumber;
39
38
 
40
39
  class BlockBasedTableBuilder : public TableBuilder {
41
40
  public:
@@ -118,6 +117,11 @@ class BlockBasedTableBuilder : public TableBuilder {
118
117
 
119
118
  uint64_t GetWorkerCPUMicros() const override;
120
119
 
120
+ #ifndef NDEBUG
121
+ // Test-only: inject an IOError into the builder's status.
122
+ void TEST_InjectIOError();
123
+ #endif // !NDEBUG
124
+
121
125
  private:
122
126
  bool ok() const;
123
127
 
@@ -20,6 +20,7 @@
20
20
  #include "options/options_helper.h"
21
21
  #include "port/port.h"
22
22
  #include "rocksdb/cache.h"
23
+ #include "rocksdb/comparator.h"
23
24
  #include "rocksdb/convenience.h"
24
25
  #include "rocksdb/filter_policy.h"
25
26
  #include "rocksdb/flush_block_policy.h"
@@ -184,6 +185,13 @@ static std::unordered_map<std::string, BlockBasedTableOptions::IndexType>
184
185
  {"kBinarySearchWithFirstKey",
185
186
  BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey}};
186
187
 
188
+ static std::unordered_map<std::string, BlockBasedTableOptions::BlockSearchType>
189
+ block_base_table_index_search_type_string_map = {
190
+ {"kBinary", BlockBasedTableOptions::BlockSearchType::kBinary},
191
+ {"kInterpolation",
192
+ BlockBasedTableOptions::BlockSearchType::kInterpolation},
193
+ {"kAuto", BlockBasedTableOptions::BlockSearchType::kAuto}};
194
+
187
195
  static std::unordered_map<std::string,
188
196
  BlockBasedTableOptions::DataBlockIndexType>
189
197
  block_base_table_data_block_index_type_string_map = {
@@ -223,7 +231,9 @@ static std::unordered_map<std::string,
223
231
  block_base_table_prepopulate_block_cache_string_map = {
224
232
  {"kDisable", BlockBasedTableOptions::PrepopulateBlockCache::kDisable},
225
233
  {"kFlushOnly",
226
- BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly}};
234
+ BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly},
235
+ {"kFlushAndCompaction",
236
+ BlockBasedTableOptions::PrepopulateBlockCache::kFlushAndCompaction}};
227
237
 
228
238
  static struct BlockBasedTableTypeInfo {
229
239
  std::unordered_map<std::string, OptionTypeInfo> info;
@@ -261,6 +271,10 @@ static struct BlockBasedTableTypeInfo {
261
271
  {"index_type", OptionTypeInfo::Enum<BlockBasedTableOptions::IndexType>(
262
272
  offsetof(struct BlockBasedTableOptions, index_type),
263
273
  &block_base_table_index_type_string_map)},
274
+ {"index_block_search_type",
275
+ OptionTypeInfo::Enum<BlockBasedTableOptions::BlockSearchType>(
276
+ offsetof(struct BlockBasedTableOptions, index_block_search_type),
277
+ &block_base_table_index_search_type_string_map)},
264
278
  {"hash_index_allow_collision",
265
279
  {0, OptionType::kBoolean, OptionVerificationType::kDeprecated}},
266
280
  {"data_block_index_type",
@@ -335,6 +349,13 @@ static struct BlockBasedTableTypeInfo {
335
349
  {"format_version",
336
350
  {offsetof(struct BlockBasedTableOptions, format_version),
337
351
  OptionType::kUInt32T, OptionVerificationType::kNormal}},
352
+ {"separate_key_value_in_data_block",
353
+ {offsetof(struct BlockBasedTableOptions,
354
+ separate_key_value_in_data_block),
355
+ OptionType::kBoolean, OptionVerificationType::kNormal}},
356
+ {"uniform_cv_threshold",
357
+ {offsetof(struct BlockBasedTableOptions, uniform_cv_threshold),
358
+ OptionType::kDouble, OptionVerificationType::kNormal}},
338
359
  {"verify_compression",
339
360
  {offsetof(struct BlockBasedTableOptions, verify_compression),
340
361
  OptionType::kBoolean, OptionVerificationType::kNormal}},
@@ -485,19 +506,20 @@ void BlockBasedTableFactory::InitializeOptions() {
485
506
  }
486
507
  }
487
508
 
488
- if (table_options_.format_version < kMinSupportedFormatVersion) {
509
+ if (table_options_.format_version < kMinSupportedBbtFormatVersionForWrite) {
510
+ // In TEST mode, allow writing format versions that are at least supported
511
+ // for reading (so that we have a way of testing the read side).
489
512
  if (TEST_AllowUnsupportedFormatVersion()) {
490
- // Allow old format version for testing.
491
- // And relevant old sanitization.
492
- if (table_options_.format_version == 0 &&
493
- table_options_.checksum != kCRC32c) {
494
- // silently convert format_version to 1 to support non-CRC32c checksum
495
- table_options_.format_version = 1;
513
+ if (table_options_.format_version <
514
+ kMinSupportedBbtFormatVersionForRead) {
515
+ table_options_.format_version = kMinSupportedBbtFormatVersionForWrite;
496
516
  }
497
517
  } else {
498
- table_options_.format_version = kMinSupportedFormatVersion;
518
+ table_options_.format_version = kMinSupportedBbtFormatVersionForWrite;
499
519
  }
500
520
  }
521
+ // NOTE: do not sanitize too high format_version, so that it can be rejected
522
+ // in validation
501
523
  }
502
524
 
503
525
  Status BlockBasedTableFactory::PrepareOptions(const ConfigOptions& opts) {
@@ -615,6 +637,14 @@ Status BlockBasedTableFactory::ValidateOptions(
615
637
  "Hash index is specified for block-based "
616
638
  "table, but prefix_extractor is not given");
617
639
  }
640
+ if (table_options_.index_block_search_type ==
641
+ BlockBasedTableOptions::kInterpolation) {
642
+ // Interpolation search requires BytewiseComparator
643
+ if (cf_opts.comparator != BytewiseComparator()) {
644
+ return Status::InvalidArgument(
645
+ "Interpolation search requires BytewiseComparator");
646
+ }
647
+ }
618
648
  if (table_options_.cache_index_and_filter_blocks &&
619
649
  table_options_.no_block_cache) {
620
650
  return Status::InvalidArgument(
@@ -627,8 +657,14 @@ Status BlockBasedTableFactory::ValidateOptions(
627
657
  "Enable pin_l0_filter_and_index_blocks_in_cache, "
628
658
  ", but block cache is disabled");
629
659
  }
630
- if (!IsSupportedFormatVersion(table_options_.format_version) &&
631
- !TEST_AllowUnsupportedFormatVersion()) {
660
+ // In TEST mode, also allow writing
661
+ // (a) old format_versions that for users are only supported for reads
662
+ // (b) future "draft" format versions that are not yet published to users
663
+ if (!(IsSupportedFormatVersionForWrite(kBlockBasedTableMagicNumber,
664
+ table_options_.format_version) ||
665
+ (TEST_AllowUnsupportedFormatVersion() &&
666
+ table_options_.format_version >=
667
+ kMinSupportedBbtFormatVersionForRead))) {
632
668
  return Status::InvalidArgument(
633
669
  "Unsupported BlockBasedTable format_version. Please check "
634
670
  "include/rocksdb/table.h for more info");
@@ -636,9 +672,7 @@ Status BlockBasedTableFactory::ValidateOptions(
636
672
  bool using_builtin_compatible_compression = true;
637
673
  if (cf_opts.compression_manager &&
638
674
  strcmp(cf_opts.compression_manager->CompatibilityName(),
639
- GetBuiltinCompressionManager(
640
- GetCompressFormatForVersion(table_options_.format_version))
641
- ->CompatibilityName()) != 0) {
675
+ GetBuiltinV2CompressionManager()->CompatibilityName()) != 0) {
642
676
  if (FormatVersionUsesCompressionManagerName(
643
677
  table_options_.format_version)) {
644
678
  using_builtin_compatible_compression = false;
@@ -920,6 +954,9 @@ std::string BlockBasedTableFactory::GetPrintableOptions() const {
920
954
  snprintf(buffer, kBufferSize, " format_version: %d\n",
921
955
  table_options_.format_version);
922
956
  ret.append(buffer);
957
+ snprintf(buffer, kBufferSize, " uniform_cv_threshold: %lf\n",
958
+ table_options_.uniform_cv_threshold);
959
+ ret.append(buffer);
923
960
  snprintf(buffer, kBufferSize, " enable_index_compression: %d\n",
924
961
  table_options_.enable_index_compression);
925
962
  ret.append(buffer);
@@ -87,8 +87,6 @@ class BlockBasedTableFactory : public TableFactory {
87
87
  return &shared_state_->tail_prefetch_stats;
88
88
  }
89
89
 
90
- static constexpr int kMinSupportedFormatVersion = 2;
91
-
92
90
  protected:
93
91
  const void* GetOptionsPtr(const std::string& name) const override;
94
92
  Status ParseOption(const ConfigOptions& config_options,