@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
@@ -317,40 +317,89 @@ struct ClockHandle : public ClockHandleBasicData {
317
317
  // | acquire counter | release counter | hit bit | state marker |
318
318
  // -----------------------------------------------------------------------
319
319
 
320
- // For reading or updating counters in meta word.
321
- static constexpr uint8_t kCounterNumBits = 30;
322
- static constexpr uint64_t kCounterMask = (uint64_t{1} << kCounterNumBits) - 1;
323
-
324
- static constexpr uint8_t kAcquireCounterShift = 0;
325
- static constexpr uint64_t kAcquireIncrement = uint64_t{1}
326
- << kAcquireCounterShift;
327
- static constexpr uint8_t kReleaseCounterShift = kCounterNumBits;
328
- static constexpr uint64_t kReleaseIncrement = uint64_t{1}
329
- << kReleaseCounterShift;
330
-
331
- // For setting the hit bit
332
- static constexpr uint8_t kHitBitShift = 2U * kCounterNumBits;
333
- static constexpr uint64_t kHitBitMask = uint64_t{1} << kHitBitShift;
334
-
335
- // For reading or updating the state marker in meta word
336
- static constexpr uint8_t kStateShift = kHitBitShift + 1;
337
-
338
- // Bits contribution to state marker.
339
- // Occupied means any state other than empty
340
- static constexpr uint8_t kStateOccupiedBit = 0b100;
341
- // Shareable means the entry is reference counted (visible or invisible)
342
- // (only set if also occupied)
343
- static constexpr uint8_t kStateShareableBit = 0b010;
344
- // Visible is only set if also shareable
345
- static constexpr uint8_t kStateVisibleBit = 0b001;
346
-
347
- // Complete state markers (not shifted into full word)
348
- static constexpr uint8_t kStateEmpty = 0b000;
349
- static constexpr uint8_t kStateConstruction = kStateOccupiedBit;
350
- static constexpr uint8_t kStateInvisible =
351
- kStateOccupiedBit | kStateShareableBit;
352
- static constexpr uint8_t kStateVisible =
353
- kStateOccupiedBit | kStateShareableBit | kStateVisibleBit;
320
+ struct SlotMeta : public BitFields<uint64_t, SlotMeta> {
321
+ // For reading or updating counters in meta word.
322
+ static constexpr uint8_t kCounterNumBits = 30;
323
+ // Number of times the a reference has been acquired (or attempted)
324
+ // since last reset by eviction processing
325
+ using AcquireCounter =
326
+ UnsignedBitField<SlotMeta, kCounterNumBits, NoPrevBitField>;
327
+ // Number of times the a reference has been released (or attempted)
328
+ // since last reset by eviction processing
329
+ using ReleaseCounter =
330
+ UnsignedBitField<SlotMeta, kCounterNumBits, AcquireCounter>;
331
+ // Metadata bit in support of secondary cache
332
+ using HitFlag = BoolBitField<SlotMeta, ReleaseCounter>;
333
+ // Occupied means any state other than empty
334
+ using OccupiedFlag = BoolBitField<SlotMeta, HitFlag>;
335
+ // Shareable means the entry is reference counted (visible or invisible)
336
+ // (only set if also occupied)
337
+ using ShareableFlag = BoolBitField<SlotMeta, OccupiedFlag>;
338
+ // Visible is only set if also shareable (invisible can't be found by
339
+ // Lookup)
340
+ using VisibleFlag = BoolBitField<SlotMeta, ShareableFlag>;
341
+
342
+ // Convenience functions
343
+ uint32_t GetAcquireCounter() const { return Get<AcquireCounter>(); }
344
+ void SetAcquireCounter(uint32_t val) { Set<AcquireCounter>(val); }
345
+ uint32_t GetReleaseCounter() const { return Get<ReleaseCounter>(); }
346
+ void SetReleaseCounter(uint32_t val) { Set<ReleaseCounter>(val); }
347
+ uint32_t GetRefcount() const {
348
+ return Get<AcquireCounter>() - Get<ReleaseCounter>();
349
+ }
350
+ bool GetHit() const { return Get<HitFlag>(); }
351
+ void SetHit(bool val) { Set<HitFlag>(val); }
352
+
353
+ // Some distinct states for the various state flags
354
+ bool IsEmpty() const {
355
+ bool rv = !Get<OccupiedFlag>();
356
+ if (rv) {
357
+ assert(!Get<ShareableFlag>());
358
+ assert(!Get<VisibleFlag>());
359
+ }
360
+ return rv;
361
+ }
362
+
363
+ bool IsUnderConstruction() const {
364
+ bool rv = Get<OccupiedFlag>() && !Get<ShareableFlag>();
365
+ if (rv) {
366
+ assert(!Get<VisibleFlag>());
367
+ }
368
+ return rv;
369
+ }
370
+ void SetUnderConstruction() {
371
+ Set<OccupiedFlag>(true);
372
+ Set<ShareableFlag>(false);
373
+ Set<VisibleFlag>(false);
374
+ }
375
+
376
+ bool IsShareable() const { return Get<ShareableFlag>(); }
377
+ bool IsInvisible() const {
378
+ bool rv = Get<ShareableFlag>() && !Get<VisibleFlag>();
379
+ if (rv) {
380
+ assert(Get<OccupiedFlag>());
381
+ }
382
+ return rv;
383
+ }
384
+ void SetInvisible() {
385
+ Set<OccupiedFlag>(true);
386
+ Set<ShareableFlag>(true);
387
+ Set<VisibleFlag>(false);
388
+ }
389
+
390
+ bool IsVisible() const {
391
+ bool rv = Get<ShareableFlag>() && Get<VisibleFlag>();
392
+ if (rv) {
393
+ assert(Get<OccupiedFlag>());
394
+ }
395
+ return rv;
396
+ }
397
+ void SetVisible() {
398
+ Set<OccupiedFlag>(true);
399
+ Set<ShareableFlag>(true);
400
+ Set<VisibleFlag>(true);
401
+ }
402
+ };
354
403
 
355
404
  // Constants for initializing the countdown clock. (Countdown clock is only
356
405
  // in effect with zero refs, acquire counter == release counter, and in that
@@ -364,7 +413,7 @@ struct ClockHandle : public ClockHandleBasicData {
364
413
  // TODO: make these coundown values tuning parameters for eviction?
365
414
 
366
415
  // See above. Mutable for read reference counting.
367
- mutable AcqRelAtomic<uint64_t> meta{};
416
+ mutable BitFieldsAtomic<SlotMeta> meta{};
368
417
  }; // struct ClockHandle
369
418
 
370
419
  class BaseClockTable {
@@ -431,9 +480,9 @@ class BaseClockTable {
431
480
  bool IsEvictionEffortExceeded(const BaseClockTable::EvictionData& data) const;
432
481
  #ifndef NDEBUG
433
482
  // Acquire N references
434
- void TEST_RefN(ClockHandle& handle, size_t n);
483
+ void TEST_RefN(ClockHandle& handle, uint32_t n);
435
484
  // Helper for TEST_ReleaseN
436
- void TEST_ReleaseNMinus1(ClockHandle* handle, size_t n);
485
+ void TEST_ReleaseNMinus1(ClockHandle* handle, uint32_t n);
437
486
  #endif
438
487
 
439
488
  private: // fns
@@ -489,13 +538,13 @@ class BaseClockTable {
489
538
  // TODO: is this separation needed if we don't do background evictions?
490
539
  ALIGN_AS(CACHE_LINE_SIZE)
491
540
  // Number of elements in the table.
492
- AcqRelAtomic<size_t> occupancy_{};
541
+ Atomic<size_t> occupancy_{};
493
542
 
494
543
  // Memory usage by entries tracked by the cache (including standalone)
495
- AcqRelAtomic<size_t> usage_{};
544
+ Atomic<size_t> usage_{};
496
545
 
497
546
  // Part of usage by standalone entries (not in table)
498
- AcqRelAtomic<size_t> standalone_usage_{};
547
+ Atomic<size_t> standalone_usage_{};
499
548
 
500
549
  // Maximum total charge of all elements stored in the table.
501
550
  // (Relaxed: eventual consistency/update is OK)
@@ -586,7 +635,7 @@ class FixedHyperClockTable : public BaseClockTable {
586
635
  bool GrowIfNeeded(size_t new_occupancy, InsertState& state);
587
636
 
588
637
  HandleImpl* DoInsert(const ClockHandleBasicData& proto,
589
- uint64_t initial_countdown, bool take_ref,
638
+ uint32_t initial_countdown, bool take_ref,
590
639
  InsertState& state);
591
640
 
592
641
  // Runs the clock eviction algorithm trying to reclaim at least
@@ -614,7 +663,7 @@ class FixedHyperClockTable : public BaseClockTable {
614
663
  }
615
664
 
616
665
  // Release N references
617
- void TEST_ReleaseN(HandleImpl* handle, size_t n);
666
+ void TEST_ReleaseN(HandleImpl* handle, uint32_t n);
618
667
  #endif
619
668
 
620
669
  // The load factor p is a real number in (0, 1) such that at all
@@ -850,8 +899,8 @@ class AutoHyperClockTable : public BaseClockTable {
850
899
 
851
900
  // See above. The head pointer is logically independent of the rest of
852
901
  // the entry, including the chain next pointer.
853
- AcqRelBitFieldsAtomic<NextWithShift> head_next_with_shift{kUnusedMarker};
854
- AcqRelBitFieldsAtomic<NextWithShift> chain_next_with_shift{kUnusedMarker};
902
+ BitFieldsAtomic<NextWithShift> head_next_with_shift{kUnusedMarker};
903
+ BitFieldsAtomic<NextWithShift> chain_next_with_shift{kUnusedMarker};
855
904
 
856
905
  // For supporting CreateStandalone and some fallback cases.
857
906
  inline bool IsStandalone() const {
@@ -897,7 +946,7 @@ class AutoHyperClockTable : public BaseClockTable {
897
946
  bool GrowIfNeeded(size_t new_occupancy, InsertState& state);
898
947
 
899
948
  HandleImpl* DoInsert(const ClockHandleBasicData& proto,
900
- uint64_t initial_countdown, bool take_ref,
949
+ uint32_t initial_countdown, bool take_ref,
901
950
  InsertState& state);
902
951
 
903
952
  // Runs the clock eviction algorithm trying to reclaim at least
@@ -925,7 +974,7 @@ class AutoHyperClockTable : public BaseClockTable {
925
974
  }
926
975
 
927
976
  // Release N references
928
- void TEST_ReleaseN(HandleImpl* handle, size_t n);
977
+ void TEST_ReleaseN(HandleImpl* handle, uint32_t n);
929
978
  #endif
930
979
 
931
980
  // Maximum ratio of number of occupied slots to number of usable slots. The
@@ -1007,7 +1056,7 @@ class AutoHyperClockTable : public BaseClockTable {
1007
1056
  // To maximize parallelization of Grow() operations, this field is only
1008
1057
  // updated opportunistically after Grow() operations and in DoInsert() where
1009
1058
  // it is found to be out-of-date. See CatchUpLengthInfoNoWait().
1010
- AcqRelAtomic<uint64_t> length_info_;
1059
+ Atomic<uint64_t> length_info_;
1011
1060
 
1012
1061
  // An already-computed version of the usable length times the max load
1013
1062
  // factor. Could be slightly out of date but GrowIfNeeded()/Grow() handle
@@ -1130,8 +1179,8 @@ class ALIGN_AS(CACHE_LINE_SIZE) ClockCacheShard final : public CacheShardBase {
1130
1179
  return table_.TEST_MutableOccupancyLimit();
1131
1180
  }
1132
1181
  // Acquire/release N references
1133
- void TEST_RefN(HandleImpl* handle, size_t n);
1134
- void TEST_ReleaseN(HandleImpl* handle, size_t n);
1182
+ void TEST_RefN(HandleImpl* handle, uint32_t n);
1183
+ void TEST_ReleaseN(HandleImpl* handle, uint32_t n);
1135
1184
  #endif
1136
1185
 
1137
1186
  private: // data
@@ -50,8 +50,7 @@ CompressedSecondaryCache::CompressedSecondaryCache(
50
50
  std::make_shared<CacheReservationManagerImpl<CacheEntryRole::kMisc>>(
51
51
  cache_))),
52
52
  disable_cache_(opts.capacity == 0) {
53
- auto mgr =
54
- GetBuiltinCompressionManager(cache_options_.compress_format_version);
53
+ auto mgr = GetBuiltinV2CompressionManager();
55
54
  compressor_ = mgr->GetCompressor(cache_options_.compression_opts,
56
55
  cache_options_.compression_type);
57
56
  decompressor_ =
@@ -356,9 +355,6 @@ std::string CompressedSecondaryCache::GetPrintableOptions() const {
356
355
  const_cast<CompressionOptions&>(cache_options_.compression_opts))
357
356
  .c_str());
358
357
  ret.append(buffer);
359
- snprintf(buffer, kBufferSize, " compress_format_version : %d\n",
360
- cache_options_.compress_format_version);
361
- ret.append(buffer);
362
358
  return ret;
363
359
  }
364
360
 
@@ -856,8 +856,7 @@ TEST_P(CompressedSecondaryCacheTestWithCompressionParam, BasicTestFromString) {
856
856
  if (LZ4_Supported()) {
857
857
  sec_cache_uri =
858
858
  "compressed_secondary_cache://"
859
- "capacity=2048;num_shard_bits=0;compression_type=kLZ4Compression;"
860
- "compress_format_version=2";
859
+ "capacity=2048;num_shard_bits=0;compression_type=kLZ4Compression";
861
860
  } else {
862
861
  ROCKSDB_GTEST_SKIP("This test requires LZ4 support.");
863
862
  sec_cache_uri =
@@ -888,7 +887,7 @@ TEST_P(CompressedSecondaryCacheTestWithCompressionParam,
888
887
  sec_cache_uri =
889
888
  "compressed_secondary_cache://"
890
889
  "capacity=2048;num_shard_bits=0;compression_type=kLZ4Compression;"
891
- "compress_format_version=2;enable_custom_split_merge=true";
890
+ "enable_custom_split_merge=true";
892
891
  } else {
893
892
  ROCKSDB_GTEST_SKIP("This test requires LZ4 support.");
894
893
  sec_cache_uri =
@@ -1503,7 +1503,7 @@ TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
1503
1503
  /*context*/ this, Cache::Priority::LOW);
1504
1504
  ASSERT_EQ(handle1, nullptr);
1505
1505
 
1506
- // k1 promotion can fail with strict_capacit_limit=true, but Lookup still
1506
+ // k1 promotion can fail with strict_capacity_limit=true, but Lookup still
1507
1507
  // succeeds using a standalone handle
1508
1508
  handle1 = cache->Lookup(k1.AsSlice(), GetHelper(),
1509
1509
  /*context*/ this, Cache::Priority::LOW);
@@ -1680,7 +1680,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness2) {
1680
1680
  // After Flush is successful, RocksDB will do the paranoid check for the new
1681
1681
  // SST file. Meta blocks are always cached in the block cache and they
1682
1682
  // will not be evicted. When block_2 is cache miss and read out, it is
1683
- // inserted to the block cache. Thefore, block_1 is evicted from block
1683
+ // inserted to the block cache. Therefore, block_1 is evicted from block
1684
1684
  // cache and successfully inserted to the secondary cache. Here are 2
1685
1685
  // lookups in the secondary cache for block_1 and block_2.
1686
1686
  ASSERT_EQ(secondary_cache->num_inserts(), 1u);
@@ -1721,7 +1721,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness2) {
1721
1721
  v = Get(Key(0));
1722
1722
  ASSERT_EQ(1007, v.size());
1723
1723
  // This Get needs to access block_1, since block_1 is not in block cache
1724
- // there is one econdary cache lookup. Then, block_1 is cached in the
1724
+ // there is one secondary cache lookup. Then, block_1 is cached in the
1725
1725
  // block cache.
1726
1726
  ASSERT_EQ(secondary_cache->num_inserts(), 2u);
1727
1727
  ASSERT_EQ(secondary_cache->num_lookups(), 5u);
@@ -1785,7 +1785,7 @@ TEST_P(DBSecondaryCacheTest, NoSecondaryCacheInsertion) {
1785
1785
  std::string v = Get(Key(0));
1786
1786
  ASSERT_EQ(1000, v.size());
1787
1787
  // Since the block cache is large enough, all the blocks are cached. we
1788
- // do not need to lookup the seondary cache.
1788
+ // do not need to lookup the secondary cache.
1789
1789
  ASSERT_EQ(secondary_cache->num_inserts(), 0u);
1790
1790
  ASSERT_EQ(secondary_cache->num_lookups(), 2u);
1791
1791
 
@@ -2150,7 +2150,7 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadBasic) {
2150
2150
  ASSERT_OK(Flush());
2151
2151
  Compact("a", "z");
2152
2152
 
2153
- // do th eread for all the key value pairs, so all the blocks should be in
2153
+ // do the read for all the key value pairs, so all the blocks should be in
2154
2154
  // cache
2155
2155
  uint32_t start_insert = cache->GetInsertCount();
2156
2156
  uint32_t start_lookup = cache->GetLookupcount();
@@ -2179,7 +2179,7 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadBasic) {
2179
2179
  &cache_dumper);
2180
2180
  ASSERT_OK(s);
2181
2181
  std::vector<DB*> db_list;
2182
- db_list.push_back(db_);
2182
+ db_list.push_back(db_.get());
2183
2183
  s = cache_dumper->SetDumpFilter(db_list);
2184
2184
  ASSERT_OK(s);
2185
2185
  s = cache_dumper->DumpCacheEntriesToWriter();
@@ -2263,11 +2263,11 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadWithFilter) {
2263
2263
  options.env = fault_env_.get();
2264
2264
  std::string dbname1 = test::PerThreadDBPath("db_1");
2265
2265
  ASSERT_OK(DestroyDB(dbname1, options));
2266
- DB* db1 = nullptr;
2266
+ std::unique_ptr<DB> db1;
2267
2267
  ASSERT_OK(DB::Open(options, dbname1, &db1));
2268
2268
  std::string dbname2 = test::PerThreadDBPath("db_2");
2269
2269
  ASSERT_OK(DestroyDB(dbname2, options));
2270
- DB* db2 = nullptr;
2270
+ std::unique_ptr<DB> db2;
2271
2271
  ASSERT_OK(DB::Open(options, dbname2, &db2));
2272
2272
  fault_fs_->SetFailGetUniqueId(true);
2273
2273
 
@@ -2335,7 +2335,7 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadWithFilter) {
2335
2335
  &cache_dumper);
2336
2336
  ASSERT_OK(s);
2337
2337
  std::vector<DB*> db_list;
2338
- db_list.push_back(db1);
2338
+ db_list.push_back(db1.get());
2339
2339
  s = cache_dumper->SetDumpFilter(db_list);
2340
2340
  ASSERT_OK(s);
2341
2341
  s = cache_dumper->DumpCacheEntriesToWriter();
@@ -2377,7 +2377,7 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadWithFilter) {
2377
2377
  ASSERT_OK(s);
2378
2378
 
2379
2379
  ASSERT_OK(db1->Close());
2380
- delete db1;
2380
+ db1.reset();
2381
2381
  ASSERT_OK(DB::Open(options, dbname1, &db1));
2382
2382
 
2383
2383
  // After load, we do the Get again. To validate the cache, we do not allow any
@@ -2406,8 +2406,8 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadWithFilter) {
2406
2406
  ASSERT_EQ(256, static_cast<int>(block_lookup));
2407
2407
  fault_fs_->SetFailGetUniqueId(false);
2408
2408
  fault_fs_->SetFilesystemActive(true);
2409
- delete db1;
2410
- delete db2;
2409
+ db1.reset();
2410
+ db2.reset();
2411
2411
  ASSERT_OK(DestroyDB(dbname1, options));
2412
2412
  ASSERT_OK(DestroyDB(dbname2, options));
2413
2413
  }
@@ -2464,7 +2464,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionBasic) {
2464
2464
  std::string v = Get(Key(0));
2465
2465
  ASSERT_EQ(1007, v.size());
2466
2466
 
2467
- // Check the data in first block. Cache miss, direclty read from SST file.
2467
+ // Check the data in first block. Cache miss, directly read from SST file.
2468
2468
  ASSERT_EQ(secondary_cache->num_inserts(), 0u);
2469
2469
  ASSERT_EQ(secondary_cache->num_lookups(), 0u);
2470
2470
 
@@ -2598,7 +2598,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionChange) {
2598
2598
  }
2599
2599
 
2600
2600
  // Two DB test. We create 2 DBs sharing the same block cache and secondary
2601
- // cache. We diable the secondary cache option for DB2.
2601
+ // cache. We disable the secondary cache option for DB2.
2602
2602
  TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionTwoDB) {
2603
2603
  if (IsHyperClock()) {
2604
2604
  ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
@@ -2619,11 +2619,11 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionTwoDB) {
2619
2619
  options.paranoid_file_checks = true;
2620
2620
  std::string dbname1 = test::PerThreadDBPath("db_t_1");
2621
2621
  ASSERT_OK(DestroyDB(dbname1, options));
2622
- DB* db1 = nullptr;
2622
+ std::unique_ptr<DB> db1;
2623
2623
  ASSERT_OK(DB::Open(options, dbname1, &db1));
2624
2624
  std::string dbname2 = test::PerThreadDBPath("db_t_2");
2625
2625
  ASSERT_OK(DestroyDB(dbname2, options));
2626
- DB* db2 = nullptr;
2626
+ std::unique_ptr<DB> db2;
2627
2627
  Options options2 = options;
2628
2628
  options2.lowest_used_cache_tier = CacheTier::kVolatileTier;
2629
2629
  ASSERT_OK(DB::Open(options2, dbname2, &db2));
@@ -2700,8 +2700,8 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionTwoDB) {
2700
2700
 
2701
2701
  fault_fs_->SetFailGetUniqueId(false);
2702
2702
  fault_fs_->SetFilesystemActive(true);
2703
- delete db1;
2704
- delete db2;
2703
+ db1.reset();
2704
+ db2.reset();
2705
2705
  ASSERT_OK(DestroyDB(dbname1, options));
2706
2706
  ASSERT_OK(DestroyDB(dbname2, options));
2707
2707
  }
@@ -8,7 +8,7 @@ DB_STRESS_CMD?=./db_stress
8
8
  include common.mk
9
9
 
10
10
  CRASHTEST_MAKE=$(MAKE) -f crash_test.mk
11
- CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD) --cleanup_cmd='$(DB_CLEANUP_CMD)'
11
+ CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD) --cleanup_cmd='$(DB_CLEANUP_CMD)' --destroy_db_initially=1
12
12
 
13
13
  .PHONY: crash_test crash_test_with_atomic_flush crash_test_with_txn \
14
14
  crash_test_with_wc_txn crash_test_with_wp_txn crash_test_with_wup_txn \
@@ -34,6 +34,7 @@ CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD) --
34
34
  whitebox_crash_test_with_txn whitebox_crash_test_with_ts \
35
35
  whitebox_crash_test_with_optimistic_txn \
36
36
  whitebox_crash_test_with_tiered_storage \
37
+ crash_test_db_cleanup \
37
38
 
38
39
  crash_test: $(DB_STRESS_CMD)
39
40
  # Do not parallelize
@@ -161,6 +162,9 @@ whitebox_crash_test_with_optimistic_txn: $(DB_STRESS_CMD)
161
162
  $(CRASHTEST_PY) --optimistic_txn whitebox --random_kill_odd \
162
163
  $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
163
164
 
165
+ crash_test_db_cleanup: $(DB_STRESS_CMD)
166
+ $(DB_STRESS_CMD) --delete_dir_and_exit=$(TEST_TMPDIR)
167
+
164
168
  # Old names DEPRECATED
165
169
  crash_test_with_txn: crash_test_with_wc_txn
166
170
  whitebox_crash_test_with_txn: whitebox_crash_test_with_wc_txn
@@ -67,6 +67,16 @@ BlobFileBuilder::BlobFileBuilder(
67
67
  min_blob_size_(mutable_cf_options->min_blob_size),
68
68
  blob_file_size_(mutable_cf_options->blob_file_size),
69
69
  blob_compression_type_(mutable_cf_options->blob_compression_type),
70
+ // TODO: support most CompressionOptions with a new CF option
71
+ // blob_compression_opts
72
+ // TODO with schema change: support custom compression manager and options
73
+ // such as max_compressed_bytes_per_kb
74
+ // NOTE: returns nullptr for kNoCompression
75
+ blob_compressor_(GetBuiltinV2CompressionManager()->GetCompressor(
76
+ CompressionOptions{}, blob_compression_type_)),
77
+ blob_compressor_wa_(blob_compressor_
78
+ ? blob_compressor_->ObtainWorkingArea()
79
+ : Compressor::ManagedWorkingArea{}),
70
80
  prepopulate_blob_cache_(mutable_cf_options->prepopulate_blob_cache),
71
81
  file_options_(file_options),
72
82
  write_options_(write_options),
@@ -113,7 +123,7 @@ Status BlobFileBuilder::Add(const Slice& key, const Slice& value,
113
123
  }
114
124
 
115
125
  Slice blob = value;
116
- std::string compressed_blob;
126
+ GrowableBuffer compressed_blob;
117
127
 
118
128
  {
119
129
  const Status s = CompressBlobIfNeeded(&blob, &compressed_blob);
@@ -254,36 +264,27 @@ Status BlobFileBuilder::OpenBlobFileIfNeeded() {
254
264
  }
255
265
 
256
266
  Status BlobFileBuilder::CompressBlobIfNeeded(
257
- Slice* blob, std::string* compressed_blob) const {
267
+ Slice* blob, GrowableBuffer* compressed_blob) const {
258
268
  assert(blob);
259
269
  assert(compressed_blob);
260
270
  assert(compressed_blob->empty());
261
271
  assert(immutable_options_);
262
272
 
263
- if (blob_compression_type_ == kNoCompression) {
273
+ if (!blob_compressor_) {
274
+ assert(blob_compression_type_ == kNoCompression);
264
275
  return Status::OK();
265
276
  }
277
+ assert(blob_compression_type_ != kNoCompression);
266
278
 
267
- // TODO: allow user CompressionOptions, including max_compressed_bytes_per_kb
268
- CompressionOptions opts;
269
- CompressionContext context(blob_compression_type_, opts);
279
+ // WART: always stored as compressed even when that increases the size.
270
280
 
271
- CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(),
272
- blob_compression_type_);
273
-
274
- constexpr uint32_t compression_format_version = 2;
275
-
276
- bool success = false;
277
-
278
- {
279
- StopWatch stop_watch(immutable_options_->clock, immutable_options_->stats,
280
- BLOB_DB_COMPRESSION_MICROS);
281
- success = OLD_CompressData(*blob, info, compression_format_version,
282
- compressed_blob);
283
- }
284
-
285
- if (!success) {
286
- return Status::Corruption("Error compressing blob");
281
+ Status s;
282
+ StopWatch stop_watch(immutable_options_->clock, immutable_options_->stats,
283
+ BLOB_DB_COMPRESSION_MICROS);
284
+ s = LegacyForceBuiltinCompression(*blob_compressor_, &blob_compressor_wa_,
285
+ *blob, compressed_blob);
286
+ if (!s.ok()) {
287
+ return s;
287
288
  }
288
289
 
289
290
  *blob = Slice(*compressed_blob);
@@ -10,12 +10,14 @@
10
10
  #include <string>
11
11
  #include <vector>
12
12
 
13
+ #include "rocksdb/advanced_compression.h"
13
14
  #include "rocksdb/advanced_options.h"
14
15
  #include "rocksdb/compression_type.h"
15
16
  #include "rocksdb/env.h"
16
17
  #include "rocksdb/options.h"
17
18
  #include "rocksdb/rocksdb_namespace.h"
18
19
  #include "rocksdb/types.h"
20
+ #include "util/aligned_buffer.h"
19
21
 
20
22
  namespace ROCKSDB_NAMESPACE {
21
23
 
@@ -76,7 +78,8 @@ class BlobFileBuilder {
76
78
  private:
77
79
  bool IsBlobFileOpen() const;
78
80
  Status OpenBlobFileIfNeeded();
79
- Status CompressBlobIfNeeded(Slice* blob, std::string* compressed_blob) const;
81
+ Status CompressBlobIfNeeded(Slice* blob,
82
+ GrowableBuffer* compressed_blob) const;
80
83
  Status WriteBlobToFile(const Slice& key, const Slice& blob,
81
84
  uint64_t* blob_file_number, uint64_t* blob_offset);
82
85
  Status CloseBlobFile();
@@ -91,6 +94,8 @@ class BlobFileBuilder {
91
94
  uint64_t min_blob_size_;
92
95
  uint64_t blob_file_size_;
93
96
  CompressionType blob_compression_type_;
97
+ std::unique_ptr<Compressor> blob_compressor_;
98
+ mutable Compressor::ManagedWorkingArea blob_compressor_wa_;
94
99
  PrepopulateBlobCache prepopulate_blob_cache_;
95
100
  const FileOptions* file_options_;
96
101
  const WriteOptions* write_options_;
@@ -403,22 +403,19 @@ TEST_F(BlobFileBuilderTest, Compression) {
403
403
  ASSERT_EQ(blob_file_addition.GetBlobFileNumber(), blob_file_number);
404
404
  ASSERT_EQ(blob_file_addition.GetTotalBlobCount(), 1);
405
405
 
406
- CompressionOptions opts;
407
- CompressionContext context(kSnappyCompression, opts);
408
-
409
- CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(),
410
- kSnappyCompression);
411
-
412
- std::string compressed_value;
413
- ASSERT_TRUE(Snappy_Compress(info, uncompressed_value.data(),
414
- uncompressed_value.size(), &compressed_value));
406
+ auto compressor =
407
+ GetBuiltinV2CompressionManager()->GetCompressor({}, kSnappyCompression);
408
+ GrowableBuffer compressed_value;
409
+ ASSERT_OK(LegacyForceBuiltinCompression(*compressor, /*working_area=*/nullptr,
410
+ uncompressed_value,
411
+ &compressed_value));
415
412
 
416
413
  ASSERT_EQ(blob_file_addition.GetTotalBlobBytes(),
417
414
  BlobLogRecord::kHeaderSize + key_size + compressed_value.size());
418
415
 
419
416
  // Verify the contents of the new blob file as well as the blob reference
420
417
  std::vector<std::pair<std::string, std::string>> expected_key_value_pairs{
421
- {key, compressed_value}};
418
+ {key, compressed_value.AsSlice().ToString()}};
422
419
  std::vector<std::string> blob_indexes{blob_index};
423
420
 
424
421
  VerifyBlobFile(blob_file_number, blob_file_path, column_family_id,
@@ -457,11 +454,12 @@ TEST_F(BlobFileBuilderTest, CompressionError) {
457
454
  nullptr /*IOTracer*/, nullptr /*BlobFileCompletionCallback*/,
458
455
  BlobFileCreationReason::kFlush, &blob_file_paths, &blob_file_additions);
459
456
 
460
- SyncPoint::GetInstance()->SetCallBack("CompressData:TamperWithReturnValue",
461
- [](void* arg) {
462
- bool* ret = static_cast<bool*>(arg);
463
- *ret = false;
464
- });
457
+ SyncPoint::GetInstance()->SetCallBack(
458
+ "LegacyForceBuiltinCompression:TamperWithStatus", [](void* arg) {
459
+ Status* ret = static_cast<Status*>(arg);
460
+ ASSERT_OK(*ret);
461
+ *ret = Status::Corruption("Tampered result");
462
+ });
465
463
  SyncPoint::GetInstance()->EnableProcessing();
466
464
 
467
465
  constexpr char key[] = "1";
@@ -469,7 +467,7 @@ TEST_F(BlobFileBuilderTest, CompressionError) {
469
467
 
470
468
  std::string blob_index;
471
469
 
472
- ASSERT_TRUE(builder.Add(key, value, &blob_index).IsCorruption());
470
+ ASSERT_EQ(builder.Add(key, value, &blob_index).code(), Status::kCorruption);
473
471
 
474
472
  SyncPoint::GetInstance()->DisableProcessing();
475
473
  SyncPoint::GetInstance()->ClearAllCallBacks();