@nxtedition/rocksdb 9.0.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/binding.cc +244 -177
  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 +202 -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 +314 -25
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +29 -4
  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 +38 -55
  293. package/package.json +4 -4
  294. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  295. package/util.h +7 -1
  296. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  297. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  298. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  299. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  300. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  301. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  302. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  303. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  304. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  305. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
  306. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  307. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -234,15 +234,19 @@ class FullTypedCacheHelperFns : public BasicTypedCacheHelperFns<TValue> {
234
234
  return Status::OK();
235
235
  }
236
236
 
237
- static Status Create(const Slice& data, CreateContext* context,
237
+ static Status Create(const Slice& data, CompressionType type,
238
+ CacheTier source, CreateContext* context,
238
239
  MemoryAllocator* allocator, ObjectPtr* out_obj,
239
240
  size_t* out_charge) {
240
241
  std::unique_ptr<TValue> value = nullptr;
242
+ if (source != CacheTier::kVolatileTier) {
243
+ return Status::InvalidArgument();
244
+ }
241
245
  if constexpr (sizeof(TCreateContext) > 0) {
242
246
  TCreateContext* tcontext = static_cast<TCreateContext*>(context);
243
- tcontext->Create(&value, out_charge, data, allocator);
247
+ tcontext->Create(&value, out_charge, data, type, allocator);
244
248
  } else {
245
- TCreateContext::Create(&value, out_charge, data, allocator);
249
+ TCreateContext::Create(&value, out_charge, data, type, allocator);
246
250
  }
247
251
  *out_obj = UpCastValue(value.release());
248
252
  return Status::OK();
@@ -301,13 +305,15 @@ class FullTypedCacheInterface
301
305
  inline Status InsertFull(
302
306
  const Slice& key, TValuePtr value, size_t charge,
303
307
  TypedHandle** handle = nullptr, Priority priority = Priority::LOW,
304
- CacheTier lowest_used_cache_tier = CacheTier::kNonVolatileBlockTier) {
308
+ CacheTier lowest_used_cache_tier = CacheTier::kNonVolatileBlockTier,
309
+ const Slice& compressed = Slice(),
310
+ CompressionType type = CompressionType::kNoCompression) {
305
311
  auto untyped_handle = reinterpret_cast<Handle**>(handle);
306
- auto helper = lowest_used_cache_tier == CacheTier::kNonVolatileBlockTier
312
+ auto helper = lowest_used_cache_tier > CacheTier::kVolatileTier
307
313
  ? GetFullHelper()
308
314
  : GetBasicHelper();
309
315
  return this->cache_->Insert(key, UpCastValue(value), helper, charge,
310
- untyped_handle, priority);
316
+ untyped_handle, priority, compressed, type);
311
317
  }
312
318
 
313
319
  // Like SecondaryCache::InsertSaved, with SecondaryCache compatibility
@@ -319,9 +325,9 @@ class FullTypedCacheInterface
319
325
  size_t* out_charge = nullptr) {
320
326
  ObjectPtr value;
321
327
  size_t charge;
322
- Status st = GetFullHelper()->create_cb(data, create_context,
323
- this->cache_->memory_allocator(),
324
- &value, &charge);
328
+ Status st = GetFullHelper()->create_cb(
329
+ data, kNoCompression, CacheTier::kVolatileTier, create_context,
330
+ this->cache_->memory_allocator(), &value, &charge);
325
331
  if (out_charge) {
326
332
  *out_charge = charge;
327
333
  }
@@ -340,7 +346,7 @@ class FullTypedCacheInterface
340
346
  const Slice& key, TCreateContext* create_context = nullptr,
341
347
  Priority priority = Priority::LOW, Statistics* stats = nullptr,
342
348
  CacheTier lowest_used_cache_tier = CacheTier::kNonVolatileBlockTier) {
343
- if (lowest_used_cache_tier == CacheTier::kNonVolatileBlockTier) {
349
+ if (lowest_used_cache_tier > CacheTier::kVolatileTier) {
344
350
  return reinterpret_cast<TypedHandle*>(this->cache_->Lookup(
345
351
  key, GetFullHelper(), create_context, priority, stats));
346
352
  } else {
@@ -352,7 +358,7 @@ class FullTypedCacheInterface
352
358
  inline void StartAsyncLookupFull(
353
359
  TypedAsyncLookupHandle& async_handle,
354
360
  CacheTier lowest_used_cache_tier = CacheTier::kNonVolatileBlockTier) {
355
- if (lowest_used_cache_tier == CacheTier::kNonVolatileBlockTier) {
361
+ if (lowest_used_cache_tier > CacheTier::kVolatileTier) {
356
362
  async_handle.helper = GetFullHelper();
357
363
  this->cache_->StartAsyncLookup(async_handle);
358
364
  } else {
@@ -19,6 +19,14 @@
19
19
 
20
20
  namespace ROCKSDB_NAMESPACE {
21
21
 
22
+ inline static SequenceNumber GetSeqNum(const DBImpl* db, const Snapshot* s) {
23
+ if (s) {
24
+ return s->GetSequenceNumber();
25
+ } else {
26
+ return db->GetLatestSequenceNumber();
27
+ }
28
+ }
29
+
22
30
  Status ArenaWrappedDBIter::GetProperty(std::string prop_name,
23
31
  std::string* prop) {
24
32
  if (prop_name == "rocksdb.iterator.super-version-number") {
@@ -54,7 +62,9 @@ void ArenaWrappedDBIter::Init(
54
62
  }
55
63
  }
56
64
 
57
- Status ArenaWrappedDBIter::Refresh() {
65
+ Status ArenaWrappedDBIter::Refresh() { return Refresh(nullptr); }
66
+
67
+ Status ArenaWrappedDBIter::Refresh(const Snapshot* snapshot) {
58
68
  if (cfd_ == nullptr || db_impl_ == nullptr || !allow_refresh_) {
59
69
  return Status::NotSupported("Creating renew iterator is not allowed.");
60
70
  }
@@ -63,6 +73,10 @@ Status ArenaWrappedDBIter::Refresh() {
63
73
  // correct behavior. Will be corrected automatically when we take a snapshot
64
74
  // here for the case of WritePreparedTxnDB.
65
75
  uint64_t cur_sv_number = cfd_->GetSuperVersionNumber();
76
+ // If we recreate a new internal iterator below (NewInternalIterator()),
77
+ // we will pass in read_options_. We need to make sure it
78
+ // has the right snapshot.
79
+ read_options_.snapshot = snapshot;
66
80
  TEST_SYNC_POINT("ArenaWrappedDBIter::Refresh:1");
67
81
  TEST_SYNC_POINT("ArenaWrappedDBIter::Refresh:2");
68
82
  auto reinit_internal_iter = [&]() {
@@ -72,18 +86,19 @@ Status ArenaWrappedDBIter::Refresh() {
72
86
  new (&arena_) Arena();
73
87
 
74
88
  SuperVersion* sv = cfd_->GetReferencedSuperVersion(db_impl_);
75
- SequenceNumber latest_seq = db_impl_->GetLatestSequenceNumber();
89
+ assert(sv->version_number >= cur_sv_number);
90
+ SequenceNumber read_seq = GetSeqNum(db_impl_, snapshot);
76
91
  if (read_callback_) {
77
- read_callback_->Refresh(latest_seq);
92
+ read_callback_->Refresh(read_seq);
78
93
  }
79
94
  Init(env, read_options_, *(cfd_->ioptions()), sv->mutable_cf_options,
80
- sv->current, latest_seq,
95
+ sv->current, read_seq,
81
96
  sv->mutable_cf_options.max_sequential_skip_in_iterations,
82
- cur_sv_number, read_callback_, db_impl_, cfd_, expose_blob_index_,
97
+ sv->version_number, read_callback_, db_impl_, cfd_, expose_blob_index_,
83
98
  allow_refresh_);
84
99
 
85
100
  InternalIterator* internal_iter = db_impl_->NewInternalIterator(
86
- read_options_, cfd_, sv, &arena_, latest_seq,
101
+ read_options_, cfd_, sv, &arena_, read_seq,
87
102
  /* allow_unprepared_value */ true, /* db_iter */ this);
88
103
  SetIterUnderDBIter(internal_iter);
89
104
  };
@@ -92,13 +107,13 @@ Status ArenaWrappedDBIter::Refresh() {
92
107
  reinit_internal_iter();
93
108
  break;
94
109
  } else {
95
- SequenceNumber latest_seq = db_impl_->GetLatestSequenceNumber();
110
+ SequenceNumber read_seq = GetSeqNum(db_impl_, snapshot);
96
111
  // Refresh range-tombstones in MemTable
97
112
  if (!read_options_.ignore_range_deletions) {
98
113
  SuperVersion* sv = cfd_->GetThreadLocalSuperVersion(db_impl_);
99
114
  TEST_SYNC_POINT_CALLBACK("ArenaWrappedDBIter::Refresh:SV", nullptr);
100
115
  auto t = sv->mem->NewRangeTombstoneIterator(
101
- read_options_, latest_seq, false /* immutable_memtable */);
116
+ read_options_, read_seq, false /* immutable_memtable */);
102
117
  if (!t || t->empty()) {
103
118
  // If memtable_range_tombstone_iter_ points to a non-empty tombstone
104
119
  // iterator, then it means sv->mem is not the memtable that
@@ -128,9 +143,6 @@ Status ArenaWrappedDBIter::Refresh() {
128
143
  }
129
144
  db_impl_->ReturnAndCleanupSuperVersion(cfd_, sv);
130
145
  }
131
- // Refresh latest sequence number
132
- db_iter_->set_sequence(latest_seq);
133
- db_iter_->set_valid(false);
134
146
  // Check again if the latest super version number is changed
135
147
  uint64_t latest_sv_number = cfd_->GetSuperVersionNumber();
136
148
  if (latest_sv_number != cur_sv_number) {
@@ -139,6 +151,8 @@ Status ArenaWrappedDBIter::Refresh() {
139
151
  cur_sv_number = latest_sv_number;
140
152
  continue;
141
153
  }
154
+ db_iter_->set_sequence(read_seq);
155
+ db_iter_->set_valid(false);
142
156
  break;
143
157
  }
144
158
  }
@@ -80,6 +80,7 @@ class ArenaWrappedDBIter : public Iterator {
80
80
  Status GetProperty(std::string prop_name, std::string* prop) override;
81
81
 
82
82
  Status Refresh() override;
83
+ Status Refresh(const Snapshot*) override;
83
84
 
84
85
  void Init(Env* env, const ReadOptions& read_options,
85
86
  const ImmutableOptions& ioptions,
@@ -46,7 +46,8 @@ class BlobContents {
46
46
  class BlobContentsCreator : public Cache::CreateContext {
47
47
  public:
48
48
  static void Create(std::unique_ptr<BlobContents>* out, size_t* out_charge,
49
- const Slice& contents, MemoryAllocator* alloc) {
49
+ const Slice& contents, CompressionType /*type*/,
50
+ MemoryAllocator* alloc) {
50
51
  auto raw = new BlobContents(AllocateAndCopyBlock(contents, alloc),
51
52
  contents.size());
52
53
  out->reset(raw);
@@ -585,7 +585,8 @@ Status BlobFileReader::UncompressBlobIfNeeded(
585
585
  assert(result);
586
586
 
587
587
  if (compression_type == kNoCompression) {
588
- BlobContentsCreator::Create(result, nullptr, value_slice, allocator);
588
+ BlobContentsCreator::Create(result, nullptr, value_slice, kNoCompression,
589
+ allocator);
589
590
  return Status::OK();
590
591
  }
591
592
 
@@ -168,6 +168,7 @@ TEST_F(DBBlobBasicTest, IterateBlobsFromCache) {
168
168
  ASSERT_EQ(iter->value().ToString(), blobs[i]);
169
169
  ++i;
170
170
  }
171
+ ASSERT_OK(iter->status());
171
172
  ASSERT_EQ(i, num_blobs);
172
173
  ASSERT_EQ(options.statistics->getAndResetTickerCount(BLOB_DB_CACHE_ADD), 0);
173
174
  }
@@ -203,6 +204,7 @@ TEST_F(DBBlobBasicTest, IterateBlobsFromCache) {
203
204
  ASSERT_EQ(iter->value().ToString(), blobs[i]);
204
205
  ++i;
205
206
  }
207
+ ASSERT_OK(iter->status());
206
208
  ASSERT_EQ(i, num_blobs);
207
209
  ASSERT_EQ(options.statistics->getAndResetTickerCount(BLOB_DB_CACHE_ADD),
208
210
  num_blobs);
@@ -224,6 +226,7 @@ TEST_F(DBBlobBasicTest, IterateBlobsFromCache) {
224
226
  ASSERT_EQ(iter->value().ToString(), blobs[i]);
225
227
  ++i;
226
228
  }
229
+ ASSERT_OK(iter->status());
227
230
  ASSERT_EQ(i, num_blobs);
228
231
  ASSERT_EQ(options.statistics->getAndResetTickerCount(BLOB_DB_CACHE_ADD), 0);
229
232
  }
@@ -2123,6 +2126,7 @@ TEST_F(DBBlobWithTimestampTest, IterateBlobs) {
2123
2126
  /*key_is_internal*/ false);
2124
2127
  iter->Prev();
2125
2128
  }
2129
+ ASSERT_OK(iter->status());
2126
2130
  }
2127
2131
 
2128
2132
  // Backward iteration, then reverse to forward.
@@ -2169,6 +2173,7 @@ TEST_F(DBBlobWithTimestampTest, IterateBlobs) {
2169
2173
  iter->Next();
2170
2174
  }
2171
2175
  }
2176
+ ASSERT_OK(iter->status());
2172
2177
  }
2173
2178
 
2174
2179
  // Backward iterating multiple versions of the same key, get in this order:
@@ -2187,6 +2192,7 @@ TEST_F(DBBlobWithTimestampTest, IterateBlobs) {
2187
2192
  iter->Prev();
2188
2193
  }
2189
2194
  }
2195
+ ASSERT_OK(iter->status());
2190
2196
  }
2191
2197
 
2192
2198
  int upper_bound_idx = num_blobs - 2;
@@ -2209,6 +2215,7 @@ TEST_F(DBBlobWithTimestampTest, IterateBlobs) {
2209
2215
  iter->Next();
2210
2216
  }
2211
2217
  }
2218
+ ASSERT_OK(iter->status());
2212
2219
  }
2213
2220
 
2214
2221
  // Backward iteration with upper and lower bound.
@@ -2224,6 +2231,7 @@ TEST_F(DBBlobWithTimestampTest, IterateBlobs) {
2224
2231
  iter->Prev();
2225
2232
  }
2226
2233
  }
2234
+ ASSERT_OK(iter->status());
2227
2235
  }
2228
2236
  }
2229
2237
 
@@ -96,9 +96,13 @@ class DBBlobIndexTest : public DBTestBase {
96
96
  }
97
97
 
98
98
  ArenaWrappedDBIter* GetBlobIterator() {
99
- return dbfull()->NewIteratorImpl(
100
- ReadOptions(), cfd(), dbfull()->GetLatestSequenceNumber(),
101
- nullptr /*read_callback*/, true /*expose_blob_index*/);
99
+ ColumnFamilyData* column_family = cfd();
100
+ DBImpl* db_impl = dbfull();
101
+ return db_impl->NewIteratorImpl(
102
+ ReadOptions(), column_family,
103
+ column_family->GetReferencedSuperVersion(db_impl),
104
+ db_impl->GetLatestSequenceNumber(), nullptr /*read_callback*/,
105
+ true /*expose_blob_index*/);
102
106
  }
103
107
 
104
108
  Options GetTestOptions() {
@@ -294,12 +294,12 @@ Status BuildTable(
294
294
  if (!s.ok() || empty) {
295
295
  builder->Abandon();
296
296
  } else {
297
- std::string seqno_time_mapping_str;
297
+ std::string seqno_to_time_mapping_str;
298
298
  seqno_to_time_mapping.Encode(
299
- seqno_time_mapping_str, meta->fd.smallest_seqno,
299
+ seqno_to_time_mapping_str, meta->fd.smallest_seqno,
300
300
  meta->fd.largest_seqno, meta->file_creation_time);
301
301
  builder->SetSeqnoTimeTableProperties(
302
- seqno_time_mapping_str,
302
+ seqno_to_time_mapping_str,
303
303
  ioptions.compaction_style == CompactionStyle::kCompactionStyleFIFO
304
304
  ? meta->file_creation_time
305
305
  : meta->oldest_ancester_time);
@@ -120,6 +120,7 @@ using ROCKSDB_NAMESPACE::TransactionDB;
120
120
  using ROCKSDB_NAMESPACE::TransactionDBOptions;
121
121
  using ROCKSDB_NAMESPACE::TransactionLogIterator;
122
122
  using ROCKSDB_NAMESPACE::TransactionOptions;
123
+ using ROCKSDB_NAMESPACE::WaitForCompactOptions;
123
124
  using ROCKSDB_NAMESPACE::WALRecoveryMode;
124
125
  using ROCKSDB_NAMESPACE::WritableFile;
125
126
  using ROCKSDB_NAMESPACE::WriteBatch;
@@ -275,6 +276,9 @@ struct rocksdb_optimistictransactiondb_t {
275
276
  struct rocksdb_optimistictransaction_options_t {
276
277
  OptimisticTransactionOptions rep;
277
278
  };
279
+ struct rocksdb_wait_for_compact_options_t {
280
+ WaitForCompactOptions rep;
281
+ };
278
282
 
279
283
  struct rocksdb_compactionfiltercontext_t {
280
284
  CompactionFilter::Context rep;
@@ -4585,6 +4589,11 @@ void rocksdb_readoptions_set_iter_start_ts(rocksdb_readoptions_t* opt,
4585
4589
  }
4586
4590
  }
4587
4591
 
4592
+ void rocksdb_readoptions_set_auto_readahead_size(rocksdb_readoptions_t* opt,
4593
+ unsigned char v) {
4594
+ opt->rep.auto_readahead_size = v;
4595
+ }
4596
+
4588
4597
  rocksdb_writeoptions_t* rocksdb_writeoptions_create() {
4589
4598
  return new rocksdb_writeoptions_t;
4590
4599
  }
@@ -6719,4 +6728,59 @@ double rocksdb_statistics_histogram_data_get_min(
6719
6728
  return data->rep.min;
6720
6729
  }
6721
6730
 
6731
+ void rocksdb_wait_for_compact(rocksdb_t* db,
6732
+ rocksdb_wait_for_compact_options_t* options,
6733
+ char** errptr) {
6734
+ SaveError(errptr, db->rep->WaitForCompact(options->rep));
6735
+ }
6736
+
6737
+ rocksdb_wait_for_compact_options_t* rocksdb_wait_for_compact_options_create() {
6738
+ return new rocksdb_wait_for_compact_options_t;
6739
+ }
6740
+
6741
+ void rocksdb_wait_for_compact_options_destroy(
6742
+ rocksdb_wait_for_compact_options_t* opt) {
6743
+ delete opt;
6744
+ }
6745
+
6746
+ void rocksdb_wait_for_compact_options_set_abort_on_pause(
6747
+ rocksdb_wait_for_compact_options_t* opt, unsigned char v) {
6748
+ opt->rep.abort_on_pause = v;
6749
+ }
6750
+
6751
+ unsigned char rocksdb_wait_for_compact_options_get_abort_on_pause(
6752
+ rocksdb_wait_for_compact_options_t* opt) {
6753
+ return opt->rep.abort_on_pause;
6754
+ }
6755
+
6756
+ void rocksdb_wait_for_compact_options_set_flush(
6757
+ rocksdb_wait_for_compact_options_t* opt, unsigned char v) {
6758
+ opt->rep.flush = v;
6759
+ }
6760
+
6761
+ unsigned char rocksdb_wait_for_compact_options_get_flush(
6762
+ rocksdb_wait_for_compact_options_t* opt) {
6763
+ return opt->rep.flush;
6764
+ }
6765
+
6766
+ void rocksdb_wait_for_compact_options_set_close_db(
6767
+ rocksdb_wait_for_compact_options_t* opt, unsigned char v) {
6768
+ opt->rep.close_db = v;
6769
+ }
6770
+
6771
+ unsigned char rocksdb_wait_for_compact_options_get_close_db(
6772
+ rocksdb_wait_for_compact_options_t* opt) {
6773
+ return opt->rep.close_db;
6774
+ }
6775
+
6776
+ void rocksdb_wait_for_compact_options_set_timeout(
6777
+ rocksdb_wait_for_compact_options_t* opt, uint64_t microseconds) {
6778
+ opt->rep.timeout = std::chrono::microseconds(microseconds);
6779
+ }
6780
+
6781
+ uint64_t rocksdb_wait_for_compact_options_get_timeout(
6782
+ rocksdb_wait_for_compact_options_t* opt) {
6783
+ return opt->rep.timeout.count();
6784
+ }
6785
+
6722
6786
  } // end extern "C"
@@ -375,6 +375,11 @@ static rocksdb_t* CheckCompaction(rocksdb_t* db, rocksdb_options_t* options,
375
375
 
376
376
  // Force compaction
377
377
  rocksdb_compact_range(db, NULL, 0, NULL, 0);
378
+ rocksdb_wait_for_compact_options_t* wco;
379
+ wco = rocksdb_wait_for_compact_options_create();
380
+ rocksdb_wait_for_compact(db, wco, &err);
381
+ CheckNoError(err);
382
+ rocksdb_wait_for_compact_options_destroy(wco);
378
383
  // should have filtered bar, but not foo
379
384
  CheckGet(db, roptions, "foo", "foovalue");
380
385
  CheckGet(db, roptions, "bar", NULL);
@@ -3687,6 +3692,37 @@ int main(int argc, char** argv) {
3687
3692
  rocksdb_statistics_histogram_data_destroy(hist);
3688
3693
  }
3689
3694
 
3695
+ StartPhase("wait_for_compact_options");
3696
+ {
3697
+ rocksdb_wait_for_compact_options_t* wco;
3698
+ wco = rocksdb_wait_for_compact_options_create();
3699
+
3700
+ rocksdb_wait_for_compact_options_set_abort_on_pause(wco, 1);
3701
+ CheckCondition(1 ==
3702
+ rocksdb_wait_for_compact_options_get_abort_on_pause(wco));
3703
+
3704
+ rocksdb_wait_for_compact_options_set_flush(wco, 1);
3705
+ CheckCondition(1 == rocksdb_wait_for_compact_options_get_flush(wco));
3706
+
3707
+ rocksdb_wait_for_compact_options_set_close_db(wco, 1);
3708
+ CheckCondition(1 == rocksdb_wait_for_compact_options_get_close_db(wco));
3709
+
3710
+ rocksdb_wait_for_compact_options_set_timeout(wco, 342);
3711
+ CheckCondition(342 == rocksdb_wait_for_compact_options_get_timeout(wco));
3712
+
3713
+ rocksdb_wait_for_compact_options_destroy(wco);
3714
+ }
3715
+ StartPhase("wait_for_compact");
3716
+ {
3717
+ rocksdb_wait_for_compact_options_t* wco;
3718
+ wco = rocksdb_wait_for_compact_options_create();
3719
+ rocksdb_wait_for_compact_options_set_flush(wco, 1);
3720
+
3721
+ rocksdb_wait_for_compact(db, wco, &err);
3722
+ CheckNoError(err);
3723
+ rocksdb_wait_for_compact_options_destroy(wco);
3724
+ }
3725
+
3690
3726
  StartPhase("cancel_all_background_work");
3691
3727
  rocksdb_cancel_all_background_work(db, 1);
3692
3728
 
@@ -476,6 +476,7 @@ void SuperVersion::Init(ColumnFamilyData* new_cfd, MemTable* new_mem,
476
476
  mem = new_mem;
477
477
  imm = new_imm;
478
478
  current = new_current;
479
+ full_history_ts_low = cfd->GetFullHistoryTsLow();
479
480
  cfd->Ref();
480
481
  mem->Ref();
481
482
  imm->Ref();
@@ -1118,7 +1119,7 @@ Compaction* ColumnFamilyData::PickCompaction(
1118
1119
  GetName(), mutable_options, mutable_db_options, current_->storage_info(),
1119
1120
  log_buffer);
1120
1121
  if (result != nullptr) {
1121
- result->SetInputVersion(current_);
1122
+ result->FinalizeInputInfo(current_);
1122
1123
  }
1123
1124
  return result;
1124
1125
  }
@@ -1202,7 +1203,7 @@ Compaction* ColumnFamilyData::CompactRange(
1202
1203
  compact_range_options, begin, end, compaction_end, conflict,
1203
1204
  max_file_num_to_ignore, trim_ts);
1204
1205
  if (result != nullptr) {
1205
- result->SetInputVersion(current_);
1206
+ result->FinalizeInputInfo(current_);
1206
1207
  }
1207
1208
  TEST_SYNC_POINT("ColumnFamilyData::CompactRange:Return");
1208
1209
  return result;
@@ -1283,8 +1284,6 @@ void ColumnFamilyData::InstallSuperVersion(
1283
1284
  new_superversion->Init(this, mem_, imm_.current(), current_);
1284
1285
  SuperVersion* old_superversion = super_version_;
1285
1286
  super_version_ = new_superversion;
1286
- ++super_version_number_;
1287
- super_version_->version_number = super_version_number_;
1288
1287
  if (old_superversion == nullptr || old_superversion->current != current() ||
1289
1288
  old_superversion->mem != mem_ ||
1290
1289
  old_superversion->imm != imm_.current()) {
@@ -1319,6 +1318,8 @@ void ColumnFamilyData::InstallSuperVersion(
1319
1318
  sv_context->superversions_to_free.push_back(old_superversion);
1320
1319
  }
1321
1320
  }
1321
+ ++super_version_number_;
1322
+ super_version_->version_number = super_version_number_;
1322
1323
  }
1323
1324
 
1324
1325
  void ColumnFamilyData::ResetThreadLocalSuperVersions() {
@@ -1557,24 +1558,15 @@ bool ColumnFamilyData::ShouldPostponeFlushToRetainUDT(
1557
1558
  if (full_history_ts_low.empty()) {
1558
1559
  return false;
1559
1560
  }
1560
- #ifndef NDEBUG
1561
- Slice last_table_newest_udt;
1562
- #endif /* !NDEBUG */
1563
1561
  for (const Slice& table_newest_udt :
1564
1562
  imm()->GetTablesNewestUDT(max_memtable_id)) {
1565
1563
  assert(table_newest_udt.size() == full_history_ts_low.size());
1566
- assert(last_table_newest_udt.empty() ||
1567
- ucmp->CompareTimestamp(table_newest_udt, last_table_newest_udt) >=
1568
- 0);
1569
1564
  // Checking the newest UDT contained in MemTable with ascending ID up to
1570
- // `max_memtable_id`. MemTable with bigger ID will have newer UDT, return
1571
- // immediately on finding the first MemTable that needs postponing.
1565
+ // `max_memtable_id`. Return immediately on finding the first MemTable that
1566
+ // needs postponing.
1572
1567
  if (ucmp->CompareTimestamp(table_newest_udt, full_history_ts_low) >= 0) {
1573
1568
  return true;
1574
1569
  }
1575
- #ifndef NDEBUG
1576
- last_table_newest_udt = table_newest_udt;
1577
- #endif /* !NDEBUG */
1578
1570
  }
1579
1571
  return false;
1580
1572
  }
@@ -1756,4 +1748,20 @@ const Comparator* GetColumnFamilyUserComparator(
1756
1748
  return nullptr;
1757
1749
  }
1758
1750
 
1751
+ const ImmutableOptions& GetImmutableOptions(ColumnFamilyHandle* column_family) {
1752
+ assert(column_family);
1753
+
1754
+ ColumnFamilyHandleImpl* const handle =
1755
+ static_cast_with_check<ColumnFamilyHandleImpl>(column_family);
1756
+ assert(handle);
1757
+
1758
+ const ColumnFamilyData* const cfd = handle->cfd();
1759
+ assert(cfd);
1760
+
1761
+ const ImmutableOptions* ioptions = cfd->ioptions();
1762
+ assert(ioptions);
1763
+
1764
+ return *ioptions;
1765
+ }
1766
+
1759
1767
  } // namespace ROCKSDB_NAMESPACE
@@ -211,6 +211,12 @@ struct SuperVersion {
211
211
  // Version number of the current SuperVersion
212
212
  uint64_t version_number;
213
213
  WriteStallCondition write_stall_condition;
214
+ // Each time `full_history_ts_low` collapses history, a new SuperVersion is
215
+ // installed. This field tracks the effective `full_history_ts_low` for that
216
+ // SuperVersion, to be used by read APIs for sanity checks. This field is
217
+ // immutable once SuperVersion is installed. For column family that doesn't
218
+ // enable UDT feature, this is an empty string.
219
+ std::string full_history_ts_low;
214
220
 
215
221
  // should be called outside the mutex
216
222
  SuperVersion() = default;
@@ -871,4 +877,7 @@ extern uint32_t GetColumnFamilyID(ColumnFamilyHandle* column_family);
871
877
  extern const Comparator* GetColumnFamilyUserComparator(
872
878
  ColumnFamilyHandle* column_family);
873
879
 
880
+ extern const ImmutableOptions& GetImmutableOptions(
881
+ ColumnFamilyHandle* column_family);
882
+
874
883
  } // namespace ROCKSDB_NAMESPACE