@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
@@ -43,6 +43,16 @@ const std::string kStandard128Ribbon =
43
43
  test::Standard128RibbonFilterPolicy::kClassName();
44
44
  const std::string kAutoBloom = BloomFilterPolicy::kClassName();
45
45
  const std::string kAutoRibbon = RibbonFilterPolicy::kClassName();
46
+
47
+ template <typename T>
48
+ T Pop(T& var) {
49
+ auto rv = var;
50
+ var = 0;
51
+ return rv;
52
+ }
53
+ PerfContextByLevel& GetLevelPerfContext(uint32_t level) {
54
+ return (*(get_perf_context()->level_to_perf_context))[level];
55
+ }
46
56
  } // anonymous namespace
47
57
 
48
58
  // DB tests related to bloom filter.
@@ -209,57 +219,43 @@ TEST_F(DBBloomFilterTest, GetFilterByPrefixBloomCustomPrefixExtractor) {
209
219
  ASSERT_OK(dbfull()->Flush(fo));
210
220
 
211
221
  ASSERT_EQ("foo", Get("barbarbar"));
212
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 0);
213
- ASSERT_EQ(
214
- 0,
215
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
222
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
223
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 0);
224
+
216
225
  ASSERT_EQ("foo2", Get("barbarbar2"));
217
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 0);
218
- ASSERT_EQ(
219
- 0,
220
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
226
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
227
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 0);
228
+
221
229
  ASSERT_EQ("NOT_FOUND", Get("barbarbar3"));
222
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 0);
223
- ASSERT_EQ(
224
- 0,
225
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
230
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
231
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 0);
226
232
 
227
233
  ASSERT_EQ("NOT_FOUND", Get("barfoofoo"));
228
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
229
- ASSERT_EQ(
230
- 1,
231
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
234
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
235
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 1);
232
236
 
233
237
  ASSERT_EQ("NOT_FOUND", Get("foobarbar"));
234
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 2);
235
- ASSERT_EQ(
236
- 2,
237
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
238
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
239
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 1);
238
240
 
239
241
  ro.total_order_seek = true;
240
242
  // NOTE: total_order_seek no longer affects Get()
241
243
  ASSERT_EQ("NOT_FOUND", Get("foobarbar"));
242
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 3);
243
- ASSERT_EQ(
244
- 3,
245
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
244
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
245
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 1);
246
246
 
247
247
  // No bloom on extractor changed
248
248
  ASSERT_OK(db_->SetOptions({{"prefix_extractor", "capped:10"}}));
249
249
  ASSERT_EQ("NOT_FOUND", Get("foobarbar"));
250
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 3);
251
- ASSERT_EQ(
252
- 3,
253
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
250
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
251
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 0);
254
252
 
255
253
  // No bloom on extractor changed, after re-open
256
254
  options.prefix_extractor.reset(NewCappedPrefixTransform(10));
257
255
  Reopen(options);
258
256
  ASSERT_EQ("NOT_FOUND", Get("foobarbar"));
259
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 3);
260
- ASSERT_EQ(
261
- 3,
262
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
257
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
258
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 0);
263
259
 
264
260
  get_perf_context()->Reset();
265
261
  }
@@ -294,33 +290,32 @@ TEST_F(DBBloomFilterTest, GetFilterByPrefixBloom) {
294
290
  ASSERT_OK(dbfull()->Flush(fo));
295
291
 
296
292
  ASSERT_EQ("foo", Get("barbarbar"));
297
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 0);
293
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
298
294
  ASSERT_EQ("foo2", Get("barbarbar2"));
299
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 0);
295
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
300
296
  ASSERT_EQ("NOT_FOUND", Get("barbarbar3"));
301
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 0);
297
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
298
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 0);
302
299
 
303
300
  ASSERT_EQ("NOT_FOUND", Get("barfoofoo"));
304
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
301
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
302
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 1);
305
303
 
306
304
  ASSERT_EQ("NOT_FOUND", Get("foobarbar"));
307
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 2);
305
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
306
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 1);
308
307
 
309
308
  ro.total_order_seek = true;
310
309
  // NOTE: total_order_seek no longer affects Get()
311
310
  ASSERT_EQ("NOT_FOUND", Get("foobarbar"));
312
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 3);
313
- ASSERT_EQ(
314
- 3,
315
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
311
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
312
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 1);
316
313
 
317
314
  // No bloom on extractor changed
318
315
  ASSERT_OK(db_->SetOptions({{"prefix_extractor", "capped:10"}}));
319
316
  ASSERT_EQ("NOT_FOUND", Get("foobarbar"));
320
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 3);
321
- ASSERT_EQ(
322
- 3,
323
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful);
317
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
318
+ EXPECT_EQ(Pop(GetLevelPerfContext(0).bloom_filter_useful), 0);
324
319
 
325
320
  get_perf_context()->Reset();
326
321
  }
@@ -357,12 +352,17 @@ TEST_F(DBBloomFilterTest, WholeKeyFilterProp) {
357
352
  ASSERT_OK(dbfull()->Flush(fo));
358
353
 
359
354
  Reopen(options);
355
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
356
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
360
357
  ASSERT_EQ("NOT_FOUND", Get("foo"));
361
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 0);
358
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
359
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
362
360
  ASSERT_EQ("NOT_FOUND", Get("bar"));
363
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
361
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
362
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
364
363
  ASSERT_EQ("foo", Get("foobar"));
365
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
364
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
365
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
366
366
 
367
367
  // Reopen with whole key filtering enabled and prefix extractor
368
368
  // NULL. Bloom filter should be off for both of whole key and
