@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
@@ -4064,6 +4064,8 @@ uint64_t rocksdb_perfcontext_metric(rocksdb_perfcontext_t* context,
4064
4064
  return rep->blob_decompress_time;
4065
4065
  case rocksdb_internal_range_del_reseek_count:
4066
4066
  return rep->internal_range_del_reseek_count;
4067
+ case rocksdb_block_read_cpu_time:
4068
+ return rep->block_read_cpu_time;
4067
4069
  default:
4068
4070
  break;
4069
4071
  }
@@ -4679,7 +4681,7 @@ rocksdb_cache_t* rocksdb_cache_create_lru_with_strict_capacity_limit(
4679
4681
  }
4680
4682
 
4681
4683
  rocksdb_cache_t* rocksdb_cache_create_lru_opts(
4682
- rocksdb_lru_cache_options_t* opt) {
4684
+ const rocksdb_lru_cache_options_t* opt) {
4683
4685
  rocksdb_cache_t* c = new rocksdb_cache_t;
4684
4686
  c->rep = NewLRUCache(opt->rep);
4685
4687
  return c;
@@ -4726,7 +4728,7 @@ rocksdb_cache_t* rocksdb_cache_create_hyper_clock(
4726
4728
  }
4727
4729
 
4728
4730
  rocksdb_cache_t* rocksdb_cache_create_hyper_clock_opts(
4729
- rocksdb_hyper_clock_cache_options_t* opts) {
4731
+ const rocksdb_hyper_clock_cache_options_t* opts) {
4730
4732
  rocksdb_cache_t* c = new rocksdb_cache_t;
4731
4733
  c->rep = opts->rep.MakeSharedCache();
4732
4734
  return c;
@@ -4742,18 +4744,26 @@ void rocksdb_cache_set_capacity(rocksdb_cache_t* cache, size_t capacity) {
4742
4744
  cache->rep->SetCapacity(capacity);
4743
4745
  }
4744
4746
 
4745
- size_t rocksdb_cache_get_capacity(rocksdb_cache_t* cache) {
4747
+ size_t rocksdb_cache_get_capacity(const rocksdb_cache_t* cache) {
4746
4748
  return cache->rep->GetCapacity();
4747
4749
  }
4748
4750
 
4749
- size_t rocksdb_cache_get_usage(rocksdb_cache_t* cache) {
4751
+ size_t rocksdb_cache_get_usage(const rocksdb_cache_t* cache) {
4750
4752
  return cache->rep->GetUsage();
4751
4753
  }
4752
4754
 
4753
- size_t rocksdb_cache_get_pinned_usage(rocksdb_cache_t* cache) {
4755
+ size_t rocksdb_cache_get_pinned_usage(const rocksdb_cache_t* cache) {
4754
4756
  return cache->rep->GetPinnedUsage();
4755
4757
  }
4756
4758
 
4759
+ size_t rocksdb_cache_get_table_address_count(const rocksdb_cache_t* cache) {
4760
+ return cache->rep->GetTableAddressCount();
4761
+ }
4762
+
4763
+ size_t rocksdb_cache_get_occupancy_count(const rocksdb_cache_t* cache) {
4764
+ return cache->rep->GetOccupancyCount();
4765
+ }
4766
+
4757
4767
  rocksdb_dbpath_t* rocksdb_dbpath_create(const char* path,
4758
4768
  uint64_t target_size) {
4759
4769
  rocksdb_dbpath_t* result = new rocksdb_dbpath_t;
@@ -5853,6 +5863,35 @@ void rocksdb_transaction_multi_get(rocksdb_transaction_t* txn,
5853
5863
  }
5854
5864
  }
5855
5865
 
5866
+ void rocksdb_transaction_multi_get_for_update(
5867
+ rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
5868
+ size_t num_keys, const char* const* keys_list,
5869
+ const size_t* keys_list_sizes, char** values_list,
5870
+ size_t* values_list_sizes, char** errs) {
5871
+ std::vector<Slice> keys(num_keys);
5872
+ for (size_t i = 0; i < num_keys; i++) {
5873
+ keys[i] = Slice(keys_list[i], keys_list_sizes[i]);
5874
+ }
5875
+ std::vector<std::string> values(num_keys);
5876
+ std::vector<Status> statuses =
5877
+ txn->rep->MultiGetForUpdate(options->rep, keys, &values);
5878
+ for (size_t i = 0; i < num_keys; i++) {
5879
+ if (statuses[i].ok()) {
5880
+ values_list[i] = CopyString(values[i]);
5881
+ values_list_sizes[i] = values[i].size();
5882
+ errs[i] = nullptr;
5883
+ } else {
5884
+ values_list[i] = nullptr;
5885
+ values_list_sizes[i] = 0;
5886
+ if (!statuses[i].IsNotFound()) {
5887
+ errs[i] = strdup(statuses[i].ToString().c_str());
5888
+ } else {
5889
+ errs[i] = nullptr;
5890
+ }
5891
+ }
5892
+ }
5893
+ }
5894
+
5856
5895
  void rocksdb_transaction_multi_get_cf(
5857
5896
  rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
5858
5897
  const rocksdb_column_family_handle_t* const* column_families,
@@ -5885,6 +5924,38 @@ void rocksdb_transaction_multi_get_cf(
5885
5924
  }
5886
5925
  }
5887
5926
 
5927
+ void rocksdb_transaction_multi_get_for_update_cf(
5928
+ rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
5929
+ const rocksdb_column_family_handle_t* const* column_families,
5930
+ size_t num_keys, const char* const* keys_list,
5931
+ const size_t* keys_list_sizes, char** values_list,
5932
+ size_t* values_list_sizes, char** errs) {
5933
+ std::vector<Slice> keys(num_keys);
5934
+ std::vector<ColumnFamilyHandle*> cfs(num_keys);
5935
+ for (size_t i = 0; i < num_keys; i++) {
5936
+ keys[i] = Slice(keys_list[i], keys_list_sizes[i]);
5937
+ cfs[i] = column_families[i]->rep;
5938
+ }
5939
+ std::vector<std::string> values(num_keys);
5940
+ std::vector<Status> statuses =
5941
+ txn->rep->MultiGetForUpdate(options->rep, cfs, keys, &values);
5942
+ for (size_t i = 0; i < num_keys; i++) {
5943
+ if (statuses[i].ok()) {
5944
+ values_list[i] = CopyString(values[i]);
5945
+ values_list_sizes[i] = values[i].size();
5946
+ errs[i] = nullptr;
5947
+ } else {
5948
+ values_list[i] = nullptr;
5949
+ values_list_sizes[i] = 0;
5950
+ if (!statuses[i].IsNotFound()) {
5951
+ errs[i] = strdup(statuses[i].ToString().c_str());
5952
+ } else {
5953
+ errs[i] = nullptr;
5954
+ }
5955
+ }
5956
+ }
5957
+ }
5958
+
5888
5959
  // Read a key outside a transaction
5889
5960
  char* rocksdb_transactiondb_get(rocksdb_transactiondb_t* txn_db,
5890
5961
  const rocksdb_readoptions_t* options,
@@ -488,6 +488,19 @@ static void CheckTxnPinGetCF(rocksdb_transaction_t* txn,
488
488
  rocksdb_pinnableslice_destroy(p);
489
489
  }
490
490
 
491
+ static void CheckTxnGetForUpdate(rocksdb_transaction_t* txn,
492
+ const rocksdb_readoptions_t* options,
493
+ const char* key, const char* expected) {
494
+ char* err = NULL;
495
+ size_t val_len;
496
+ char* val;
497
+ val = rocksdb_transaction_get_for_update(txn, options, key, strlen(key),
498
+ &val_len, true, &err);
499
+ CheckNoError(err);
500
+ CheckEqual(expected, val, val_len);
501
+ Free(&val);
502
+ }
503
+
491
504
  static void CheckTxnDBGet(rocksdb_transactiondb_t* txn_db,
492
505
  const rocksdb_readoptions_t* options, const char* key,
493
506
  const char* expected) {
@@ -515,6 +528,20 @@ static void CheckTxnDBGetCF(rocksdb_transactiondb_t* txn_db,
515
528
  Free(&val);
516
529
  }
517
530
 
531
+ static void CheckTxnGetForUpdateCF(
532
+ rocksdb_transaction_t* txn, const rocksdb_readoptions_t* options,
533
+ rocksdb_column_family_handle_t* column_family, const char* key,
534
+ const char* expected) {
535
+ char* err = NULL;
536
+ size_t val_len;
537
+ char* val;
538
+ val = rocksdb_transaction_get_for_update_cf(
539
+ txn, options, column_family, key, strlen(key), &val_len, true, &err);
540
+ CheckNoError(err);
541
+ CheckEqual(expected, val, val_len);
542
+ Free(&val);
543
+ }
544
+
518
545
  static void CheckTxnDBPinGet(rocksdb_transactiondb_t* txn_db,
519
546
  const rocksdb_readoptions_t* options,
520
547
  const char* key, const char* expected) {
@@ -3204,6 +3231,120 @@ int main(int argc, char** argv) {
3204
3231
  rocksdb_transactiondb_options_destroy(txn_db_options);
3205
3232
  }
3206
3233
 
3234
+ StartPhase("transactions_multi_get_for_update");
3235
+ {
3236
+ // open a TransactionDB
3237
+ txn_db_options = rocksdb_transactiondb_options_create();
3238
+ rocksdb_transactiondb_options_set_transaction_lock_timeout(txn_db_options,
3239
+ 0);
3240
+ txn_options = rocksdb_transaction_options_create();
3241
+ rocksdb_options_set_create_if_missing(options, 1);
3242
+ txn_db = rocksdb_transactiondb_open(options, txn_db_options, dbname, &err);
3243
+ CheckNoError(err);
3244
+
3245
+ rocksdb_transactiondb_put(txn_db, woptions, "foo", 3, "hey", 3, &err);
3246
+ CheckNoError(err);
3247
+ rocksdb_transactiondb_put(txn_db, woptions, "bar", 3, "hello", 5, &err);
3248
+ CheckNoError(err);
3249
+
3250
+ // begin transactions
3251
+ txn = rocksdb_transaction_begin(txn_db, woptions, txn_options, NULL);
3252
+ rocksdb_transaction_t* txn2 =
3253
+ rocksdb_transaction_begin(txn_db, woptions, txn_options, NULL);
3254
+
3255
+ // multi get
3256
+ {
3257
+ const char* keys[2] = {"foo", "bar"};
3258
+ const size_t keys_sizes[2] = {3, 3};
3259
+ char* vals[2];
3260
+ size_t vals_sizes[2];
3261
+ char* errs[2];
3262
+ const char* expected[2] = {"hey", "hello"};
3263
+ rocksdb_transaction_multi_get_for_update(
3264
+ txn, roptions, 2, keys, keys_sizes, vals, vals_sizes, errs);
3265
+ CheckMultiGetValues(2, vals, vals_sizes, errs, expected);
3266
+ }
3267
+
3268
+ char* conflict_err = NULL;
3269
+ size_t val_len;
3270
+ rocksdb_transaction_get_for_update(txn2, roptions, "foo", 3, &val_len, true,
3271
+ &conflict_err);
3272
+ // get-for-update conflict
3273
+ CheckCondition(conflict_err != NULL);
3274
+ Free(&conflict_err);
3275
+
3276
+ // commit
3277
+ rocksdb_transaction_commit(txn, &err);
3278
+ CheckNoError(err);
3279
+
3280
+ // should work after first tx is commited
3281
+ CheckTxnGetForUpdate(txn2, roptions, "foo", "hey");
3282
+
3283
+ // commit the second one
3284
+ rocksdb_transaction_commit(txn2, &err);
3285
+ CheckNoError(err);
3286
+
3287
+ // destroy txns
3288
+ rocksdb_transaction_destroy(txn);
3289
+ rocksdb_transaction_destroy(txn2);
3290
+
3291
+ // same for column families
3292
+
3293
+ rocksdb_column_family_handle_t* cfh;
3294
+ cfh = rocksdb_transactiondb_create_column_family(txn_db, options,
3295
+ "txn_db_cf", &err);
3296
+ CheckNoError(err);
3297
+
3298
+ rocksdb_transactiondb_put_cf(txn_db, woptions, cfh, "cf_foo", 6, "cf_hello",
3299
+ 8, &err);
3300
+ CheckNoError(err);
3301
+ rocksdb_transactiondb_put_cf(txn_db, woptions, cfh, "cf_bar", 6, "cf_hey",
3302
+ 6, &err);
3303
+ CheckNoError(err);
3304
+
3305
+ txn = rocksdb_transaction_begin(txn_db, woptions, txn_options, NULL);
3306
+ txn2 = rocksdb_transaction_begin(txn_db, woptions, txn_options, NULL);
3307
+
3308
+ {
3309
+ const rocksdb_column_family_handle_t* get_handles[2] = {cfh, cfh};
3310
+ const char* keys[2] = {"cf_foo", "cf_bar"};
3311
+ const size_t keys_sizes[2] = {6, 6};
3312
+ char* vals[2];
3313
+ size_t vals_sizes[2];
3314
+ char* errs[2];
3315
+ const char* expected[2] = {"cf_hello", "cf_hey"};
3316
+ rocksdb_transaction_multi_get_for_update_cf(txn, roptions, get_handles, 2,
3317
+ keys, keys_sizes, vals,
3318
+ vals_sizes, errs);
3319
+ CheckMultiGetValues(2, vals, vals_sizes, errs, expected);
3320
+ }
3321
+
3322
+ char* conflict_err_cf = NULL;
3323
+ size_t val_len_cf;
3324
+ rocksdb_transaction_get_for_update_cf(txn2, roptions, cfh, "cf_foo", 6,
3325
+ &val_len_cf, true, &conflict_err_cf);
3326
+ CheckCondition(conflict_err_cf != NULL);
3327
+ Free(&conflict_err_cf);
3328
+
3329
+ rocksdb_transaction_commit(txn, &err);
3330
+ CheckNoError(err);
3331
+
3332
+ CheckTxnGetForUpdateCF(txn2, roptions, cfh, "cf_foo", "cf_hello");
3333
+
3334
+ rocksdb_transaction_commit(txn2, &err);
3335
+ CheckNoError(err);
3336
+
3337
+ // close and destroy
3338
+ rocksdb_column_family_handle_destroy(cfh);
3339
+ rocksdb_transaction_destroy(txn);
3340
+ rocksdb_transaction_destroy(txn2);
3341
+ rocksdb_transactiondb_close(txn_db);
3342
+ rocksdb_destroy_db(options, dbname, &err);
3343
+ CheckNoError(err);
3344
+ rocksdb_transaction_options_destroy(txn_options);
3345
+ rocksdb_transactiondb_options_destroy(txn_db_options);
3346
+ }
3347
+
3207
3348
  StartPhase("optimistic_transactions");
3208
3349
  {
3209
3350
  rocksdb_options_t* db_options = rocksdb_options_create();
@@ -1141,6 +1141,7 @@ Status ColumnFamilyData::RangesOverlapWithMemtables(
1141
1141
  *overlap = false;
1142
1142
  // Create an InternalIterator over all unflushed memtables
1143
1143
  Arena arena;
1144
+ // TODO: plumb Env::IOActivity
1144
1145
  ReadOptions read_opts;
1145
1146
  read_opts.total_order_seek = true;
1146
1147
  MergeIteratorBuilder merge_iter_builder(&internal_comparator_, &arena);
@@ -1427,6 +1428,37 @@ Status ColumnFamilyData::ValidateOptions(
1427
1428
  "Memtable per key-value checksum protection only supports 0, 1, 2, 4 "
1428
1429
  "or 8 bytes per key.");
1429
1430
  }
1431
+ if (std::find(supported.begin(), supported.end(),
1432
+ cf_options.block_protection_bytes_per_key) == supported.end()) {
1433
+ return Status::NotSupported(
1434
+ "Block per key-value checksum protection only supports 0, 1, 2, 4 "
1435
+ "or 8 bytes per key.");
1436
+ }
1437
+
1438
+ if (!cf_options.compaction_options_fifo.file_temperature_age_thresholds
1439
+ .empty()) {
1440
+ if (cf_options.compaction_style != kCompactionStyleFIFO) {
1441
+ return Status::NotSupported(
1442
+ "Option file_temperature_age_thresholds only supports FIFO "
1443
+ "compaction.");
1444
+ } else if (cf_options.num_levels > 1) {
1445
+ return Status::NotSupported(
1446
+ "Option file_temperature_age_thresholds is only supported when "
1447
+ "num_levels = 1.");
1448
+ } else {
1449
+ const auto& ages =
1450
+ cf_options.compaction_options_fifo.file_temperature_age_thresholds;
1451
+ assert(ages.size() >= 1);
1452
+ // check that age is sorted
1453
+ for (size_t i = 0; i < ages.size() - 1; ++i) {
1454
+ if (ages[i].age >= ages[i + 1].age) {
1455
+ return Status::NotSupported(
1456
+ "Option file_temperature_age_thresholds requires elements to be "
1457
+ "sorted in increasing order with respect to `age` field.");
1458
+ }
1459
+ }
1460
+ }
1461
+ }
1430
1462
  return s;
1431
1463
  }
1432
1464
 
@@ -120,7 +120,9 @@ TEST_F(CompactFilesTest, L0ConflictsFiles) {
120
120
  TEST_F(CompactFilesTest, MultipleLevel) {
121
121
  Options options;
122
122
  options.create_if_missing = true;
123
- options.level_compaction_dynamic_level_bytes = true;
123
+ // Otherwise background compaction can happen to
124
+ // drain unnecessary level
125
+ options.level_compaction_dynamic_level_bytes = false;
124
126
  options.num_levels = 6;
125
127
  // Add listener
126
128
  FlushedFileCollector* collector = new FlushedFileCollector();
@@ -181,7 +183,6 @@ TEST_F(CompactFilesTest, MultipleLevel) {
181
183
  for (int invalid_output_level = 0; invalid_output_level < 5;
182
184
  invalid_output_level++) {
183
185
  s = db->CompactFiles(CompactionOptions(), files, invalid_output_level);
184
- std::cout << s.ToString() << std::endl;
185
186
  ASSERT_TRUE(s.IsInvalidArgument());
186
187
  }
187
188
 
@@ -465,6 +465,11 @@ bool Compaction::IsTrivialMove() const {
465
465
  return false;
466
466
  }
467
467
 
468
+ if (compaction_reason_ == CompactionReason::kChangeTemperature) {
469
+ // Changing temperature usually requires rewriting the file.
470
+ return false;
471
+ }
472
+
468
473
  // Used in universal compaction, where trivial move can be done if the
469
474
  // input files are non overlapping
470
475
  if ((mutable_cf_options_.compaction_options_universal.allow_trivial_move) &&
@@ -546,13 +546,16 @@ struct PerKeyPlacementContext {
546
546
  const Slice value;
547
547
  const SequenceNumber seq_num;
548
548
 
549
- bool output_to_penultimate_level;
549
+ bool& output_to_penultimate_level;
550
550
 
551
551
  PerKeyPlacementContext(int _level, Slice _key, Slice _value,
552
- SequenceNumber _seq_num)
553
- : level(_level), key(_key), value(_value), seq_num(_seq_num) {
554
- output_to_penultimate_level = false;
555
- }
552
+ SequenceNumber _seq_num,
553
+ bool& _output_to_penultimate_level)
554
+ : level(_level),
555
+ key(_key),
556
+ value(_value),
557
+ seq_num(_seq_num),
558
+ output_to_penultimate_level(_output_to_penultimate_level) {}
556
559
  };
557
560
  #endif /* !NDEBUG */
558
561
 
@@ -1201,17 +1201,7 @@ void CompactionIterator::GarbageCollectBlobIfNeeded() {
1201
1201
 
1202
1202
  void CompactionIterator::DecideOutputLevel() {
1203
1203
  assert(compaction_->SupportsPerKeyPlacement());
1204
- #ifndef NDEBUG
1205
- // Could be overridden by unittest
1206
- PerKeyPlacementContext context(level_, ikey_.user_key, value_,
1207
- ikey_.sequence);
1208
- TEST_SYNC_POINT_CALLBACK("CompactionIterator::PrepareOutput.context",
1209
- &context);
1210
- output_to_penultimate_level_ = context.output_to_penultimate_level;
1211
- #else
1212
1204
  output_to_penultimate_level_ = false;
1213
- #endif // NDEBUG
1214
-
1215
1205
  // if the key is newer than the cutoff sequence or within the earliest
1216
1206
  // snapshot, it should output to the penultimate level.
1217
1207
  if (ikey_.sequence > preclude_last_level_min_seqno_ ||
@@ -1219,6 +1209,17 @@ void CompactionIterator::DecideOutputLevel() {
1219
1209
  output_to_penultimate_level_ = true;
1220
1210
  }
1221
1211
 
1212
+ #ifndef NDEBUG
1213
+ // Could be overridden by unittest
1214
+ PerKeyPlacementContext context(level_, ikey_.user_key, value_, ikey_.sequence,
1215
+ output_to_penultimate_level_);
1216
+ TEST_SYNC_POINT_CALLBACK("CompactionIterator::PrepareOutput.context",
1217
+ &context);
1218
+ if (ikey_.sequence > earliest_snapshot_) {
1219
+ output_to_penultimate_level_ = true;
1220
+ }
1221
+ #endif // NDEBUG
1222
+
1222
1223
  if (output_to_penultimate_level_) {
1223
1224
  // If it's decided to output to the penultimate level, but unsafe to do so,
1224
1225
  // still output to the last level. For example, moving the data from a lower
@@ -1411,6 +1412,7 @@ std::unique_ptr<BlobFetcher> CompactionIterator::CreateBlobFetcherIfNeeded(
1411
1412
  }
1412
1413
 
1413
1414
  ReadOptions read_options;
1415
+ read_options.io_activity = Env::IOActivity::kCompaction;
1414
1416
  read_options.fill_cache = false;
1415
1417
 
1416
1418
  return std::unique_ptr<BlobFetcher>(new BlobFetcher(version, read_options));
@@ -192,8 +192,8 @@ CompactionJob::CompactionJob(
192
192
  assert(log_buffer_ != nullptr);
193
193
 
194
194
  const auto* cfd = compact_->compaction->column_family_data();
195
- ThreadStatusUtil::SetColumnFamily(cfd, cfd->ioptions()->env,
196
- db_options_.enable_thread_tracking);
195
+ ThreadStatusUtil::SetEnableTracking(db_options_.enable_thread_tracking);
196
+ ThreadStatusUtil::SetColumnFamily(cfd);
197
197
  ThreadStatusUtil::SetThreadOperation(ThreadStatus::OP_COMPACTION);
198
198
  ReportStartedCompaction(compaction);
199
199
  }
@@ -204,10 +204,6 @@ CompactionJob::~CompactionJob() {
204
204
  }
205
205
 
206
206
  void CompactionJob::ReportStartedCompaction(Compaction* compaction) {
207
- const auto* cfd = compact_->compaction->column_family_data();
208
- ThreadStatusUtil::SetColumnFamily(cfd, cfd->ioptions()->env,
209
- db_options_.enable_thread_tracking);
210
-
211
207
  ThreadStatusUtil::SetThreadOperationProperty(ThreadStatus::COMPACTION_JOB_ID,
212
208
  job_id_);
213
209
 
@@ -291,12 +287,14 @@ void CompactionJob::Prepare() {
291
287
  c->immutable_options()->preclude_last_level_data_seconds);
292
288
 
293
289
  if (preserve_time_duration > 0) {
290
+ const ReadOptions read_options(Env::IOActivity::kCompaction);
294
291
  // setup seqno_time_mapping_
295
292
  seqno_time_mapping_.SetMaxTimeDuration(preserve_time_duration);
296
293
  for (const auto& each_level : *c->inputs()) {
297
294
  for (const auto& fmd : each_level.files) {
298
295
  std::shared_ptr<const TableProperties> tp;
299
- Status s = cfd->current()->GetTableProperties(&tp, fmd, nullptr);
296
+ Status s =
297
+ cfd->current()->GetTableProperties(read_options, &tp, fmd, nullptr);
300
298
  if (s.ok()) {
301
299
  seqno_time_mapping_.Add(tp->seqno_to_time_mapping)
302
300
  .PermitUncheckedError();
@@ -472,7 +470,7 @@ void CompactionJob::GenSubcompactionBoundaries() {
472
470
  // overlap with N-1 other ranges. Since we requested a relatively large number
473
471
  // (128) of ranges from each input files, even N range overlapping would
474
472
  // cause relatively small inaccuracy.
475
-
473
+ const ReadOptions read_options(Env::IOActivity::kCompaction);
476
474
  auto* c = compact_->compaction;
477
475
  if (c->max_subcompactions() <= 1 &&
478
476
  !(c->immutable_options()->compaction_pri == kRoundRobin &&
@@ -506,7 +504,9 @@ void CompactionJob::GenSubcompactionBoundaries() {
506
504
  FileMetaData* f = flevel->files[i].file_metadata;
507
505
  std::vector<TableReader::Anchor> my_anchors;
508
506
  Status s = cfd->table_cache()->ApproximateKeyAnchors(
509
- ReadOptions(), icomp, *f, my_anchors);
507
+ read_options, icomp, *f,
508
+ c->mutable_cf_options()->block_protection_bytes_per_key,
509
+ my_anchors);
510
510
  if (!s.ok() || my_anchors.empty()) {
511
511
  my_anchors.emplace_back(f->largest.user_key(), f->fd.GetFileSize());
512
512
  }
@@ -722,11 +722,12 @@ Status CompactionJob::Run() {
722
722
  // use_direct_io_for_flush_and_compaction is true, we will regard this
723
723
  // verification as user reads since the goal is to cache it here for
724
724
  // further user reads
725
- ReadOptions read_options;
725
+ const ReadOptions verify_table_read_options(
726
+ Env::IOActivity::kCompaction);
726
727
  InternalIterator* iter = cfd->table_cache()->NewIterator(
727
- read_options, file_options_, cfd->internal_comparator(),
728
- files_output[file_idx]->meta, /*range_del_agg=*/nullptr,
729
- prefix_extractor,
728
+ verify_table_read_options, file_options_,
729
+ cfd->internal_comparator(), files_output[file_idx]->meta,
730
+ /*range_del_agg=*/nullptr, prefix_extractor,
730
731
  /*table_reader_ptr=*/nullptr,
731
732
  cfd->internal_stats()->GetFileReadHist(
732
733
  compact_->compaction->output_level()),
@@ -736,7 +737,9 @@ Status CompactionJob::Run() {
736
737
  *compact_->compaction->mutable_cf_options()),
737
738
  /*smallest_compaction_key=*/nullptr,
738
739
  /*largest_compaction_key=*/nullptr,
739
- /*allow_unprepared_value=*/false);
740
+ /*allow_unprepared_value=*/false,
741
+ compact_->compaction->mutable_cf_options()
742
+ ->block_protection_bytes_per_key);
740
743
  auto s = iter->status();
741
744
 
742
745
  if (s.ok() && paranoid_file_checks_) {
@@ -1032,7 +1035,6 @@ void CompactionJob::NotifyOnSubcompactionCompleted(
1032
1035
  void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
1033
1036
  assert(sub_compact);
1034
1037
  assert(sub_compact->compaction);
1035
-
1036
1038
  if (db_options_.compaction_service) {
1037
1039
  CompactionServiceJobStatus comp_status =
1038
1040
  ProcessKeyValueCompactionWithCompactionService(sub_compact);
@@ -1083,6 +1085,7 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
1083
1085
  read_options.verify_checksums = true;
1084
1086
  read_options.fill_cache = false;
1085
1087
  read_options.rate_limiter_priority = GetRateLimiterPriority();
1088
+ read_options.io_activity = Env::IOActivity::kCompaction;
1086
1089
  // Compaction iterators shouldn't be confined to a single prefix.
1087
1090
  // Compactions use Seek() for
1088
1091
  // (a) concurrent compactions,
@@ -1640,6 +1643,7 @@ Status CompactionJob::InstallCompactionResults(
1640
1643
 
1641
1644
  db_mutex_->AssertHeld();
1642
1645
 
1646
+ const ReadOptions read_options(Env::IOActivity::kCompaction);
1643
1647
  auto* compaction = compact_->compaction;
1644
1648
  assert(compaction);
1645
1649
 
@@ -1717,8 +1721,8 @@ Status CompactionJob::InstallCompactionResults(
1717
1721
  }
1718
1722
 
1719
1723
  return versions_->LogAndApply(compaction->column_family_data(),
1720
- mutable_cf_options, edit, db_mutex_,
1721
- db_directory_);
1724
+ mutable_cf_options, read_options, edit,
1725
+ db_mutex_, db_directory_);
1722
1726
  }
1723
1727
 
1724
1728
  void CompactionJob::RecordCompactionIOStats() {
@@ -24,7 +24,7 @@
24
24
  #include "db/write_batch_internal.h"
25
25
  #include "env/mock_env.h"
26
26
  #include "file/filename.h"
27
- #include "monitoring/statistics.h"
27
+ #include "monitoring/statistics_impl.h"
28
28
  #include "monitoring/thread_status_util.h"
29
29
  #include "port/stack_trace.h"
30
30
  #include "rocksdb/cache.h"
@@ -54,7 +54,7 @@
54
54
  #include "util/compression.h"
55
55
  #include "util/hash.h"
56
56
  #include "util/mutexlock.h"
57
- #include "util/rate_limiter.h"
57
+ #include "util/rate_limiter_impl.h"
58
58
  #include "util/string_util.h"
59
59
  #include "utilities/merge_operators.h"
60
60
 
@@ -373,7 +373,7 @@ class CompactionJobTestBase : public testing::Test {
373
373
  } else if (table_type_ == TableTypeForTest::kMockTable) {
374
374
  file_size = 10;
375
375
  EXPECT_OK(mock_table_factory_->CreateMockTable(
376
- env_, GenerateFileName(file_number), std::move(contents)));
376
+ env_, GenerateFileName(file_number), contents));
377
377
  } else {
378
378
  assert(false);
379
379
  }
@@ -386,12 +386,12 @@ class CompactionJobTestBase : public testing::Test {
386
386
  kUnknownFileCreationTime,
387
387
  versions_->GetColumnFamilySet()->GetDefault()->NewEpochNumber(),
388
388
  kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2,
389
- 0);
389
+ 0, 0);
390
390
 
391
391
  mutex_.Lock();
392
- EXPECT_OK(
393
- versions_->LogAndApply(versions_->GetColumnFamilySet()->GetDefault(),
394
- mutable_cf_options_, &edit, &mutex_, nullptr));
392
+ EXPECT_OK(versions_->LogAndApply(
393
+ versions_->GetColumnFamilySet()->GetDefault(), mutable_cf_options_,
394
+ read_options_, &edit, &mutex_, nullptr));
395
395
  mutex_.Unlock();
396
396
  }
397
397
 
@@ -454,7 +454,8 @@ class CompactionJobTestBase : public testing::Test {
454
454
  Status s = cf_options_.table_factory->NewTableReader(
455
455
  read_opts,
456
456
  TableReaderOptions(*cfd->ioptions(), nullptr, FileOptions(),
457
- cfd_->internal_comparator()),
457
+ cfd_->internal_comparator(),
458
+ 0 /* block_protection_bytes_per_key */),
458
459
  std::move(freader), file_size, &table_reader, false);
459
460
  ASSERT_OK(s);
460
461
  assert(table_reader);
@@ -727,6 +728,7 @@ class CompactionJobTestBase : public testing::Test {
727
728
  ColumnFamilyOptions cf_options_;
728
729
  MutableCFOptions mutable_cf_options_;
729
730
  MutableDBOptions mutable_db_options_;
731
+ const ReadOptions read_options_;
730
732
  std::shared_ptr<Cache> table_cache_;
731
733
  WriteController write_controller_;
732
734
  WriteBufferManager write_buffer_manager_;
@@ -2440,4 +2442,3 @@ int main(int argc, char** argv) {
2440
2442
  RegisterCustomObjects(argc, argv);
2441
2443
  return RUN_ALL_TESTS();
2442
2444
  }
2443
-
@@ -43,6 +43,7 @@ Status CompactionOutputs::Finish(const Status& intput_status,
43
43
  const uint64_t current_bytes = builder_->FileSize();
44
44
  if (s.ok()) {
45
45
  meta->fd.file_size = current_bytes;
46
+ meta->tail_size = builder_->GetTailSize();
46
47
  meta->marked_for_compaction = builder_->NeedCompact();
47
48
  }
48
49
  current_output().finished = true;
@@ -574,6 +575,7 @@ Status CompactionOutputs::AddRangeDels(
574
575
  auto it = range_del_agg_->NewIterator(lower_bound, upper_bound);
575
576
  Slice last_tombstone_start_user_key{};
576
577
  bool reached_lower_bound = false;
578
+ const ReadOptions read_options(Env::IOActivity::kCompaction);
577
579
  for (it->SeekToFirst(); it->Valid(); it->Next()) {
578
580
  auto tombstone = it->Tombstone();
579
581
  auto kv = tombstone.Serialize();
@@ -713,7 +715,7 @@ Status CompactionOutputs::AddRangeDels(
713
715
  approx_opts.files_size_error_margin = 0.1;
714
716
  auto approximate_covered_size =
715
717
  compaction_->input_version()->version_set()->ApproximateSize(
716
- approx_opts, compaction_->input_version(),
718
+ approx_opts, read_options, compaction_->input_version(),
717
719
  tombstone_start.Encode(), tombstone_end.Encode(),
718
720
  compaction_->output_level() + 1 /* start_level */,
719
721
  -1 /* end_level */, kCompaction);
@@ -20,7 +20,7 @@
20
20
  #include "file/filename.h"
21
21
  #include "logging/log_buffer.h"
22
22
  #include "logging/logging.h"
23
- #include "monitoring/statistics.h"
23
+ #include "monitoring/statistics_impl.h"
24
24
  #include "test_util/sync_point.h"
25
25
  #include "util/random.h"
26
26
  #include "util/string_util.h"