@nxtedition/rocksdb 8.2.0 → 8.2.2

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 (321) hide show
  1. package/binding.cc +3 -3
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
  3. package/deps/rocksdb/rocksdb/Makefile +10 -5
  4. package/deps/rocksdb/rocksdb/TARGETS +8 -345
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
  15. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
  17. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
  25. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
  26. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
  29. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
  30. package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
  31. package/deps/rocksdb/rocksdb/db/builder.h +2 -2
  32. package/deps/rocksdb/rocksdb/db/c.cc +76 -5
  33. package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
  34. package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
  50. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
  51. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  52. package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
  53. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
  54. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
  55. package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
  58. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
  71. package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
  72. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
  73. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
  74. package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
  75. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
  76. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
  77. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
  78. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
  79. package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
  80. package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
  81. package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
  82. package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
  83. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
  84. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
  85. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
  86. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
  87. package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
  88. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
  90. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
  91. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
  92. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
  93. package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
  94. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
  95. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
  96. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
  97. package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
  98. package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
  99. package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
  100. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
  101. package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
  102. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
  103. package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
  104. package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
  105. package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
  106. package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
  107. package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
  108. package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
  109. package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
  110. package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
  111. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
  112. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
  113. package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
  114. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
  115. package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
  116. package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
  117. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
  118. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
  119. package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
  120. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  121. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
  122. package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
  123. package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
  124. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
  125. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
  126. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
  127. package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
  128. package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
  129. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
  130. package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
  131. package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
  144. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
  145. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
  146. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
  149. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
  150. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
  151. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
  152. package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
  153. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  154. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
  155. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
  156. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
  157. package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
  158. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  159. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
  160. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
  161. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
  162. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
  163. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
  164. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
  165. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
  166. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
  167. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
  168. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
  169. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
  170. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
  171. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
  173. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
  174. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
  175. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
  176. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
  177. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
  178. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
  179. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
  184. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
  186. package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
  188. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
  189. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
  192. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
  193. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  194. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
  195. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
  196. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
  197. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
  198. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
  199. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
  200. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
  201. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  202. package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
  203. package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
  204. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
  205. package/deps/rocksdb/rocksdb/options/options.cc +12 -53
  206. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
  207. package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
  208. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
  209. package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
  210. package/deps/rocksdb/rocksdb/port/lang.h +27 -0
  211. package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
  212. package/deps/rocksdb/rocksdb/src.mk +2 -0
  213. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
  214. package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
  215. package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
  216. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
  217. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
  218. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
  219. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
  220. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
  221. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
  222. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
  223. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
  224. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
  225. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
  226. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
  228. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
  229. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
  230. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
  232. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
  233. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
  234. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
  235. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
  236. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
  237. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
  238. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
  239. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
  240. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
  241. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
  242. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
  243. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
  244. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
  245. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
  247. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
  248. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
  249. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
  250. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
  251. package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
  252. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
  253. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
  254. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
  255. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
  256. package/deps/rocksdb/rocksdb/table/format.cc +4 -4
  257. package/deps/rocksdb/rocksdb/table/format.h +1 -1
  258. package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
  259. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
  260. package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
  261. package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
  262. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
  264. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
  266. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
  267. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
  268. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
  269. package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
  270. package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
  271. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
  272. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
  275. package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
  277. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
  278. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
  279. package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
  280. package/deps/rocksdb/rocksdb/util/compression.h +1 -1
  281. package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
  282. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
  283. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
  284. package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
  285. package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
  286. package/deps/rocksdb/rocksdb/util/math.h +12 -7
  287. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
  288. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
  289. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
  290. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
  291. package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
  292. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
  293. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  294. package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
  295. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
  296. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
  297. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
  298. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
  299. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
  300. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
  301. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
  302. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
  303. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
  304. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
  305. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
  306. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
  307. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
  308. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
  309. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
  310. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
  311. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
  312. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
  313. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
  314. package/package.json +1 -1
  315. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  316. package/prebuilds/linux-x64/node.napi.node +0 -0
  317. /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
  318. /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
  319. /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
  320. /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
  321. /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