@@ -372,13 +372,17 @@ TEST_F(DBBloomFilterTest, WholeKeyFilterProp) {
372
372
  options.prefix_extractor.reset();
373
373
  Reopen(options);
374
374
 
375
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
375
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
376
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
376
377
  ASSERT_EQ("NOT_FOUND", Get("foo"));
377
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
378
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
379
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
378
380
  ASSERT_EQ("NOT_FOUND", Get("bar"));
379
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
381
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
382
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
380
383
  ASSERT_EQ("foo", Get("foobar"));
381
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
384
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
385
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
382
386
  // Write DB with only full key filtering.
383
387
  ASSERT_OK(dbfull()->Put(wo, "foobar", "foo"));
384
388
  // Needs insert some keys to make sure files are not filtered out by key
@@ -394,13 +398,17 @@ TEST_F(DBBloomFilterTest, WholeKeyFilterProp) {
394
398
  options.table_factory.reset(NewBlockBasedTableFactory(bbto));
395
399
  Reopen(options);
396
400
 
397
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
401
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
402
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
398
403
  ASSERT_EQ("NOT_FOUND", Get("foo"));
399
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
404
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
405
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
400
406
  ASSERT_EQ("NOT_FOUND", Get("bar"));
401
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
407
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
408
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
402
409
  ASSERT_EQ("foo", Get("foobar"));
403
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
410
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
411
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
404
412
 
405
413
  // Try to create a DB with mixed files:
406
414
  ASSERT_OK(dbfull()->Put(wo, "foobar", "foo"));
@@ -424,61 +432,81 @@ TEST_F(DBBloomFilterTest, WholeKeyFilterProp) {
424
432
  ASSERT_OK(Flush());
425
433
 
426
434
  // Now we have two files:
427
- // File 1: An older file with prefix bloom.
435
+ // File 1: An older file with prefix bloom (disabled)
428
436
  // File 2: A newer file with whole bloom filter.
429
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
437
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
438
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
430
439
  ASSERT_EQ("NOT_FOUND", Get("foo"));
431
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 2);
440
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
441
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
432
442
  ASSERT_EQ("NOT_FOUND", Get("bar"));
433
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 3);
443
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
444
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
434
445
  ASSERT_EQ("foo", Get("foobar"));
435
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 4);
446
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
447
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
436
448
  ASSERT_EQ("bar", Get("barfoo"));
437
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 4);
449
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
450
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
438
451
 
439
452
  // Reopen with the same setting: only whole key is used
440
453
  Reopen(options);
441
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 4);
454
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
455
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
442
456
  ASSERT_EQ("NOT_FOUND", Get("foo"));
443
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 5);
457
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
458
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
444
459
  ASSERT_EQ("NOT_FOUND", Get("bar"));
445
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 6);
460
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
461
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
446
462
  ASSERT_EQ("foo", Get("foobar"));
447
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 7);
463
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
464
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
448
465
  ASSERT_EQ("bar", Get("barfoo"));
449
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 7);
466
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
467
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
450
468
 
451
469
  // Restart with both filters are allowed
452
470
  options.prefix_extractor.reset(NewFixedPrefixTransform(3));
453
471
  bbto.whole_key_filtering = true;
454
472
  options.table_factory.reset(NewBlockBasedTableFactory(bbto));
455
473
  Reopen(options);
456
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 7);
474
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
475
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
457
476
  // File 1 will has it filtered out.
458
477
  // File 2 will not, as prefix `foo` exists in the file.
459
478
  ASSERT_EQ("NOT_FOUND", Get("foo"));
460
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 8);
479
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
480
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
461
481
  ASSERT_EQ("NOT_FOUND", Get("bar"));
462
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 10);
482
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
483
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
463
484
  ASSERT_EQ("foo", Get("foobar"));
464
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 11);
485
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
486
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
465
487
  ASSERT_EQ("bar", Get("barfoo"));
466
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 11);
488
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
489
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
467
490
 
468
491
  // Restart with only prefix bloom is allowed.
469
492
  options.prefix_extractor.reset(NewFixedPrefixTransform(3));
470
493
  bbto.whole_key_filtering = false;
471
494
  options.table_factory.reset(NewBlockBasedTableFactory(bbto));
472
495
  Reopen(options);
473
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 11);
496
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
497
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
474
498
  ASSERT_EQ("NOT_FOUND", Get("foo"));
475
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 11);
499
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
500
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
476
501
  ASSERT_EQ("NOT_FOUND", Get("bar"));
477
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 12);
502
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
503
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
478
504
  ASSERT_EQ("foo", Get("foobar"));
479
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 12);
505
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
506
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
480
507
  ASSERT_EQ("bar", Get("barfoo"));
481
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), 12);
508
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
509
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 0);
482
510
  uint64_t bloom_filter_useful_all_levels = 0;
483
511
  for (auto& kv : (*(get_perf_context()->level_to_perf_context))) {
484
512
  if (kv.second.bloom_filter_useful > 0) {
@@ -696,11 +724,8 @@ TEST_P(DBBloomFilterTestWithParam, SkipFilterOnEssentiallyZeroBpk) {
696
724
  PutAndGetFn();
697
725
 
698
726
  // Verify filter is accessed (and constructed)
699
- EXPECT_EQ(TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_POSITIVE),
700
- maxKey * 2);
701
- EXPECT_EQ(
702
- TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_TRUE_POSITIVE),
703
- maxKey);
727
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_FULL_POSITIVE), maxKey * 2);
728
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_FULL_TRUE_POSITIVE), maxKey);
704
729
  props.clear();
705
730
  ASSERT_TRUE(db_->GetMapProperty(kAggTableProps, &props));
