@nxtedition/rocksdb 9.0.0 → 9.0.1

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 (304) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -9
  3. package/deps/rocksdb/rocksdb/Makefile +15 -6
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +17 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +74 -15
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +16 -4
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2024 -14
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +349 -23
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +126 -51
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -0
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +182 -7
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +31 -14
  19. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -33
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +293 -17
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +21 -5
  22. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +10 -0
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -3
  24. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  27. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  28. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +25 -11
  29. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  30. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  31. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -1
  32. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  33. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  34. package/deps/rocksdb/rocksdb/db/builder.cc +3 -3
  35. package/deps/rocksdb/rocksdb/db/c.cc +64 -0
  36. package/deps/rocksdb/rocksdb/db/c_test.c +36 -0
  37. package/deps/rocksdb/rocksdb/db/column_family.cc +23 -15
  38. package/deps/rocksdb/rocksdb/db/column_family.h +9 -0
  39. package/deps/rocksdb/rocksdb/db/column_family_test.cc +101 -5
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +36 -23
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +3 -5
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -18
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +7 -3
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -6
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +146 -64
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +13 -39
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  53. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -7
  54. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +8 -3
  55. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +59 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +186 -2
  58. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +17 -5
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +519 -240
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +104 -43
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +169 -66
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -1
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +12 -4
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -14
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +85 -53
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -7
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +99 -82
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +4 -14
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +24 -21
  71. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  72. package/deps/rocksdb/rocksdb/db/db_iter.cc +83 -55
  73. package/deps/rocksdb/rocksdb/db/db_iter.h +10 -2
  74. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  75. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  76. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  77. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +187 -1
  78. package/deps/rocksdb/rocksdb/db/db_options_test.cc +258 -0
  79. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +258 -0
  80. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  82. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  83. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  84. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -1
  85. package/deps/rocksdb/rocksdb/db/db_test.cc +134 -30
  86. package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
  87. package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -6
  88. package/deps/rocksdb/rocksdb/db/db_test_util.h +5 -2
  89. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -0
  90. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +12 -0
  91. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +337 -1
  92. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  93. package/deps/rocksdb/rocksdb/db/error_handler.cc +51 -34
  94. package/deps/rocksdb/rocksdb/db/error_handler.h +7 -6
  95. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +58 -0
  96. package/deps/rocksdb/rocksdb/db/flush_job.cc +17 -19
  97. package/deps/rocksdb/rocksdb/db/flush_job.h +3 -3
  98. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -1
  99. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +2 -0
  100. package/deps/rocksdb/rocksdb/db/memtable.cc +18 -70
  101. package/deps/rocksdb/rocksdb/db/memtable_list.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/memtable_list.h +11 -1
  103. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -1
  104. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  105. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  106. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  107. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  108. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +3 -0
  109. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  110. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +2 -0
  111. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  112. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  113. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  114. package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
  115. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +454 -70
  116. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  117. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  118. package/deps/rocksdb/rocksdb/db/table_cache.cc +32 -19
  119. package/deps/rocksdb/rocksdb/db/table_cache.h +12 -6
  120. package/deps/rocksdb/rocksdb/db/version_edit.h +10 -4
  121. package/deps/rocksdb/rocksdb/db/version_set.cc +75 -73
  122. package/deps/rocksdb/rocksdb/db/version_set.h +8 -8
  123. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  124. package/deps/rocksdb/rocksdb/db/version_set_test.cc +22 -11
  125. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  126. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  127. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  128. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  129. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  130. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  131. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +44 -20
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +15 -10
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +108 -58
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +36 -14
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -1
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +195 -130
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -2
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +12 -12
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +14 -11
  149. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +44 -38
  150. package/deps/rocksdb/rocksdb/env/env.cc +5 -0
  151. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +1 -0
  152. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +50 -29
  153. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +32 -2
  154. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +513 -30
  155. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +38 -13
  157. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +14 -7
  158. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +42 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +65 -12
  160. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +26 -0
  162. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +37 -4
  163. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +2 -0
  164. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -0
  165. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  166. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  167. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +4 -0
  168. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  169. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  170. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -5
  171. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  173. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +79 -8
  174. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +16 -0
  175. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  176. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  177. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +14 -3
  178. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +2 -0
  179. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +9 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +0 -2
  186. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -2
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  188. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  189. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  190. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
  191. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  192. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +4 -0
  193. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -0
  194. package/deps/rocksdb/rocksdb/options/db_options.cc +47 -2
  195. package/deps/rocksdb/rocksdb/options/db_options.h +3 -0
  196. package/deps/rocksdb/rocksdb/options/options_helper.cc +12 -0
  197. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
  198. package/deps/rocksdb/rocksdb/options/options_test.cc +6 -1
  199. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  200. package/deps/rocksdb/rocksdb/port/README +10 -0
  201. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  202. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  203. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  204. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -0
  205. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  206. package/deps/rocksdb/rocksdb/src.mk +7 -1
  207. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
  208. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +3 -1
  209. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +275 -61
  210. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +96 -4
  211. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +179 -62
  212. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +35 -22
  213. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  214. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +14 -9
  215. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  216. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  217. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -12
  218. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +10 -5
  219. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +39 -18
  220. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  221. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  222. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  223. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  224. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +10 -8
  225. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -2
  226. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  228. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +3 -2
  229. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  230. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +6 -2
  231. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  232. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  233. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  234. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  235. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +12 -0
  236. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +33 -6
  237. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +2 -4
  239. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  240. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  241. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  242. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  243. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -43
  244. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +213 -28
  245. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  246. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +0 -1
  247. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -10
  248. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  249. package/deps/rocksdb/rocksdb/util/cast_util.h +10 -0
  250. package/deps/rocksdb/rocksdb/util/comparator.cc +26 -1
  251. package/deps/rocksdb/rocksdb/util/compression.h +9 -3
  252. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  253. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  254. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  255. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  256. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  257. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  258. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  259. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  260. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  261. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  262. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -0
  263. package/deps/rocksdb/rocksdb/util/udt_util.cc +42 -0
  264. package/deps/rocksdb/rocksdb/util/udt_util.h +19 -0
  265. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +14 -0
  266. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  267. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  268. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2 -1
  269. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  270. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +19 -15
  271. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  272. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +5 -0
  273. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  274. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +9 -0
  275. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  276. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  277. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +41 -0
  278. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  279. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -0
  280. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +155 -0
  281. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  282. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +81 -1
  283. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -6
  284. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +7 -5
  285. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +2 -1
  286. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +3 -2
  287. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -27
  288. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  289. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  290. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +105 -8
  291. package/deps/rocksdb/rocksdb.gyp +4 -2
  292. package/index.js +0 -8
  293. package/package.json +1 -1
  294. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  295. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  296. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  297. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  298. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  299. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  300. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  301. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  302. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  303. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  304. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -9,7 +9,7 @@
