@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
@@ -40,6 +40,11 @@ Status DBImplReadOnly::Get(const ReadOptions& read_options,
40
40
  ColumnFamilyHandle* column_family, const Slice& key,
41
41
  PinnableSlice* pinnable_val,
42
42
  std::string* timestamp) {
43
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
44
+ return Status::InvalidArgument(
45
+ "Cannot call Get with `ReadOptions::io_activity` != "
46
+ "`Env::IOActivity::kUnknown`");
47
+ }
43
48
  assert(pinnable_val != nullptr);
44
49
  // TODO: stopwatch DB_GET needed?, perf timer needed?
45
50
  PERF_TIMER_GUARD(get_snapshot_time);
@@ -112,6 +117,11 @@ Status DBImplReadOnly::Get(const ReadOptions& read_options,
112
117
 
113
118
  Iterator* DBImplReadOnly::NewIterator(const ReadOptions& read_options,
114
119
  ColumnFamilyHandle* column_family) {
120
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
121
+ return NewErrorIterator(Status::InvalidArgument(
122
+ "Cannot call NewIterator with `ReadOptions::io_activity` != "
123
+ "`Env::IOActivity::kUnknown`"));
124
+ }
115
125
  assert(column_family);
116
126
  if (read_options.timestamp) {
117
127
  const Status s = FailIfTsMismatchCf(
@@ -142,6 +142,13 @@ class DBImplReadOnly : public DBImpl {
142
142
  return Status::NotSupported("Not supported operation in read only mode.");
143
143
  }
144
144
 
145
+ using DB::ClipColumnFamily;
146
+ virtual Status ClipColumnFamily(ColumnFamilyHandle* /*column_family*/,
147
+ const Slice& /*begin*/,
148
+ const Slice& /*end*/) override {
149
+ return Status::NotSupported("Not supported operation in read only mode.");
150
+ }
151
+
145
152
  // FIXME: some missing overrides for more "write" functions
146
153
 
147
154
  protected:
@@ -345,6 +345,11 @@ Status DBImplSecondary::GetImpl(const ReadOptions& read_options,
345
345
  ColumnFamilyHandle* column_family,
346
346
  const Slice& key, PinnableSlice* pinnable_val,
347
347
  std::string* timestamp) {
348
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
349
+ return Status::InvalidArgument(
350
+ "Cannot call Get with `ReadOptions::io_activity` != "
351
+ "`Env::IOActivity::kUnknown`");
352
+ }
348
353
  assert(pinnable_val != nullptr);
349
354
  PERF_CPU_TIMER_GUARD(get_cpu_nanos, immutable_db_options_.clock);
350
355
  StopWatch sw(immutable_db_options_.clock, stats_, DB_GET);
@@ -445,6 +450,11 @@ Iterator* DBImplSecondary::NewIterator(const ReadOptions& read_options,
445
450
  return NewErrorIterator(Status::NotSupported(
446
451
  "ReadTier::kPersistedData is not yet supported in iterators."));
447
452
  }
453
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
454
+ return NewErrorIterator(Status::InvalidArgument(
455
+ "Cannot call NewIterator with `ReadOptions::io_activity` != "
456
+ "`Env::IOActivity::kUnknown`"));
457
+ }
448
458
 
449
459
  assert(column_family);
450
460
  if (read_options.timestamp) {
@@ -511,6 +521,11 @@ Status DBImplSecondary::NewIterators(
511
521
  return Status::NotSupported(
512
522
  "ReadTier::kPersistedData is not yet supported in iterators.");
513
523
  }
524
+ if (read_options.io_activity != Env::IOActivity::kUnknown) {
525
+ return Status::InvalidArgument(
526
+ "Cannot call NewIterators with `ReadOptions::io_activity` != "
527
+ "`Env::IOActivity::kUnknown`");
528
+ }
514
529
  ReadCallback* read_callback = nullptr; // No read callback provided.
515
530
  if (iterators == nullptr) {
516
531
  return Status::InvalidArgument("iterators not allowed to be nullptr");
@@ -606,7 +606,9 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
606
606
  log_write_mutex_.Unlock();
607
607
  if (status.ok() && synced_wals.IsWalAddition()) {
608
608
  InstrumentedMutexLock l(&mutex_);
609
- status = ApplyWALToManifest(&synced_wals);
609
+ // TODO: plumb Env::IOActivity
610
+ const ReadOptions read_options;
611
+ status = ApplyWALToManifest(read_options, &synced_wals);
610
612
  }
611
613
 
612
614
  // Requesting sync with two_write_queues_ is expected to be very rare. We
@@ -767,7 +769,9 @@ Status DBImpl::PipelinedWriteImpl(const WriteOptions& write_options,
767
769
  }
768
770
  if (w.status.ok() && synced_wals.IsWalAddition()) {
769
771
  InstrumentedMutexLock l(&mutex_);
770
- w.status = ApplyWALToManifest(&synced_wals);
772
+ // TODO: plumb Env::IOActivity
773
+ const ReadOptions read_options;
774
+ w.status = ApplyWALToManifest(read_options, &synced_wals);
771
775
  }
772
776
  write_thread_.ExitAsBatchGroupLeader(wal_write_group, w.status);
773
777
  }
@@ -1805,7 +1809,7 @@ Status DBImpl::DelayWrite(uint64_t num_bytes, WriteThread& write_thread,
1805
1809
  bool delayed = false;
1806
1810
  {
1807
1811
  StopWatch sw(immutable_db_options_.clock, stats_, WRITE_STALL,
1808
- &time_delayed);
1812
+ Histograms::HISTOGRAM_ENUM_MAX, &time_delayed);
1809
1813
  // To avoid parallel timed delays (bad throttling), only support them
1810
1814
  // on the primary write queue.
1811
1815
  uint64_t delay;
@@ -2086,6 +2090,8 @@ void DBImpl::NotifyOnMemTableSealed(ColumnFamilyData* /*cfd*/,
2086
2090
  // two_write_queues_ is true (This is to simplify the reasoning.)
2087
2091
  Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
2088
2092
  mutex_.AssertHeld();
2093
+ // TODO: plumb Env::IOActivity
2094
+ const ReadOptions read_options;
2089
2095
  log::Writer* new_log = nullptr;
2090
2096
  MemTable* new_mem = nullptr;
2091
2097
  IOStatus io_s;
@@ -2237,8 +2243,8 @@ Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
2237
2243
 
2238
2244
  VersionEdit wal_deletion;
2239
2245
  wal_deletion.DeleteWalsBefore(min_wal_number_to_keep);
2240
- s = versions_->LogAndApplyToDefaultColumnFamily(&wal_deletion, &mutex_,
2241
- directories_.GetDbDir());
2246
+ s = versions_->LogAndApplyToDefaultColumnFamily(
2247
+ read_options, &wal_deletion, &mutex_, directories_.GetDbDir());
2242
2248
  if (!s.ok() && versions_->io_status().IsIOError()) {
2243
2249
  s = error_handler_.SetBGError(versions_->io_status(),
2244
2250
  BackgroundErrorReason::kManifestWrite);
@@ -131,6 +131,7 @@ void DBIter::Next() {
131
131
  assert(valid_);
132
132
  assert(status_.ok());
133
133
 
134
+ PERF_COUNTER_ADD(iter_next_count, 1);
134
135
  PERF_CPU_TIMER_GUARD(iter_next_cpu_nanos, clock_);
135
136
  // Release temporarily pinned blocks from last operation
136
137
  ReleaseTempPinnedData();
@@ -195,6 +196,7 @@ bool DBIter::SetBlobValueIfNeeded(const Slice& user_key,
195
196
 
196
197
  // TODO: consider moving ReadOptions from ArenaWrappedDBIter to DBIter to
197
198
  // avoid having to copy options back and forth.
199
+ // TODO: plumb Env::IOActivity
198
200
  ReadOptions read_options;
199
201
  read_options.read_tier = read_tier_;
200
202
  read_options.fill_cache = fill_cache_;
@@ -637,6 +639,7 @@ void DBIter::Prev() {
637
639
  assert(valid_);
638
640
  assert(status_.ok());
639
641
 
642
+ PERF_COUNTER_ADD(iter_prev_count, 1);
640
643
  PERF_CPU_TIMER_GUARD(iter_prev_cpu_nanos, clock_);
641
644
  ReleaseTempPinnedData();
642
645
  ResetBlobValue();
@@ -961,9 +964,6 @@ bool DBIter::FindValueForCurrentKey() {
961
964
  assert(last_key_entry_type == ikey_.type);
962
965
  }
963
966
 
964
- Status s;
965
- s.PermitUncheckedError();
966
-
967
967
  switch (last_key_entry_type) {
968
968
  case kTypeDeletion:
969
969
  case kTypeDeletionWithTimestamp:
@@ -1040,11 +1040,6 @@ bool DBIter::FindValueForCurrentKey() {
1040
1040
  std::to_string(static_cast<unsigned int>(last_key_entry_type)));
1041
1041
  return false;
1042
1042
  }
1043
- if (!s.ok()) {
1044
- valid_ = false;
1045
- status_ = s;
1046
- return false;
1047
- }
1048
1043
  valid_ = true;
1049
1044
  return true;
1050
1045
  }
@@ -1444,6 +1439,7 @@ void DBIter::SetSavedKeyToSeekForPrevTarget(const Slice& target) {
1444
1439
  }
1445
1440
 
1446
1441
  void DBIter::Seek(const Slice& target) {
1442
+ PERF_COUNTER_ADD(iter_seek_count, 1);
1447
1443
  PERF_CPU_TIMER_GUARD(iter_seek_cpu_nanos, clock_);
1448
1444
  StopWatch sw(clock_, statistics_, DB_SEEK);
1449
1445
 
@@ -1517,6 +1513,7 @@ void DBIter::Seek(const Slice& target) {
1517
1513
  }
1518
1514
 
1519
1515
  void DBIter::SeekForPrev(const Slice& target) {
1516
+ PERF_COUNTER_ADD(iter_seek_count, 1);
1520
1517
  PERF_CPU_TIMER_GUARD(iter_seek_cpu_nanos, clock_);
1521
1518
  StopWatch sw(clock_, statistics_, DB_SEEK);
1522
1519
 
@@ -1590,6 +1587,7 @@ void DBIter::SeekToFirst() {
1590
1587
  Seek(*iterate_lower_bound_);
1591
1588
  return;
1592
1589
  }
1590
+ PERF_COUNTER_ADD(iter_seek_count, 1);
1593
1591
  PERF_CPU_TIMER_GUARD(iter_seek_cpu_nanos, clock_);
1594
1592
  // Don't use iter_::Seek() if we set a prefix extractor
1595
1593
  // because prefix seek will be used.
@@ -1652,6 +1650,7 @@ void DBIter::SeekToLast() {
1652
1650
  return;
1653
1651
  }
1654
1652
 
1653
+ PERF_COUNTER_ADD(iter_seek_count, 1);
1655
1654
  PERF_CPU_TIMER_GUARD(iter_seek_cpu_nanos, clock_);
1656
1655
  // Don't use iter_::Seek() if we set a prefix extractor
1657
1656
  // because prefix seek will be used.
@@ -16,7 +16,7 @@
16
16
  #include "port/stack_trace.h"
17
17
  #include "rocksdb/iostats_context.h"
18
18
  #include "rocksdb/perf_context.h"
19
- #include "table/block_based/flush_block_policy.h"
19
+ #include "table/block_based/flush_block_policy_impl.h"
20
20
  #include "util/random.h"
21
21
  #include "utilities/merge_operators/string_append/stringappend2.h"
22
22
 
@@ -30,12 +30,63 @@ class DummyReadCallback : public ReadCallback {
30
30
  void SetSnapshot(SequenceNumber seq) { max_visible_seq_ = seq; }
31
31
  };
32
32
 
33
+ class DBIteratorBaseTest : public DBTestBase {
34
+ public:
35
+ DBIteratorBaseTest()
36
+ : DBTestBase("db_iterator_test", /*env_do_fsync=*/true) {}
37
+ };
38
+
39
+ TEST_F(DBIteratorBaseTest, APICallsWithPerfContext) {
40
+ // Set up the DB
41
+ Options options = CurrentOptions();
42
+ DestroyAndReopen(options);
43
+ Random rnd(301);
44
+ for (int i = 1; i <= 3; i++) {
45
+ ASSERT_OK(Put(std::to_string(i), std::to_string(i)));
46
+ }
47
+
48
+ // Setup iterator and PerfContext
49
+ Iterator* iter = db_->NewIterator(ReadOptions());
50
+ std::string key_str = std::to_string(2);
51
+ Slice key(key_str);
52
+ SetPerfLevel(kEnableCount);
53
+ get_perf_context()->Reset();
54
+
55
+ // Initial PerfContext counters
56
+ ASSERT_EQ(0, get_perf_context()->iter_seek_count);
57
+ ASSERT_EQ(0, get_perf_context()->iter_next_count);
58
+ ASSERT_EQ(0, get_perf_context()->iter_prev_count);
59
+
60
+ // Test Seek-related API calls PerfContext counter
61
+ iter->Seek(key);
62
+ iter->SeekToFirst();
63
+ iter->SeekToLast();
64
+ iter->SeekForPrev(key);
65
+ ASSERT_EQ(4, get_perf_context()->iter_seek_count);
66
+ ASSERT_EQ(0, get_perf_context()->iter_next_count);
67
+ ASSERT_EQ(0, get_perf_context()->iter_prev_count);
68
+
69
+ // Test Next() calls PerfContext counter
70
+ iter->Next();
71
+ ASSERT_EQ(4, get_perf_context()->iter_seek_count);
72
+ ASSERT_EQ(1, get_perf_context()->iter_next_count);
73
+ ASSERT_EQ(0, get_perf_context()->iter_prev_count);
74
+
75
+ // Test Prev() calls PerfContext counter
76
+ iter->Prev();
77
+ ASSERT_EQ(4, get_perf_context()->iter_seek_count);
78
+ ASSERT_EQ(1, get_perf_context()->iter_next_count);
79
+ ASSERT_EQ(1, get_perf_context()->iter_prev_count);
80
+
81
+ delete iter;
82
+ }
83
+
33
84
  // Test param:
34
85
  // bool: whether to pass read_callback to NewIterator().
35
- class DBIteratorTest : public DBTestBase,
86
+ class DBIteratorTest : public DBIteratorBaseTest,
36
87
  public testing::WithParamInterface<bool> {
37
88
  public:
38
- DBIteratorTest() : DBTestBase("db_iterator_test", /*env_do_fsync=*/true) {}
89
+ DBIteratorTest() {}
39
90
 
40
91
  Iterator* NewIterator(const ReadOptions& read_options,
41
92
  ColumnFamilyHandle* column_family = nullptr) {
@@ -358,6 +358,48 @@ TEST_F(DBMergeOperatorTest, MergeOperatorFailsWithMustMerge) {
358
358
  }
359
359
  }
360
360
 
361
+ TEST_F(DBMergeOperatorTest, DataBlockBinaryAndHash) {
362
+ // Basic test to check that merge operator works with data block index type
363
+ // DataBlockBinaryAndHash.
364
+ Options options;
365
+ options.create_if_missing = true;
366
+ options.merge_operator.reset(new TestPutOperator());
367
+ options.env = env_;
368
+ BlockBasedTableOptions table_options;
369
+ table_options.block_restart_interval = 16;
370
+ table_options.data_block_index_type =
371
+ BlockBasedTableOptions::DataBlockIndexType::kDataBlockBinaryAndHash;
372
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
373
+ DestroyAndReopen(options);
374
+
375
+ const int kNumKeys = 100;
376
+ for (int i = 0; i < kNumKeys; ++i) {
377
+ ASSERT_OK(db_->Merge(WriteOptions(), Key(i), std::to_string(i)));
378
+ }
379
+ ASSERT_OK(Flush());
380
+ std::string value;
381
+ for (int i = 0; i < kNumKeys; ++i) {
382
+ ASSERT_OK(db_->Get(ReadOptions(), Key(i), &value));
383
+ ASSERT_EQ(std::to_string(i), value);
384
+ }
385
+
386
+ std::vector<const Snapshot*> snapshots;
387
+ for (int i = 0; i < kNumKeys; ++i) {
388
+ ASSERT_OK(db_->Delete(WriteOptions(), Key(i)));
389
+ for (int j = 0; j < 3; ++j) {
390
+ ASSERT_OK(db_->Merge(WriteOptions(), Key(i), std::to_string(i * 3 + j)));
391
+ snapshots.push_back(db_->GetSnapshot());
392
+ }
393
+ }
394
+ ASSERT_OK(Flush());
395
+ for (int i = 0; i < kNumKeys; ++i) {
396
+ ASSERT_OK(db_->Get(ReadOptions(), Key(i), &value));
397
+ ASSERT_EQ(std::to_string(i * 3 + 2), value);
398
+ }
399
+ for (auto snapshot : snapshots) {
400
+ db_->ReleaseSnapshot(snapshot);
401
+ }
402
+ }
361
403
 
362
404
  class MergeOperatorPinningTest : public DBMergeOperatorTest,
363
405
  public testing::WithParamInterface<bool> {
@@ -22,6 +22,7 @@
22
22
  #include "test_util/sync_point.h"
23
23
  #include "test_util/testutil.h"
24
24
  #include "util/random.h"
25
+ #include "utilities/fault_injection_fs.h"
25
26
 
26
27
  namespace ROCKSDB_NAMESPACE {
27
28
 
@@ -910,6 +911,7 @@ TEST_F(DBOptionsTest, SetFIFOCompactionOptions) {
910
911
  options.compression = kNoCompression;
911
912
  options.create_if_missing = true;
912
913
  options.compaction_options_fifo.allow_compaction = false;
914
+ options.num_levels = 1;
913
915
  env_->SetMockSleep();
914
916
  options.env = env_;
915
917
 
@@ -1009,6 +1011,24 @@ TEST_F(DBOptionsTest, SetFIFOCompactionOptions) {
1009
1011
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
1010
1012
  ASSERT_GE(NumTableFilesAtLevel(0), 1);
1011
1013
  ASSERT_LE(NumTableFilesAtLevel(0), 5);
1014
+
1015
+ // Test dynamically setting `file_temperature_age_thresholds`
1016
+ ASSERT_TRUE(
1017
+ dbfull()
1018
+ ->GetOptions()
1019
+ .compaction_options_fifo.file_temperature_age_thresholds.empty());
1020
+ ASSERT_OK(dbfull()->SetOptions({{"compaction_options_fifo",
1021
+ "{file_temperature_age_thresholds={{age=10;"
1022
+ "temperature=kWarm}:{age=30000;"
1023
+ "temperature=kCold}}}"}}));
1024
+ auto opts = dbfull()->GetOptions();
1025
+ const auto& fifo_temp_opt =
1026
+ opts.compaction_options_fifo.file_temperature_age_thresholds;
1027
+ ASSERT_EQ(fifo_temp_opt.size(), 2);
1028
+ ASSERT_EQ(fifo_temp_opt[0].temperature, Temperature::kWarm);
1029
+ ASSERT_EQ(fifo_temp_opt[0].age, 10);
1030
+ ASSERT_EQ(fifo_temp_opt[1].temperature, Temperature::kCold);
1031
+ ASSERT_EQ(fifo_temp_opt[1].age, 30000);
1012
1032
  }
1013
1033
 
1014
1034
  TEST_F(DBOptionsTest, CompactionReadaheadSizeChange) {
@@ -1043,6 +1063,7 @@ TEST_F(DBOptionsTest, FIFOTtlBackwardCompatible) {
1043
1063
  options.write_buffer_size = 10 << 10; // 10KB
1044
1064
  options.create_if_missing = true;
1045
1065
  options.env = CurrentOptions().env;
1066
+ options.num_levels = 1;
1046
1067
 
1047
1068
  ASSERT_OK(TryReopen(options));
1048
1069
 
@@ -1063,12 +1084,19 @@ TEST_F(DBOptionsTest, FIFOTtlBackwardCompatible) {
1063
1084
  // ttl under compaction_options_fifo.
1064
1085
  ASSERT_OK(dbfull()->SetOptions(
1065
1086
  {{"compaction_options_fifo",
1066
- "{allow_compaction=true;max_table_files_size=1024;ttl=731;}"},
1087
+ "{allow_compaction=true;max_table_files_size=1024;ttl=731;file_"
1088
+ "temperature_age_thresholds={temperature=kCold;age=12345}}"},
1067
1089
  {"ttl", "60"}}));
1068
1090
  ASSERT_EQ(dbfull()->GetOptions().compaction_options_fifo.allow_compaction,
1069
1091
  true);
1070
1092
  ASSERT_EQ(dbfull()->GetOptions().compaction_options_fifo.max_table_files_size,
1071
1093
  1024);
1094
+ auto opts = dbfull()->GetOptions();
1095
+ const auto& file_temp_age =
1096
+ opts.compaction_options_fifo.file_temperature_age_thresholds;
1097
+ ASSERT_EQ(file_temp_age.size(), 1);
1098
+ ASSERT_EQ(file_temp_age[0].temperature, Temperature::kCold);
1099
+ ASSERT_EQ(file_temp_age[0].age, 12345);
1072
1100
  ASSERT_EQ(dbfull()->GetOptions().ttl, 60);
1073
1101
 
1074
1102
  // Put ttl as the first option inside compaction_options_fifo. That works as
@@ -1081,6 +1109,9 @@ TEST_F(DBOptionsTest, FIFOTtlBackwardCompatible) {
1081
1109
  true);
1082
1110
  ASSERT_EQ(dbfull()->GetOptions().compaction_options_fifo.max_table_files_size,
1083
1111
  1024);
1112
+ ASSERT_EQ(file_temp_age.size(), 1);
1113
+ ASSERT_EQ(file_temp_age[0].temperature, Temperature::kCold);
1114
+ ASSERT_EQ(file_temp_age[0].age, 12345);
1084
1115
  ASSERT_EQ(dbfull()->GetOptions().ttl, 191);
1085
1116
  }
1086
1117
 
@@ -1206,6 +1237,90 @@ TEST_F(DBOptionsTest, BottommostCompressionOptsWithFallbackType) {
1206
1237
  ASSERT_EQ(kBottommostCompressionLevel, compression_opt_used.level);
1207
1238
  }
1208
1239
 
1240
+ TEST_F(DBOptionsTest, FIFOTemperatureAgeThresholdValidation) {
1241
+ Options options = CurrentOptions();
1242
+ Destroy(options);
1243
+
1244
+ options.num_levels = 1;
1245
+ options.compaction_style = kCompactionStyleFIFO;
1246
+ options.max_open_files = -1;
1247
+ // elements are not sorted
1248
+ // During DB open
1249
+ options.compaction_options_fifo.file_temperature_age_thresholds.push_back(
1250
+ {Temperature::kCold, 1000});
1251
+ options.compaction_options_fifo.file_temperature_age_thresholds.push_back(
1252
+ {Temperature::kWarm, 500});
1253
+ Status s = TryReopen(options);
1254
+ ASSERT_TRUE(s.IsNotSupported());
1255
+ ASSERT_TRUE(std::strstr(
1256
+ s.getState(),
1257
+ "Option file_temperature_age_thresholds requires elements to be sorted "
1258
+ "in increasing order with respect to `age` field."));
1259
+ // Dynamically set option
1260
+ options.compaction_options_fifo.file_temperature_age_thresholds.pop_back();
1261
+ ASSERT_OK(TryReopen(options));
1262
+ s = db_->SetOptions({{"compaction_options_fifo",
1263
+ "{file_temperature_age_thresholds={{temperature=kCold;"
1264
+ "age=1000000}:{temperature=kWarm;age=1}}}"}});
1265
+ ASSERT_TRUE(s.IsNotSupported());
1266
+ ASSERT_TRUE(std::strstr(
1267
+ s.getState(),
1268
+ "Option file_temperature_age_thresholds requires elements to be sorted "
1269
+ "in increasing order with respect to `age` field."));
1270
+
1271
+ // not single level
1272
+ // During DB open
1273
+ options.num_levels = 2;
1274
+ s = TryReopen(options);
1275
+ ASSERT_TRUE(s.IsNotSupported());
1276
+ ASSERT_TRUE(std::strstr(s.getState(),
1277
+ "Option file_temperature_age_thresholds is only "
1278
+ "supported when num_levels = 1."));
1279
+ // Dynamically set option
1280
+ options.compaction_options_fifo.file_temperature_age_thresholds.clear();
1281
+ DestroyAndReopen(options);
1282
+ s = db_->SetOptions(
1283
+ {{"compaction_options_fifo",
1284
+ "{file_temperature_age_thresholds={temperature=kCold;age=1000}}"}});
1285
+ ASSERT_TRUE(s.IsNotSupported());
1286
+ ASSERT_TRUE(std::strstr(s.getState(),
1287
+ "Option file_temperature_age_thresholds is only "
1288
+ "supported when num_levels = 1."));
1289
+ }
1290
+
1291
+ TEST_F(DBOptionsTest, TempOptionsFailTest) {
1292
+ std::shared_ptr<FaultInjectionTestFS> fs;
1293
+ std::unique_ptr<Env> env;
1294
+
1295
+ fs.reset(new FaultInjectionTestFS(env_->GetFileSystem()));
1296
+ env = NewCompositeEnv(fs);
1297
+ Options options = CurrentOptions();
1298
+ options.env = env.get();
1299
+
1300
+ SyncPoint::GetInstance()->SetCallBack(
1301
+ "PersistRocksDBOptions:create",
1302
+ [&](void* /*arg*/) { fs->SetFilesystemActive(false); });
1303
+ SyncPoint::GetInstance()->SetCallBack(
1304
+ "PersistRocksDBOptions:written",
1305
+ [&](void* /*arg*/) { fs->SetFilesystemActive(true); });
1306
+
1307
+ SyncPoint::GetInstance()->EnableProcessing();
1308
+ TryReopen(options);
1309
+ SyncPoint::GetInstance()->DisableProcessing();
1310
+
1311
+ std::vector<std::string> filenames;
1312
+ ASSERT_OK(env_->GetChildren(dbname_, &filenames));
1313
+ uint64_t number;
1314
+ FileType type;
1315
+ bool found_temp_file = false;
1316
+ for (size_t i = 0; i < filenames.size(); i++) {
1317
+ if (ParseFileName(filenames[i], &number, &type) && type == kTempFile) {
1318
+ found_temp_file = true;
1319
+ }
1320
+ }
1321
+ ASSERT_FALSE(found_temp_file);
1322
+ }
1323
+
1209
1324
  } // namespace ROCKSDB_NAMESPACE
1210
1325
 
1211
1326
  int main(int argc, char** argv) {
@@ -2333,8 +2333,9 @@ TEST_F(DBPropertiesTest, TableMetaIndexKeys) {
2333
2333
 
2334
2334
  // Read metaindex
2335
2335
  BlockContents bc;
2336
- ASSERT_OK(ReadMetaIndexBlockInFile(r.get(), file_size, 0U,
2337
- ImmutableOptions(options), &bc));
2336
+ const ReadOptions read_options;
2337
+ ASSERT_OK(ReadMetaIndexBlockInFile(
2338
+ r.get(), file_size, 0U, ImmutableOptions(options), read_options, &bc));
2338
2339
  Block metaindex_block(std::move(bc));
2339
2340
  std::unique_ptr<InternalIterator> meta_iter;
2340
2341
  meta_iter.reset(metaindex_block.NewMetaIterator());
@@ -235,8 +235,9 @@ TEST_P(DBRateLimiterOnReadTest, VerifyChecksum) {
235
235
  ASSERT_EQ(0, options_.rate_limiter->GetTotalRequests(Env::IO_USER));
236
236
 
237
237
  ASSERT_OK(db_->VerifyChecksum(GetReadOptions()));
238
- // The files are tiny so there should have just been one read per file.
239
- int expected = kNumFiles;
238
+ // There are 3 reads per file: ReadMetaIndexBlock,
239
+ // VerifyChecksumInMetaBlocks, VerifyChecksumInBlocks
240
+ int expected = kNumFiles * 3;
240
241
  ASSERT_EQ(expected, options_.rate_limiter->GetTotalRequests(Env::IO_USER));
241
242
  }
242
243
 
@@ -743,7 +743,7 @@ TEST_P(DBSSTTestRateLimit, RateLimitedDelete) {
743
743
 
744
744
  // Compaction will move the 4 files in L0 to trash and create 1 L1 file
745
745
  ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
746
- ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
746
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
747
747
  ASSERT_EQ("0,1", FilesPerLevel(0));
748
748
 
749
749
  uint64_t delete_start_time = env_->NowMicros();
@@ -810,11 +810,12 @@ TEST_F(DBSSTTest, RateLimitedWALDelete) {
810
810
  // We created 4 sst files in L0
811
811
  ASSERT_EQ("4", FilesPerLevel(0));
812
812
 
813
- // Compaction will move the 4 files in L0 to trash and create 1 L1 file
813
+ // Compaction will move the 4 files in L0 to trash and create 1 L1 file.
814
+ // Use kForceOptimized to not rewrite the new L1 file.
814
815
  CompactRangeOptions cro;
815
- cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
816
+ cro.bottommost_level_compaction = BottommostLevelCompaction::kForceOptimized;
816
817
  ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
817
- ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
818
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
818
819
  ASSERT_EQ("0,1", FilesPerLevel(0));
819
820
 
820
821
  sfm->WaitForEmptyTrash();
@@ -1223,7 +1224,7 @@ TEST_F(DBSSTTest, CancellingCompactionsWorks) {
1223
1224
  ASSERT_OK(Put(Key(i), rnd.RandomString(50)));
1224
1225
  }
1225
1226
  ASSERT_OK(Flush());
1226
- ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
1227
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1227
1228
 
1228
1229
  // Because we set a callback in CancelledCompaction, we actually
1229
1230
  // let the compaction run
@@ -1280,7 +1281,7 @@ TEST_F(DBSSTTest, CancellingManualCompactionsWorks) {
1280
1281
  .IsCompactionTooLarge());
1281
1282
 
1282
1283
  // Wait for manual compaction to get scheduled and finish
1283
- ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
1284
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1284
1285
 
1285
1286
  ASSERT_EQ(sfm->GetCompactionsReservedSize(), 0);
1286
1287
  // Make sure the stat is bumped
@@ -1296,7 +1297,7 @@ TEST_F(DBSSTTest, CancellingManualCompactionsWorks) {
1296
1297
  .IsCompactionTooLarge());
1297
1298
 
1298
1299
  // Wait for manual compaction to get scheduled and finish
1299
- ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
1300
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1300
1301
 
1301
1302
  ASSERT_EQ(dbfull()->immutable_db_options().statistics.get()->getTickerCount(
1302
1303
  COMPACTION_CANCELLED),
@@ -1313,7 +1314,7 @@ TEST_F(DBSSTTest, CancellingManualCompactionsWorks) {
1313
1314
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
1314
1315
  ASSERT_OK(dbfull()->CompactFiles(ROCKSDB_NAMESPACE::CompactionOptions(),
1315
1316
  l0_files, 0));
1316
- ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
1317
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1317
1318
 
1318
1319
  ASSERT_EQ(sfm->GetCompactionsReservedSize(), 0);
1319
1320
  ASSERT_GT(completed_compactions, 0);