706
731
  EXPECT_NE(props["filter_size"], "0");
@@ -715,11 +740,8 @@ TEST_P(DBBloomFilterTestWithParam, SkipFilterOnEssentiallyZeroBpk) {
715
740
  GetFn();
716
741
 
717
742
  // Verify filter is accessed
718
- EXPECT_EQ(TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_POSITIVE),
719
- maxKey * 2);
720
- EXPECT_EQ(
721
- TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_TRUE_POSITIVE),
722
- maxKey);
743
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_FULL_POSITIVE), maxKey * 2);
744
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_FULL_TRUE_POSITIVE), maxKey);
723
745
 
724
746
  // But new filters are not generated (configuration details unknown)
725
747
  DestroyAndReopen(options);
@@ -783,9 +805,7 @@ TEST_F(DBBloomFilterTest, BloomFilterRate) {
783
805
  ASSERT_EQ("NOT_FOUND", Get(1, Key(i + 33333)));
784
806
  }
785
807
  ASSERT_GE(TestGetTickerCount(options, BLOOM_FILTER_USEFUL), maxKey * 0.98);
786
- ASSERT_GE(
787
- (*(get_perf_context()->level_to_perf_context))[0].bloom_filter_useful,
788
- maxKey * 0.98);
808
+ ASSERT_GE(GetLevelPerfContext(0).bloom_filter_useful, maxKey * 0.98);
789
809
  get_perf_context()->Reset();
790
810
  }
791
811
  }
@@ -864,9 +884,8 @@ TEST_F(DBBloomFilterTest, BloomFilterCompatibility) {
864
884
  ASSERT_EQ("val", Get(prefix + "Z")); // Filter positive
865
885
  // Filter negative, with high probability
866
886
  ASSERT_EQ("NOT_FOUND", Get(prefix + "Q"));
867
- EXPECT_EQ(TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_POSITIVE),
868
- 2);
869
- EXPECT_EQ(TestGetAndResetTickerCount(options, BLOOM_FILTER_USEFUL), 1);
887
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_FULL_POSITIVE), 2);
888
+ EXPECT_EQ(PopTicker(options, BLOOM_FILTER_USEFUL), 1);
870
889
  }
871
890
  }
872
891
  }
@@ -1705,7 +1724,7 @@ TEST_F(DBBloomFilterTest, ContextCustomFilterPolicy) {
1705
1724
  }
1706
1725
  // Since we have two tables / two filters, we might have Bloom checks on
1707
1726
  // our queries, but no more than one "useful" per query on a found key.
1708
- EXPECT_LE(TestGetAndResetTickerCount(options, BLOOM_FILTER_USEFUL), maxKey);
1727
+ EXPECT_LE(PopTicker(options, BLOOM_FILTER_USEFUL), maxKey);
1709
1728
 
1710
1729
  // Check that we have two filters, each about
1711
1730
  // fifo: 0.12% FP rate (15 bits per key)
@@ -1714,8 +1733,7 @@ TEST_F(DBBloomFilterTest, ContextCustomFilterPolicy) {
1714
1733
  ASSERT_EQ("NOT_FOUND", Get(1, Key(i + 33333)));
1715
1734
  }
1716
1735
  {
1717
- auto useful_count =
1718
- TestGetAndResetTickerCount(options, BLOOM_FILTER_USEFUL);
1736
+ auto useful_count = PopTicker(options, BLOOM_FILTER_USEFUL);
1719
1737
  EXPECT_GE(useful_count, maxKey * 2 * (fifo ? 0.9980 : 0.975));
1720
1738
  EXPECT_LE(useful_count, maxKey * 2 * (fifo ? 0.9995 : 0.98));
1721
1739
  }
@@ -1732,8 +1750,7 @@ TEST_F(DBBloomFilterTest, ContextCustomFilterPolicy) {
1732
1750
  ASSERT_EQ("NOT_FOUND", Get(1, Key(i + 33333)));
1733
1751
  }
1734
1752
  {
1735
- auto useful_count =
1736
- TestGetAndResetTickerCount(options, BLOOM_FILTER_USEFUL);
1753
+ auto useful_count = PopTicker(options, BLOOM_FILTER_USEFUL);
1737
1754
  EXPECT_GE(useful_count, maxKey * 0.90);
1738
1755
  EXPECT_LE(useful_count, maxKey * 0.91);
1739
1756
  }
@@ -2027,13 +2044,14 @@ TEST_P(DBBloomFilterTestVaryPrefixAndFormatVer, PartitionedMultiGet) {
2027
2044
  std::array<Status, Q> statuses;
2028
2045
  std::array<PinnableSlice, Q> values;
2029
2046
 
2030
- TestGetAndResetTickerCount(options, BLOCK_CACHE_FILTER_HIT);
2031
- TestGetAndResetTickerCount(options, BLOCK_CACHE_FILTER_MISS);
2032
- TestGetAndResetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL);
2033
- TestGetAndResetTickerCount(options, BLOOM_FILTER_USEFUL);
2034
- TestGetAndResetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED);
2035
- TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_POSITIVE);
2036
- TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_TRUE_POSITIVE);
2047
+ PopTicker(options, BLOCK_CACHE_FILTER_HIT);
2048
+ PopTicker(options, BLOCK_CACHE_FILTER_MISS);
2049
+ PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL);
2050
+ PopTicker(options, BLOOM_FILTER_USEFUL);
2051
+ PopTicker(options, BLOOM_FILTER_PREFIX_CHECKED);
2052
+ PopTicker(options, BLOOM_FILTER_FULL_POSITIVE);
2053
+ PopTicker(options, BLOOM_FILTER_FULL_TRUE_POSITIVE);
2054
+ PopTicker(options, BLOOM_FILTER_PREFIX_TRUE_POSITIVE);
2037
2055
 
