@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.
- package/binding.cc +3 -3
- package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
- package/deps/rocksdb/rocksdb/Makefile +10 -5
- package/deps/rocksdb/rocksdb/TARGETS +8 -345
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
- package/deps/rocksdb/rocksdb/db/builder.h +2 -2
- package/deps/rocksdb/rocksdb/db/c.cc +76 -5
- package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
- package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
- package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
- package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
- package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
- package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
- package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
- package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
- package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
- package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
- package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
- package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
- package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
- package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
- package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
- package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
- package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
- package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
- package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/options.cc +12 -53
- package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
- package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
- package/deps/rocksdb/rocksdb/port/lang.h +27 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
- package/deps/rocksdb/rocksdb/src.mk +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
- package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
- package/deps/rocksdb/rocksdb/table/format.cc +4 -4
- package/deps/rocksdb/rocksdb/table/format.h +1 -1
- package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
- package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
- package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
- package/deps/rocksdb/rocksdb/util/compression.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
- package/deps/rocksdb/rocksdb/util/math.h +12 -7
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
- package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
- /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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
223
|
-
|
|
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
|
-
|
|
229
|
-
|
|
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
|
-
|
|
235
|
-
|
|
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
|
-
|
|
243
|
-
|
|
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
|
-
|
|
251
|
-
|
|
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
|
-
|
|
260
|
-
|
|
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
|
-
|
|
293
|
+
EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
|
|
298
294
|
ASSERT_EQ("foo2", Get("barbarbar2"));
|
|
299
|
-
|
|
295
|
+
EXPECT_EQ(PopTicker(options, BLOOM_FILTER_PREFIX_USEFUL), 0);
|
|
300
296
|
ASSERT_EQ("NOT_FOUND", Get("barbarbar3"));
|
|
301
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
313
|
-
|
|
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
|
-
|
|
321
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
700
|
-
|
|
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(
|
|
719
|
-
|
|
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(
|
|
868
|
-
|
|
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(
|
|
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
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
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 =
|
|
2067
|
-
options,
|
|
2068
|
-
|
|
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
|
-
|
|
2071
|
-
|
|
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
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
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
|
-
|
|
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 =
|
|
2122
|
-
options,
|
|
2123
|
-
|
|
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
|
-
|
|
2126
|
-
|
|
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
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
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
|
-
|
|
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.
|
|
2442
|
-
|
|
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
|
-
|
|
2479
|
-
|
|
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,
|
|
2680
|
-
|
|
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,
|
|
2695
|
-
|
|
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,
|
|
2708
|
-
|
|
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,
|
|
2721
|
-
|
|
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,
|
|
2734
|
-
|
|
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,
|
|
2747
|
-
|
|
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,
|
|
2760
|
-
|
|
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,
|
|
2773
|
-
|
|
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,
|
|
2789
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2835
|
-
|
|
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
|
-
|
|
2848
|
-
|
|
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
|
-
|
|
2853
|
-
|
|
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
|
-
|
|
2871
|
-
|
|
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
|
-
|
|
2875
|
-
|
|
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
|
|
2915
|
+
// iter_old can only see the first SST
|
|
2879
2916
|
ASSERT_EQ(CountIter(iter_old, "foo"), 4);
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
2893
|
-
|
|
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
|
-
|
|
2896
|
-
|
|
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
|
-
|
|
2907
|
-
|
|
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
|
-
|
|
2910
|
-
|
|
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
|
-
|
|
3013
|
-
|
|
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
|
-
|
|
3018
|
-
|
|
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
|
-
|
|
3028
|
-
|
|
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
|
-
|
|
3034
|
-
|
|
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
|
-
|
|
3037
|
-
|
|
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
|
-
|
|
3134
|
-
|
|
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
|
|
3179
|
+
return {hit, miss};
|
|
3139
3180
|
}
|
|
3140
3181
|
}
|
|
3141
3182
|
|
|
3142
|
-
std::pair<uint64_t, uint64_t>
|
|
3143
|
-
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
3500
|
+
EXPECT_EQ(GetBloomStat(options, flushed), HitAndMiss(0, 0));
|
|
3461
3501
|
}
|
|
3462
3502
|
}
|
|
3463
3503
|
}
|