@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
@@ -10,6 +10,154 @@
10
10
 
11
11
  namespace ROCKSDB_NAMESPACE {
12
12
 
13
+ /*
14
+ * Please add new metrics to this macro and appropriate fields will be copied,
15
+ * and/or emitted when converted to string.
16
+ * When people need to add new metrics please add the metric to the macro below
17
+ * and enclose the name of the specific metric within defCmd().
18
+ * The position of the field will be dictated by the
19
+ * order in which the macros are enumerated and the offsets of the fields will
20
+ * be matched against ''PerfContextByLevelBase'' declared in perf_context.h.
21
+ */
22
+ // clang-format off
23
+ #define DEF_PERF_CONTEXT_LEVEL_METRICS(defCmd) \
24
+ defCmd(bloom_filter_useful) \
25
+ defCmd(bloom_filter_full_positive) \
26
+ defCmd(bloom_filter_full_true_positive) \
27
+ defCmd(user_key_return_count) \
28
+ defCmd(get_from_table_nanos) \
29
+ defCmd(block_cache_hit_count) \
30
+ defCmd(block_cache_miss_count)
31
+ // clang-format on
32
+
33
+ // Break down performance counters by level and store per-level perf context in
34
+ // PerfContextByLevel
35
+ struct PerfContextByLevelInt {
36
+ #define EMIT_FIELDS(x) uint64_t x = 0;
37
+ DEF_PERF_CONTEXT_LEVEL_METRICS(EMIT_FIELDS)
38
+ #undef EMIT_FIELDS
39
+ };
40
+
41
+ /*
42
+ * Please add new metrics to this macro and appropriate fields will be copied,
43
+ * and/or emitted when converted to string.
44
+ * When people need to add new metrics please enclose the name of the specific
45
+ * metric within defCmd(). The position of the field will be dictated by the
46
+ * order in which the macros are enumerated and the offsets of the fields will
47
+ * be matched against ''PerfContextBase'' declared in perf_context.h.
48
+ */
49
+
50
+ // clang-format off
51
+ #define DEF_PERF_CONTEXT_METRICS(defCmd) \
52
+ defCmd(user_key_comparison_count) \
53
+ defCmd(block_cache_hit_count) \
54
+ defCmd(block_read_count) \
55
+ defCmd(block_read_byte) \
56
+ defCmd(block_read_time) \
57
+ defCmd(block_read_cpu_time) \
58
+ defCmd(block_cache_index_hit_count) \
59
+ defCmd(block_cache_standalone_handle_count) \
60
+ defCmd(block_cache_real_handle_count) \
61
+ defCmd(index_block_read_count) \
62
+ defCmd(block_cache_filter_hit_count) \
63
+ defCmd(filter_block_read_count) \
64
+ defCmd(compression_dict_block_read_count) \
65
+ defCmd(secondary_cache_hit_count) \
66
+ defCmd(compressed_sec_cache_insert_real_count) \
67
+ defCmd(compressed_sec_cache_insert_dummy_count) \
68
+ defCmd(compressed_sec_cache_uncompressed_bytes) \
69
+ defCmd(compressed_sec_cache_compressed_bytes) \
70
+ defCmd(block_checksum_time) \
71
+ defCmd(block_decompress_time) \
72
+ defCmd(get_read_bytes) \
73
+ defCmd(multiget_read_bytes) \
74
+ defCmd(iter_read_bytes) \
75
+ defCmd(blob_cache_hit_count) \
76
+ defCmd(blob_read_count) \
77
+ defCmd(blob_read_byte) \
78
+ defCmd(blob_read_time) \
79
+ defCmd(blob_checksum_time) \
80
+ defCmd(blob_decompress_time) \
81
+ defCmd(internal_key_skipped_count) \
82
+ defCmd(internal_delete_skipped_count) \
83
+ defCmd(internal_recent_skipped_count) \
84
+ defCmd(internal_merge_count) \
85
+ defCmd(internal_merge_point_lookup_count) \
86
+ defCmd(internal_range_del_reseek_count) \
87
+ defCmd(get_snapshot_time) \
88
+ defCmd(get_from_memtable_time) \
89
+ defCmd(get_from_memtable_count) \
90
+ defCmd(get_post_process_time) \
91
+ defCmd(get_from_output_files_time) \
92
+ defCmd(seek_on_memtable_time) \
93
+ defCmd(seek_on_memtable_count) \
94
+ defCmd(next_on_memtable_count) \
95
+ defCmd(prev_on_memtable_count) \
96
+ defCmd(seek_child_seek_time) \
97
+ defCmd(seek_child_seek_count) \
98
+ defCmd(seek_min_heap_time) \
99
+ defCmd(seek_max_heap_time) \
100
+ defCmd(seek_internal_seek_time) \
101
+ defCmd(find_next_user_entry_time) \
102
+ defCmd(write_wal_time) \
103
+ defCmd(write_memtable_time) \
104
+ defCmd(write_delay_time) \
105
+ defCmd(write_scheduling_flushes_compactions_time)\
106
+ defCmd(write_pre_and_post_process_time) \
107
+ defCmd(write_thread_wait_nanos) \
108
+ defCmd(db_mutex_lock_nanos) \
109
+ defCmd(db_condition_wait_nanos) \
110
+ defCmd(merge_operator_time_nanos) \
111
+ defCmd(read_index_block_nanos) \
112
+ defCmd(read_filter_block_nanos) \
113
+ defCmd(new_table_block_iter_nanos) \
114
+ defCmd(new_table_iterator_nanos) \
115
+ defCmd(block_seek_nanos) \
116
+ defCmd(find_table_nanos) \
117
+ defCmd(bloom_memtable_hit_count) \
118
+ defCmd(bloom_memtable_miss_count) \
119
+ defCmd(bloom_sst_hit_count) \
120
+ defCmd(bloom_sst_miss_count) \
121
+ defCmd(key_lock_wait_time) \
122
+ defCmd(key_lock_wait_count) \
123
+ defCmd(env_new_sequential_file_nanos) \
124
+ defCmd(env_new_random_access_file_nanos) \
125
+ defCmd(env_new_writable_file_nanos) \
126
+ defCmd(env_reuse_writable_file_nanos) \
127
+ defCmd(env_new_random_rw_file_nanos) \
128
+ defCmd(env_new_directory_nanos) \
129
+ defCmd(env_file_exists_nanos) \
130
+ defCmd(env_get_children_nanos) \
131
+ defCmd(env_get_children_file_attributes_nanos) \
132
+ defCmd(env_delete_file_nanos) \
133
+ defCmd(env_create_dir_nanos) \
134
+ defCmd(env_create_dir_if_missing_nanos) \
135
+ defCmd(env_delete_dir_nanos) \
136
+ defCmd(env_get_file_size_nanos) \
137
+ defCmd(env_get_file_modification_time_nanos) \
138
+ defCmd(env_rename_file_nanos) \
139
+ defCmd(env_link_file_nanos) \
140
+ defCmd(env_lock_file_nanos) \
141
+ defCmd(env_unlock_file_nanos) \
142
+ defCmd(env_new_logger_nanos) \
143
+ defCmd(get_cpu_nanos) \
144
+ defCmd(iter_next_cpu_nanos) \
145
+ defCmd(iter_prev_cpu_nanos) \
146
+ defCmd(iter_seek_cpu_nanos) \
147
+ defCmd(iter_next_count) \
148
+ defCmd(iter_prev_count) \
149
+ defCmd(iter_seek_count) \
150
+ defCmd(encrypt_data_nanos) \
151
+ defCmd(decrypt_data_nanos) \
152
+ defCmd(number_async_seek)
153
+ // clang-format on
154
+
155
+ struct PerfContextInt {
156
+ #define EMIT_FIELDS(x) uint64_t x;
157
+ DEF_PERF_CONTEXT_METRICS(EMIT_FIELDS)
158
+ #undef EMIT_FIELDS
159
+ };
160
+
13
161
  #if defined(NPERF_CONTEXT)
14
162
  // Should not be used because the counters are not thread-safe.
15
163
  // Put here just to make get_perf_context() simple without ifdef.
@@ -18,7 +166,30 @@ PerfContext perf_context;
18
166
  thread_local PerfContext perf_context;
19
167
  #endif
20
168
 
21
- PerfContext* get_perf_context() { return &perf_context; }
169
+ PerfContext* get_perf_context() {
170
+ static_assert(sizeof(PerfContextBase) == sizeof(PerfContextInt));
171
+ static_assert(sizeof(PerfContextByLevelBase) ==
172
+ sizeof(PerfContextByLevelInt));
173
+ /*
174
+ * Validate that we have the same fields and offsets between the external user
175
+ * facing
176
+ * ''PerfContextBase'' and ''PerfContextByLevelBase' structures with the
177
+ * internal structures that we generate from the DEF_* macros above. This way
178
+ * if people add metrics to the user-facing header file, they will have a
179
+ * build failure and need to add similar fields to the macros in this file.
180
+ * These are compile-time validations and don't impose any run-time penalties.
181
+ */
182
+ #define EMIT_OFFSET_ASSERTION(x) \
183
+ static_assert(offsetof(PerfContextBase, x) == offsetof(PerfContextInt, x));
184
+ DEF_PERF_CONTEXT_METRICS(EMIT_OFFSET_ASSERTION)
185
+ #undef EMIT_OFFSET_ASSERTION
186
+ #define EMIT_OFFSET_ASSERTION(x) \
187
+ static_assert(offsetof(PerfContextByLevelBase, x) == \
188
+ offsetof(PerfContextByLevelInt, x));
189
+ DEF_PERF_CONTEXT_LEVEL_METRICS(EMIT_OFFSET_ASSERTION)
190
+ #undef EMIT_OFFSET_ASSERTION
191
+ return &perf_context;
192
+ }
22
193
 
23
194
  PerfContext::~PerfContext() {
24
195
  #if !defined(NPERF_CONTEXT) && !defined(OS_SOLARIS)
@@ -30,119 +201,7 @@ PerfContext::PerfContext(const PerfContext& other) {
30
201
  #ifdef NPERF_CONTEXT
31
202
  (void)other;
32
203
  #else
33
- user_key_comparison_count = other.user_key_comparison_count;
34
- block_cache_hit_count = other.block_cache_hit_count;
35
- block_read_count = other.block_read_count;
36
- block_read_byte = other.block_read_byte;
37
- block_read_time = other.block_read_time;
38
- block_cache_index_hit_count = other.block_cache_index_hit_count;
39
- block_cache_standalone_handle_count =
40
- other.block_cache_standalone_handle_count;
41
- block_cache_real_handle_count = other.block_cache_real_handle_count;
42
- index_block_read_count = other.index_block_read_count;
43
- block_cache_filter_hit_count = other.block_cache_filter_hit_count;
44
- filter_block_read_count = other.filter_block_read_count;
45
- compression_dict_block_read_count = other.compression_dict_block_read_count;
46
- secondary_cache_hit_count = other.secondary_cache_hit_count;
47
- compressed_sec_cache_insert_real_count =
48
- other.compressed_sec_cache_insert_real_count;
49
- compressed_sec_cache_insert_dummy_count =
50
- other.compressed_sec_cache_insert_dummy_count;
51
- compressed_sec_cache_uncompressed_bytes =
52
- other.compressed_sec_cache_uncompressed_bytes;
53
- compressed_sec_cache_compressed_bytes =
54
- other.compressed_sec_cache_compressed_bytes;
55
- block_checksum_time = other.block_checksum_time;
56
- block_decompress_time = other.block_decompress_time;
57
- get_read_bytes = other.get_read_bytes;
58
- multiget_read_bytes = other.multiget_read_bytes;
59
- iter_read_bytes = other.iter_read_bytes;
60
-
61
- blob_cache_hit_count = other.blob_cache_hit_count;
62
- blob_read_count = other.blob_read_count;
63
- blob_read_byte = other.blob_read_byte;
64
- blob_read_time = other.blob_read_time;
65
- blob_checksum_time = other.blob_checksum_time;
66
- blob_decompress_time = other.blob_decompress_time;
67
-
68
- internal_key_skipped_count = other.internal_key_skipped_count;
69
- internal_delete_skipped_count = other.internal_delete_skipped_count;
70
- internal_recent_skipped_count = other.internal_recent_skipped_count;
71
- internal_merge_count = other.internal_merge_count;
72
- internal_merge_point_lookup_count = other.internal_merge_point_lookup_count;
73
- internal_range_del_reseek_count = other.internal_range_del_reseek_count;
74
- write_wal_time = other.write_wal_time;
75
- get_snapshot_time = other.get_snapshot_time;
76
- get_from_memtable_time = other.get_from_memtable_time;
77
- get_from_memtable_count = other.get_from_memtable_count;
78
- get_post_process_time = other.get_post_process_time;
79
- get_from_output_files_time = other.get_from_output_files_time;
80
- seek_on_memtable_time = other.seek_on_memtable_time;
81
- seek_on_memtable_count = other.seek_on_memtable_count;
82
- next_on_memtable_count = other.next_on_memtable_count;
83
- prev_on_memtable_count = other.prev_on_memtable_count;
84
- seek_child_seek_time = other.seek_child_seek_time;
85
- seek_child_seek_count = other.seek_child_seek_count;
86
- seek_min_heap_time = other.seek_min_heap_time;
87
- seek_internal_seek_time = other.seek_internal_seek_time;
88
- find_next_user_entry_time = other.find_next_user_entry_time;
89
- write_pre_and_post_process_time = other.write_pre_and_post_process_time;
90
- write_memtable_time = other.write_memtable_time;
91
- write_delay_time = other.write_delay_time;
92
- write_thread_wait_nanos = other.write_thread_wait_nanos;
93
- write_scheduling_flushes_compactions_time =
94
- other.write_scheduling_flushes_compactions_time;
95
- db_mutex_lock_nanos = other.db_mutex_lock_nanos;
96
- db_condition_wait_nanos = other.db_condition_wait_nanos;
97
- merge_operator_time_nanos = other.merge_operator_time_nanos;
98
- read_index_block_nanos = other.read_index_block_nanos;
99
- read_filter_block_nanos = other.read_filter_block_nanos;
100
- new_table_block_iter_nanos = other.new_table_block_iter_nanos;
101
- new_table_iterator_nanos = other.new_table_iterator_nanos;
102
- block_seek_nanos = other.block_seek_nanos;
103
- find_table_nanos = other.find_table_nanos;
104
- bloom_memtable_hit_count = other.bloom_memtable_hit_count;
105
- bloom_memtable_miss_count = other.bloom_memtable_miss_count;
106
- bloom_sst_hit_count = other.bloom_sst_hit_count;
107
- bloom_sst_miss_count = other.bloom_sst_miss_count;
108
- key_lock_wait_time = other.key_lock_wait_time;
109
- key_lock_wait_count = other.key_lock_wait_count;
110
-
111
- env_new_sequential_file_nanos = other.env_new_sequential_file_nanos;
112
- env_new_random_access_file_nanos = other.env_new_random_access_file_nanos;
113
- env_new_writable_file_nanos = other.env_new_writable_file_nanos;
114
- env_reuse_writable_file_nanos = other.env_reuse_writable_file_nanos;
115
- env_new_random_rw_file_nanos = other.env_new_random_rw_file_nanos;
116
- env_new_directory_nanos = other.env_new_directory_nanos;
117
- env_file_exists_nanos = other.env_file_exists_nanos;
118
- env_get_children_nanos = other.env_get_children_nanos;
119
- env_get_children_file_attributes_nanos =
120
- other.env_get_children_file_attributes_nanos;
121
- env_delete_file_nanos = other.env_delete_file_nanos;
122
- env_create_dir_nanos = other.env_create_dir_nanos;
123
- env_create_dir_if_missing_nanos = other.env_create_dir_if_missing_nanos;
124
- env_delete_dir_nanos = other.env_delete_dir_nanos;
125
- env_get_file_size_nanos = other.env_get_file_size_nanos;
126
- env_get_file_modification_time_nanos =
127
- other.env_get_file_modification_time_nanos;
128
- env_rename_file_nanos = other.env_rename_file_nanos;
129
- env_link_file_nanos = other.env_link_file_nanos;
130
- env_lock_file_nanos = other.env_lock_file_nanos;
131
- env_unlock_file_nanos = other.env_unlock_file_nanos;
132
- env_new_logger_nanos = other.env_new_logger_nanos;
133
- get_cpu_nanos = other.get_cpu_nanos;
134
- iter_next_cpu_nanos = other.iter_next_cpu_nanos;
135
- iter_prev_cpu_nanos = other.iter_prev_cpu_nanos;
136
- iter_seek_cpu_nanos = other.iter_seek_cpu_nanos;
137
- number_async_seek = other.number_async_seek;
138
- if (per_level_perf_context_enabled && level_to_perf_context != nullptr) {
139
- ClearPerLevelPerfContext();
140
- }
141
- if (other.level_to_perf_context != nullptr) {
142
- level_to_perf_context = new std::map<uint32_t, PerfContextByLevel>();
143
- *level_to_perf_context = *other.level_to_perf_context;
144
- }
145
- per_level_perf_context_enabled = other.per_level_perf_context_enabled;
204
+ copyMetrics(&other);
146
205
  #endif
147
206
  }
148
207
 
@@ -150,345 +209,42 @@ PerfContext::PerfContext(PerfContext&& other) noexcept {
150
209
  #ifdef NPERF_CONTEXT
151
210
  (void)other;
152
211
  #else
153
- user_key_comparison_count = other.user_key_comparison_count;
154
- block_cache_hit_count = other.block_cache_hit_count;
155
- block_read_count = other.block_read_count;
156
- block_read_byte = other.block_read_byte;
157
- block_read_time = other.block_read_time;
158
- block_cache_index_hit_count = other.block_cache_index_hit_count;
159
- block_cache_standalone_handle_count =
160
- other.block_cache_standalone_handle_count;
161
- block_cache_real_handle_count = other.block_cache_real_handle_count;
162
- index_block_read_count = other.index_block_read_count;
163
- block_cache_filter_hit_count = other.block_cache_filter_hit_count;
164
- filter_block_read_count = other.filter_block_read_count;
165
- compression_dict_block_read_count = other.compression_dict_block_read_count;
166
- secondary_cache_hit_count = other.secondary_cache_hit_count;
167
- compressed_sec_cache_insert_real_count =
168
- other.compressed_sec_cache_insert_real_count;
169
- compressed_sec_cache_insert_dummy_count =
170
- other.compressed_sec_cache_insert_dummy_count;
171
- compressed_sec_cache_uncompressed_bytes =
172
- other.compressed_sec_cache_uncompressed_bytes;
173
- compressed_sec_cache_compressed_bytes =
174
- other.compressed_sec_cache_compressed_bytes;
175
- block_checksum_time = other.block_checksum_time;
176
- block_decompress_time = other.block_decompress_time;
177
- get_read_bytes = other.get_read_bytes;
178
- multiget_read_bytes = other.multiget_read_bytes;
179
- iter_read_bytes = other.iter_read_bytes;
180
-
181
- blob_cache_hit_count = other.blob_cache_hit_count;
182
- blob_read_count = other.blob_read_count;
183
- blob_read_byte = other.blob_read_byte;
184
- blob_read_time = other.blob_read_time;
185
- blob_checksum_time = other.blob_checksum_time;
186
- blob_decompress_time = other.blob_decompress_time;
187
-
188
- internal_key_skipped_count = other.internal_key_skipped_count;
189
- internal_delete_skipped_count = other.internal_delete_skipped_count;
190
- internal_recent_skipped_count = other.internal_recent_skipped_count;
191
- internal_merge_count = other.internal_merge_count;
192
- internal_merge_point_lookup_count = other.internal_merge_point_lookup_count;
193
- internal_range_del_reseek_count = other.internal_range_del_reseek_count;
194
- write_wal_time = other.write_wal_time;
195
- get_snapshot_time = other.get_snapshot_time;
196
- get_from_memtable_time = other.get_from_memtable_time;
197
- get_from_memtable_count = other.get_from_memtable_count;
198
- get_post_process_time = other.get_post_process_time;
199
- get_from_output_files_time = other.get_from_output_files_time;
200
- seek_on_memtable_time = other.seek_on_memtable_time;
201
- seek_on_memtable_count = other.seek_on_memtable_count;
202
- next_on_memtable_count = other.next_on_memtable_count;
203
- prev_on_memtable_count = other.prev_on_memtable_count;
204
- seek_child_seek_time = other.seek_child_seek_time;
205
- seek_child_seek_count = other.seek_child_seek_count;
206
- seek_min_heap_time = other.seek_min_heap_time;
207
- seek_internal_seek_time = other.seek_internal_seek_time;
208
- find_next_user_entry_time = other.find_next_user_entry_time;
209
- write_pre_and_post_process_time = other.write_pre_and_post_process_time;
210
- write_memtable_time = other.write_memtable_time;
211
- write_delay_time = other.write_delay_time;
212
- write_thread_wait_nanos = other.write_thread_wait_nanos;
213
- write_scheduling_flushes_compactions_time =
214
- other.write_scheduling_flushes_compactions_time;
215
- db_mutex_lock_nanos = other.db_mutex_lock_nanos;
216
- db_condition_wait_nanos = other.db_condition_wait_nanos;
217
- merge_operator_time_nanos = other.merge_operator_time_nanos;
218
- read_index_block_nanos = other.read_index_block_nanos;
219
- read_filter_block_nanos = other.read_filter_block_nanos;
220
- new_table_block_iter_nanos = other.new_table_block_iter_nanos;
221
- new_table_iterator_nanos = other.new_table_iterator_nanos;
222
- block_seek_nanos = other.block_seek_nanos;
223
- find_table_nanos = other.find_table_nanos;
224
- bloom_memtable_hit_count = other.bloom_memtable_hit_count;
225
- bloom_memtable_miss_count = other.bloom_memtable_miss_count;
226
- bloom_sst_hit_count = other.bloom_sst_hit_count;
227
- bloom_sst_miss_count = other.bloom_sst_miss_count;
228
- key_lock_wait_time = other.key_lock_wait_time;
229
- key_lock_wait_count = other.key_lock_wait_count;
230
-
231
- env_new_sequential_file_nanos = other.env_new_sequential_file_nanos;
232
- env_new_random_access_file_nanos = other.env_new_random_access_file_nanos;
233
- env_new_writable_file_nanos = other.env_new_writable_file_nanos;
234
- env_reuse_writable_file_nanos = other.env_reuse_writable_file_nanos;
235
- env_new_random_rw_file_nanos = other.env_new_random_rw_file_nanos;
236
- env_new_directory_nanos = other.env_new_directory_nanos;
237
- env_file_exists_nanos = other.env_file_exists_nanos;
238
- env_get_children_nanos = other.env_get_children_nanos;
239
- env_get_children_file_attributes_nanos =
240
- other.env_get_children_file_attributes_nanos;
241
- env_delete_file_nanos = other.env_delete_file_nanos;
242
- env_create_dir_nanos = other.env_create_dir_nanos;
243
- env_create_dir_if_missing_nanos = other.env_create_dir_if_missing_nanos;
244
- env_delete_dir_nanos = other.env_delete_dir_nanos;
245
- env_get_file_size_nanos = other.env_get_file_size_nanos;
246
- env_get_file_modification_time_nanos =
247
- other.env_get_file_modification_time_nanos;
248
- env_rename_file_nanos = other.env_rename_file_nanos;
249
- env_link_file_nanos = other.env_link_file_nanos;
250
- env_lock_file_nanos = other.env_lock_file_nanos;
251
- env_unlock_file_nanos = other.env_unlock_file_nanos;
252
- env_new_logger_nanos = other.env_new_logger_nanos;
253
- get_cpu_nanos = other.get_cpu_nanos;
254
- iter_next_cpu_nanos = other.iter_next_cpu_nanos;
255
- iter_prev_cpu_nanos = other.iter_prev_cpu_nanos;
256
- iter_seek_cpu_nanos = other.iter_seek_cpu_nanos;
257
- number_async_seek = other.number_async_seek;
258
- if (per_level_perf_context_enabled && level_to_perf_context != nullptr) {
259
- ClearPerLevelPerfContext();
260
- }
261
- if (other.level_to_perf_context != nullptr) {
262
- level_to_perf_context = other.level_to_perf_context;
263
- other.level_to_perf_context = nullptr;
264
- }
265
- per_level_perf_context_enabled = other.per_level_perf_context_enabled;
212
+ copyMetrics(&other);
266
213
  #endif
267
214
  }
268
215
 
269
- // TODO(Zhongyi): reduce code duplication between copy constructor and
270
- // assignment operator
271
216
  PerfContext& PerfContext::operator=(const PerfContext& other) {
272
217
  #ifdef NPERF_CONTEXT
273
218
  (void)other;
274
219
  #else
275
- user_key_comparison_count = other.user_key_comparison_count;
276
- block_cache_hit_count = other.block_cache_hit_count;
277
- block_read_count = other.block_read_count;
278
- block_read_byte = other.block_read_byte;
279
- block_read_time = other.block_read_time;
280
- block_cache_index_hit_count = other.block_cache_index_hit_count;
281
- block_cache_standalone_handle_count =
282
- other.block_cache_standalone_handle_count;
283
- block_cache_real_handle_count = other.block_cache_real_handle_count;
284
- index_block_read_count = other.index_block_read_count;
285
- block_cache_filter_hit_count = other.block_cache_filter_hit_count;
286
- filter_block_read_count = other.filter_block_read_count;
287
- compression_dict_block_read_count = other.compression_dict_block_read_count;
288
- secondary_cache_hit_count = other.secondary_cache_hit_count;
289
- compressed_sec_cache_insert_real_count =
290
- other.compressed_sec_cache_insert_real_count;
291
- compressed_sec_cache_insert_dummy_count =
292
- other.compressed_sec_cache_insert_dummy_count;
293
- compressed_sec_cache_uncompressed_bytes =
294
- other.compressed_sec_cache_uncompressed_bytes;
295
- compressed_sec_cache_compressed_bytes =
296
- other.compressed_sec_cache_compressed_bytes;
297
- block_checksum_time = other.block_checksum_time;
298
- block_decompress_time = other.block_decompress_time;
299
- get_read_bytes = other.get_read_bytes;
300
- multiget_read_bytes = other.multiget_read_bytes;
301
- iter_read_bytes = other.iter_read_bytes;
302
-
303
- blob_cache_hit_count = other.blob_cache_hit_count;
304
- blob_read_count = other.blob_read_count;
305
- blob_read_byte = other.blob_read_byte;
306
- blob_read_time = other.blob_read_time;
307
- blob_checksum_time = other.blob_checksum_time;
308
- blob_decompress_time = other.blob_decompress_time;
309
-
310
- internal_key_skipped_count = other.internal_key_skipped_count;
311
- internal_delete_skipped_count = other.internal_delete_skipped_count;
312
- internal_recent_skipped_count = other.internal_recent_skipped_count;
313
- internal_merge_count = other.internal_merge_count;
314
- internal_merge_point_lookup_count = other.internal_merge_point_lookup_count;
315
- internal_range_del_reseek_count = other.internal_range_del_reseek_count;
316
- write_wal_time = other.write_wal_time;
317
- get_snapshot_time = other.get_snapshot_time;
318
- get_from_memtable_time = other.get_from_memtable_time;
319
- get_from_memtable_count = other.get_from_memtable_count;
320
- get_post_process_time = other.get_post_process_time;
321
- get_from_output_files_time = other.get_from_output_files_time;
322
- seek_on_memtable_time = other.seek_on_memtable_time;
323
- seek_on_memtable_count = other.seek_on_memtable_count;
324
- next_on_memtable_count = other.next_on_memtable_count;
325
- prev_on_memtable_count = other.prev_on_memtable_count;
326
- seek_child_seek_time = other.seek_child_seek_time;
327
- seek_child_seek_count = other.seek_child_seek_count;
328
- seek_min_heap_time = other.seek_min_heap_time;
329
- seek_internal_seek_time = other.seek_internal_seek_time;
330
- find_next_user_entry_time = other.find_next_user_entry_time;
331
- write_pre_and_post_process_time = other.write_pre_and_post_process_time;
332
- write_memtable_time = other.write_memtable_time;
333
- write_delay_time = other.write_delay_time;
334
- write_thread_wait_nanos = other.write_thread_wait_nanos;
335
- write_scheduling_flushes_compactions_time =
336
- other.write_scheduling_flushes_compactions_time;
337
- db_mutex_lock_nanos = other.db_mutex_lock_nanos;
338
- db_condition_wait_nanos = other.db_condition_wait_nanos;
339
- merge_operator_time_nanos = other.merge_operator_time_nanos;
340
- read_index_block_nanos = other.read_index_block_nanos;
341
- read_filter_block_nanos = other.read_filter_block_nanos;
342
- new_table_block_iter_nanos = other.new_table_block_iter_nanos;
343
- new_table_iterator_nanos = other.new_table_iterator_nanos;
344
- block_seek_nanos = other.block_seek_nanos;
345
- find_table_nanos = other.find_table_nanos;
346
- bloom_memtable_hit_count = other.bloom_memtable_hit_count;
347
- bloom_memtable_miss_count = other.bloom_memtable_miss_count;
348
- bloom_sst_hit_count = other.bloom_sst_hit_count;
349
- bloom_sst_miss_count = other.bloom_sst_miss_count;
350
- key_lock_wait_time = other.key_lock_wait_time;
351
- key_lock_wait_count = other.key_lock_wait_count;
220
+ copyMetrics(&other);
221
+ #endif
222
+ return *this;
223
+ }
352
224
 
353
- env_new_sequential_file_nanos = other.env_new_sequential_file_nanos;
354
- env_new_random_access_file_nanos = other.env_new_random_access_file_nanos;
355
- env_new_writable_file_nanos = other.env_new_writable_file_nanos;
356
- env_reuse_writable_file_nanos = other.env_reuse_writable_file_nanos;
357
- env_new_random_rw_file_nanos = other.env_new_random_rw_file_nanos;
358
- env_new_directory_nanos = other.env_new_directory_nanos;
359
- env_file_exists_nanos = other.env_file_exists_nanos;
360
- env_get_children_nanos = other.env_get_children_nanos;
361
- env_get_children_file_attributes_nanos =
362
- other.env_get_children_file_attributes_nanos;
363
- env_delete_file_nanos = other.env_delete_file_nanos;
364
- env_create_dir_nanos = other.env_create_dir_nanos;
365
- env_create_dir_if_missing_nanos = other.env_create_dir_if_missing_nanos;
366
- env_delete_dir_nanos = other.env_delete_dir_nanos;
367
- env_get_file_size_nanos = other.env_get_file_size_nanos;
368
- env_get_file_modification_time_nanos =
369
- other.env_get_file_modification_time_nanos;
370
- env_rename_file_nanos = other.env_rename_file_nanos;
371
- env_link_file_nanos = other.env_link_file_nanos;
372
- env_lock_file_nanos = other.env_lock_file_nanos;
373
- env_unlock_file_nanos = other.env_unlock_file_nanos;
374
- env_new_logger_nanos = other.env_new_logger_nanos;
375
- get_cpu_nanos = other.get_cpu_nanos;
376
- iter_next_cpu_nanos = other.iter_next_cpu_nanos;
377
- iter_prev_cpu_nanos = other.iter_prev_cpu_nanos;
378
- iter_seek_cpu_nanos = other.iter_seek_cpu_nanos;
379
- number_async_seek = other.number_async_seek;
225
+ void PerfContext::copyMetrics(const PerfContext* other) noexcept {
226
+ #ifdef NPERF_CONTEXT
227
+ (void)other;
228
+ #else
229
+ #define EMIT_COPY_FIELDS(x) x = other->x;
230
+ DEF_PERF_CONTEXT_METRICS(EMIT_COPY_FIELDS)
231
+ #undef EMIT_COPY_FIELDS
380
232
  if (per_level_perf_context_enabled && level_to_perf_context != nullptr) {
381
233
  ClearPerLevelPerfContext();
382
234
  }
383
- if (other.level_to_perf_context != nullptr) {
235
+ if (other->level_to_perf_context != nullptr) {
384
236
  level_to_perf_context = new std::map<uint32_t, PerfContextByLevel>();
385
- *level_to_perf_context = *other.level_to_perf_context;
237
+ *level_to_perf_context = *other->level_to_perf_context;
386
238
  }
387
- per_level_perf_context_enabled = other.per_level_perf_context_enabled;
239
+ per_level_perf_context_enabled = other->per_level_perf_context_enabled;
388
240
  #endif
389
- return *this;
390
241
  }
391
242
 
392
243
  void PerfContext::Reset() {
393
244
  #ifndef NPERF_CONTEXT
394
- user_key_comparison_count = 0;
395
- block_cache_hit_count = 0;
396
- block_read_count = 0;
397
- block_read_byte = 0;
398
- block_read_time = 0;
399
- block_cache_index_hit_count = 0;
400
- block_cache_standalone_handle_count = 0;
401
- block_cache_real_handle_count = 0;
402
- index_block_read_count = 0;
403
- block_cache_filter_hit_count = 0;
404
- filter_block_read_count = 0;
405
- compression_dict_block_read_count = 0;
406
- secondary_cache_hit_count = 0;
407
- compressed_sec_cache_insert_real_count = 0;
408
- compressed_sec_cache_insert_dummy_count = 0;
409
- compressed_sec_cache_uncompressed_bytes = 0;
410
- compressed_sec_cache_compressed_bytes = 0;
411
- block_checksum_time = 0;
412
- block_decompress_time = 0;
413
- get_read_bytes = 0;
414
- multiget_read_bytes = 0;
415
- iter_read_bytes = 0;
416
-
417
- blob_cache_hit_count = 0;
418
- blob_read_count = 0;
419
- blob_read_byte = 0;
420
- blob_read_time = 0;
421
- blob_checksum_time = 0;
422
- blob_decompress_time = 0;
423
-
424
- internal_key_skipped_count = 0;
425
- internal_delete_skipped_count = 0;
426
- internal_recent_skipped_count = 0;
427
- internal_merge_count = 0;
428
- internal_merge_point_lookup_count = 0;
429
- internal_range_del_reseek_count = 0;
430
- write_wal_time = 0;
431
-
432
- get_snapshot_time = 0;
433
- get_from_memtable_time = 0;
434
- get_from_memtable_count = 0;
435
- get_post_process_time = 0;
436
- get_from_output_files_time = 0;
437
- seek_on_memtable_time = 0;
438
- seek_on_memtable_count = 0;
439
- next_on_memtable_count = 0;
440
- prev_on_memtable_count = 0;
441
- seek_child_seek_time = 0;
442
- seek_child_seek_count = 0;
443
- seek_min_heap_time = 0;
444
- seek_internal_seek_time = 0;
445
- find_next_user_entry_time = 0;
446
- write_pre_and_post_process_time = 0;
447
- write_memtable_time = 0;
448
- write_delay_time = 0;
449
- write_thread_wait_nanos = 0;
450
- write_scheduling_flushes_compactions_time = 0;
451
- db_mutex_lock_nanos = 0;
452
- db_condition_wait_nanos = 0;
453
- merge_operator_time_nanos = 0;
454
- read_index_block_nanos = 0;
455
- read_filter_block_nanos = 0;
456
- new_table_block_iter_nanos = 0;
457
- new_table_iterator_nanos = 0;
458
- block_seek_nanos = 0;
459
- find_table_nanos = 0;
460
- bloom_memtable_hit_count = 0;
461
- bloom_memtable_miss_count = 0;
462
- bloom_sst_hit_count = 0;
463
- bloom_sst_miss_count = 0;
464
- key_lock_wait_time = 0;
465
- key_lock_wait_count = 0;
466
-
467
- env_new_sequential_file_nanos = 0;
468
- env_new_random_access_file_nanos = 0;
469
- env_new_writable_file_nanos = 0;
470
- env_reuse_writable_file_nanos = 0;
471
- env_new_random_rw_file_nanos = 0;
472
- env_new_directory_nanos = 0;
473
- env_file_exists_nanos = 0;
474
- env_get_children_nanos = 0;
475
- env_get_children_file_attributes_nanos = 0;
476
- env_delete_file_nanos = 0;
477
- env_create_dir_nanos = 0;
478
- env_create_dir_if_missing_nanos = 0;
479
- env_delete_dir_nanos = 0;
480
- env_get_file_size_nanos = 0;
481
- env_get_file_modification_time_nanos = 0;
482
- env_rename_file_nanos = 0;
483
- env_link_file_nanos = 0;
484
- env_lock_file_nanos = 0;
485
- env_unlock_file_nanos = 0;
486
- env_new_logger_nanos = 0;
487
- get_cpu_nanos = 0;
488
- iter_next_cpu_nanos = 0;
489
- iter_prev_cpu_nanos = 0;
490
- iter_seek_cpu_nanos = 0;
491
- number_async_seek = 0;
245
+ #define EMIT_FIELDS(x) x = 0;
246
+ DEF_PERF_CONTEXT_METRICS(EMIT_FIELDS)
247
+ #undef EMIT_FIELDS
492
248
  if (per_level_perf_context_enabled && level_to_perf_context) {
493
249
  for (auto& kv : *level_to_perf_context) {
494
250
  kv.second.Reset();
@@ -497,28 +253,11 @@ void PerfContext::Reset() {
497
253
  #endif
498
254
  }
499
255
 
500
- #define PERF_CONTEXT_OUTPUT(counter) \
501
- if (!exclude_zero_counters || (counter > 0)) { \
502
- ss << #counter << " = " << counter << ", "; \
503
- }
504
-
505
- #define PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(counter) \
506
- if (per_level_perf_context_enabled && level_to_perf_context) { \
507
- ss << #counter << " = "; \
508
- for (auto& kv : *level_to_perf_context) { \
509
- if (!exclude_zero_counters || (kv.second.counter > 0)) { \
510
- ss << kv.second.counter << "@level" << kv.first << ", "; \
511
- } \
512
- } \
513
- }
514
-
515
256
  void PerfContextByLevel::Reset() {
516
257
  #ifndef NPERF_CONTEXT
517
- bloom_filter_useful = 0;
518
- bloom_filter_full_positive = 0;
519
- bloom_filter_full_true_positive = 0;
520
- block_cache_hit_count = 0;
521
- block_cache_miss_count = 0;
258
+ #define EMIT_FIELDS(x) x = 0;
259
+ DEF_PERF_CONTEXT_LEVEL_METRICS(EMIT_FIELDS)
260
+ #undef EMIT_FIELDS
522
261
  #endif
523
262
  }
524
263
 
@@ -528,106 +267,23 @@ std::string PerfContext::ToString(bool exclude_zero_counters) const {
528
267
  return "";
529
268
  #else
530
269
  std::ostringstream ss;
531
- PERF_CONTEXT_OUTPUT(user_key_comparison_count);
532
- PERF_CONTEXT_OUTPUT(block_cache_hit_count);
533
- PERF_CONTEXT_OUTPUT(block_read_count);
534
- PERF_CONTEXT_OUTPUT(block_read_byte);
535
- PERF_CONTEXT_OUTPUT(block_read_time);
536
- PERF_CONTEXT_OUTPUT(block_cache_index_hit_count);
537
- PERF_CONTEXT_OUTPUT(block_cache_standalone_handle_count);
538
- PERF_CONTEXT_OUTPUT(block_cache_real_handle_count);
539
- PERF_CONTEXT_OUTPUT(index_block_read_count);
540
- PERF_CONTEXT_OUTPUT(block_cache_filter_hit_count);
541
- PERF_CONTEXT_OUTPUT(filter_block_read_count);
542
- PERF_CONTEXT_OUTPUT(compression_dict_block_read_count);
543
- PERF_CONTEXT_OUTPUT(secondary_cache_hit_count);
544
- PERF_CONTEXT_OUTPUT(compressed_sec_cache_insert_real_count);
545
- PERF_CONTEXT_OUTPUT(compressed_sec_cache_insert_dummy_count);
546
- PERF_CONTEXT_OUTPUT(compressed_sec_cache_uncompressed_bytes);
547
- PERF_CONTEXT_OUTPUT(compressed_sec_cache_compressed_bytes);
548
- PERF_CONTEXT_OUTPUT(block_checksum_time);
549
- PERF_CONTEXT_OUTPUT(block_decompress_time);
550
- PERF_CONTEXT_OUTPUT(get_read_bytes);
551
- PERF_CONTEXT_OUTPUT(multiget_read_bytes);
552
- PERF_CONTEXT_OUTPUT(iter_read_bytes);
553
- PERF_CONTEXT_OUTPUT(blob_cache_hit_count);
554
- PERF_CONTEXT_OUTPUT(blob_read_count);
555
- PERF_CONTEXT_OUTPUT(blob_read_byte);
556
- PERF_CONTEXT_OUTPUT(blob_read_time);
557
- PERF_CONTEXT_OUTPUT(blob_checksum_time);
558
- PERF_CONTEXT_OUTPUT(blob_decompress_time);
559
- PERF_CONTEXT_OUTPUT(internal_key_skipped_count);
560
- PERF_CONTEXT_OUTPUT(internal_delete_skipped_count);
561
- PERF_CONTEXT_OUTPUT(internal_recent_skipped_count);
562
- PERF_CONTEXT_OUTPUT(internal_merge_count);
563
- PERF_CONTEXT_OUTPUT(internal_merge_point_lookup_count);
564
- PERF_CONTEXT_OUTPUT(internal_range_del_reseek_count);
565
- PERF_CONTEXT_OUTPUT(write_wal_time);
566
- PERF_CONTEXT_OUTPUT(get_snapshot_time);
567
- PERF_CONTEXT_OUTPUT(get_from_memtable_time);
568
- PERF_CONTEXT_OUTPUT(get_from_memtable_count);
569
- PERF_CONTEXT_OUTPUT(get_post_process_time);
570
- PERF_CONTEXT_OUTPUT(get_from_output_files_time);
571
- PERF_CONTEXT_OUTPUT(seek_on_memtable_time);
572
- PERF_CONTEXT_OUTPUT(seek_on_memtable_count);
573
- PERF_CONTEXT_OUTPUT(next_on_memtable_count);
574
- PERF_CONTEXT_OUTPUT(prev_on_memtable_count);
575
- PERF_CONTEXT_OUTPUT(seek_child_seek_time);
576
- PERF_CONTEXT_OUTPUT(seek_child_seek_count);
577
- PERF_CONTEXT_OUTPUT(seek_min_heap_time);
578
- PERF_CONTEXT_OUTPUT(seek_internal_seek_time);
579
- PERF_CONTEXT_OUTPUT(find_next_user_entry_time);
580
- PERF_CONTEXT_OUTPUT(write_pre_and_post_process_time);
581
- PERF_CONTEXT_OUTPUT(write_memtable_time);
582
- PERF_CONTEXT_OUTPUT(write_thread_wait_nanos);
583
- PERF_CONTEXT_OUTPUT(write_scheduling_flushes_compactions_time);
584
- PERF_CONTEXT_OUTPUT(db_mutex_lock_nanos);
585
- PERF_CONTEXT_OUTPUT(db_condition_wait_nanos);
586
- PERF_CONTEXT_OUTPUT(merge_operator_time_nanos);
587
- PERF_CONTEXT_OUTPUT(write_delay_time);
588
- PERF_CONTEXT_OUTPUT(read_index_block_nanos);
589
- PERF_CONTEXT_OUTPUT(read_filter_block_nanos);
590
- PERF_CONTEXT_OUTPUT(new_table_block_iter_nanos);
591
- PERF_CONTEXT_OUTPUT(new_table_iterator_nanos);
592
- PERF_CONTEXT_OUTPUT(block_seek_nanos);
593
- PERF_CONTEXT_OUTPUT(find_table_nanos);
594
- PERF_CONTEXT_OUTPUT(bloom_memtable_hit_count);
595
- PERF_CONTEXT_OUTPUT(bloom_memtable_miss_count);
596
- PERF_CONTEXT_OUTPUT(bloom_sst_hit_count);
597
- PERF_CONTEXT_OUTPUT(bloom_sst_miss_count);
598
- PERF_CONTEXT_OUTPUT(key_lock_wait_time);
599
- PERF_CONTEXT_OUTPUT(key_lock_wait_count);
600
- PERF_CONTEXT_OUTPUT(env_new_sequential_file_nanos);
601
- PERF_CONTEXT_OUTPUT(env_new_random_access_file_nanos);
602
- PERF_CONTEXT_OUTPUT(env_new_writable_file_nanos);
603
- PERF_CONTEXT_OUTPUT(env_reuse_writable_file_nanos);
604
- PERF_CONTEXT_OUTPUT(env_new_random_rw_file_nanos);
605
- PERF_CONTEXT_OUTPUT(env_new_directory_nanos);
606
- PERF_CONTEXT_OUTPUT(env_file_exists_nanos);
607
- PERF_CONTEXT_OUTPUT(env_get_children_nanos);
608
- PERF_CONTEXT_OUTPUT(env_get_children_file_attributes_nanos);
609
- PERF_CONTEXT_OUTPUT(env_delete_file_nanos);
610
- PERF_CONTEXT_OUTPUT(env_create_dir_nanos);
611
- PERF_CONTEXT_OUTPUT(env_create_dir_if_missing_nanos);
612
- PERF_CONTEXT_OUTPUT(env_delete_dir_nanos);
613
- PERF_CONTEXT_OUTPUT(env_get_file_size_nanos);
614
- PERF_CONTEXT_OUTPUT(env_get_file_modification_time_nanos);
615
- PERF_CONTEXT_OUTPUT(env_rename_file_nanos);
616
- PERF_CONTEXT_OUTPUT(env_link_file_nanos);
617
- PERF_CONTEXT_OUTPUT(env_lock_file_nanos);
618
- PERF_CONTEXT_OUTPUT(env_unlock_file_nanos);
619
- PERF_CONTEXT_OUTPUT(env_new_logger_nanos);
620
- PERF_CONTEXT_OUTPUT(get_cpu_nanos);
621
- PERF_CONTEXT_OUTPUT(iter_next_cpu_nanos);
622
- PERF_CONTEXT_OUTPUT(iter_prev_cpu_nanos);
623
- PERF_CONTEXT_OUTPUT(iter_seek_cpu_nanos);
624
- PERF_CONTEXT_OUTPUT(number_async_seek);
625
- PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(bloom_filter_useful);
626
- PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(bloom_filter_full_positive);
627
- PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(bloom_filter_full_true_positive);
628
- PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(block_cache_hit_count);
629
- PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(block_cache_miss_count);
630
-
270
+ #define PERF_CONTEXT_OUTPUT(counter) \
271
+ if (!exclude_zero_counters || (counter > 0)) { \
272
+ ss << #counter << " = " << counter << ", "; \
273
+ }
274
+ DEF_PERF_CONTEXT_METRICS(PERF_CONTEXT_OUTPUT)
275
+ #undef PERF_CONTEXT_OUTPUT
276
+ if (per_level_perf_context_enabled && level_to_perf_context) {
277
+ #define PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER(counter) \
278
+ ss << #counter << " = "; \
279
+ for (auto& kv : *level_to_perf_context) { \
280
+ if (!exclude_zero_counters || (kv.second.counter > 0)) { \
281
+ ss << kv.second.counter << "@level" << kv.first << ", "; \
282
+ } \
283
+ }
284
+ DEF_PERF_CONTEXT_LEVEL_METRICS(PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER)
285
+ #undef PERF_CONTEXT_BY_LEVEL_OUTPUT_ONE_COUNTER
286
+ }
631
287
  std::string str = ss.str();
632
288
  str.erase(str.find_last_not_of(", ") + 1);
633
289
  return str;