2038
2056
  // Check that initial clump of keys only loads one partition filter from
2039
2057
  // block cache.
@@ -2063,26 +2081,22 @@ TEST_P(DBBloomFilterTestVaryPrefixAndFormatVer, PartitionedMultiGet) {
2063
2081
  }
2064
2082
 
2065
2083
  // Confirm correct Bloom stats (no FPs)
2066
- uint64_t filter_useful = TestGetAndResetTickerCount(
2067
- options,
2068
- use_prefix_ ? BLOOM_FILTER_PREFIX_USEFUL : BLOOM_FILTER_USEFUL);
2084
+ uint64_t filter_useful =
2085
+ PopTicker(options, use_prefix_ ? BLOOM_FILTER_PREFIX_USEFUL
2086
+ : BLOOM_FILTER_USEFUL);
2069
2087
  uint64_t filter_checked =
2070
- TestGetAndResetTickerCount(options, use_prefix_
2071
- ? BLOOM_FILTER_PREFIX_CHECKED
2072
- : BLOOM_FILTER_FULL_POSITIVE) +
2088
+ PopTicker(options, use_prefix_ ? BLOOM_FILTER_PREFIX_CHECKED
2089
+ : BLOOM_FILTER_FULL_POSITIVE) +
2073
2090
  (use_prefix_ ? 0 : filter_useful);
2074
2091
  EXPECT_EQ(filter_useful, number_not_found);
2075
2092
  EXPECT_EQ(filter_checked, Q);
2076
- if (!use_prefix_) {
2077
- EXPECT_EQ(
2078
- TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_TRUE_POSITIVE),
2079
- Q - number_not_found);
2080
- }
2093
+ EXPECT_EQ(PopTicker(options, use_prefix_ ? BLOOM_FILTER_PREFIX_TRUE_POSITIVE
2094
+ : BLOOM_FILTER_FULL_TRUE_POSITIVE),
2095
+ Q - number_not_found);
2081
2096
 
2082
2097
  // Confirm no duplicate loading same filter partition
