@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
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
#include "db/memtable.h"
|
|
28
28
|
#include "db/write_batch_internal.h"
|
|
29
29
|
#include "memtable/stl_wrappers.h"
|
|
30
|
-
#include "monitoring/
|
|
30
|
+
#include "monitoring/statistics_impl.h"
|
|
31
31
|
#include "options/options_helper.h"
|
|
32
32
|
#include "port/port.h"
|
|
33
33
|
#include "port/stack_trace.h"
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
#include "table/block_based/block_based_table_reader.h"
|
|
56
56
|
#include "table/block_based/block_builder.h"
|
|
57
57
|
#include "table/block_based/filter_policy_internal.h"
|
|
58
|
-
#include "table/block_based/
|
|
58
|
+
#include "table/block_based/flush_block_policy_impl.h"
|
|
59
59
|
#include "table/block_fetcher.h"
|
|
60
60
|
#include "table/format.h"
|
|
61
61
|
#include "table/get_context.h"
|
|
@@ -425,14 +425,15 @@ class TableConstructor : public Constructor {
|
|
|
425
425
|
}
|
|
426
426
|
|
|
427
427
|
uint64_t ApproximateOffsetOf(const Slice& key) const {
|
|
428
|
+
const ReadOptions read_options;
|
|
428
429
|
if (convert_to_internal_key_) {
|
|
429
430
|
InternalKey ikey(key, kMaxSequenceNumber, kTypeValue);
|
|
430
431
|
const Slice skey = ikey.Encode();
|
|
431
432
|
return table_reader_->ApproximateOffsetOf(
|
|
432
|
-
skey, TableReaderCaller::kUncategorized);
|
|
433
|
+
read_options, skey, TableReaderCaller::kUncategorized);
|
|
433
434
|
}
|
|
434
435
|
return table_reader_->ApproximateOffsetOf(
|
|
435
|
-
key, TableReaderCaller::kUncategorized);
|
|
436
|
+
read_options, key, TableReaderCaller::kUncategorized);
|
|
436
437
|
}
|
|
437
438
|
|
|
438
439
|
virtual Status Reopen(const ImmutableOptions& ioptions,
|
|
@@ -443,7 +444,9 @@ class TableConstructor : public Constructor {
|
|
|
443
444
|
file_reader_.reset(new RandomAccessFileReader(std::move(source), "test"));
|
|
444
445
|
return ioptions.table_factory->NewTableReader(
|
|
445
446
|
TableReaderOptions(ioptions, moptions.prefix_extractor, soptions,
|
|
446
|
-
*last_internal_comparator_,
|
|
447
|
+
*last_internal_comparator_,
|
|
448
|
+
0 /* block_protection_bytes_per_key */,
|
|
449
|
+
/*skip_filters*/ false,
|
|
447
450
|
/*immortal*/ false, false, level_,
|
|
448
451
|
&block_cache_tracer_, moptions.write_buffer_size, "",
|
|
449
452
|
file_num_, kNullUniqueId64x2, largest_seqno_),
|
|
@@ -1147,19 +1150,16 @@ class BlockBasedTableTest
|
|
|
1147
1150
|
std::move(trace_writer));
|
|
1148
1151
|
ASSERT_NE(block_cache_trace_writer, nullptr);
|
|
1149
1152
|
// Always return Status::OK().
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
.ok());
|
|
1153
|
+
ASSERT_OK(c->block_cache_tracer_.StartTrace(
|
|
1154
|
+
trace_opt, std::move(block_cache_trace_writer)));
|
|
1153
1155
|
|
|
1154
1156
|
{
|
|
1155
|
-
|
|
1156
|
-
InternalKey internal_key(user_key, 0, kTypeValue);
|
|
1157
|
+
InternalKey internal_key(auto_add_key1, 0, kTypeValue);
|
|
1157
1158
|
std::string encoded_key = internal_key.Encode().ToString();
|
|
1158
1159
|
c->Add(encoded_key, kDummyValue);
|
|
1159
1160
|
}
|
|
1160
1161
|
{
|
|
1161
|
-
|
|
1162
|
-
InternalKey internal_key(user_key, 0, kTypeValue);
|
|
1162
|
+
InternalKey internal_key(auto_add_key2, 0, kTypeValue);
|
|
1163
1163
|
std::string encoded_key = internal_key.Encode().ToString();
|
|
1164
1164
|
c->Add(encoded_key, kDummyValue);
|
|
1165
1165
|
}
|
|
@@ -1180,6 +1180,7 @@ class BlockBasedTableTest
|
|
|
1180
1180
|
EXPECT_OK(reader.ReadHeader(&header));
|
|
1181
1181
|
uint32_t index = 0;
|
|
1182
1182
|
while (s.ok()) {
|
|
1183
|
+
SCOPED_TRACE("expected_records[" + std::to_string(index) + "]");
|
|
1183
1184
|
BlockCacheTraceRecord access;
|
|
1184
1185
|
s = reader.ReadAccess(&access);
|
|
1185
1186
|
if (!s.ok()) {
|
|
@@ -1192,22 +1193,33 @@ class BlockBasedTableTest
|
|
|
1192
1193
|
EXPECT_EQ(access.caller, expected_records[index].caller);
|
|
1193
1194
|
EXPECT_EQ(access.no_insert, expected_records[index].no_insert);
|
|
1194
1195
|
EXPECT_EQ(access.is_cache_hit, expected_records[index].is_cache_hit);
|
|
1195
|
-
|
|
1196
|
-
|
|
1196
|
+
EXPECT_EQ(access.get_id, expected_records[index].get_id);
|
|
1197
|
+
// The well-populated cases
|
|
1198
|
+
if (access.caller == TableReaderCaller::kUserGet ||
|
|
1199
|
+
(access.caller == TableReaderCaller::kUserMultiGet &&
|
|
1200
|
+
access.block_type == TraceType::kBlockTraceDataBlock)) {
|
|
1197
1201
|
EXPECT_EQ(access.referenced_key,
|
|
1198
1202
|
expected_records[index].referenced_key);
|
|
1199
|
-
EXPECT_EQ(access.get_id, expected_records[index].get_id);
|
|
1200
1203
|
EXPECT_EQ(access.get_from_user_specified_snapshot,
|
|
1201
1204
|
expected_records[index].get_from_user_specified_snapshot);
|
|
1202
1205
|
if (access.block_type == TraceType::kBlockTraceDataBlock) {
|
|
1203
1206
|
EXPECT_GT(access.referenced_data_size, 0);
|
|
1204
1207
|
EXPECT_GT(access.num_keys_in_block, 0);
|
|
1208
|
+
if (access.caller == TableReaderCaller::kUserMultiGet) {
|
|
1209
|
+
// Test num_keys_in_block estimate, assuming default restart
|
|
1210
|
+
// interval of 16 and just one interval.
|
|
1211
|
+
// Rounding depends on get_id.
|
|
1212
|
+
if (access.get_id & 1) {
|
|
1213
|
+
EXPECT_EQ(access.num_keys_in_block, 9);
|
|
1214
|
+
} else {
|
|
1215
|
+
EXPECT_EQ(access.num_keys_in_block, 8);
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1205
1218
|
EXPECT_EQ(access.referenced_key_exist_in_block,
|
|
1206
1219
|
expected_records[index].referenced_key_exist_in_block);
|
|
1207
1220
|
}
|
|
1208
1221
|
} else {
|
|
1209
1222
|
EXPECT_EQ(access.referenced_key, "");
|
|
1210
|
-
EXPECT_EQ(access.get_id, 0);
|
|
1211
1223
|
EXPECT_FALSE(access.get_from_user_specified_snapshot);
|
|
1212
1224
|
EXPECT_EQ(access.referenced_data_size, 0);
|
|
1213
1225
|
EXPECT_EQ(access.num_keys_in_block, 0);
|
|
@@ -1223,6 +1235,8 @@ class BlockBasedTableTest
|
|
|
1223
1235
|
|
|
1224
1236
|
protected:
|
|
1225
1237
|
uint64_t IndexUncompressedHelper(bool indexCompress);
|
|
1238
|
+
const std::string auto_add_key1 = "aak01";
|
|
1239
|
+
const std::string auto_add_key2 = "aak02";
|
|
1226
1240
|
|
|
1227
1241
|
private:
|
|
1228
1242
|
uint32_t format_;
|
|
@@ -1706,7 +1720,8 @@ TEST_P(BlockBasedTableTest, BasicBlockBasedTableProperties) {
|
|
|
1706
1720
|
MutableCFOptions moptions(options);
|
|
1707
1721
|
c.Finish(options, ioptions, moptions, table_options,
|
|
1708
1722
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
1709
|
-
ASSERT_EQ(
|
|
1723
|
+
ASSERT_EQ(
|
|
1724
|
+
options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSION_REJECTED), 0);
|
|
1710
1725
|
|
|
1711
1726
|
auto& props = *c.GetTableReader()->GetTableProperties();
|
|
1712
1727
|
ASSERT_EQ(kvmap.size(), props.num_entries);
|
|
@@ -1968,7 +1983,8 @@ void PrefetchRange(TableConstructor* c, Options* opt,
|
|
|
1968
1983
|
end.reset(new Slice(key_end));
|
|
1969
1984
|
}
|
|
1970
1985
|
}
|
|
1971
|
-
|
|
1986
|
+
const ReadOptions read_options;
|
|
1987
|
+
s = table_reader->Prefetch(read_options, begin.get(), end.get());
|
|
1972
1988
|
|
|
1973
1989
|
ASSERT_TRUE(s.code() == expected_status.code());
|
|
1974
1990
|
|
|
@@ -3068,15 +3084,14 @@ TEST_P(BlockBasedTableTest, TracingGetTest) {
|
|
|
3068
3084
|
MutableCFOptions moptions(options);
|
|
3069
3085
|
c.Finish(options, ioptions, moptions, table_options,
|
|
3070
3086
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
3071
|
-
|
|
3072
|
-
InternalKey internal_key(user_key, 0, kTypeValue);
|
|
3087
|
+
InternalKey internal_key(auto_add_key1, 0, kTypeValue);
|
|
3073
3088
|
std::string encoded_key = internal_key.Encode().ToString();
|
|
3074
3089
|
for (uint32_t i = 1; i <= 2; i++) {
|
|
3075
3090
|
PinnableSlice value;
|
|
3076
|
-
GetContext get_context(
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3091
|
+
GetContext get_context(
|
|
3092
|
+
options.comparator, nullptr, nullptr, nullptr, GetContext::kNotFound,
|
|
3093
|
+
auto_add_key1, &value, nullptr, nullptr, nullptr, true, nullptr,
|
|
3094
|
+
nullptr, nullptr, nullptr, nullptr, nullptr, /*tracing_get_id=*/i);
|
|
3080
3095
|
get_perf_context()->Reset();
|
|
3081
3096
|
ASSERT_OK(c.GetTableReader()->Get(ReadOptions(), encoded_key, &get_context,
|
|
3082
3097
|
moptions.prefix_extractor.get()));
|
|
@@ -3126,6 +3141,189 @@ TEST_P(BlockBasedTableTest, TracingGetTest) {
|
|
|
3126
3141
|
c.ResetTableReader();
|
|
3127
3142
|
}
|
|
3128
3143
|
|
|
3144
|
+
struct HitMissCountingCache : public CacheWrapper {
|
|
3145
|
+
using CacheWrapper::CacheWrapper;
|
|
3146
|
+
const char* Name() const override { return "HitMissCountingCache"; }
|
|
3147
|
+
|
|
3148
|
+
uint64_t hit_count_ = 0;
|
|
3149
|
+
uint64_t miss_count_ = 0;
|
|
3150
|
+
|
|
3151
|
+
void Reset() {
|
|
3152
|
+
hit_count_ = 0;
|
|
3153
|
+
miss_count_ = 0;
|
|
3154
|
+
}
|
|
3155
|
+
|
|
3156
|
+
Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
|
|
3157
|
+
CreateContext* create_context,
|
|
3158
|
+
Priority priority = Priority::LOW,
|
|
3159
|
+
Statistics* stats = nullptr) override {
|
|
3160
|
+
// ASSUMES no blocking async lookups
|
|
3161
|
+
Handle* h = target_->Lookup(key, helper, create_context, priority, stats);
|
|
3162
|
+
if (h) {
|
|
3163
|
+
hit_count_++;
|
|
3164
|
+
} else {
|
|
3165
|
+
miss_count_++;
|
|
3166
|
+
}
|
|
3167
|
+
return h;
|
|
3168
|
+
}
|
|
3169
|
+
|
|
3170
|
+
void StartAsyncLookup(AsyncLookupHandle& async_handle) override {
|
|
3171
|
+
target_->StartAsyncLookup(async_handle);
|
|
3172
|
+
// If not pending, caller might not call WaitAll, so have to account here.
|
|
3173
|
+
if (!async_handle.IsPending()) {
|
|
3174
|
+
if (async_handle.Result()) {
|
|
3175
|
+
hit_count_++;
|
|
3176
|
+
} else {
|
|
3177
|
+
miss_count_++;
|
|
3178
|
+
}
|
|
3179
|
+
}
|
|
3180
|
+
}
|
|
3181
|
+
|
|
3182
|
+
void WaitAll(AsyncLookupHandle* async_handles, size_t count) override {
|
|
3183
|
+
// If !pending, then we already accounted for it in StartAsyncLookup.
|
|
3184
|
+
// Assume the pending status does not change asynchronously (since
|
|
3185
|
+
// StartAsyncLookup) and remember which still need accounting.
|
|
3186
|
+
std::vector<AsyncLookupHandle*> needs_accounting;
|
|
3187
|
+
for (size_t i = 0; i < count; ++i) {
|
|
3188
|
+
if (async_handles[i].IsPending()) {
|
|
3189
|
+
needs_accounting.push_back(async_handles + i);
|
|
3190
|
+
}
|
|
3191
|
+
}
|
|
3192
|
+
target_->WaitAll(async_handles, count);
|
|
3193
|
+
for (auto ah : needs_accounting) {
|
|
3194
|
+
if (ah->Result()) {
|
|
3195
|
+
hit_count_++;
|
|
3196
|
+
} else {
|
|
3197
|
+
miss_count_++;
|
|
3198
|
+
}
|
|
3199
|
+
}
|
|
3200
|
+
}
|
|
3201
|
+
|
|
3202
|
+
void VerifyExpectedHitMissCounts(
|
|
3203
|
+
const std::vector<BlockCacheTraceRecord>& expected_records) {
|
|
3204
|
+
uint64_t expected_hits = 0;
|
|
3205
|
+
uint64_t expected_misses = 0;
|
|
3206
|
+
for (const auto& r : expected_records) {
|
|
3207
|
+
if (r.is_cache_hit) {
|
|
3208
|
+
expected_hits++;
|
|
3209
|
+
} else {
|
|
3210
|
+
expected_misses++;
|
|
3211
|
+
}
|
|
3212
|
+
}
|
|
3213
|
+
EXPECT_EQ(expected_hits, hit_count_);
|
|
3214
|
+
EXPECT_EQ(expected_misses, miss_count_);
|
|
3215
|
+
Reset();
|
|
3216
|
+
}
|
|
3217
|
+
};
|
|
3218
|
+
|
|
3219
|
+
TEST_P(BlockBasedTableTest, TracingMultiGetTest) {
|
|
3220
|
+
TableConstructor c(BytewiseComparator());
|
|
3221
|
+
Options options;
|
|
3222
|
+
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
3223
|
+
options.create_if_missing = true;
|
|
3224
|
+
auto cache =
|
|
3225
|
+
std::make_shared<HitMissCountingCache>(NewLRUCache(1024 * 1024, 0));
|
|
3226
|
+
table_options.block_cache = cache;
|
|
3227
|
+
table_options.cache_index_and_filter_blocks = true;
|
|
3228
|
+
table_options.filter_policy.reset(NewBloomFilterPolicy(10));
|
|
3229
|
+
// Put auto_add_key1 and auto_add_key2 in the same data block
|
|
3230
|
+
table_options.block_size = kDummyValue.size() * 2 + 100;
|
|
3231
|
+
options.table_factory.reset(new BlockBasedTableFactory(table_options));
|
|
3232
|
+
SetupTracingTest(&c);
|
|
3233
|
+
std::vector<std::string> keys;
|
|
3234
|
+
stl_wrappers::KVMap kvmap;
|
|
3235
|
+
ImmutableOptions ioptions(options);
|
|
3236
|
+
MutableCFOptions moptions(options);
|
|
3237
|
+
c.Finish(options, ioptions, moptions, table_options,
|
|
3238
|
+
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
3239
|
+
|
|
3240
|
+
std::vector<BlockCacheTraceRecord> expected_records;
|
|
3241
|
+
|
|
3242
|
+
for (bool first_pass : {true, false}) {
|
|
3243
|
+
uint64_t get_id_offset = first_pass ? 2 : 5;
|
|
3244
|
+
ReadOptions ro;
|
|
3245
|
+
std::array<Slice, 2> ukeys{{auto_add_key1, auto_add_key2}};
|
|
3246
|
+
std::array<PinnableSlice, 2> values;
|
|
3247
|
+
std::vector<GetContext> get_contexts;
|
|
3248
|
+
get_contexts.emplace_back(
|
|
3249
|
+
options.comparator, nullptr, nullptr, nullptr, GetContext::kNotFound,
|
|
3250
|
+
ukeys[0], &values[0], nullptr, nullptr, nullptr, true, nullptr, nullptr,
|
|
3251
|
+
nullptr, nullptr, nullptr, nullptr, get_id_offset);
|
|
3252
|
+
get_contexts.emplace_back(
|
|
3253
|
+
options.comparator, nullptr, nullptr, nullptr, GetContext::kNotFound,
|
|
3254
|
+
ukeys[1], &values[1], nullptr, nullptr, nullptr, true, nullptr, nullptr,
|
|
3255
|
+
nullptr, nullptr, nullptr, nullptr, get_id_offset + 1);
|
|
3256
|
+
std::array<std::string, 2> encoded_keys;
|
|
3257
|
+
encoded_keys[0] = InternalKey(ukeys[0], 0, kTypeValue).Encode().ToString();
|
|
3258
|
+
encoded_keys[1] = InternalKey(ukeys[1], 0, kTypeValue).Encode().ToString();
|
|
3259
|
+
std::array<Status, 2> statuses;
|
|
3260
|
+
autovector<KeyContext, MultiGetContext::MAX_BATCH_SIZE> key_context;
|
|
3261
|
+
key_context.emplace_back(/*ColumnFamilyHandle omitted*/ nullptr, ukeys[0],
|
|
3262
|
+
&values[0],
|
|
3263
|
+
/*PinnableWideColumns omitted*/ nullptr,
|
|
3264
|
+
/*timestamp omitted*/ nullptr, &statuses[0]);
|
|
3265
|
+
key_context[0].ukey_without_ts = ukeys[0];
|
|
3266
|
+
key_context[0].ikey = encoded_keys[0];
|
|
3267
|
+
key_context[0].get_context = &get_contexts[0];
|
|
3268
|
+
key_context.emplace_back(/*ColumnFamilyHandle omitted*/ nullptr, ukeys[1],
|
|
3269
|
+
&values[1],
|
|
3270
|
+
/*PinnableWideColumns omitted*/ nullptr,
|
|
3271
|
+
/*timestamp omitted*/ nullptr, &statuses[1]);
|
|
3272
|
+
key_context[1].ukey_without_ts = ukeys[1];
|
|
3273
|
+
key_context[1].ikey = encoded_keys[1];
|
|
3274
|
+
key_context[1].get_context = &get_contexts[1];
|
|
3275
|
+
autovector<KeyContext*, MultiGetContext::MAX_BATCH_SIZE> sorted_keys;
|
|
3276
|
+
sorted_keys.push_back(&key_context[0]);
|
|
3277
|
+
sorted_keys.push_back(&key_context[1]);
|
|
3278
|
+
MultiGetContext m_context(
|
|
3279
|
+
&sorted_keys, 0, sorted_keys.size(), /*SequenceNumber*/ 42, ro,
|
|
3280
|
+
options.env->GetFileSystem().get(), options.statistics.get());
|
|
3281
|
+
MultiGetRange range = m_context.GetMultiGetRange();
|
|
3282
|
+
|
|
3283
|
+
get_perf_context()->Reset();
|
|
3284
|
+
c.GetTableReader()->MultiGet(ro, &range, /*prefix_extractor*/ nullptr);
|
|
3285
|
+
|
|
3286
|
+
// Verify read op result
|
|
3287
|
+
for (uint32_t i = 0; i <= 1; i++) {
|
|
3288
|
+
ASSERT_OK(statuses[i]);
|
|
3289
|
+
ASSERT_EQ(get_contexts[i].State(), GetContext::kFound);
|
|
3290
|
+
ASSERT_EQ(values[i].ToString(), kDummyValue);
|
|
3291
|
+
}
|
|
3292
|
+
|
|
3293
|
+
// Verify traces.
|
|
3294
|
+
BlockCacheTraceRecord record;
|
|
3295
|
+
if (first_pass) {
|
|
3296
|
+
// The first two records should be prefetching index and filter blocks.
|
|
3297
|
+
record.get_id = 0;
|
|
3298
|
+
record.block_type = TraceType::kBlockTraceIndexBlock;
|
|
3299
|
+
record.caller = TableReaderCaller::kPrefetch;
|
|
3300
|
+
record.is_cache_hit = false;
|
|
3301
|
+
record.no_insert = false;
|
|
3302
|
+
expected_records.push_back(record);
|
|
3303
|
+
record.block_type = TraceType::kBlockTraceFilterBlock;
|
|
3304
|
+
expected_records.push_back(record);
|
|
3305
|
+
}
|
|
3306
|
+
// Then we should have three records for one index, one filter, and one data
|
|
3307
|
+
// block access. (The two keys share a data block.)
|
|
3308
|
+
record.get_id = get_id_offset;
|
|
3309
|
+
record.block_type = TraceType::kBlockTraceFilterBlock;
|
|
3310
|
+
record.caller = TableReaderCaller::kUserMultiGet;
|
|
3311
|
+
record.get_from_user_specified_snapshot = false;
|
|
3312
|
+
record.referenced_key = encoded_keys[0];
|
|
3313
|
+
record.referenced_key_exist_in_block = true;
|
|
3314
|
+
record.is_cache_hit = true;
|
|
3315
|
+
expected_records.push_back(record);
|
|
3316
|
+
record.block_type = TraceType::kBlockTraceIndexBlock;
|
|
3317
|
+
expected_records.push_back(record);
|
|
3318
|
+
record.is_cache_hit = !first_pass;
|
|
3319
|
+
record.block_type = TraceType::kBlockTraceDataBlock;
|
|
3320
|
+
expected_records.push_back(record);
|
|
3321
|
+
}
|
|
3322
|
+
VerifyBlockAccessTrace(&c, expected_records);
|
|
3323
|
+
cache->VerifyExpectedHitMissCounts(expected_records);
|
|
3324
|
+
c.ResetTableReader();
|
|
3325
|
+
}
|
|
3326
|
+
|
|
3129
3327
|
TEST_P(BlockBasedTableTest, TracingApproximateOffsetOfTest) {
|
|
3130
3328
|
TableConstructor c(BytewiseComparator());
|
|
3131
3329
|
Options options;
|
|
@@ -3142,12 +3340,12 @@ TEST_P(BlockBasedTableTest, TracingApproximateOffsetOfTest) {
|
|
|
3142
3340
|
MutableCFOptions moptions(options);
|
|
3143
3341
|
c.Finish(options, ioptions, moptions, table_options,
|
|
3144
3342
|
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
3343
|
+
const ReadOptions read_options;
|
|
3145
3344
|
for (uint32_t i = 1; i <= 2; i++) {
|
|
3146
|
-
|
|
3147
|
-
InternalKey internal_key(user_key, 0, kTypeValue);
|
|
3345
|
+
InternalKey internal_key(auto_add_key1, 0, kTypeValue);
|
|
3148
3346
|
std::string encoded_key = internal_key.Encode().ToString();
|
|
3149
3347
|
c.GetTableReader()->ApproximateOffsetOf(
|
|
3150
|
-
encoded_key, TableReaderCaller::kUserApproximateSize);
|
|
3348
|
+
read_options, encoded_key, TableReaderCaller::kUserApproximateSize);
|
|
3151
3349
|
}
|
|
3152
3350
|
// Verify traces.
|
|
3153
3351
|
std::vector<BlockCacheTraceRecord> expected_records;
|
|
@@ -3887,8 +4085,10 @@ TEST_F(PlainTableTest, BasicPlainTableProperties) {
|
|
|
3887
4085
|
new RandomAccessFileReader(std::move(source), "test"));
|
|
3888
4086
|
|
|
3889
4087
|
std::unique_ptr<TableProperties> props;
|
|
4088
|
+
const ReadOptions read_options;
|
|
3890
4089
|
auto s = ReadTableProperties(file_reader.get(), ss->contents().size(),
|
|
3891
|
-
kPlainTableMagicNumber, ioptions,
|
|
4090
|
+
kPlainTableMagicNumber, ioptions, read_options,
|
|
4091
|
+
&props);
|
|
3892
4092
|
ASSERT_OK(s);
|
|
3893
4093
|
|
|
3894
4094
|
ASSERT_EQ(0ul, props->index_size);
|
|
@@ -4015,6 +4215,7 @@ TEST_F(GeneralTableTest, ApproximateOffsetOfPlain) {
|
|
|
4015
4215
|
}
|
|
4016
4216
|
|
|
4017
4217
|
static void DoCompressionTest(CompressionType comp) {
|
|
4218
|
+
SCOPED_TRACE("CompressionType = " + CompressionTypeToString(comp));
|
|
4018
4219
|
Random rnd(301);
|
|
4019
4220
|
TableConstructor c(BytewiseComparator(), true /* convert_to_internal_key_ */);
|
|
4020
4221
|
std::string tmp;
|
|
@@ -4036,8 +4237,8 @@ static void DoCompressionTest(CompressionType comp) {
|
|
|
4036
4237
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, 0));
|
|
4037
4238
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, 0));
|
|
4038
4239
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, 0));
|
|
4039
|
-
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000,
|
|
4040
|
-
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000,
|
|
4240
|
+
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000, 3550));
|
|
4241
|
+
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000, 3550));
|
|
4041
4242
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 4000, 7075));
|
|
4042
4243
|
c.ResetTableReader();
|
|
4043
4244
|
}
|
|
@@ -4563,9 +4764,10 @@ TEST_P(BlockBasedTableTest, DISABLED_TableWithGlobalSeqno) {
|
|
|
4563
4764
|
new RandomAccessFileReader(std::move(source), ""));
|
|
4564
4765
|
|
|
4565
4766
|
std::unique_ptr<TableProperties> props;
|
|
4767
|
+
const ReadOptions read_options;
|
|
4566
4768
|
ASSERT_OK(ReadTableProperties(file_reader.get(), ss_rw.contents().size(),
|
|
4567
4769
|
kBlockBasedTableMagicNumber, ioptions,
|
|
4568
|
-
&props));
|
|
4770
|
+
read_options, &props));
|
|
4569
4771
|
|
|
4570
4772
|
UserCollectedProperties user_props = props->user_collected_properties;
|
|
4571
4773
|
version = DecodeFixed32(
|
|
@@ -4595,7 +4797,7 @@ TEST_P(BlockBasedTableTest, DISABLED_TableWithGlobalSeqno) {
|
|
|
4595
4797
|
|
|
4596
4798
|
options.table_factory->NewTableReader(
|
|
4597
4799
|
TableReaderOptions(ioptions, moptions.prefix_extractor, EnvOptions(),
|
|
4598
|
-
ikc),
|
|
4800
|
+
ikc, 0 /* block_protection_bytes_per_key */),
|
|
4599
4801
|
std::move(file_reader), ss_rw.contents().size(), &table_reader);
|
|
4600
4802
|
|
|
4601
4803
|
return table_reader->NewIterator(
|
|
@@ -4740,9 +4942,10 @@ TEST_P(BlockBasedTableTest, BlockAlignTest) {
|
|
|
4740
4942
|
// Helper function to get version, global_seqno, global_seqno_offset
|
|
4741
4943
|
std::function<void()> VerifyBlockAlignment = [&]() {
|
|
4742
4944
|
std::unique_ptr<TableProperties> props;
|
|
4945
|
+
const ReadOptions read_options;
|
|
4743
4946
|
ASSERT_OK(ReadTableProperties(file_reader.get(), sink->contents().size(),
|
|
4744
4947
|
kBlockBasedTableMagicNumber, ioptions,
|
|
4745
|
-
&props));
|
|
4948
|
+
read_options, &props));
|
|
4746
4949
|
|
|
4747
4950
|
uint64_t data_block_size = props->data_size / props->num_data_blocks;
|
|
4748
4951
|
ASSERT_EQ(data_block_size, 4096);
|
|
@@ -4763,7 +4966,8 @@ TEST_P(BlockBasedTableTest, BlockAlignTest) {
|
|
|
4763
4966
|
|
|
4764
4967
|
ASSERT_OK(ioptions.table_factory->NewTableReader(
|
|
4765
4968
|
TableReaderOptions(ioptions2, moptions2.prefix_extractor, EnvOptions(),
|
|
4766
|
-
GetPlainInternalComparator(options2.comparator)
|
|
4969
|
+
GetPlainInternalComparator(options2.comparator),
|
|
4970
|
+
0 /* block_protection_bytes_per_key */),
|
|
4767
4971
|
std::move(file_reader), sink->contents().size(), &table_reader));
|
|
4768
4972
|
|
|
4769
4973
|
ReadOptions read_options;
|
|
@@ -4879,6 +5083,59 @@ TEST_P(BlockBasedTableTest, PropertiesBlockRestartPointTest) {
|
|
|
4879
5083
|
}
|
|
4880
5084
|
}
|
|
4881
5085
|
|
|
5086
|
+
TEST_P(BlockBasedTableTest, CompressionRatioThreshold) {
|
|
5087
|
+
for (CompressionType type : GetSupportedCompressions()) {
|
|
5088
|
+
if (type == kNoCompression) {
|
|
5089
|
+
continue;
|
|
5090
|
+
}
|
|
5091
|
+
if (type == kBZip2Compression) {
|
|
5092
|
+
// Weird behavior in this test
|
|
5093
|
+
continue;
|
|
5094
|
+
}
|
|
5095
|
+
SCOPED_TRACE("Compression type: " + std::to_string(type));
|
|
5096
|
+
|
|
5097
|
+
Options options;
|
|
5098
|
+
options.compression = type;
|
|
5099
|
+
|
|
5100
|
+
BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
|
|
5101
|
+
int len = 10000;
|
|
5102
|
+
Random rnd(301);
|
|
5103
|
+
std::vector<std::string> keys;
|
|
5104
|
+
stl_wrappers::KVMap kvmap;
|
|
5105
|
+
|
|
5106
|
+
// Test the max_compressed_bytes_per_kb option
|
|
5107
|
+
for (int threshold : {0, 1, 100, 400, 600, 900, 1024}) {
|
|
5108
|
+
SCOPED_TRACE("threshold=" + std::to_string(threshold));
|
|
5109
|
+
options.compression_opts.max_compressed_bytes_per_kb = threshold;
|
|
5110
|
+
ImmutableOptions ioptions(options);
|
|
5111
|
+
MutableCFOptions moptions(options);
|
|
5112
|
+
|
|
5113
|
+
for (double compressible_to : {0.25, 0.75}) {
|
|
5114
|
+
SCOPED_TRACE("compressible_to=" + std::to_string(compressible_to));
|
|
5115
|
+
TableConstructor c(BytewiseComparator(),
|
|
5116
|
+
true /* convert_to_internal_key_ */);
|
|
5117
|
+
std::string buf;
|
|
5118
|
+
c.Add("x", test::CompressibleString(&rnd, compressible_to, len, &buf));
|
|
5119
|
+
|
|
5120
|
+
// write an SST file
|
|
5121
|
+
c.Finish(options, ioptions, moptions, table_options,
|
|
5122
|
+
GetPlainInternalComparator(options.comparator), &keys, &kvmap);
|
|
5123
|
+
|
|
5124
|
+
size_t table_file_size = c.TEST_GetSink()->contents().size();
|
|
5125
|
+
size_t approx_sst_overhead = 1000;
|
|
5126
|
+
if (compressible_to < threshold / 1024.0) {
|
|
5127
|
+
// Should be compressed (substantial variance depending on algorithm)
|
|
5128
|
+
EXPECT_NEAR2(len * compressible_to + approx_sst_overhead,
|
|
5129
|
+
table_file_size, len / 8);
|
|
5130
|
+
} else {
|
|
5131
|
+
// Should not be compressed
|
|
5132
|
+
EXPECT_NEAR2(len + approx_sst_overhead, table_file_size, len / 10);
|
|
5133
|
+
}
|
|
5134
|
+
}
|
|
5135
|
+
}
|
|
5136
|
+
}
|
|
5137
|
+
}
|
|
5138
|
+
|
|
4882
5139
|
TEST_P(BlockBasedTableTest, PropertiesMetaBlockLast) {
|
|
4883
5140
|
// The properties meta-block should come at the end since we always need to
|
|
4884
5141
|
// read it when opening a file, unlike index/filter/other meta-blocks, which
|
|
@@ -56,13 +56,15 @@ class WithCacheType : public TestCreateContext {
|
|
|
56
56
|
if (type == kLRU) {
|
|
57
57
|
LRUCacheOptions lru_opts;
|
|
58
58
|
lru_opts.capacity = capacity;
|
|
59
|
+
lru_opts.hash_seed = 0; // deterministic tests
|
|
59
60
|
if (modify_opts_fn) {
|
|
60
61
|
modify_opts_fn(lru_opts);
|
|
61
62
|
}
|
|
62
|
-
return
|
|
63
|
+
return lru_opts.MakeSharedCache();
|
|
63
64
|
}
|
|
64
65
|
if (type == kHyperClock) {
|
|
65
66
|
HyperClockCacheOptions hc_opts{capacity, estimated_value_size_};
|
|
67
|
+
hc_opts.hash_seed = 0; // deterministic tests
|
|
66
68
|
if (modify_opts_fn) {
|
|
67
69
|
modify_opts_fn(hc_opts);
|
|
68
70
|
}
|
|
@@ -51,6 +51,11 @@
|
|
|
51
51
|
GTEST_SUCCESS_("BYPASSED: " m); \
|
|
52
52
|
} while (false) /* user ; */
|
|
53
53
|
|
|
54
|
+
// Avoid "loss of precision" warnings when passing in 64-bit integers
|
|
55
|
+
#define EXPECT_NEAR2(val1, val2, abs_error) \
|
|
56
|
+
EXPECT_NEAR(static_cast<double>(val1), static_cast<double>(val2), \
|
|
57
|
+
static_cast<double>(abs_error))
|
|
58
|
+
|
|
54
59
|
#include <string>
|
|
55
60
|
|
|
56
61
|
#include "port/stack_trace.h"
|
|
@@ -76,7 +76,7 @@ extern Slice CompressibleString(Random* rnd, double compressed_fraction,
|
|
|
76
76
|
int len, std::string* dst) {
|
|
77
77
|
int raw = static_cast<int>(len * compressed_fraction);
|
|
78
78
|
if (raw < 1) raw = 1;
|
|
79
|
-
std::string raw_data = rnd->
|
|
79
|
+
std::string raw_data = rnd->RandomBinaryString(raw);
|
|
80
80
|
|
|
81
81
|
// Duplicate the random data until we have filled "len" bytes
|
|
82
82
|
dst->clear();
|
|
@@ -629,7 +629,7 @@ class SpecialSkipListFactory : public MemTableRepFactory {
|
|
|
629
629
|
});
|
|
630
630
|
return true;
|
|
631
631
|
}
|
|
632
|
-
// After number of inserts
|
|
632
|
+
// After number of inserts >= `num_entries_flush` in a mem table, trigger
|
|
633
633
|
// flush.
|
|
634
634
|
explicit SpecialSkipListFactory(int num_entries_flush)
|
|
635
635
|
: num_entries_flush_(num_entries_flush) {}
|