@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
@@ -5,7 +5,7 @@
5
5
  //
6
6
  #pragma once
7
7
  #include "monitoring/perf_level_imp.h"
8
- #include "monitoring/statistics.h"
8
+ #include "monitoring/statistics_impl.h"
9
9
  #include "rocksdb/system_clock.h"
10
10
 
11
11
  namespace ROCKSDB_NAMESPACE {
@@ -3,14 +3,14 @@
3
3
  // COPYING file in the root directory) and Apache 2.0 License
4
4
  // (found in the LICENSE.Apache file in the root directory).
5
5
  //
6
- #include "monitoring/statistics.h"
6
+ #include "rocksdb/statistics.h"
7
7
 
8
8
  #include <algorithm>
9
9
  #include <cinttypes>
10
10
  #include <cstdio>
11
11
 
12
+ #include "monitoring/statistics_impl.h"
12
13
  #include "rocksdb/convenience.h"
13
- #include "rocksdb/statistics.h"
14
14
  #include "rocksdb/utilities/customizable_util.h"
15
15
  #include "rocksdb/utilities/options_type.h"
16
16
  #include "util/string_util.h"
@@ -83,6 +83,8 @@ const std::vector<std::pair<Tickers, std::string>> TickersNameMap = {
83
83
  {NUMBER_MERGE_FAILURES, "rocksdb.number.merge.failures"},
84
84
  {BLOOM_FILTER_PREFIX_CHECKED, "rocksdb.bloom.filter.prefix.checked"},
85
85
  {BLOOM_FILTER_PREFIX_USEFUL, "rocksdb.bloom.filter.prefix.useful"},
86
+ {BLOOM_FILTER_PREFIX_TRUE_POSITIVE,
87
+ "rocksdb.bloom.filter.prefix.true.positive"},
86
88
  {NUMBER_OF_RESEEKS_IN_ITERATION, "rocksdb.number.reseeks.iteration"},
87
89
  {GET_UPDATES_SINCE_CALLS, "rocksdb.getupdatessince.calls"},
88
90
  {WAL_FILE_SYNCED, "rocksdb.wal.synced"},
@@ -204,7 +206,23 @@ const std::vector<std::pair<Tickers, std::string>> TickersNameMap = {
204
206
  {LAST_LEVEL_READ_COUNT, "rocksdb.last.level.read.count"},
205
207
  {NON_LAST_LEVEL_READ_BYTES, "rocksdb.non.last.level.read.bytes"},
206
208
  {NON_LAST_LEVEL_READ_COUNT, "rocksdb.non.last.level.read.count"},
209
+ {LAST_LEVEL_SEEK_FILTERED, "rocksdb.last.level.seek.filtered"},
210
+ {LAST_LEVEL_SEEK_FILTER_MATCH, "rocksdb.last.level.seek.filter.match"},
211
+ {LAST_LEVEL_SEEK_DATA, "rocksdb.last.level.seek.data"},
212
+ {LAST_LEVEL_SEEK_DATA_USEFUL_NO_FILTER,
213
+ "rocksdb.last.level.seek.data.useful.no.filter"},
214
+ {LAST_LEVEL_SEEK_DATA_USEFUL_FILTER_MATCH,
215
+ "rocksdb.last.level.seek.data.useful.filter.match"},
216
+ {NON_LAST_LEVEL_SEEK_FILTERED, "rocksdb.non.last.level.seek.filtered"},
217
+ {NON_LAST_LEVEL_SEEK_FILTER_MATCH,
218
+ "rocksdb.non.last.level.seek.filter.match"},
219
+ {NON_LAST_LEVEL_SEEK_DATA, "rocksdb.non.last.level.seek.data"},
220
+ {NON_LAST_LEVEL_SEEK_DATA_USEFUL_NO_FILTER,
221
+ "rocksdb.non.last.level.seek.data.useful.no.filter"},
222
+ {NON_LAST_LEVEL_SEEK_DATA_USEFUL_FILTER_MATCH,
223
+ "rocksdb.non.last.level.seek.data.useful.filter.match"},
207
224
  {BLOCK_CHECKSUM_COMPUTE_COUNT, "rocksdb.block.checksum.compute.count"},
225
+ {BLOCK_CHECKSUM_MISMATCH_COUNT, "rocksdb.block.checksum.mismatch.count"},
208
226
  {MULTIGET_COROUTINE_COUNT, "rocksdb.multiget.coroutine.count"},
209
227
  {BLOB_DB_CACHE_MISS, "rocksdb.blobdb.cache.miss"},
210
228
  {BLOB_DB_CACHE_HIT, "rocksdb.blobdb.cache.hit"},
@@ -219,6 +237,19 @@ const std::vector<std::pair<Tickers, std::string>> TickersNameMap = {
219
237
  {SECONDARY_CACHE_DATA_HITS, "rocksdb.secondary.cache.data.hits"},
220
238
  {TABLE_OPEN_PREFETCH_TAIL_MISS, "rocksdb.table.open.prefetch.tail.miss"},
221
239
  {TABLE_OPEN_PREFETCH_TAIL_HIT, "rocksdb.table.open.prefetch.tail.hit"},
240
+ {TIMESTAMP_FILTER_TABLE_CHECKED, "rocksdb.timestamp.filter.table.checked"},
241
+ {TIMESTAMP_FILTER_TABLE_FILTERED,
242
+ "rocksdb.timestamp.filter.table.filtered"},
243
+ {BYTES_COMPRESSED_FROM, "rocksdb.bytes.compressed.from"},
244
+ {BYTES_COMPRESSED_TO, "rocksdb.bytes.compressed.to"},
245
+ {BYTES_COMPRESSION_BYPASSED, "rocksdb.bytes.compression_bypassed"},
246
+ {BYTES_COMPRESSION_REJECTED, "rocksdb.bytes.compression.rejected"},
247
+ {NUMBER_BLOCK_COMPRESSION_BYPASSED,
248
+ "rocksdb.number.block_compression_bypassed"},
249
+ {NUMBER_BLOCK_COMPRESSION_REJECTED,
250
+ "rocksdb.number.block_compression_rejected"},
251
+ {BYTES_DECOMPRESSED_FROM, "rocksdb.bytes.decompressed.from"},
252
+ {BYTES_DECOMPRESSED_TO, "rocksdb.bytes.decompressed.to"},
222
253
  };
223
254
 
224
255
  const std::vector<std::pair<Histograms, std::string>> HistogramsNameMap = {
@@ -240,6 +271,9 @@ const std::vector<std::pair<Histograms, std::string>> HistogramsNameMap = {
240
271
  {DB_SEEK, "rocksdb.db.seek.micros"},
241
272
  {WRITE_STALL, "rocksdb.db.write.stall"},
242
273
  {SST_READ_MICROS, "rocksdb.sst.read.micros"},
274
+ {FILE_READ_FLUSH_MICROS, "rocksdb.file.read.flush.micros"},
275
+ {FILE_READ_COMPACTION_MICROS, "rocksdb.file.read.compaction.micros"},
276
+ {FILE_READ_DB_OPEN_MICROS, "rocksdb.file.read.db.open.micros"},
243
277
  {NUM_SUBCOMPACTIONS_SCHEDULED, "rocksdb.num.subcompactions.scheduled"},
244
278
  {BYTES_PER_READ, "rocksdb.bytes.per.read"},
245
279
  {BYTES_PER_WRITE, "rocksdb.bytes.per.write"},
@@ -47,15 +47,19 @@ void ThreadStatusUpdater::ResetThreadStatus() {
47
47
  SetColumnFamilyInfoKey(nullptr);
48
48
  }
49
49
 
50
+ void ThreadStatusUpdater::SetEnableTracking(bool enable_tracking) {
51
+ auto* data = Get();
52
+ if (data == nullptr) {
53
+ return;
54
+ }
55
+ data->enable_tracking.store(enable_tracking, std::memory_order_relaxed);
56
+ }
57
+
50
58
  void ThreadStatusUpdater::SetColumnFamilyInfoKey(const void* cf_key) {
51
59
  auto* data = Get();
52
60
  if (data == nullptr) {
53
61
  return;
54
62
  }
55
- // set the tracking flag based on whether cf_key is non-null or not.
56
- // If enable_thread_tracking is set to false, the input cf_key
57
- // would be nullptr.
58
- data->enable_tracking = (cf_key != nullptr);
59
63
  data->cf_key.store(const_cast<void*>(cf_key), std::memory_order_relaxed);
60
64
  }
61
65
 
@@ -86,6 +90,14 @@ void ThreadStatusUpdater::SetThreadOperation(
86
90
  }
87
91
  }
88
92
 
93
+ ThreadStatus::OperationType ThreadStatusUpdater::GetThreadOperation() {
94
+ ThreadStatusData* data = GetLocalThreadStatus();
95
+ if (data == nullptr) {
96
+ return ThreadStatus::OperationType::OP_UNKNOWN;
97
+ }
98
+ return data->operation_type.load(std::memory_order_relaxed);
99
+ }
100
+
89
101
  void ThreadStatusUpdater::SetThreadOperationProperty(int i, uint64_t value) {
90
102
  auto* data = GetLocalThreadStatus();
91
103
  if (data == nullptr) {
@@ -211,9 +223,7 @@ ThreadStatusData* ThreadStatusUpdater::GetLocalThreadStatus() {
211
223
  if (thread_status_data_ == nullptr) {
212
224
  return nullptr;
213
225
  }
214
- if (!thread_status_data_->enable_tracking) {
215
- assert(thread_status_data_->cf_key.load(std::memory_order_relaxed) ==
216
- nullptr);
226
+ if (!thread_status_data_->enable_tracking.load(std::memory_order_relaxed)) {
217
227
  return nullptr;
218
228
  }
219
229
  return thread_status_data_;
@@ -62,7 +62,8 @@ struct ConstantColumnFamilyInfo {
62
62
  // status of a thread using a set of atomic pointers.
63
63
  struct ThreadStatusData {
64
64
  #ifdef ROCKSDB_USING_THREAD_STATUS
65
- explicit ThreadStatusData() : enable_tracking(false) {
65
+ explicit ThreadStatusData() {
66
+ enable_tracking.store(false);
66
67
  thread_id.store(0);
67
68
  thread_type.store(ThreadStatus::USER);
68
69
  cf_key.store(nullptr);
@@ -72,13 +73,10 @@ struct ThreadStatusData {
72
73
  }
73
74
 
74
75
  // A flag to indicate whether the thread tracking is enabled
75
- // in the current thread. This value will be updated based on whether
76
- // the associated Options::enable_thread_tracking is set to true
77
- // in ThreadStatusUtil::SetColumnFamily().
78
- //
76
+ // in the current thread.
79
77
  // If set to false, then SetThreadOperation and SetThreadState
80
78
  // will be no-op.
81
- bool enable_tracking;
79
+ std::atomic<bool> enable_tracking;
82
80
 
83
81
  std::atomic<uint64_t> thread_id;
84
82
  std::atomic<ThreadStatus::ThreadType> thread_type;
@@ -119,8 +117,10 @@ class ThreadStatusUpdater {
119
117
  // Register the current thread for tracking.
120
118
  void RegisterThread(ThreadStatus::ThreadType ttype, uint64_t thread_id);
121
119
 
120
+ void SetEnableTracking(bool enable_tracking);
121
+
122
122
  // Update the column-family info of the current thread by setting
123
- // its thread-local pointer of ThreadStateInfo to the correct entry.
123
+ // its thread-local pointer of ThreadStatusData to the correct entry.
124
124
  void SetColumnFamilyInfoKey(const void* cf_key);
125
125
 
126
126
  // returns the column family info key.
@@ -129,6 +129,9 @@ class ThreadStatusUpdater {
129
129
  // Update the thread operation of the current thread.
130
130
  void SetThreadOperation(const ThreadStatus::OperationType type);
131
131
 
132
+ // Return the thread operation of the current thread.
133
+ ThreadStatus::OperationType GetThreadOperation();
134
+
132
135
  // The start time of the current thread operation. It is in the format
133
136
  // of micro-seconds since some fixed point in time.
134
137
  void SetOperationStartTime(const uint64_t start_time);
@@ -33,27 +33,23 @@ void ThreadStatusUtil::UnregisterThread() {
33
33
  }
34
34
  }
35
35
 
36
- void ThreadStatusUtil::SetColumnFamily(const ColumnFamilyData* cfd,
37
- const Env* env,
38
- bool enable_thread_tracking) {
39
- if (!MaybeInitThreadLocalUpdater(env)) {
36
+ void ThreadStatusUtil::SetEnableTracking(bool enable_tracking) {
37
+ if (thread_updater_local_cache_ == nullptr) {
40
38
  return;
41
39
  }
42
- assert(thread_updater_local_cache_);
43
- if (cfd != nullptr && enable_thread_tracking) {
44
- thread_updater_local_cache_->SetColumnFamilyInfoKey(cfd);
45
- } else {
46
- // When cfd == nullptr or enable_thread_tracking == false, we set
47
- // ColumnFamilyInfoKey to nullptr, which makes SetThreadOperation
48
- // and SetThreadState become no-op.
49
- thread_updater_local_cache_->SetColumnFamilyInfoKey(nullptr);
40
+ thread_updater_local_cache_->SetEnableTracking(enable_tracking);
41
+ }
42
+
43
+ void ThreadStatusUtil::SetColumnFamily(const ColumnFamilyData* cfd) {
44
+ if (thread_updater_local_cache_ == nullptr) {
45
+ return;
50
46
  }
47
+ assert(cfd);
48
+ thread_updater_local_cache_->SetColumnFamilyInfoKey(cfd);
51
49
  }
52
50
 
53
51
  void ThreadStatusUtil::SetThreadOperation(ThreadStatus::OperationType op) {
54
52
  if (thread_updater_local_cache_ == nullptr) {
55
- // thread_updater_local_cache_ must be set in SetColumnFamily
56
- // or other ThreadStatusUtil functions.
57
53
  return;
58
54
  }
59
55
 
@@ -68,6 +64,13 @@ void ThreadStatusUtil::SetThreadOperation(ThreadStatus::OperationType op) {
68
64
  thread_updater_local_cache_->SetThreadOperation(op);
69
65
  }
70
66
 
67
+ ThreadStatus::OperationType ThreadStatusUtil::GetThreadOperation() {
68
+ if (thread_updater_local_cache_ == nullptr) {
69
+ return ThreadStatus::OperationType::OP_UNKNOWN;
70
+ }
71
+ return thread_updater_local_cache_->GetThreadOperation();
72
+ }
73
+
71
74
  ThreadStatus::OperationStage ThreadStatusUtil::SetThreadOperationStage(
72
75
  ThreadStatus::OperationStage stage) {
73
76
  if (thread_updater_local_cache_ == nullptr) {
@@ -172,9 +175,7 @@ bool ThreadStatusUtil::MaybeInitThreadLocalUpdater(const Env* /*env*/) {
172
175
  return false;
173
176
  }
174
177
 
175
- void ThreadStatusUtil::SetColumnFamily(const ColumnFamilyData* /*cfd*/,
176
- const Env* /*env*/,
177
- bool /*enable_thread_tracking*/) {}
178
+ void ThreadStatusUtil::SetColumnFamily(const ColumnFamilyData* /*cfd*/) {}
178
179
 
179
180
  void ThreadStatusUtil::SetThreadOperation(ThreadStatus::OperationType /*op*/) {}
180
181
 
@@ -189,7 +190,7 @@ void ThreadStatusUtil::SetThreadState(ThreadStatus::StateType /*state*/) {}
189
190
  void ThreadStatusUtil::NewColumnFamilyInfo(const DB* /*db*/,
190
191
  const ColumnFamilyData* /*cfd*/,
191
192
  const std::string& /*cf_name*/,
192
- const Env* /*env*/) {}
193
+ const Env* env) {}
193
194
 
194
195
  void ThreadStatusUtil::EraseColumnFamilyInfo(const ColumnFamilyData* /*cfd*/) {}
195
196
 
@@ -52,13 +52,18 @@ class ThreadStatusUtil {
52
52
  // the current thread does not hold db_mutex.
53
53
  static void EraseDatabaseInfo(const DB* db);
54
54
 
55
+ static void SetEnableTracking(bool enable_tracking);
56
+
55
57
  // Update the thread status to indicate the current thread is doing
56
58
  // something related to the specified column family.
57
- static void SetColumnFamily(const ColumnFamilyData* cfd, const Env* env,
58
- bool enable_thread_tracking);
59
+ //
60
+ // REQUIRES: cfd != nullptr
61
+ static void SetColumnFamily(const ColumnFamilyData* cfd);
59
62
 
60
63
  static void SetThreadOperation(ThreadStatus::OperationType type);
61
64
 
65
+ static ThreadStatus::OperationType GetThreadOperation();
66
+
62
67
  static ThreadStatus::OperationStage SetThreadOperationStage(
63
68
  ThreadStatus::OperationStage stage);
64
69
 
@@ -74,6 +79,9 @@ class ThreadStatusUtil {
74
79
  static void TEST_SetStateDelay(const ThreadStatus::StateType state,
75
80
  int micro);
76
81
  static void TEST_StateDelay(const ThreadStatus::StateType state);
82
+
83
+ static Env::IOActivity TEST_GetExpectedIOActivity(
84
+ ThreadStatus::OperationType thread_op);
77
85
  #endif
78
86
 
79
87
  protected:
@@ -27,6 +27,20 @@ void ThreadStatusUtil::TEST_StateDelay(const ThreadStatus::StateType state) {
27
27
  }
28
28
  }
29
29
 
30
+ Env::IOActivity ThreadStatusUtil::TEST_GetExpectedIOActivity(
31
+ ThreadStatus::OperationType thread_op) {
32
+ switch (thread_op) {
33
+ case ThreadStatus::OperationType::OP_FLUSH:
34
+ return Env::IOActivity::kFlush;
35
+ case ThreadStatus::OperationType::OP_COMPACTION:
36
+ return Env::IOActivity::kCompaction;
37
+ case ThreadStatus::OperationType::OP_DBOPEN:
38
+ return Env::IOActivity::kDBOpen;
39
+ default:
40
+ return Env::IOActivity::kUnknown;
41
+ }
42
+ }
43
+
30
44
  #endif // !NDEBUG
31
45
 
32
46
  } // namespace ROCKSDB_NAMESPACE
@@ -147,6 +147,10 @@ static std::unordered_map<std::string, OptionTypeInfo>
147
147
  {"strategy",
148
148
  {offsetof(struct CompressionOptions, strategy), OptionType::kInt,
149
149
  OptionVerificationType::kNormal, OptionTypeFlags::kMutable}},
150
+ {"max_compressed_bytes_per_kb",
151
+ {offsetof(struct CompressionOptions, max_compressed_bytes_per_kb),
152
+ OptionType::kInt, OptionVerificationType::kNormal,
153
+ OptionTypeFlags::kMutable}},
150
154
  {"max_dict_bytes",
151
155
  {offsetof(struct CompressionOptions, max_dict_bytes), OptionType::kInt,
152
156
  OptionVerificationType::kNormal, OptionTypeFlags::kMutable}},
@@ -171,6 +175,17 @@ static std::unordered_map<std::string, OptionTypeInfo>
171
175
  OptionTypeFlags::kMutable}},
172
176
  };
173
177
 
178
+ static std::unordered_map<std::string, OptionTypeInfo>
179
+ file_temperature_age_type_info = {
180
+ {"temperature",
181
+ {offsetof(struct FileTemperatureAge, temperature),
182
+ OptionType::kTemperature, OptionVerificationType::kNormal,
183
+ OptionTypeFlags::kMutable}},
184
+ {"age",
185
+ {offsetof(struct FileTemperatureAge, age), OptionType::kUInt64T,
186
+ OptionVerificationType::kNormal, OptionTypeFlags::kMutable}},
187
+ };
188
+
174
189
  static std::unordered_map<std::string, OptionTypeInfo>
175
190
  fifo_compaction_options_type_info = {
176
191
  {"max_table_files_size",
@@ -188,7 +203,15 @@ static std::unordered_map<std::string, OptionTypeInfo>
188
203
  {offsetof(struct CompactionOptionsFIFO, allow_compaction),
189
204
  OptionType::kBoolean, OptionVerificationType::kNormal,
190
205
  OptionTypeFlags::kMutable}},
191
- };
206
+ {"file_temperature_age_thresholds",
207
+ OptionTypeInfo::Vector<struct FileTemperatureAge>(
208
+ offsetof(struct CompactionOptionsFIFO,
209
+ file_temperature_age_thresholds),
210
+ OptionVerificationType::kNormal, OptionTypeFlags::kMutable,
211
+ OptionTypeInfo::Struct("file_temperature_age_thresholds",
212
+ &file_temperature_age_type_info, 0,
213
+ OptionVerificationType::kNormal,
214
+ OptionTypeFlags::kMutable))}};
192
215
 
193
216
  static std::unordered_map<std::string, OptionTypeInfo>
194
217
  universal_compaction_options_type_info = {
@@ -484,6 +507,10 @@ static std::unordered_map<std::string, OptionTypeInfo>
484
507
  {offsetof(struct MutableCFOptions, memtable_protection_bytes_per_key),
485
508
  OptionType::kUInt32T, OptionVerificationType::kNormal,
486
509
  OptionTypeFlags::kMutable}},
510
+ {"block_protection_bytes_per_key",
511
+ {offsetof(struct MutableCFOptions, block_protection_bytes_per_key),
512
+ OptionType::kUInt8T, OptionVerificationType::kNormal,
513
+ OptionTypeFlags::kMutable}},
487
514
  {kOptNameCompOpts,
488
515
  OptionTypeInfo::Struct(
489
516
  kOptNameCompOpts, &compression_options_type_info,
@@ -775,6 +802,10 @@ static std::unordered_map<std::string, OptionTypeInfo>
775
802
  auto* cache = static_cast<std::shared_ptr<Cache>*>(addr);
776
803
  return Cache::CreateFromString(opts, value, cache);
777
804
  }}},
805
+ {"persist_user_defined_timestamps",
806
+ {offsetof(struct ImmutableCFOptions, persist_user_defined_timestamps),
807
+ OptionType::kBoolean, OptionVerificationType::kNormal,
808
+ OptionTypeFlags::kCompareLoose}},
778
809
  };
779
810
 
780
811
  const std::string OptionsHelper::kCFOptionsName = "ColumnFamilyOptions";
@@ -918,7 +949,9 @@ ImmutableCFOptions::ImmutableCFOptions(const ColumnFamilyOptions& cf_options)
918
949
  cf_paths(cf_options.cf_paths),
919
950
  compaction_thread_limiter(cf_options.compaction_thread_limiter),
920
951
  sst_partitioner_factory(cf_options.sst_partitioner_factory),
921
- blob_cache(cf_options.blob_cache) {}
952
+ blob_cache(cf_options.blob_cache),
953
+ persist_user_defined_timestamps(
954
+ cf_options.persist_user_defined_timestamps) {}
922
955
 
923
956
  ImmutableOptions::ImmutableOptions() : ImmutableOptions(Options()) {}
924
957
 
@@ -86,6 +86,8 @@ struct ImmutableCFOptions {
86
86
  std::shared_ptr<SstPartitionerFactory> sst_partitioner_factory;
87
87
 
88
88
  std::shared_ptr<Cache> blob_cache;
89
+
90
+ bool persist_user_defined_timestamps;
89
91
  };
90
92
 
91
93
  struct ImmutableOptions : public ImmutableDBOptions, public ImmutableCFOptions {
@@ -170,6 +172,7 @@ struct MutableCFOptions {
170
172
  : options.last_level_temperature),
171
173
  memtable_protection_bytes_per_key(
172
174
  options.memtable_protection_bytes_per_key),
175
+ block_protection_bytes_per_key(options.block_protection_bytes_per_key),
173
176
  sample_for_compression(
174
177
  options.sample_for_compression), // TODO: is 0 fine here?
175
178
  compression_per_level(options.compression_per_level) {
@@ -220,6 +223,7 @@ struct MutableCFOptions {
220
223
  bottommost_compression(kDisableCompressionOption),
221
224
  last_level_temperature(Temperature::kUnknown),
222
225
  memtable_protection_bytes_per_key(0),
226
+ block_protection_bytes_per_key(0),
223
227
  sample_for_compression(0) {}
224
228
 
225
229
  explicit MutableCFOptions(const Options& options);
@@ -310,6 +314,7 @@ struct MutableCFOptions {
310
314
  CompressionOptions bottommost_compression_opts;
311
315
  Temperature last_level_temperature;
312
316
  uint32_t memtable_protection_bytes_per_key;
317
+ uint8_t block_protection_bytes_per_key;
313
318
 
314
319
  uint64_t sample_for_compression;
315
320
  std::vector<CompressionType> compression_per_level;
@@ -35,7 +35,7 @@
35
35
  #include "rocksdb/utilities/object_registry.h"
36
36
  #include "rocksdb/utilities/options_type.h"
37
37
  #include "table/block_based/filter_policy_internal.h"
38
- #include "table/block_based/flush_block_policy.h"
38
+ #include "table/block_based/flush_block_policy_impl.h"
39
39
  #include "table/mock_table.h"
40
40
  #include "test_util/mock_time_env.h"
41
41
  #include "test_util/testharness.h"
@@ -13,7 +13,7 @@
13
13
  #include <limits>
14
14
 
15
15
  #include "logging/logging.h"
16
- #include "monitoring/statistics.h"
16
+ #include "monitoring/statistics_impl.h"
17
17
  #include "options/db_options.h"
18
18
  #include "options/options_helper.h"
19
19
  #include "rocksdb/cache.h"
@@ -109,7 +109,8 @@ AdvancedColumnFamilyOptions::AdvancedColumnFamilyOptions(const Options& options)
109
109
  blob_compaction_readahead_size(options.blob_compaction_readahead_size),
110
110
  blob_file_starting_level(options.blob_file_starting_level),
111
111
  blob_cache(options.blob_cache),
112
- prepopulate_blob_cache(options.prepopulate_blob_cache) {
112
+ prepopulate_blob_cache(options.prepopulate_blob_cache),
113
+ persist_user_defined_timestamps(options.persist_user_defined_timestamps) {
113
114
  assert(memtable_factory.get() != nullptr);
114
115
  if (max_bytes_for_level_multiplier_additional.size() <
115
116
  static_cast<unsigned int>(num_levels)) {
@@ -137,6 +138,11 @@ void DBOptions::Dump(Logger* log) const {
137
138
  void ColumnFamilyOptions::Dump(Logger* log) const {
138
139
  ROCKS_LOG_HEADER(log, " Options.comparator: %s",
139
140
  comparator->Name());
141
+ if (comparator->timestamp_size() > 0) {
142
+ ROCKS_LOG_HEADER(
143
+ log, " Options.persist_user_defined_timestamps: %s",
144
+ persist_user_defined_timestamps ? "true" : "false");
145
+ }
140
146
  ROCKS_LOG_HEADER(log, " Options.merge_operator: %s",
141
147
  merge_operator ? merge_operator->Name() : "None");
142
148
  ROCKS_LOG_HEADER(log, " Options.compaction_filter: %s",
@@ -677,57 +683,10 @@ DBOptions* DBOptions::IncreaseParallelism(int total_threads) {
677
683
  return this;
678
684
  }
679
685
 
686
+ ReadOptions::ReadOptions(bool _verify_checksums, bool _fill_cache)
687
+ : verify_checksums(_verify_checksums), fill_cache(_fill_cache) {}
680
688
 
681
- ReadOptions::ReadOptions()
682
- : snapshot(nullptr),
683
- iterate_lower_bound(nullptr),
684
- iterate_upper_bound(nullptr),
685
- readahead_size(0),
686
- max_skippable_internal_keys(0),
687
- read_tier(kReadAllTier),
688
- verify_checksums(true),
689
- fill_cache(true),
690
- tailing(false),
691
- managed(false),
692
- total_order_seek(false),
693
- auto_prefix_mode(false),
694
- prefix_same_as_start(false),
695
- pin_data(false),
696
- background_purge_on_iterator_cleanup(false),
697
- ignore_range_deletions(false),
698
- timestamp(nullptr),
699
- iter_start_ts(nullptr),
700
- deadline(std::chrono::microseconds::zero()),
701
- io_timeout(std::chrono::microseconds::zero()),
702
- value_size_soft_limit(std::numeric_limits<uint64_t>::max()),
703
- adaptive_readahead(false),
704
- async_io(false),
705
- optimize_multiget_for_io(true) {}
706
-
707
- ReadOptions::ReadOptions(bool cksum, bool cache)
708
- : snapshot(nullptr),
709
- iterate_lower_bound(nullptr),
710
- iterate_upper_bound(nullptr),
711
- readahead_size(0),
712
- max_skippable_internal_keys(0),
713
- read_tier(kReadAllTier),
714
- verify_checksums(cksum),
715
- fill_cache(cache),
716
- tailing(false),
717
- managed(false),
718
- total_order_seek(false),
719
- auto_prefix_mode(false),
720
- prefix_same_as_start(false),
721
- pin_data(false),
722
- background_purge_on_iterator_cleanup(false),
723
- ignore_range_deletions(false),
724
- timestamp(nullptr),
725
- iter_start_ts(nullptr),
726
- deadline(std::chrono::microseconds::zero()),
727
- io_timeout(std::chrono::microseconds::zero()),
728
- value_size_soft_limit(std::numeric_limits<uint64_t>::max()),
729
- adaptive_readahead(false),
730
- async_io(false),
731
- optimize_multiget_for_io(true) {}
689
+ ReadOptions::ReadOptions(Env::IOActivity _io_activity)
690
+ : io_activity(_io_activity) {}
732
691
 
733
692
  } // namespace ROCKSDB_NAMESPACE
@@ -206,6 +206,8 @@ void UpdateColumnFamilyOptions(const MutableCFOptions& moptions,
206
206
  moptions.experimental_mempurge_threshold;
207
207
  cf_opts->memtable_protection_bytes_per_key =
208
208
  moptions.memtable_protection_bytes_per_key;
209
+ cf_opts->block_protection_bytes_per_key =
210
+ moptions.block_protection_bytes_per_key;
209
211
 
210
212
  // Compaction related options
211
213
  cf_opts->disable_auto_compactions = moptions.disable_auto_compactions;
@@ -308,6 +310,8 @@ void UpdateColumnFamilyOptions(const ImmutableCFOptions& ioptions,
308
310
  ioptions.preclude_last_level_data_seconds;
309
311
  cf_opts->preserve_internal_time_seconds =
310
312
  ioptions.preserve_internal_time_seconds;
313
+ cf_opts->persist_user_defined_timestamps =
314
+ ioptions.persist_user_defined_timestamps;
311
315
 
312
316
  // TODO(yhchiang): find some way to handle the following derived options
313
317
  // * max_file_size
@@ -75,6 +75,7 @@ Status PersistRocksDBOptions(const ConfigOptions& config_options_in,
75
75
  std::unique_ptr<WritableFileWriter> writable;
76
76
  writable.reset(new WritableFileWriter(std::move(wf), file_name, EnvOptions(),
77
77
  nullptr /* statistics */));
78
+ TEST_SYNC_POINT("PersistRocksDBOptions:create");
78
79
 
79
80
  std::string options_file_content;
80
81
 
@@ -135,6 +136,7 @@ Status PersistRocksDBOptions(const ConfigOptions& config_options_in,
135
136
  if (s.ok()) {
136
137
  s = writable->Close();
137
138
  }
139
+ TEST_SYNC_POINT("PersistRocksDBOptions:written");
138
140
  if (s.ok()) {
139
141
  return RocksDBOptionsParser::VerifyRocksDBOptionsFromFile(
140
142
  config_options, db_opt, cf_names, cf_opts, file_name, fs);
@@ -679,6 +681,15 @@ Status RocksDBOptionsParser::VerifyCFOptions(
679
681
  Status s = base_config->GetOption(config_options, mismatch, &base_value);
680
682
  if (s.ok()) {
681
683
  s = file_config->GetOption(config_options, mismatch, &file_value);
684
+ // In file_opt, certain options like MergeOperator may be nullptr due to
685
+ // factor methods not available. So we use opt_map to get
686
+ // option value to use in the error message below.
687
+ if (s.ok() && file_value == kNullptrString && opt_map) {
688
+ auto const& opt_val_str = (opt_map->find(mismatch));
689
+ if (opt_val_str != opt_map->end()) {
690
+ file_value = opt_val_str->second;
691
+ }
692
+ }
682
693
  }
683
694
  int offset = snprintf(buffer, sizeof(buffer),
684
695
  "[RocksDBOptionsParser]: "
@@ -400,6 +400,8 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
400
400
  {offsetof(struct ColumnFamilyOptions,
401
401
  max_bytes_for_level_multiplier_additional),
402
402
  sizeof(std::vector<int>)},
403
+ {offsetof(struct ColumnFamilyOptions, compaction_options_fifo),
404
+ sizeof(struct CompactionOptionsFIFO)},
403
405
  {offsetof(struct ColumnFamilyOptions, memtable_factory),
404
406
  sizeof(std::shared_ptr<MemTableRepFactory>)},
405
407
  {offsetof(struct ColumnFamilyOptions,
@@ -497,8 +499,13 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
497
499
  "max_bytes_for_level_multiplier=60;"
498
500
  "memtable_factory=SkipListFactory;"
499
501
  "compression=kNoCompression;"
500
- "compression_opts=5:6:7:8:9:10:true:11:false;"
501
- "bottommost_compression_opts=4:5:6:7:8:9:true:10:true;"
502
+ "compression_opts={max_dict_buffer_bytes=5;use_zstd_dict_trainer=true;"
503
+ "enabled=false;parallel_threads=6;zstd_max_train_bytes=7;strategy=8;max_"
504
+ "dict_bytes=9;level=10;window_bits=11;max_compressed_bytes_per_kb=987;};"
505
+ "bottommost_compression_opts={max_dict_buffer_bytes=4;use_zstd_dict_"
506
+ "trainer=true;enabled=true;parallel_threads=5;zstd_max_train_bytes=6;"
507
+ "strategy=7;max_dict_bytes=8;level=9;window_bits=10;max_compressed_bytes_"
508
+ "per_kb=876;};"
502
509
  "bottommost_compression=kDisableCompressionOption;"
503
510
  "level0_stop_writes_trigger=33;"
504
511
  "num_levels=99;"
@@ -544,9 +551,12 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
544
551
  "preclude_last_level_data_seconds=86400;"
545
552
  "preserve_internal_time_seconds=86400;"
546
553
  "compaction_options_fifo={max_table_files_size=3;allow_"
547
- "compaction=false;age_for_warm=1;};"
554
+ "compaction=true;age_for_warm=0;file_temperature_age_thresholds={{"
555
+ "temperature=kCold;age=12345}};};"
548
556
  "blob_cache=1M;"
549
- "memtable_protection_bytes_per_key=2;",
557
+ "memtable_protection_bytes_per_key=2;"
558
+ "persist_user_defined_timestamps=true;"
559
+ "block_protection_bytes_per_key=1;",
550
560
  new_options));
551
561
 
552
562
  ASSERT_NE(new_options->blob_cache.get(), nullptr);
@@ -555,6 +565,22 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
555
565
  NumUnsetBytes(new_options_ptr, sizeof(ColumnFamilyOptions),
556
566
  kColumnFamilyOptionsExcluded));
557
567
 
568
+ // Custom verification since compaction_options_fifo was in
569
+ // kColumnFamilyOptionsExcluded
570
+ ASSERT_EQ(new_options->compaction_options_fifo.max_table_files_size, 3);
571
+ ASSERT_EQ(new_options->compaction_options_fifo.allow_compaction, true);
572
+ ASSERT_EQ(new_options->compaction_options_fifo.file_temperature_age_thresholds
573
+ .size(),
574
+ 1);
575
+ ASSERT_EQ(
576
+ new_options->compaction_options_fifo.file_temperature_age_thresholds[0]
577
+ .temperature,
578
+ Temperature::kCold);
579
+ ASSERT_EQ(
580
+ new_options->compaction_options_fifo.file_temperature_age_thresholds[0]
581
+ .age,
582
+ 12345);
583
+
558
584
  ColumnFamilyOptions rnd_filled_options = *new_options;
559
585
 
560
586
  options->~ColumnFamilyOptions();
@@ -571,6 +597,8 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
571
597
  {offsetof(struct MutableCFOptions,
572
598
  max_bytes_for_level_multiplier_additional),
573
599
  sizeof(std::vector<int>)},
600
+ {offsetof(struct MutableCFOptions, compaction_options_fifo),
601
+ sizeof(struct CompactionOptionsFIFO)},
574
602
  {offsetof(struct MutableCFOptions, compression_per_level),
575
603
  sizeof(std::vector<CompressionType>)},
576
604
  {offsetof(struct MutableCFOptions, max_file_size),