2083
- uint64_t filter_accesses =
2084
- TestGetAndResetTickerCount(options, BLOCK_CACHE_FILTER_HIT) +
2085
- TestGetAndResetTickerCount(options, BLOCK_CACHE_FILTER_MISS);
2098
+ uint64_t filter_accesses = PopTicker(options, BLOCK_CACHE_FILTER_HIT) +
2099
+ PopTicker(options, BLOCK_CACHE_FILTER_MISS);
2086
2100
  if (stride == 1) {
2087
2101
  EXPECT_EQ(filter_accesses, 1);
2088
2102
  } else {
@@ -2118,26 +2132,22 @@ TEST_P(DBBloomFilterTestVaryPrefixAndFormatVer, PartitionedMultiGet) {
2118
2132
  }
2119
2133
 
2120
2134
  // Confirm correct Bloom stats (might see some FPs)
2121
- uint64_t filter_useful = TestGetAndResetTickerCount(
2122
- options,
2123
- use_prefix_ ? BLOOM_FILTER_PREFIX_USEFUL : BLOOM_FILTER_USEFUL);
2135
+ uint64_t filter_useful =
2136
+ PopTicker(options, use_prefix_ ? BLOOM_FILTER_PREFIX_USEFUL
2137
+ : BLOOM_FILTER_USEFUL);
2124
2138
  uint64_t filter_checked =
2125
- TestGetAndResetTickerCount(options, use_prefix_
2126
- ? BLOOM_FILTER_PREFIX_CHECKED
2127
- : BLOOM_FILTER_FULL_POSITIVE) +
2139
+ PopTicker(options, use_prefix_ ? BLOOM_FILTER_PREFIX_CHECKED
2140
+ : BLOOM_FILTER_FULL_POSITIVE) +
2128
2141
  (use_prefix_ ? 0 : filter_useful);
2129
2142
  EXPECT_GE(filter_useful, number_not_found - 2); // possible FP
2130
2143
  EXPECT_EQ(filter_checked, Q);
2131
- if (!use_prefix_) {
2132
- EXPECT_EQ(
2133
- TestGetAndResetTickerCount(options, BLOOM_FILTER_FULL_TRUE_POSITIVE),
2134
- Q - number_not_found);
2135
- }
2144
+ EXPECT_EQ(PopTicker(options, use_prefix_ ? BLOOM_FILTER_PREFIX_TRUE_POSITIVE
2145
+ : BLOOM_FILTER_FULL_TRUE_POSITIVE),
2146
+ Q - number_not_found);
2136
2147
 
2137
2148
  // Confirm no duplicate loading of same filter partition
2138
- uint64_t filter_accesses =
2139
- TestGetAndResetTickerCount(options, BLOCK_CACHE_FILTER_HIT) +
2140
- TestGetAndResetTickerCount(options, BLOCK_CACHE_FILTER_MISS);
2149
+ uint64_t filter_accesses = PopTicker(options, BLOCK_CACHE_FILTER_HIT) +
2150
+ PopTicker(options, BLOCK_CACHE_FILTER_MISS);
2141
2151
  if (filter_accesses == 2) {
2142
2152
  // Spanned across partitions.
2143
2153
  ++found_spanning;
@@ -2437,9 +2447,11 @@ TEST_F(DBBloomFilterTest, PrefixScan) {
2437
2447
  }
2438
2448
 
2439
2449
  TEST_F(DBBloomFilterTest, OptimizeFiltersForHits) {
2450
+ const int kNumKeysPerFlush = 1000;
2451
+
2440
2452
  Options options = CurrentOptions();
2441
- options.write_buffer_size = 64 * 1024;
2442
- options.arena_block_size = 4 * 1024;
2453
+ options.memtable_factory.reset(
2454
+ test::NewSpecialSkipListFactory(kNumKeysPerFlush));
2443
2455
  options.target_file_size_base = 64 * 1024;
2444
2456
  options.level0_file_num_compaction_trigger = 2;
2445
2457
  options.level0_slowdown_writes_trigger = 2;
@@ -2475,8 +2487,13 @@ TEST_F(DBBloomFilterTest, OptimizeFiltersForHits) {
2475
2487
  int num_inserted = 0;
2476
2488
  for (int key : keys) {
2477
2489
  ASSERT_OK(Put(1, Key(key), "val"));
2478
- if (++num_inserted % 1000 == 0) {
2479
- ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
2490
+ num_inserted++;
2491
+ // The write after each `kNumKeysPerFlush` keys triggers a flush. Always
2492
+ // wait for that flush and any follow-on compactions for deterministic LSM
2493
+ // shape.
2494
+ if (num_inserted > kNumKeysPerFlush &&
2495
+ num_inserted % kNumKeysPerFlush == 1) {
2496
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable(handles_[1]));
2480
2497
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
2481
2498
  }
2482
2499
  }
@@ -2629,6 +2646,9 @@ int CountIter(std::unique_ptr<Iterator>& iter, const Slice& key) {
2629
2646
  int count = 0;
2630
2647
  for (iter->Seek(key); iter->Valid(); iter->Next()) {
2631
2648
  count++;
2649
+ // Access key & value as if we were using them
2650
+ (void)iter->key();
2651
+ (void)iter->value();
2632
2652
  }
2633
2653
  EXPECT_OK(iter->status());
2634
2654
  return count;
@@ -2668,6 +2688,12 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2668
2688
  read_options.iterate_upper_bound = &upper_bound;
2669
2689
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2670
2690
  ASSERT_EQ(CountIter(iter, "abcd0000"), 4);
2691
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2692
+ 1);
2693
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2694
+ ASSERT_EQ(TestGetTickerCount(
2695
+ options, NON_LAST_LEVEL_SEEK_DATA_USEFUL_FILTER_MATCH),
2696
+ 1);
2671
2697
  }
2672
2698
  {
2673
2699
  Slice upper_bound("abcdzzzz");
@@ -2676,8 +2702,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2676
2702
  read_options.iterate_upper_bound = &upper_bound;
2677
2703
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2678
2704
  ASSERT_EQ(CountIter(iter, "abcd0000"), 4);
2679
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 2);
2680
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2705
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2706
+ 2);
2707
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2681
2708
  }
2682
2709
  ASSERT_OK(dbfull()->SetOptions({{"prefix_extractor", "fixed:5"}}));
2683
2710
  ASSERT_EQ(dbfull()->GetOptions().prefix_extractor->AsString(),
@@ -2691,8 +2718,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2691
2718
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2692
2719
  ASSERT_EQ(CountIter(iter, "abcdxx00"), 4);
2693
2720
  // should check bloom filter since upper bound meets requirement
2694
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 3);
2695
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2721
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2722
+ 3);
2723
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2696
2724
  }
2697
2725
  {
2698
2726
  // [abcdxx01, abcey) is not valid bound since upper bound is too long for
@@ -2704,8 +2732,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2704
2732
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2705
2733
  ASSERT_EQ(CountIter(iter, "abcdxx01"), 4);
2706
2734
  // should skip bloom filter since upper bound is too long
2707
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 3);
2708
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2735
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2736
+ 3);
2737
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2709
2738
  }
2710
2739
  {
2711
2740
  // [abcdxx02, abcdy) is a valid bound since the prefix is the same
@@ -2717,8 +2746,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2717
2746
  ASSERT_EQ(CountIter(iter, "abcdxx02"), 4);
2718
2747
  // should check bloom filter since upper bound matches transformed seek
2719
2748
  // key
2720
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 4);
2721
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2749
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2750
+ 4);
2751
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2722
2752
  }
2723
2753
  {
2724
2754
  // [aaaaaaaa, abce) is not a valid bound since 1) they don't share the
@@ -2730,8 +2760,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2730
2760
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2731
2761
  ASSERT_EQ(CountIter(iter, "aaaaaaaa"), 0);
2732
2762
  // should skip bloom filter since mismatch is found
2733
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 4);
2734
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2763
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2764
+ 4);
2765
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2735
2766
  }
2736
2767
  ASSERT_OK(dbfull()->SetOptions({{"prefix_extractor", "fixed:3"}}));
2737
2768
  {
@@ -2743,8 +2774,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2743
2774
  read_options.iterate_upper_bound = &upper_bound;
2744
2775
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2745
2776
  ASSERT_EQ(CountIter(iter, "abc"), 4);
2746
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 4);
2747
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2777
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2778
+ 4);
2779
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2748
2780
  }
2749
2781
  // Same with re-open
2750
2782
  options.prefix_extractor.reset(NewFixedPrefixTransform(3));
@@ -2756,8 +2788,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2756
2788
  read_options.iterate_upper_bound = &upper_bound;
2757
2789
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2758
2790
  ASSERT_EQ(CountIter(iter, "abc"), 4);
2759
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 4);
2760
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2791
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2792
+ 4);
2793
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2761
2794
  }
2762
2795
  // Set back to capped:4 and verify BF is always read