@@ -258,6 +258,9 @@ DBImpl::DBImpl(const DBOptions& options, const std::string& dbname,
258
258
  co.capacity = table_cache_size;
259
259
  co.num_shard_bits = immutable_db_options_.table_cache_numshardbits;
260
260
  co.metadata_charge_policy = kDontChargeCacheMetadata;
261
+ // TODO: Consider a non-fixed seed once test fallout (prefetch_test) is
262
+ // dealt with
263
+ co.hash_seed = 0;
261
264
  table_cache_ = NewLRUCache(co);
262
265
  SetDbSessionId();
263
266
  assert(!db_session_id_.empty());
@@ -327,6 +330,9 @@ Status DBImpl::Resume() {
327
330
  // means a new super version wouldn't have been installed
328
331
  Status DBImpl::ResumeImpl(DBRecoverContext context) {
329
332
  mutex_.AssertHeld();
333
+
334
+ // TODO: plumb Env::IOActivity
335
+ const ReadOptions read_options;
330
336
  WaitForBackgroundWork();
331
337
 
332
338
  Status s;
@@ -368,7 +374,7 @@ Status DBImpl::ResumeImpl(DBRecoverContext context) {
368
374
  assert(cfh);
369
375
  ColumnFamilyData* cfd = cfh->cfd();
370
376
  const MutableCFOptions& cf_opts = *cfd->GetLatestMutableCFOptions();
371
- s = versions_->LogAndApply(cfd, cf_opts, &edit, &mutex_,
377
+ s = versions_->LogAndApply(cfd, cf_opts, read_options, &edit, &mutex_,
372
378
  directories_.GetDbDir());
373
379
  if (!s.ok()) {
374
380
  io_s = versions_->io_status();
@@ -1147,6 +1153,8 @@ FSDirectory* DBImpl::GetDataDir(ColumnFamilyData* cfd, size_t path_id) const {
1147
1153
  Status DBImpl::SetOptions(
1148
1154
  ColumnFamilyHandle* column_family,
1149
1155
  const std::unordered_map<std::string, std::string>& options_map) {
1156
+ // TODO: plumb Env::IOActivity
1157
+ const ReadOptions read_options;
1150
1158
  auto* cfd =
1151
1159
  static_cast_with_check<ColumnFamilyHandleImpl>(column_family)->cfd();
1152
1160
  if (options_map.empty()) {
@@ -1168,8 +1176,8 @@ Status DBImpl::SetOptions(
1168
1176
  new_options = *cfd->GetLatestMutableCFOptions();
1169
1177
  // Append new version to recompute compaction score.
1170
1178
  VersionEdit dummy_edit;
1171
- s = versions_->LogAndApply(cfd, new_options, &dummy_edit, &mutex_,
1172
- directories_.GetDbDir());
1179
+ s = versions_->LogAndApply(cfd, new_options, read_options, &dummy_edit,
1180
+ &mutex_, directories_.GetDbDir());
1173
1181
  // Trigger possible flush/compactions. This has to be before we persist
1174
1182
  // options to file, otherwise there will be a deadlock with writer
1175
1183
  // thread.
@@ -1507,7 +1515,9 @@ Status DBImpl::SyncWAL() {
1507
1515
  }
1508
1516
  if (status.ok() && synced_wals.IsWalAddition()) {
1509
1517
  InstrumentedMutexLock l(&mutex_);
1510
- status = ApplyWALToManifest(&synced_wals);
1518
+ // TODO: plumb Env::IOActivity
1519
+ const ReadOptions read_options;
1520
+ status = ApplyWALToManifest(read_options, &synced_wals);
1511
1521
  }
1512
1522
 
1513
1523
  TEST_SYNC_POINT("DBImpl::SyncWAL:BeforeMarkLogsSynced:2");
@@ -1515,11 +1525,13 @@ Status DBImpl::SyncWAL() {
1515
1525
  return status;
1516
1526
  }
1517
1527
 
1518
- Status DBImpl::ApplyWALToManifest(VersionEdit* synced_wals) {
1528
+ Status DBImpl::ApplyWALToManifest(const ReadOptions& read_options,
1529
+ VersionEdit* synced_wals) {
1519
1530
  // not empty, write to MANIFEST.
1520
1531
  mutex_.AssertHeld();
1532
+
1521
1533
  Status status = versions_->LogAndApplyToDefaultColumnFamily(
1522
- synced_wals, &mutex_, directories_.GetDbDir());
1534
+ read_options, synced_wals, &mutex_, directories_.GetDbDir());
1523
1535
  if (!status.ok() && versions_->io_status().IsIOError()) {
1524
1536
  status = error_handler_.SetBGError(versions_->io_status(),
1525
1537
  BackgroundErrorReason::kManifestWrite);
@@ -1936,6 +1948,12 @@ Status DBImpl::GetEntity(const ReadOptions& read_options,
1936
1948
  "Cannot call GetEntity without a PinnableWideColumns object");
1937
1949
  }
1938
1950
 
1951
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
1952
+ return Status::InvalidArgument(
1953
+ "Cannot call GetEntity with `ReadOptions::io_activity` != "
1954
+ "`Env::IOActivity::kUnknown`");
1955
+ }
1956
+
1939
1957
  columns->Reset();
1940
1958
 
1941
1959
  GetImplOptions get_impl_options;
@@ -1981,6 +1999,12 @@ Status DBImpl::GetImpl(const ReadOptions& read_options, const Slice& key,
1981
1999
 
1982
2000
  assert(get_impl_options.column_family);
1983
2001
 
2002
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
2003
+ return Status::InvalidArgument(
2004
+ "Cannot call Get with `ReadOptions::io_activity` != "
2005
+ "`Env::IOActivity::kUnknown`");
2006
+ }
2007
+
1984
2008
  if (read_options.timestamp) {
1985
2009
  const Status s = FailIfTsMismatchCf(get_impl_options.column_family,
1986
2010
  *(read_options.timestamp),
@@ -2454,7 +2478,6 @@ std::vector<Status> DBImpl::MultiGet(
2454
2478
 
2455
2479
  // Post processing (decrement reference counts and record statistics)
2456
2480
  PERF_TIMER_GUARD(get_post_process_time);
2457
- autovector<SuperVersion*> superversions_to_delete;
2458
2481
 
2459
2482
  for (auto mgd_iter : multiget_cf_data) {
2460
2483
  auto mgd = mgd_iter.second;
@@ -2931,6 +2954,11 @@ Status DBImpl::MultiGetImpl(
2931
2954
  autovector<KeyContext*, MultiGetContext::MAX_BATCH_SIZE>* sorted_keys,
2932
2955
  SuperVersion* super_version, SequenceNumber snapshot,
2933
2956
  ReadCallback* callback) {
2957
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
2958
+ return Status::InvalidArgument(
2959
+ "Cannot call MultiGet with `ReadOptions::io_activity` != "
2960
+ "`Env::IOActivity::kUnknown`");
2961
+ }
2934
2962
  PERF_CPU_TIMER_GUARD(get_cpu_nanos, immutable_db_options_.clock);
2935
2963
  StopWatch sw(immutable_db_options_.clock, stats_, DB_MULTIGET);
2936
2964
 
@@ -3129,6 +3157,8 @@ Status DBImpl::CreateColumnFamilies(
3129
3157
  Status DBImpl::CreateColumnFamilyImpl(const ColumnFamilyOptions& cf_options,
3130
3158
  const std::string& column_family_name,
3131
3159
  ColumnFamilyHandle** handle) {
3160
+ // TODO: plumb Env::IOActivity
3161
+ const ReadOptions read_options;
3132
3162
  Status s;
3133
3163
  *handle = nullptr;
3134
3164
 
@@ -3169,9 +3199,9 @@ Status DBImpl::CreateColumnFamilyImpl(const ColumnFamilyOptions& cf_options,
3169
3199
  write_thread_.EnterUnbatched(&w, &mutex_);
3170
3200
  // LogAndApply will both write the creation in MANIFEST and create
3171
3201
  // ColumnFamilyData object
3172
- s = versions_->LogAndApply(nullptr, MutableCFOptions(cf_options), &edit,
3173
- &mutex_, directories_.GetDbDir(), false,
3174
- &cf_options);
3202
+ s = versions_->LogAndApply(nullptr, MutableCFOptions(cf_options),
3203
+ read_options, &edit, &mutex_,
3204
+ directories_.GetDbDir(), false, &cf_options);
3175
3205
  write_thread_.ExitUnbatched(&w);
3176
3206
  }
3177
3207
  if (s.ok()) {
@@ -3250,6 +3280,8 @@ Status DBImpl::DropColumnFamilies(
3250
3280
  }
3251
3281
 
3252
3282
  Status DBImpl::DropColumnFamilyImpl(ColumnFamilyHandle* column_family) {
3283
+ // TODO: plumb Env::IOActivity
3284
+ const ReadOptions read_options;
3253
3285
  auto cfh = static_cast_with_check<ColumnFamilyHandleImpl>(column_family);
3254
3286
  auto cfd = cfh->cfd();
3255
3287
  if (cfd->GetID() == 0) {
@@ -3272,8 +3304,9 @@ Status DBImpl::DropColumnFamilyImpl(ColumnFamilyHandle* column_family) {
3272
3304
  // we drop column family from a single write thread
3273
3305
  WriteThread::Writer w;
3274
3306
  write_thread_.EnterUnbatched(&w, &mutex_);
3275
- s = versions_->LogAndApply(cfd, *cfd->GetLatestMutableCFOptions(), &edit,
3276
- &mutex_, directories_.GetDbDir());
3307
+ s = versions_->LogAndApply(cfd, *cfd->GetLatestMutableCFOptions(),
3308
+ read_options, &edit, &mutex_,
3309
+ directories_.GetDbDir());
3277
3310
  write_thread_.ExitUnbatched(&w);
3278
3311
  }
3279
3312
  if (s.ok()) {
@@ -3324,10 +3357,13 @@ bool DBImpl::KeyMayExist(const ReadOptions& read_options,
3324
3357
  std::string* value, std::string* timestamp,
3325
3358
  bool* value_found) {
3326
3359
  assert(value != nullptr);
3360
+ assert(read_options.io_activity == Env::IOActivity::kUnknown);
3361
+
3327
3362
  if (value_found != nullptr) {
3328
3363
  // falsify later if key-may-exist but can't fetch value
3329
3364
  *value_found = true;
3330
3365
  }
3366
+ // TODO: plumb Env::IOActivity
3331
3367
  ReadOptions roptions = read_options;
3332
3368
  roptions.read_tier = kBlockCacheTier; // read from block cache only
3333
3369
  PinnableSlice pinnable_val;
@@ -3356,6 +3392,11 @@ Iterator* DBImpl::NewIterator(const ReadOptions& read_options,
3356
3392
  return NewErrorIterator(Status::NotSupported(
3357
3393
  "ReadTier::kPersistedData is not yet supported in iterators."));
3358
3394
  }
3395
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
3396
+ return NewErrorIterator(Status::InvalidArgument(
3397
+ "Cannot call NewIterator with `ReadOptions::io_activity` != "
3398
+ "`Env::IOActivity::kUnknown`"));
3399
+ }
3359
3400
 
3360
3401
  assert(column_family);
3361
3402
 
@@ -3491,6 +3532,11 @@ Status DBImpl::NewIterators(
3491
3532
  return Status::NotSupported(
3492
3533
  "ReadTier::kPersistedData is not yet supported in iterators.");
3493
3534
  }
3535
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
3536
+ return Status::InvalidArgument(
3537
+ "Cannot call NewIterators with `ReadOptions::io_activity` != "
3538
+ "`Env::IOActivity::kUnknown`");
3539
+ }
3494
3540
 
3495
3541
  if (read_options.timestamp) {
3496
3542
  for (auto* cf : column_families) {
@@ -3808,7 +3854,9 @@ Status DBImpl::GetPropertiesOfAllTables(ColumnFamilyHandle* column_family,
3808
3854
  version->Ref();
3809
3855
  mutex_.Unlock();
3810
3856
 
3811
- auto s = version->GetPropertiesOfAllTables(props);
3857
+ // TODO: plumb Env::IOActivity
3858
+ const ReadOptions read_options;
3859
+ auto s = version->GetPropertiesOfAllTables(read_options, props);
3812
3860
 
3813
3861
  // Decrement the ref count
3814
3862
  mutex_.Lock();
@@ -3830,7 +3878,9 @@ Status DBImpl::GetPropertiesOfTablesInRange(ColumnFamilyHandle* column_family,
3830
3878
  version->Ref();
3831
3879
  mutex_.Unlock();
3832
3880
 
3833
- auto s = version->GetPropertiesOfTablesInRange(range, n, props);
3881
+ // TODO: plumb Env::IOActivity
3882
+ const ReadOptions read_options;
3883
+ auto s = version->GetPropertiesOfTablesInRange(read_options, range, n, props);
3834
3884
 
3835
3885
  // Decrement the ref count
3836
3886
  mutex_.Lock();
@@ -4163,6 +4213,8 @@ Status DBImpl::GetApproximateSizes(const SizeApproximationOptions& options,
4163
4213
  SuperVersion* sv = GetAndRefSuperVersion(cfd);
4164
4214
  v = sv->current;
4165
4215
 
4216
+ // TODO: plumb Env::IOActivity
4217
+ const ReadOptions read_options;
4166
4218
  for (int i = 0; i < n; i++) {
4167
4219
  Slice start = range[i].start;
4168
4220
  Slice limit = range[i].limit;
@@ -4184,7 +4236,7 @@ Status DBImpl::GetApproximateSizes(const SizeApproximationOptions& options,
4184
4236
  sizes[i] = 0;
4185
4237
  if (options.include_files) {
4186
4238
  sizes[i] += versions_->ApproximateSize(
4187
- options, v, k1.Encode(), k2.Encode(), /*start_level=*/0,
4239
+ options, read_options, v, k1.Encode(), k2.Encode(), /*start_level=*/0,
4188
4240
  /*end_level=*/-1, TableReaderCaller::kUserApproximateSize);
4189
4241
  }
4190
4242
  if (options.include_memtables) {
@@ -4232,6 +4284,8 @@ Status DBImpl::GetUpdatesSince(
4232
4284
  }
4233
4285
 
4234
4286
  Status DBImpl::DeleteFile(std::string name) {
4287
+ // TODO: plumb Env::IOActivity
4288
+ const ReadOptions read_options;
4235
4289
  uint64_t number;
4236
4290
  FileType type;
4237
4291
  WalFileType log_type;
@@ -4311,7 +4365,8 @@ Status DBImpl::DeleteFile(std::string name) {
4311
4365
  edit.SetColumnFamily(cfd->GetID());
4312
4366
  edit.DeleteFile(level, number);
4313
4367
  status = versions_->LogAndApply(cfd, *cfd->GetLatestMutableCFOptions(),
4314
- &edit, &mutex_, directories_.GetDbDir());
4368
+ read_options, &edit, &mutex_,
4369
+ directories_.GetDbDir());
4315
4370
  if (status.ok()) {
4316
4371
  InstallSuperVersionAndScheduleWork(cfd,
4317
4372
  &job_context.superversion_contexts[0],
@@ -4333,6 +4388,8 @@ Status DBImpl::DeleteFile(std::string name) {
4333
4388
  Status DBImpl::DeleteFilesInRanges(ColumnFamilyHandle* column_family,
4334
4389
  const RangePtr* ranges, size_t n,
4335
4390
  bool include_end) {
4391
+ // TODO: plumb Env::IOActivity
4392
+ const ReadOptions read_options;
4336
4393
  Status status = Status::OK();
4337
4394
  auto cfh = static_cast_with_check<ColumnFamilyHandleImpl>(column_family);
4338
4395
  ColumnFamilyData* cfd = cfh->cfd();
@@ -4398,7 +4455,8 @@ Status DBImpl::DeleteFilesInRanges(ColumnFamilyHandle* column_family,
4398
4455
  }
4399
4456
  input_version->Ref();
4400
4457
  status = versions_->LogAndApply(cfd, *cfd->GetLatestMutableCFOptions(),
4401
- &edit, &mutex_, directories_.GetDbDir());
4458
+ read_options, &edit, &mutex_,
4459
+ directories_.GetDbDir());
4402
4460
  if (status.ok()) {
4403
4461
  InstallSuperVersionAndScheduleWork(cfd,
4404
4462
  &job_context.superversion_contexts[0],
@@ -4464,7 +4522,6 @@ void DBImpl::GetAllColumnFamilyMetaData(
4464
4522
  }
4465
4523
  }
4466
4524
 
4467
-
4468
4525
  Status DBImpl::CheckConsistency() {
4469
4526
  mutex_.AssertHeld();
4470
4527
  std::vector<LiveFileMetaData> metadata;
@@ -4855,6 +4912,15 @@ Status DBImpl::WriteOptionsFile(bool need_mutex_lock,
4855
4912
  if (s.ok()) {
4856
4913
  s = RenameTempFileToOptionsFile(file_name);
4857
4914
  }
4915
+
4916
+ if (!s.ok() && GetEnv()->FileExists(file_name).ok()) {
4917
+ if (!GetEnv()->DeleteFile(file_name).ok()) {
4918
+ ROCKS_LOG_WARN(immutable_db_options_.info_log,
4919
+ "Unable to delete temp options file %s",
4920
+ file_name.c_str());
4921
+ }
4922
+ }
4923
+
4858
4924
  // restore lock
4859
4925
  if (!need_mutex_lock) {
4860
4926
  mutex_.Lock();
@@ -5034,6 +5100,7 @@ Status DBImpl::GetLatestSequenceForKey(
5034
5100
  MergeContext merge_context;
5035
5101
  SequenceNumber max_covering_tombstone_seq = 0;
5036
5102
 
5103
+ // TODO: plumb Env::IOActivity
5037
5104
  ReadOptions read_options;
5038
5105
  SequenceNumber current_seq = versions_->LastSequence();
5039
5106
 
@@ -5189,6 +5256,8 @@ Status DBImpl::IngestExternalFile(
5189
5256
 
5190
5257
  Status DBImpl::IngestExternalFiles(
5191
5258
  const std::vector<IngestExternalFileArg>& args) {
5259
+ // TODO: plumb Env::IOActivity
5260
+ const ReadOptions read_options;
5192
5261
  if (args.empty()) {
5193
5262
  return Status::InvalidArgument("ingestion arg list is empty");
5194
5263
  }
@@ -5406,9 +5475,9 @@ Status DBImpl::IngestExternalFiles(
5406
5475
  }
5407
5476
  assert(0 == num_entries);
5408
5477
  }
5409
- status =
5410
- versions_->LogAndApply(cfds_to_commit, mutable_cf_options_list,
5411
- edit_lists, &mutex_, directories_.GetDbDir());
5478
+ status = versions_->LogAndApply(cfds_to_commit, mutable_cf_options_list,
5479
+ read_options, edit_lists, &mutex_,
5480
+ directories_.GetDbDir());
5412
5481
  // It is safe to update VersionSet last seqno here after LogAndApply since
5413
5482
  // LogAndApply persists last sequence number from VersionEdits,
5414
5483
  // which are from file's largest seqno and not from VersionSet.
@@ -5509,6 +5578,8 @@ Status DBImpl::CreateColumnFamilyWithImport(
5509
5578
  const ExportImportFilesMetaData& metadata, ColumnFamilyHandle** handle) {
5510
5579
  assert(handle != nullptr);
5511
5580
  assert(*handle == nullptr);
5581
+ // TODO: plumb Env::IOActivity
5582
+ const ReadOptions read_options;
5512
5583
  std::string cf_comparator_name = options.comparator->Name();
5513
5584
  if (cf_comparator_name != metadata.db_comparator_name) {
5514
5585
  return Status::InvalidArgument("Comparator name mismatch");
@@ -5550,8 +5621,9 @@ Status DBImpl::CreateColumnFamilyWithImport(
5550
5621
  // file, we have to make sure the file number will never being reused.
5551
5622
  next_file_number = versions_->FetchAddFileNumber(metadata.files.size());
5552
5623
  auto cf_options = cfd->GetLatestMutableCFOptions();
5553
- status = versions_->LogAndApply(cfd, *cf_options, &dummy_edit, &mutex_,
5554
- directories_.GetDbDir());
5624
+ status =
5625
+ versions_->LogAndApply(cfd, *cf_options, read_options, &dummy_edit,
5626
+ &mutex_, directories_.GetDbDir());
5555
5627
  if (status.ok()) {
5556
5628
  InstallSuperVersionAndScheduleWork(cfd, &dummy_sv_ctx, *cf_options);
5557
5629
  }
@@ -5587,8 +5659,9 @@ Status DBImpl::CreateColumnFamilyWithImport(
5587
5659
  // Install job edit [Mutex will be unlocked here]
5588
5660
  if (status.ok()) {
5589
5661
  auto cf_options = cfd->GetLatestMutableCFOptions();
5590
- status = versions_->LogAndApply(cfd, *cf_options, import_job.edit(),
5591
- &mutex_, directories_.GetDbDir());
5662
+ status = versions_->LogAndApply(cfd, *cf_options, read_options,
5663
+ import_job.edit(), &mutex_,
5664
+ directories_.GetDbDir());
5592
5665
  if (status.ok()) {
5593
5666
  InstallSuperVersionAndScheduleWork(cfd, &sv_context, *cf_options);
5594
5667
  }
@@ -5631,6 +5704,81 @@ Status DBImpl::CreateColumnFamilyWithImport(
5631
5704
  return status;
5632
5705
  }
5633
5706
 
5707
+ Status DBImpl::ClipColumnFamily(ColumnFamilyHandle* column_family,
5708
+ const Slice& begin_key, const Slice& end_key) {
5709
+ assert(column_family);
5710
+ Status status;
5711
+ // Flush memtable
5712
+ FlushOptions flush_opts;
5713
+ flush_opts.allow_write_stall = true;
5714
+ auto* cfd =
5715
+ static_cast_with_check<ColumnFamilyHandleImpl>(column_family)->cfd();
5716
+ if (immutable_db_options_.atomic_flush) {
5717
+ status = AtomicFlushMemTables(flush_opts, FlushReason::kDeleteFiles,
5718
+ {} /* provided_candidate_cfds */,
5719
+ false /* entered_write_thread */);
5720
+ } else {
5721
+ status = FlushMemTable(cfd, flush_opts, FlushReason::kDeleteFiles,
5722
+ false /* entered_write_thread */);
5723
+ }
5724
+
5725
+ if (status.ok()) {
5726
+ // DeleteFilesInRanges non-overlap files except L0
5727
+ std::vector<RangePtr> ranges;
5728
+ ranges.push_back(RangePtr(nullptr, &begin_key));
5729
+ ranges.push_back(RangePtr(&end_key, nullptr));
5730
+ status = DeleteFilesInRanges(column_family, ranges.data(), ranges.size());
5731
+ }
5732
+
5733
+ // DeleteRange the remaining overlapping keys
5734
+ bool empty_after_delete = false;
5735
+ if (status.ok()) {
5736
+ Slice smallest_user_key, largest_user_key;
5737
+ {
5738
+ // Lock db mutex
5739
+ InstrumentedMutexLock l(&mutex_);
5740
+ cfd->current()->GetSstFilesBoundaryKeys(&smallest_user_key,
5741
+ &largest_user_key);
5742
+ }
5743
+ // all the files has been deleted after DeleteFilesInRanges;
5744
+ if (smallest_user_key.empty() && largest_user_key.empty()) {
5745
+ empty_after_delete = true;
5746
+ } else {
5747
+ const Comparator* const ucmp = column_family->GetComparator();
5748
+ WriteOptions wo;
5749
+ // Delete [smallest_user_key, clip_begin_key)
5750
+ if (ucmp->Compare(smallest_user_key, begin_key) < 0) {
5751
+ status = DeleteRange(wo, column_family, smallest_user_key, begin_key);
5752
+ }
5753
+
5754
+ if (status.ok()) {
5755
+ // Delete [clip_end_key, largest_use_key]
5756
+ if (ucmp->Compare(end_key, largest_user_key) < 0) {
5757
+ status = DeleteRange(wo, column_family, end_key, largest_user_key);
5758
+ if (status.ok()) {
5759
+ status = Delete(wo, column_family, largest_user_key);
5760
+ }
5761
+ }
5762
+ }
5763
+ }
5764
+ }
5765
+
5766
+ if (status.ok() && !empty_after_delete) {
5767
+ // CompactRange delete all the tombstones
5768
+ CompactRangeOptions compact_options;
5769
+ compact_options.exclusive_manual_compaction = true;
5770
+ compact_options.bottommost_level_compaction =
5771
+ BottommostLevelCompaction::kForceOptimized;
5772
+ // We could just compact the ranges [null, clip_begin_key] and
5773
+ // [clip_end_key, null]. But due to how manual compaction calculates the
5774
+ // last level to compact to and that range tombstones are not dropped
5775
+ // during non-bottommost compactions, calling CompactRange() on these two
5776
+ // ranges may not clear all range tombstones.
5777
+ status = CompactRange(compact_options, nullptr, nullptr);
5778
+ }
5779
+ return status;
5780
+ }
5781
+
5634
5782
  Status DBImpl::VerifyFileChecksums(const ReadOptions& read_options) {
5635
5783
  return VerifyChecksumInternal(read_options, /*use_file_checksum=*/true);
5636
5784
  }
@@ -5648,6 +5796,12 @@ Status DBImpl::VerifyChecksumInternal(const ReadOptions& read_options,
5648
5796
 
5649
5797
  Status s;
5650
5798
 
5799
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
5800
+ s = Status::InvalidArgument(
5801
+ "Cannot verify file checksum with `ReadOptions::io_activity` != "
5802
+ "`Env::IOActivity::kUnknown`");
5803
+ return s;
5804
+ }
5651
5805
  if (use_file_checksum) {
5652
5806
  FileChecksumGenFactory* const file_checksum_gen_factory =
5653
5807
  immutable_db_options_.file_checksum_gen_factory.get();
@@ -5761,6 +5915,12 @@ Status DBImpl::VerifyFullFileChecksum(const std::string& file_checksum_expected,
5761
5915
  const std::string& func_name_expected,
5762
5916
  const std::string& fname,
5763
5917
  const ReadOptions& read_options) {
5918
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
5919
+ return Status::InvalidArgument(
5920
+ "Cannot call VerifyChecksum with `ReadOptions::io_activity` != "
5921
+ "`Env::IOActivity::kUnknown`");
5922
+ }
5923
+
5764
5924
  Status s;
5765
5925
  if (file_checksum_expected == kUnknownFileChecksum) {
5766
5926
  return s;
@@ -5893,6 +6053,8 @@ Status DBImpl::ReserveFileNumbersBeforeIngestion(
5893
6053
  ColumnFamilyData* cfd, uint64_t num,
5894
6054
  std::unique_ptr<std::list<uint64_t>::iterator>& pending_output_elem,
5895
6055
  uint64_t* next_file_number) {
6056
+ // TODO: plumb Env::IOActivity
6057
+ const ReadOptions read_options;
5896
6058
  Status s;
5897
6059
  SuperVersionContext dummy_sv_ctx(true /* create_superversion */);
5898
6060
  assert(nullptr != next_file_number);
@@ -5910,8 +6072,8 @@ Status DBImpl::ReserveFileNumbersBeforeIngestion(
5910
6072
  // reuse the file number that has already assigned to the internal file,
5911
6073
  // and this will overwrite the external file. To protect the external
5912
6074
  // file, we have to make sure the file number will never being reused.
5913
- s = versions_->LogAndApply(cfd, *cf_options, &dummy_edit, &mutex_,
5914
- directories_.GetDbDir());
6075
+ s = versions_->LogAndApply(cfd, *cf_options, read_options, &dummy_edit,
6076
+ &mutex_, directories_.GetDbDir());
5915
6077
  if (s.ok()) {
5916
6078
  InstallSuperVersionAndScheduleWork(cfd, &dummy_sv_ctx, *cf_options);
5917
6079
  }
@@ -534,6 +534,11 @@ class DBImpl : public DB {
534
534
  const ExportImportFilesMetaData& metadata,
535
535
  ColumnFamilyHandle** handle) override;
536
536
 
537
+ using DB::ClipColumnFamily;
538
+ virtual Status ClipColumnFamily(ColumnFamilyHandle* column_family,
539
+ const Slice& begin_key,
540
+ const Slice& end_key) override;
541
+
537
542
  using DB::VerifyFileChecksums;
538
543
  Status VerifyFileChecksums(const ReadOptions& read_options) override;
539
544
 
@@ -734,13 +739,17 @@ class DBImpl : public DB {
734
739
  // max_file_num_to_ignore allows bottom level compaction to filter out newly
735
740
  // compacted SST files. Setting max_file_num_to_ignore to kMaxUint64 will
736
741
  // disable the filtering
742
+ // If `final_output_level` is not nullptr, it is set to manual compaction's
743
+ // output level if returned status is OK, and it may or may not be set to
744
+ // manual compaction's output level if returned status is not OK.
737
745
  Status RunManualCompaction(ColumnFamilyData* cfd, int input_level,
738
746
  int output_level,
739
747
  const CompactRangeOptions& compact_range_options,
740
748
  const Slice* begin, const Slice* end,
741
749
  bool exclusive, bool disallow_trivial_move,
742
750
  uint64_t max_file_num_to_ignore,
743
- const std::string& trim_ts);
751
+ const std::string& trim_ts,
752
+ int* final_output_level = nullptr);
744
753
 
745
754
  // Return an internal iterator over the current state of the database.
746
755
  // The keys of this iterator are internal keys (see format.h).
@@ -1049,10 +1058,16 @@ class DBImpl : public DB {
1049
1058
 
1050
1059
  VersionSet* GetVersionSet() const { return versions_.get(); }
1051
1060
 
1052
- // Wait for any compaction
1053
- // We add a bool parameter to wait for unscheduledCompactions_ == 0, but this
1054
- // is only for the special test of CancelledCompactions
1055
- Status WaitForCompact(bool waitUnscheduled = false);
1061
+ // Wait for all flush and compactions jobs to finish. Jobs to wait include the
1062
+ // unscheduled (queued, but not scheduled yet). If the db is shutting down,
1063
+ // Status::ShutdownInProgress will be returned. If PauseBackgroundWork() was
1064
+ // called prior to this, this may potentially wait for unscheduled jobs
1065
+ // indefinitely. abort_on_pause can be set to true to abort, and
1066
+ // Status::Aborted will be returned immediately. This may also never return if
1067
+ // there's sufficient ongoing writes that keeps flush and compaction going
1068
+ // without stopping. The user would have to cease all the writes to DB to make
1069
+ // this eventually return in a stable state.
1070
+ Status WaitForCompact(bool abort_on_pause = false);
1056
1071
 
1057
1072
  #ifndef NDEBUG
1058
1073
  // Compact any files in the named level that overlap [*begin, *end]
@@ -1092,9 +1107,7 @@ class DBImpl : public DB {
1092
1107
  Status TEST_WaitForFlushMemTable(ColumnFamilyHandle* column_family = nullptr);
1093
1108
 
1094
1109
  // Wait for any compaction
1095
- // We add a bool parameter to wait for unscheduledCompactions_ == 0, but this
1096
- // is only for the special test of CancelledCompactions
1097
- Status TEST_WaitForCompact(bool waitUnscheduled = false);
1110
+ Status TEST_WaitForCompact(bool abort_on_pause = false);
1098
1111
 
1099
1112
  // Wait for any background purge
1100
1113
  Status TEST_WaitForPurge();
@@ -2123,7 +2136,7 @@ class DBImpl : public DB {
2123
2136
 
2124
2137
  // helper function to call after some of the logs_ were synced
2125
2138
  void MarkLogsSynced(uint64_t up_to, bool synced_dir, VersionEdit* edit);
2126
- Status ApplyWALToManifest(VersionEdit* edit);
2139
+ Status ApplyWALToManifest(const ReadOptions& read_options, VersionEdit* edit);
2127
2140
  // WALs with log number up to up_to are not synced successfully.
2128
2141
  void MarkLogsNotSynced(uint64_t up_to);
2129
2142
 
@@ -2306,7 +2319,7 @@ class DBImpl : public DB {
2306
2319
  // logfile_number_. With two_write_queues it also protects alive_log_files_,
2307
2320
  // and log_empty_. Refer to the definition of each variable below for more
2308
2321
  // details.
2309
- // Note: to avoid dealock, if needed to acquire both log_write_mutex_ and
2322
+ // Note: to avoid deadlock, if needed to acquire both log_write_mutex_ and
2310
2323
  // mutex_, the order should be first mutex_ and then log_write_mutex_.
2311
2324
  InstrumentedMutex log_write_mutex_;
2312
2325