9
9
 
10
10
  #include "db/compaction/compaction_picker_universal.h"
11
11
 
12
- #include <cinttypes>
12
+ #include <cstdint>
13
13
  #include <limits>
14
14
  #include <queue>
15
15
  #include <string>
@@ -114,6 +114,13 @@ class UniversalCompactionBuilder {
114
114
  // because some files are being compacted.
115
115
  Compaction* PickPeriodicCompaction();
116
116
 
117
+ bool ShouldSkipLastSortedRunForSizeAmpCompaction() const {
118
+ assert(!sorted_runs_.empty());
119
+ return ioptions_.preclude_last_level_data_seconds > 0 &&
120
+ ioptions_.num_levels > 2 &&
121
+ sorted_runs_.back().level == ioptions_.num_levels - 1 &&
122
+ sorted_runs_.size() > 1;
123
+ }
117
124
  // Used in universal compaction when the allow_trivial_move
118
125
  // option is set. Checks whether there are any overlapping files
119
126
  // in the input. Returns true if the input files are non
@@ -122,6 +129,100 @@ class UniversalCompactionBuilder {
122
129
 
123
130
  uint64_t GetMaxOverlappingBytes() const;
124
131
 
132
+ // To conditionally exclude some of the newest L0 files
133
+ // from a size amp compaction. This is to prevent a large number of L0
134
+ // files from being locked by a size amp compaction, potentially leading to
135
+ // write stop with a few more flushes.
136
+ //
137
+ // Such exclusion is based on `num_l0_input_pre_exclusion`,
138
+ // `level0_stop_writes_trigger`, `max/min_merge_width` and the pre-exclusion
139
+ // compaction score. Noted that it will not make the size amp compaction of
140
+ // interest invalid from running as a size amp compaction as long as its
141
+ // pre-exclusion compaction score satisfies the condition to run.
142
+ //
143
+ // @param `num_l0_input_pre_exclusion` Number of L0 input files prior to
144
+ // exclusion
145
+ // @param `end_index` Index of the last sorted run selected as compaction
146
+ // input. Will not be affected by this exclusion.
147
+ // @param `start_index` Index of the first input sorted run prior to
148
+ // exclusion. Will be modified as output based on the exclusion.
149
+ // @param `candidate_size` Total size of all except for the last input sorted
150
+ // runs prior to exclusion. Will be modified as output based on the exclusion.
151
+ //
152
+ // @return Number of L0 files to exclude. `start_index` and
153
+ // `candidate_size` will be modified accordingly
154
+ std::size_t MightExcludeNewL0sToReduceWriteStop(
155
+ std::size_t num_l0_input_pre_exclusion, std::size_t end_index,
156
+ std::size_t& start_index, uint64_t& candidate_size) const {
157
+ if (num_l0_input_pre_exclusion == 0) {
158
+ return 0;
159
+ }
160
+
161
+ assert(start_index <= end_index && sorted_runs_.size() > end_index);
162
+ assert(mutable_cf_options_.level0_stop_writes_trigger > 0);
163
+ const std::size_t level0_stop_writes_trigger = static_cast<std::size_t>(
164
+ mutable_cf_options_.level0_stop_writes_trigger);
165
+ const std::size_t max_merge_width = static_cast<std::size_t>(
166
+ mutable_cf_options_.compaction_options_universal.max_merge_width);
167
+ const std::size_t min_merge_width = static_cast<std::size_t>(
168
+ mutable_cf_options_.compaction_options_universal.min_merge_width);
169
+ const uint64_t max_size_amplification_percent =
170
+ mutable_cf_options_.compaction_options_universal
171
+ .max_size_amplification_percent;
172
+ const uint64_t base_sr_size = sorted_runs_[end_index].size;
173
+
174
+ // Leave at least 1 L0 file and 2 input sorted runs after exclusion
175
+ const std::size_t max_num_l0_to_exclude =
176
+ std::min(num_l0_input_pre_exclusion - 1, end_index - start_index - 1);
177
+ // In universal compaction, sorted runs from non L0 levels are counted
178
+ // toward `level0_stop_writes_trigger`. Therefore we need to subtract the
179
+ // total number of sorted runs picked originally for this compaction from
180
+ // `level0_stop_writes_trigger` to calculate
181
+ // `num_extra_l0_before_write_stop`
182
+ const std::size_t num_extra_l0_before_write_stop =
183
+ level0_stop_writes_trigger -
184
+ std::min(level0_stop_writes_trigger, end_index - start_index + 1);
185
+ const std::size_t num_l0_to_exclude_for_max_merge_width =
186
+ std::min(max_merge_width -
187
+ std::min(max_merge_width, num_extra_l0_before_write_stop),
188
+ max_num_l0_to_exclude);
189
+ const std::size_t num_l0_to_exclude_for_min_merge_width =
190
+ std::min(min_merge_width -
191
+ std::min(min_merge_width, num_extra_l0_before_write_stop),
192
+ max_num_l0_to_exclude);
193
+
194
+ std::size_t num_l0_to_exclude = 0;
195
+ uint64_t candidate_size_post_exclusion = candidate_size;
196
+
197
+ for (std::size_t possible_num_l0_to_exclude =
198
+ num_l0_to_exclude_for_min_merge_width;
199
+ possible_num_l0_to_exclude <= num_l0_to_exclude_for_max_merge_width;
200
+ ++possible_num_l0_to_exclude) {
201
+ uint64_t current_candidate_size = candidate_size_post_exclusion;
202
+ for (std::size_t j = num_l0_to_exclude; j < possible_num_l0_to_exclude;
203
+ ++j) {
204
+ current_candidate_size -=
205
+ sorted_runs_.at(start_index + j).compensated_file_size;
206
+ }
207
+
208
+ // To ensure the compaction score before and after exclusion is similar
209
+ // so this exclusion will not make the size amp compaction of
210
+ // interest invalid from running as a size amp compaction as long as its
211
+ // pre-exclusion compaction score satisfies the condition to run.
212
+ if (current_candidate_size * 100 <
213
+ max_size_amplification_percent * base_sr_size ||
214
+ current_candidate_size < candidate_size * 9 / 10) {
215
+ break;
216
+ }
217
+ num_l0_to_exclude = possible_num_l0_to_exclude;
218
+ candidate_size_post_exclusion = current_candidate_size;
219
+ }
220
+
221
+ start_index += num_l0_to_exclude;
222
+ candidate_size = candidate_size_post_exclusion;
223
+ return num_l0_to_exclude;
224
+ }
225
+
125
226
  const ImmutableOptions& ioptions_;
126
227
  const InternalKeyComparator* icmp_;
127
228
  double score_;
@@ -778,85 +879,67 @@ Compaction* UniversalCompactionBuilder::PickCompactionToReduceSortedRuns(
778
879
 
779
880
  // Look at overall size amplification. If size amplification
780
881
  // exceeds the configured value, then do a compaction
781
- // of the candidate files all the way upto the earliest
782
- // base file (overrides configured values of file-size ratios,
783
- // min_merge_width and max_merge_width).
784
- //
882
+ // on longest span of candidate files without conflict with other compactions
883
+ // ending at the earliest base file (overriding configured values of file-size
884
+ // ratios, min_merge_width and max_merge_width).
785
885
  Compaction* UniversalCompactionBuilder::PickCompactionToReduceSizeAmp() {
786
- // percentage flexibility while reducing size amplification
787
- uint64_t ratio = mutable_cf_options_.compaction_options_universal
788
- .max_size_amplification_percent;
789
-
790
- unsigned int candidate_count = 0;
791
- uint64_t candidate_size = 0;
792
- size_t start_index = 0;
793
- const SortedRun* sr = nullptr;
794
-
795
886
  assert(!sorted_runs_.empty());
796
- if (sorted_runs_.back().being_compacted) {
887
+
888
+ const size_t end_index = ShouldSkipLastSortedRunForSizeAmpCompaction()
889
+ ? sorted_runs_.size() - 2
890
+ : sorted_runs_.size() - 1;
891
+ if (sorted_runs_[end_index].being_compacted) {
797
892
  return nullptr;
798
893
  }
894
+ const uint64_t base_sr_size = sorted_runs_[end_index].size;
895
+ size_t start_index = end_index;
896
+ uint64_t candidate_size = 0;
897
+ size_t num_l0_files = 0;
799
898
 
800
- // Skip files that are already being compacted
801
- for (size_t loop = 0; loop + 1 < sorted_runs_.size(); loop++) {
802
- sr = &sorted_runs_[loop];
803
- if (!sr->being_compacted) {
804
- start_index = loop; // Consider this as the first candidate.
899
+ // Get longest span (i.e, [start_index, end_index]) of available sorted runs
900
+ while (start_index > 0) {
901
+ const SortedRun* sr = &sorted_runs_[start_index - 1];
902
+ if (sr->being_compacted) {
903
+ char file_num_buf[kFormatFileNumberBufSize];
904
+ sr->Dump(file_num_buf, sizeof(file_num_buf), true);
905
+ ROCKS_LOG_BUFFER(
906
+ log_buffer_,
907
+ "[%s] Universal: stopping at sorted run undergoing compaction: "
908
+ "%s[%" ROCKSDB_PRIszt "]",
909
+ cf_name_.c_str(), file_num_buf, start_index - 1);
805
910
  break;
806
911
  }
807
- char file_num_buf[kFormatFileNumberBufSize];
808
- sr->Dump(file_num_buf, sizeof(file_num_buf), true);
809
- ROCKS_LOG_BUFFER(log_buffer_,
810
- "[%s] Universal: skipping %s[%d] compacted %s",
811
- cf_name_.c_str(), file_num_buf, loop,
812
- " cannot be a candidate to reduce size amp.\n");
813
- sr = nullptr;
912
+ candidate_size += sr->compensated_file_size;
913
+ num_l0_files += sr->level == 0 ? 1 : 0;
914
+ --start_index;
814
915
  }
815
916
 
816
- if (sr == nullptr) {
817
- return nullptr; // no candidate files
917
+ if (start_index == end_index) {
918
+ return nullptr;
818
919
  }
920
+
921
+ {
922
+ const size_t num_l0_to_exclude = MightExcludeNewL0sToReduceWriteStop(
923
+ num_l0_files, end_index, start_index, candidate_size);
924
+ ROCKS_LOG_BUFFER(log_buffer_,
925
+ "[%s] Universal: Excluding %" ROCKSDB_PRIszt
926
+ " latest L0 files to reduce potential write stop "
927
+ "triggered by `level0_stop_writes_trigger`",
928
+ cf_name_.c_str(), num_l0_to_exclude);
929
+ }
930
+
819
931
  {
820
932
  char file_num_buf[kFormatFileNumberBufSize];
821
- sr->Dump(file_num_buf, sizeof(file_num_buf), true);
933
+ sorted_runs_[start_index].Dump(file_num_buf, sizeof(file_num_buf), true);
822
934
  ROCKS_LOG_BUFFER(
823
935
  log_buffer_,
824
936
  "[%s] Universal: First candidate %s[%" ROCKSDB_PRIszt "] %s",
825
937
  cf_name_.c_str(), file_num_buf, start_index, " to reduce size amp.\n");
826
938
  }
827
939
 
828
- // size of the base sorted run for size amp calculation
829
- uint64_t base_sr_size = sorted_runs_.back().size;
830
- size_t sr_end_idx = sorted_runs_.size() - 1;
831
- // If tiered compaction is enabled and the last sorted run is the last level
832
- if (ioptions_.preclude_last_level_data_seconds > 0 &&
833
- ioptions_.num_levels > 2 &&
834
- sorted_runs_.back().level == ioptions_.num_levels - 1 &&
835
- sorted_runs_.size() > 1) {
836
- sr_end_idx = sorted_runs_.size() - 2;
837
- base_sr_size = sorted_runs_[sr_end_idx].size;
838
- }
839
-
840
- // keep adding up all the remaining files
841
- for (size_t loop = start_index; loop < sr_end_idx; loop++) {
842
- sr = &sorted_runs_[loop];
843
- if (sr->being_compacted) {
844
- // TODO with incremental compaction is supported, we might want to
845
- // schedule some incremental compactions in parallel if needed.
846
- char file_num_buf[kFormatFileNumberBufSize];
847
- sr->Dump(file_num_buf, sizeof(file_num_buf), true);
848
- ROCKS_LOG_BUFFER(
849
- log_buffer_, "[%s] Universal: Possible candidate %s[%d] %s",
850
- cf_name_.c_str(), file_num_buf, start_index,
851
- " is already being compacted. No size amp reduction possible.\n");
852
- return nullptr;
853
- }
854
- candidate_size += sr->compensated_file_size;
855
- candidate_count++;
856
- }
857
- if (candidate_count == 0) {
858
- return nullptr;
859
- }
940
+ // percentage flexibility while reducing size amplification
941
+ const uint64_t ratio = mutable_cf_options_.compaction_options_universal
942
+ .max_size_amplification_percent;
860
943
 
861
944
  // size amplification = percentage of additional size
862
945
  if (candidate_size * 100 < ratio * base_sr_size) {
@@ -893,7 +976,7 @@ Compaction* UniversalCompactionBuilder::PickCompactionToReduceSizeAmp() {
893
976
  }
894
977
  }
895
978
  return PickCompactionWithSortedRunRange(
896
- start_index, sr_end_idx, CompactionReason::kUniversalSizeAmplification);
979
+ start_index, end_index, CompactionReason::kUniversalSizeAmplification);
897
980
  }
898
981
 
899
982
  Compaction* UniversalCompactionBuilder::PickIncrementalForReduceSizeAmp(
@@ -1442,4 +1525,3 @@ uint64_t UniversalCompactionBuilder::GetMaxOverlappingBytes() const {
1442
1525
  }
1443
1526
  }
1444
1527
  } // namespace ROCKSDB_NAMESPACE
1445
-
@@ -1216,6 +1216,7 @@ class PrecludeLastLevelTest : public DBTestBase {
1216
1216
  PrecludeLastLevelTest()
1217
1217
  : DBTestBase("preclude_last_level_test", /*env_do_fsync=*/false) {
1218
1218
  mock_clock_ = std::make_shared<MockSystemClock>(env_->GetSystemClock());
1219
+ mock_clock_->SetCurrentTime(kMockStartTime);
1219
1220
  mock_env_ = std::make_unique<CompositeEnvWrapper>(env_, mock_clock_);
1220
1221
  }
1221
1222
 
@@ -1223,6 +1224,10 @@ class PrecludeLastLevelTest : public DBTestBase {
1223
1224
  std::unique_ptr<Env> mock_env_;
1224
1225
  std::shared_ptr<MockSystemClock> mock_clock_;
1225
1226
 
1227
+ // Sufficient starting time that preserve time doesn't under-flow into
1228
+ // pre-history
1229
+ static constexpr uint32_t kMockStartTime = 10000000;
1230
+
1226
1231
  void SetUp() override {
1227
1232
  mock_clock_->InstallTimedWaitFixCallback();
1228
1233
  SyncPoint::GetInstance()->SetCallBack(
@@ -1231,7 +1236,7 @@ class PrecludeLastLevelTest : public DBTestBase {
1231
1236
  reinterpret_cast<PeriodicTaskScheduler*>(arg);
1232
1237
  periodic_task_scheduler_ptr->TEST_OverrideTimer(mock_clock_.get());
1233
1238
  });
1234
- mock_clock_->SetCurrentTime(0);
1239
+ mock_clock_->SetCurrentTime(kMockStartTime);
1235
1240
  }
1236
1241
  };
1237
1242
 
@@ -1249,11 +1254,6 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimeManualCompaction) {
1249
1254
  options.num_levels = kNumLevels;
1250
1255
  DestroyAndReopen(options);
1251
1256
 
1252
- // pass some time first, otherwise the first a few keys write time are going
1253
- // to be zero, and internally zero has special meaning: kUnknownSeqnoTime
1254
- dbfull()->TEST_WaitForPeriodicTaskRun(
1255
- [&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
1256
-
1257
1257
  int sst_num = 0;
1258
1258
  // Write files that are overlap and enough to trigger compaction
1259
1259
  for (; sst_num < kNumTrigger; sst_num++) {
@@ -1311,11 +1311,6 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimeAutoCompaction) {
1311
1311
  options.num_levels = kNumLevels;
1312
1312
  DestroyAndReopen(options);
1313
1313
 
1314
- // pass some time first, otherwise the first a few keys write time are going
1315
- // to be zero, and internally zero has special meaning: kUnknownSeqnoTime
1316
- dbfull()->TEST_WaitForPeriodicTaskRun(
1317
- [&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
1318
-
1319
1314
  int sst_num = 0;
1320
1315
  // Write files that are overlap and enough to trigger compaction
1321
1316
  for (; sst_num < kNumTrigger; sst_num++) {
@@ -1387,11 +1382,6 @@ TEST_F(PrecludeLastLevelTest, MigrationFromPreserveTimePartial) {
1387
1382
  options.num_levels = kNumLevels;
1388
1383
  DestroyAndReopen(options);
1389
1384
 
1390
- // pass some time first, otherwise the first a few keys write time are going
1391
- // to be zero, and internally zero has special meaning: kUnknownSeqnoTime
1392
- dbfull()->TEST_WaitForPeriodicTaskRun(
1393
- [&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
1394
-
1395
1385
  int sst_num = 0;
1396
1386
  // Write files that are overlap and enough to trigger compaction
1397
1387
  for (; sst_num < kNumTrigger; sst_num++) {
@@ -1514,11 +1504,6 @@ TEST_F(PrecludeLastLevelTest, LastLevelOnlyCompactionPartial) {
1514
1504
  options.num_levels = kNumLevels;
1515
1505
  DestroyAndReopen(options);
1516
1506
 
1517
- // pass some time first, otherwise the first a few keys write time are going
1518
- // to be zero, and internally zero has special meaning: kUnknownSeqnoTime
1519
- dbfull()->TEST_WaitForPeriodicTaskRun(
1520
- [&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
1521
-
1522
1507
  int sst_num = 0;
1523
1508
  // Write files that are overlap and enough to trigger compaction
1524
1509
  for (; sst_num < kNumTrigger; sst_num++) {
@@ -1592,11 +1577,6 @@ TEST_P(PrecludeLastLevelTestWithParms, LastLevelOnlyCompactionNoPreclude) {
1592
1577
  options.num_levels = kNumLevels;
1593
1578
  DestroyAndReopen(options);
1594
1579
 
1595
- // pass some time first, otherwise the first a few keys write time are going
1596
- // to be zero, and internally zero has special meaning: kUnknownSeqnoTime
1597
- dbfull()->TEST_WaitForPeriodicTaskRun(
1598
- [&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
1599
-
1600
1580
  Random rnd(301);
1601
1581
  int sst_num = 0;
1602
1582
  // Write files that are overlap and enough to trigger compaction
@@ -1906,11 +1886,6 @@ TEST_F(PrecludeLastLevelTest, PartialPenultimateLevelCompaction) {
1906
1886
  options.num_levels = kNumLevels;
1907
1887
  DestroyAndReopen(options);
1908
1888
 
1909
- // pass some time first, otherwise the first a few keys write time are going
1910
- // to be zero, and internally zero has special meaning: kUnknownSeqnoTime
1911
- dbfull()->TEST_WaitForPeriodicTaskRun(
1912
- [&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
1913
-
1914
1889
  Random rnd(301);
1915
1890
 
1916
1891
  for (int i = 0; i < 300; i++) {
@@ -1996,7 +1971,13 @@ TEST_F(PrecludeLastLevelTest, PartialPenultimateLevelCompaction) {
1996
1971
  Close();
1997
1972
  }
1998
1973
 
1999
- TEST_F(PrecludeLastLevelTest, RangeDelsCauseFileEndpointsToOverlap) {
1974
+ // FIXME broken test:
1975
+ // dbfull()->TEST_WaitForCompact()
1976
+ // Corruption: force_consistency_checks(DEBUG): VersionBuilder: L5 has
1977
+ // overlapping ranges:
1978
+ // file #14 largest key: '6B6579303030303134' seq:32, type:1 vs.
1979
+ // file #19 smallest key: '6B6579303030303130' seq:10, type:1
1980
+ TEST_F(PrecludeLastLevelTest, DISABLED_RangeDelsCauseFileEndpointsToOverlap) {
2000
1981
  const int kNumLevels = 7;
2001
1982
  const int kSecondsPerKey = 10;
2002
1983
  const int kNumFiles = 3;
@@ -2017,12 +1998,6 @@ TEST_F(PrecludeLastLevelTest, RangeDelsCauseFileEndpointsToOverlap) {
2017
1998
  options.target_file_size_base = kFileBytes;
2018
1999
  DestroyAndReopen(options);
2019
2000
 
2020
- // pass some time first, otherwise the first a few keys write time are going
2021
- // to be zero, and internally zero has special meaning: kUnknownSeqnoTime
2022
- dbfull()->TEST_WaitForPeriodicTaskRun([&] {
2023
- mock_clock_->MockSleepForSeconds(static_cast<int>(kSecondsPerKey));
2024
- });
2025
-
2026
2001
  // Flush an L0 file with the following contents (new to old):
2027
2002
  //
2028
2003
  // Range deletions [4, 6) [7, 8) [9, 11)
@@ -2139,7 +2114,6 @@ TEST_F(PrecludeLastLevelTest, RangeDelsCauseFileEndpointsToOverlap) {
2139
2114
  Close();
2140
2115
  }
2141
2116
 
2142
-
2143
2117
  } // namespace ROCKSDB_NAMESPACE
2144
2118
 
2145
2119
  int main(int argc, char** argv) {
@@ -165,6 +165,7 @@ void DoRandomIteraratorTest(DB* db, std::vector<std::string> source_strings,
165
165
  AssertItersEqual(iter.get(), result_iter.get());
166
166
  is_valid = iter->Valid();
167
167
  }
168
+ ASSERT_OK(iter->status());
168
169
  }
169
170
 
170
171
  class DoubleComparator : public Comparator {
@@ -138,6 +138,7 @@ TEST_F(DBBasicTest, ReadOnlyDB) {
138
138
  ASSERT_OK(iter->status());
139
139
  ++count;
140
140
  }
141
+ ASSERT_OK(iter->status());
141
142
  // Always expect two keys: "foo" and "bar"
142
143
  ASSERT_EQ(count, 2);
143
144
  };
@@ -1427,10 +1428,7 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
1427
1428
  int retries = 0;
1428
1429
  bool last_try = false;
1429
1430
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1430
- "DBImpl::MultiGet::LastTry", [&](void* /*arg*/) {
1431
- last_try = true;
1432
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
1433
- });
1431
+ "DBImpl::MultiGet::LastTry", [&](void* /*arg*/) { last_try = true; });
1434
1432
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1435
1433
  "DBImpl::MultiGet::AfterRefSV", [&](void* /*arg*/) {
1436
1434
  if (last_try) {
@@ -1447,8 +1445,28 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
1447
1445
  }
1448
1446
  }
1449
1447
  });
1448
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency({
1449
+ {"DBImpl::MultiGet::AfterLastTryRefSV",
1450
+ "DBMultiGetTestWithParam::MultiGetMultiCFMutex:BeforeCreateSV"},
1451
+ {"DBMultiGetTestWithParam::MultiGetMultiCFMutex:AfterCreateSV",
1452
+ "DBImpl::MultiGet::BeforeLastTryUnRefSV"},
1453
+ });
1450
1454
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
1451
1455
 
1456
+ port::Thread create_sv_thread([this]() {
1457
+ TEST_SYNC_POINT(
1458
+ "DBMultiGetTestWithParam::MultiGetMultiCFMutex:BeforeCreateSV");
1459
+ // Create a new SuperVersion for each column family after last_try
1460
+ // of MultiGet ref SuperVersion and before unref it.
1461
+ for (int i = 0; i < 8; ++i) {
1462
+ ASSERT_OK(Put(i, "cf" + std::to_string(i) + "_key",
1463
+ "cf" + std::to_string(i) + "_val_after_last_try"));
1464
+ ASSERT_OK(Flush(i));
1465
+ }
1466
+ TEST_SYNC_POINT(
1467
+ "DBMultiGetTestWithParam::MultiGetMultiCFMutex:AfterCreateSV");
1468
+ });
1469
+
1452
1470
  std::vector<int> cfs;
1453
1471
  std::vector<std::string> keys;
1454
1472
  std::vector<std::string> values;
@@ -1460,6 +1478,7 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
1460
1478
 
1461
1479
  values = MultiGet(cfs, keys, nullptr, std::get<0>(GetParam()),
1462
1480
  std::get<1>(GetParam()));
1481
+ create_sv_thread.join();
1463
1482
  ASSERT_TRUE(last_try);
1464
1483
  ASSERT_EQ(values.size(), 8);
1465
1484
  for (unsigned int j = 0; j < values.size(); ++j) {
@@ -1473,6 +1492,7 @@ TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFMutex) {
1473
1492
  ->cfd();
1474
1493
  ASSERT_NE(cfd->TEST_GetLocalSV()->Get(), SuperVersion::kSVInUse);
1475
1494
  }
1495
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
1476
1496
  }
1477
1497
 
1478
1498
  TEST_P(DBMultiGetTestWithParam, MultiGetMultiCFSnapshot) {
@@ -3635,10 +3655,12 @@ class DBBasicTestMultiGet : public DBTestBase {
3635
3655
 
3636
3656
  Status Insert(const Slice& key, Cache::ObjectPtr value,
3637
3657
  const CacheItemHelper* helper, size_t charge,
3638
- Handle** handle = nullptr,
3639
- Priority priority = Priority::LOW) override {
3658
+ Handle** handle = nullptr, Priority priority = Priority::LOW,
3659
+ const Slice& compressed = Slice(),
3660
+ CompressionType type = kNoCompression) override {
3640
3661
  num_inserts_++;
3641
- return target_->Insert(key, value, helper, charge, handle, priority);
3662
+ return target_->Insert(key, value, helper, charge, handle, priority,
3663
+ compressed, type);
3642
3664
  }
3643
3665
 
3644
3666
  Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
@@ -294,7 +294,9 @@ class ReadOnlyCacheWrapper : public CacheWrapper {
294
294
 
295
295
  Status Insert(const Slice& /*key*/, Cache::ObjectPtr /*value*/,
296
296
  const CacheItemHelper* /*helper*/, size_t /*charge*/,
297
- Handle** /*handle*/, Priority /*priority*/) override {
297
+ Handle** /*handle*/, Priority /*priority*/,
298
+ const Slice& /*compressed*/,
299
+ CompressionType /*type*/) override {
298
300
  return Status::NotSupported();
299
301
  }
300
302
  };
@@ -387,6 +389,7 @@ TEST_F(DBBlockCacheTest, FillCacheAndIterateDB) {
387
389
  while (iter->Valid()) {
388
390
  iter->Next();
389
391
  }
392
+ ASSERT_OK(iter->status());
390
393
  delete iter;
391
394
  iter = nullptr;
392
395
  }
@@ -628,13 +631,15 @@ class MockCache : public LRUCache {
628
631
 
629
632
  Status Insert(const Slice& key, Cache::ObjectPtr value,
630
633
  const Cache::CacheItemHelper* helper, size_t charge,
631
- Handle** handle, Priority priority) override {
634
+ Handle** handle, Priority priority, const Slice& compressed,
635
+ CompressionType type) override {
632
636
  if (priority == Priority::LOW) {
633
637
  low_pri_insert_count++;
634
638
  } else {
635
639
  high_pri_insert_count++;
636
640
  }
637
- return LRUCache::Insert(key, value, helper, charge, handle, priority);
641
+ return LRUCache::Insert(key, value, helper, charge, handle, priority,
642
+ compressed, type);
638
643
  }
639
644
  };
640
645
 
@@ -1775,6 +1775,64 @@ TEST_F(DBBloomFilterTest, ContextCustomFilterPolicy) {
1775
1775
  }
1776
1776
  }
1777
1777
 
1778
+ TEST_F(DBBloomFilterTest, MutatingRibbonFilterPolicy) {
1779
+ // Test that RibbonFilterPolicy has a mutable bloom_before_level fields that
1780
+ // can be updated through SetOptions
1781
+
1782
+ Options options = CurrentOptions();
1783
+ options.statistics = CreateDBStatistics();
1784
+ auto& stats = *options.statistics;
1785
+ BlockBasedTableOptions table_options;
1786
+ // First config forces Bloom filter, to establish a baseline before
1787
+ // SetOptions().
1788
+ table_options.filter_policy.reset(NewRibbonFilterPolicy(10, INT_MAX));
1789
+ double expected_bpk = 10.0;
1790
+ // Other configs to try, with approx expected bits per key
1791
+ std::vector<std::pair<std::string, double>> configs = {{"-1", 7.0},
1792
+ {"0", 10.0}};
1793
+
1794
+ table_options.cache_index_and_filter_blocks = true;
1795
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
1796
+
1797
+ ASSERT_OK(TryReopen(options));
1798
+
1799
+ char v[] = "a";
1800
+
1801
+ for (;; ++(v[0])) {
1802
+ const int maxKey = 8000;
1803
+ for (int i = 0; i < maxKey; i++) {
1804
+ ASSERT_OK(Put(Key(i), v));
1805
+ }
1806
+ ASSERT_OK(Flush());
1807
+
1808
+ for (int i = 0; i < maxKey; i++) {
1809
+ ASSERT_EQ(Get(Key(i)), v);
1810
+ }
1811
+
1812
+ uint64_t filter_bytes =
1813
+ stats.getAndResetTickerCount(BLOCK_CACHE_FILTER_BYTES_INSERT);
1814
+
1815
+ EXPECT_NEAR(filter_bytes * 8.0 / maxKey, expected_bpk, 0.3);
1816
+
1817
+ if (configs.empty()) {
1818
+ break;
1819
+ }
1820
+
1821
+ ASSERT_OK(
1822
+ db_->SetOptions({{"table_factory.filter_policy.bloom_before_level",
1823
+ configs.back().first}}));
1824
+
1825
+ // Ensure original object is mutated
1826
+ std::string val;
1827
+ ASSERT_OK(
1828
+ table_options.filter_policy->GetOption({}, "bloom_before_level", &val));
1829
+ ASSERT_EQ(configs.back().first, val);
1830
+
1831
+ expected_bpk = configs.back().second;
1832
+ configs.pop_back();
1833
+ }
1834
+ }
1835
+
1778
1836
  class SliceTransformLimitedDomain : public SliceTransform {
1779
1837
  const char* Name() const override { return "SliceTransformLimitedDomain"; }
1780
1838
 
@@ -1847,6 +1905,7 @@ TEST_F(DBBloomFilterTest, PrefixExtractorWithFilter2) {
1847
1905
  for (iter->Seek("zzzzz_AAAA"); iter->Valid(); iter->Next()) {
1848
1906
  iter_res.emplace_back(iter->value().ToString());
1849
1907
  }
1908
+ ASSERT_OK(iter->status());
1850
1909
 
1851
1910
  std::vector<std::string> expected_res = {"val1", "val2", "val3", "val4"};
1852
1911
  ASSERT_EQ(iter_res, expected_res);