2763
2796
  options.prefix_extractor.reset(NewCappedPrefixTransform(4));
@@ -2769,8 +2802,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2769
2802
  read_options.iterate_upper_bound = &upper_bound;
2770
2803
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2771
2804
  ASSERT_EQ(CountIter(iter, "abc"), 0);
2772
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 5);
2773
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
2805
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2806
+ 4);
2807
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 1);
2774
2808
  }
2775
2809
  // Same if there's a problem initally loading prefix transform
2776
2810
  SyncPoint::GetInstance()->SetCallBack(
@@ -2785,8 +2819,9 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterUpperBound) {
2785
2819
  read_options.iterate_upper_bound = &upper_bound;
2786
2820
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2787
2821
  ASSERT_EQ(CountIter(iter, "abc"), 0);
2788
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 6);
2789
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 2);
2822
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH),
2823
+ 4);
2824
+ ASSERT_EQ(TestGetTickerCount(options, NON_LAST_LEVEL_SEEK_FILTERED), 2);
2790
2825
  }
2791
2826
  SyncPoint::GetInstance()->DisableProcessing();
2792
2827
  }
@@ -2821,7 +2856,8 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterMultipleSST) {
2821
2856
  dbfull()->Flush(FlushOptions());
2822
2857
  std::unique_ptr<Iterator> iter_old(db_->NewIterator(read_options));
2823
2858
  ASSERT_EQ(CountIter(iter_old, "foo"), 4);
2824
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 1);
2859
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2860
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 1);
2825
2861
 
2826
2862
  ASSERT_OK(dbfull()->SetOptions({{"prefix_extractor", "capped:3"}}));
2827
2863
  ASSERT_EQ(dbfull()->GetOptions().prefix_extractor->AsString(),
@@ -2829,10 +2865,11 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterMultipleSST) {
2829
2865
  read_options.iterate_upper_bound = &upper_bound;
2830
2866
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
2831
2867
  ASSERT_EQ(CountIter(iter, "foo"), 2);
2832
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 2);
2868
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2869
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 1);
2833
2870
  ASSERT_EQ(CountIter(iter, "gpk"), 0);
2834
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 2);
2835
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2871
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2872
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 0);
2836
2873
 
2837
2874
  // second SST with capped:3 BF
2838
2875
  ASSERT_OK(Put("foo3", "bar3"));
@@ -2844,13 +2881,13 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterMultipleSST) {
2844
2881
  // BF is cappped:3 now
2845
2882
  std::unique_ptr<Iterator> iter_tmp(db_->NewIterator(read_options));
2846
2883
  ASSERT_EQ(CountIter(iter_tmp, "foo"), 4);
2847
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 4);
2848
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
2884
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2885
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 2);
2849
2886
  ASSERT_EQ(CountIter(iter_tmp, "gpk"), 0);
2850
2887
  // both counters are incremented because BF is "not changed" for 1 of the
2851
2888
  // 2 SST files, so filter is checked once and found no match.
2852
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 5);
2853
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
2889
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 1);
2890
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 0);
2854
2891
  }
2855
2892
 
2856
2893
  ASSERT_OK(dbfull()->SetOptions({{"prefix_extractor", "fixed:2"}}));
@@ -2867,33 +2904,34 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterMultipleSST) {
2867
2904
  std::unique_ptr<Iterator> iter_tmp(db_->NewIterator(read_options));
2868
2905
  ASSERT_EQ(CountIter(iter_tmp, "foo"), 9);
2869
2906
  // the first and last BF are checked
2870
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 7);
2871
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 1);
2907
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2908
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 2);
2872
2909
  ASSERT_EQ(CountIter(iter_tmp, "gpk"), 0);
2873
2910
  // only last BF is checked and not found
2874
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 8);
2875
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 2);
2911
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 1);
2912
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 0);
2876
2913
  }
2877
2914
 
2878
- // iter_old can only see the first SST, so checked plus 1
2915
+ // iter_old can only see the first SST
2879
2916
  ASSERT_EQ(CountIter(iter_old, "foo"), 4);
2880
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 9);
2881
- // iter was created after the first setoptions call so only full filter
2882
- // will check the filter
2917
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2918
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 1);
2919
+ // same with iter, but different prefix extractor
2883
2920
  ASSERT_EQ(CountIter(iter, "foo"), 2);
2884
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 10);
2921
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2922
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 1);
2885
2923
 
2886
2924
  {
2887
2925
  // keys in all three SSTs are visible to iterator
2888
2926
  // The range of [foo, foz90000] is compatible with (fixed:1) and (fixed:2)
2889
- // so +2 for checked counter
2890
2927
  std::unique_ptr<Iterator> iter_all(db_->NewIterator(read_options));
2891
2928
  ASSERT_EQ(CountIter(iter_all, "foo"), 9);
2892
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 12);
2893
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 2);
2929
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2930
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 2);
2894
2931
  ASSERT_EQ(CountIter(iter_all, "gpk"), 0);
2895
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 13);
2896
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 3);
2932
+ // FIXME? isn't seek key out of SST range?
2933
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 1);
2934
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 0);
2897
2935
  }
2898
2936
  ASSERT_OK(dbfull()->SetOptions({{"prefix_extractor", "capped:3"}}));
2899
2937
  ASSERT_EQ(dbfull()->GetOptions().prefix_extractor->AsString(),
@@ -2903,11 +2941,12 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterMultipleSST) {
2903
2941
  ASSERT_EQ(CountIter(iter_all, "foo"), 6);
2904
2942
  // all three SST are checked because the current options has the same as
2905
2943
  // the remaining SST (capped:3)
2906
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 16);
2907
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 3);
2944
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
2945
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 3);
2908
2946
  ASSERT_EQ(CountIter(iter_all, "gpk"), 0);
2909
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 17);
2910
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 4);
2947
+ // FIXME? isn't seek key out of SST range?
2948
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 1);
2949
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 0);
2911
2950
  }
2912
2951
  // TODO(Zhongyi): Maybe also need to add Get calls to test point look up?
2913
2952
  }
@@ -3009,13 +3048,13 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterOptions) {
3009
3048
  {
3010
3049
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3011
3050
  ASSERT_EQ(CountIter(iter, "foo"), 12);
3012
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 3);
3013
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
3051
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
3052
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 3);
3014
3053
  }
3015
3054
  std::unique_ptr<Iterator> iter_old(db_->NewIterator(read_options));
3016
3055
  ASSERT_EQ(CountIter(iter_old, "foo"), 12);
3017
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 6);
3018
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
3056
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
3057
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 3);
3019
3058
 
3020
3059
  ASSERT_OK(dbfull()->SetOptions({{"prefix_extractor", "capped:3"}}));
3021
3060
  ASSERT_EQ(dbfull()->GetOptions().prefix_extractor->AsString(),
@@ -3024,17 +3063,18 @@ TEST_F(DBBloomFilterTest, DynamicBloomFilterOptions) {
3024
3063
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3025
3064
  // "fp*" should be skipped
3026
3065
  ASSERT_EQ(CountIter(iter, "foo"), 9);
3027
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 6);
3028
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
3066
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
3067
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 0);
3029
3068
  }
3030
3069
 
3031
3070
  // iterator created before should not be affected and see all keys
3032
3071
  ASSERT_EQ(CountIter(iter_old, "foo"), 12);
3033
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 9);
3034
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
3072
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 0);
3073
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 3);
3035
3074
  ASSERT_EQ(CountIter(iter_old, "abc"), 0);
3036
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_CHECKED), 12);
3037
- ASSERT_EQ(TestGetTickerCount(options, BLOOM_FILTER_PREFIX_USEFUL), 3);
3075
+ // FIXME? isn't seek key out of SST range?
3076
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTERED), 3);
3077
+ EXPECT_EQ(PopTicker(options, NON_LAST_LEVEL_SEEK_FILTER_MATCH), 0);
3038
3078
  }
3039
3079
  }
3040
3080
 
@@ -3129,19 +3169,19 @@ class FixedSuffix4Transform : public SliceTransform {
3129
3169
 
3130
3170
  std::pair<uint64_t, uint64_t> GetBloomStat(const Options& options, bool sst) {
3131
3171
  if (sst) {
3132
- return {
3133
- options.statistics->getAndResetTickerCount(BLOOM_FILTER_PREFIX_CHECKED),
3134
- options.statistics->getAndResetTickerCount(BLOOM_FILTER_PREFIX_USEFUL)};
3172
+ return {options.statistics->getAndResetTickerCount(
3173
+ NON_LAST_LEVEL_SEEK_FILTER_MATCH),
3174
+ options.statistics->getAndResetTickerCount(
3175
+ NON_LAST_LEVEL_SEEK_FILTERED)};
3135
3176
  } else {
3136
3177
  auto hit = std::exchange(get_perf_context()->bloom_memtable_hit_count, 0);
3137
3178
  auto miss = std::exchange(get_perf_context()->bloom_memtable_miss_count, 0);
3138
- return {hit + miss, miss};
3179
+ return {hit, miss};
3139
3180
  }
3140
3181
  }
3141
3182
 
3142
- std::pair<uint64_t, uint64_t> CheckedAndUseful(uint64_t checked,
3143
- uint64_t useful) {
3144
- return {checked, useful};
3183
+ std::pair<uint64_t, uint64_t> HitAndMiss(uint64_t hits, uint64_t misses) {
3184
+ return {hits, misses};
3145
3185
  }
3146
3186
  } // anonymous namespace
3147
3187
 
@@ -3179,27 +3219,27 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter1) {
3179
3219
  if (flushed) { // TODO: support auto_prefix_mode in memtable?
3180
3220
  read_options.auto_prefix_mode = true;
3181
3221
  }
3182
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3222
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3183
3223
  {
3184
3224
  Slice ub("999aaaa");
3185
3225
  read_options.iterate_upper_bound = &ub;
3186
3226
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3187
3227
  EXPECT_EQ(CountIter(iter, "aaaa"), 3);
3188
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3228
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3189
3229
  }
3190
3230
  {
3191
3231
  Slice ub("999abaa");
3192
3232
  read_options.iterate_upper_bound = &ub;
3193
3233
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3194
3234
  EXPECT_EQ(CountIter(iter, "abaa"), 1);
3195
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3235
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3196
3236
  }
3197
3237
  {
3198
3238
  Slice ub("999acaa");
3199
3239
  read_options.iterate_upper_bound = &ub;
3200
3240
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3201
3241
  EXPECT_EQ(CountIter(iter, "acaa"), 0);
3202
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 1));
3242
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 1));
3203
3243
  }
3204
3244
  {
3205
3245
  Slice ub("zzzz");
@@ -3207,7 +3247,7 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter1) {
3207
3247
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3208
3248
  EXPECT_EQ(CountIter(iter, "baa"), 3);
3209
3249
  if (flushed) { // TODO: fix memtable case
3210
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3250
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3211
3251
  }
3212
3252
  }
3213
3253
  }
@@ -3253,13 +3293,13 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter2) {
3253
3293
  get_perf_context()->bloom_memtable_hit_count = 0;
3254
3294
  get_perf_context()->bloom_memtable_miss_count = 0;
3255
3295
  }
3256
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3296
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3257
3297
  {
3258
3298
  Slice ub("aaaa000");
3259
3299
  read_options.iterate_upper_bound = &ub;
3260
3300
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3261
3301
  EXPECT_EQ(CountIter(iter, "aaaa999"), 3);
3262
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3302
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3263
3303
  }
3264
3304
  {
3265
3305
  // Note: prefix does work as upper bound
@@ -3267,7 +3307,7 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter2) {
3267
3307
  read_options.iterate_upper_bound = &ub;
3268
3308
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3269
3309
  EXPECT_EQ(CountIter(iter, "aaaa999"), 3);
3270
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3310
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3271
3311
  }
3272
3312
  {
3273
3313
  // Note: prefix does not work here as seek key
@@ -3275,28 +3315,28 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter2) {
3275
3315
  read_options.iterate_upper_bound = &ub;
3276
3316
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3277
3317
  EXPECT_EQ(CountIter(iter, "aaaa"), 0);
3278
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3318
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3279
3319
  }
3280
3320
  {
3281
3321
  Slice ub("aaba000");
3282
3322
  read_options.iterate_upper_bound = &ub;
3283
3323
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3284
3324
  EXPECT_EQ(CountIter(iter, "aaba999"), 1);
3285
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3325
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3286
3326
  }
3287
3327
  {
3288
3328
  Slice ub("aaca000");
3289
3329
  read_options.iterate_upper_bound = &ub;
3290
3330
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3291
3331
  EXPECT_EQ(CountIter(iter, "aaca999"), 0);
3292
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 1));
3332
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 1));
3293
3333
  }
3294
3334
  {
3295
3335
  Slice ub("aaaz");
3296
3336
  read_options.iterate_upper_bound = &ub;
3297
3337
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3298
3338
  EXPECT_EQ(CountIter(iter, "zzz"), 5);
3299
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3339
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3300
3340
  }
3301
3341
  {
3302
3342
  // Note: prefix does work here as seek key, but only finds key equal
@@ -3306,7 +3346,7 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter2) {
3306
3346
  read_options.prefix_same_as_start = true;
3307
3347
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3308
3348
  EXPECT_EQ(CountIter(iter, "qqqq"), 1);
3309
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3349
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3310
3350
  }
3311
3351
  }
3312
3352
  }
@@ -3397,13 +3437,13 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter3) {
3397
3437
  get_perf_context()->bloom_memtable_hit_count = 0;
3398
3438
  get_perf_context()->bloom_memtable_miss_count = 0;
3399
3439
  }
3400
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3440
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3401
3441
  {
3402
3442
  Slice ub("aaaa999");
3403
3443
  read_options.iterate_upper_bound = &ub;
3404
3444
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3405
3445
  EXPECT_EQ(CountIter(iter, "aaaa000"), 3);
3406
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3446
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3407
3447
  }
3408
3448
  {
3409
3449
  // Note: prefix as seek key is not bloom-optimized
@@ -3413,28 +3453,28 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter3) {
3413
3453
  read_options.iterate_upper_bound = &ub;
3414
3454
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3415
3455
  EXPECT_EQ(CountIter(iter, "aaaa"), 3);
3416
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3456
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3417
3457
  }
3418
3458
  {
3419
3459
  Slice ub("aaba9");
3420
3460
  read_options.iterate_upper_bound = &ub;
3421
3461
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3422
3462
  EXPECT_EQ(CountIter(iter, "aaba0"), 1);
3423
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3463
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3424
3464
  }
3425
3465
  {
3426
3466
  Slice ub("aaca9");
3427
3467
  read_options.iterate_upper_bound = &ub;
3428
3468
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3429
3469
  EXPECT_EQ(CountIter(iter, "aaca0"), 0);
3430
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 1));
3470
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 1));
3431
3471
  }
3432
3472
  {
3433
3473
  Slice ub("qqqq9");
3434
3474
  read_options.iterate_upper_bound = &ub;
3435
3475
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3436
3476
  EXPECT_EQ(CountIter(iter, "qqqq0"), 1);
3437
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(1, 0));
3477
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(1, 0));
3438
3478
  }
3439
3479
  {
3440
3480
  // Note: prefix as seek key is not bloom-optimized
@@ -3442,7 +3482,7 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter3) {
3442
3482
  read_options.iterate_upper_bound = &ub;
3443
3483
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3444
3484
  EXPECT_EQ(CountIter(iter, "qqqq"), weird_comparator ? 7 : 2);
3445
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3485
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3446
3486
  }
3447
3487
  {
3448
3488
  // Note: prefix as seek key is not bloom-optimized
@@ -3450,14 +3490,14 @@ TEST_F(DBBloomFilterTest, WeirdPrefixExtractorWithFilter3) {
3450
3490
  read_options.iterate_upper_bound = &ub;
3451
3491
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3452
3492
  EXPECT_EQ(CountIter(iter, "zzzz"), weird_comparator ? 8 : 1);
3453
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3493
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3454
3494
  }
3455
3495
  {
3456
3496
  Slice ub("zzzz9");
3457
3497
  read_options.iterate_upper_bound = &ub;
3458
3498
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
3459
3499
  EXPECT_EQ(CountIter(iter, "aab"), weird_comparator ? 6 : 5);
3460
- EXPECT_EQ(GetBloomStat(options, flushed), CheckedAndUseful(0, 0));
3500
+ EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
3461
3501
  }
3462
3502
  }
3463
3503
  }