@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
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#include "cache/secondary_cache_adapter.h"
|
|
17
17
|
#include "logging/logging.h"
|
|
18
18
|
#include "monitoring/perf_context_imp.h"
|
|
19
|
-
#include "monitoring/
|
|
19
|
+
#include "monitoring/statistics_impl.h"
|
|
20
20
|
#include "port/lang.h"
|
|
21
21
|
#include "rocksdb/env.h"
|
|
22
22
|
#include "util/hash.h"
|
|
@@ -130,7 +130,8 @@ HyperClockTable::HyperClockTable(
|
|
|
130
130
|
size_t capacity, bool /*strict_capacity_limit*/,
|
|
131
131
|
CacheMetadataChargePolicy metadata_charge_policy,
|
|
132
132
|
MemoryAllocator* allocator,
|
|
133
|
-
const Cache::EvictionCallback* eviction_callback, const
|
|
133
|
+
const Cache::EvictionCallback* eviction_callback, const uint32_t* hash_seed,
|
|
134
|
+
const Opts& opts)
|
|
134
135
|
: length_bits_(CalcHashBits(capacity, opts.estimated_value_size,
|
|
135
136
|
metadata_charge_policy)),
|
|
136
137
|
length_bits_mask_((size_t{1} << length_bits_) - 1),
|
|
@@ -138,7 +139,8 @@ HyperClockTable::HyperClockTable(
|
|
|
138
139
|
kStrictLoadFactor)),
|
|
139
140
|
array_(new HandleImpl[size_t{1} << length_bits_]),
|
|
140
141
|
allocator_(allocator),
|
|
141
|
-
eviction_callback_(*eviction_callback)
|
|
142
|
+
eviction_callback_(*eviction_callback),
|
|
143
|
+
hash_seed_(*hash_seed) {
|
|
142
144
|
if (metadata_charge_policy ==
|
|
143
145
|
CacheMetadataChargePolicy::kFullChargeCacheMetadata) {
|
|
144
146
|
usage_ += size_t{GetTableSize()} * sizeof(HandleImpl);
|
|
@@ -1010,7 +1012,7 @@ inline void HyperClockTable::Evict(size_t requested_charge,
|
|
|
1010
1012
|
if (eviction_callback_) {
|
|
1011
1013
|
took_ownership =
|
|
1012
1014
|
eviction_callback_(ClockCacheShard<HyperClockTable>::ReverseHash(
|
|
1013
|
-
h.GetHash(), &unhashed),
|
|
1015
|
+
h.GetHash(), &unhashed, hash_seed_),
|
|
1014
1016
|
reinterpret_cast<Cache::Handle*>(&h));
|
|
1015
1017
|
}
|
|
1016
1018
|
if (!took_ownership) {
|
|
@@ -1039,11 +1041,11 @@ ClockCacheShard<Table>::ClockCacheShard(
|
|
|
1039
1041
|
size_t capacity, bool strict_capacity_limit,
|
|
1040
1042
|
CacheMetadataChargePolicy metadata_charge_policy,
|
|
1041
1043
|
MemoryAllocator* allocator,
|
|
1042
|
-
const Cache::EvictionCallback* eviction_callback,
|
|
1044
|
+
const Cache::EvictionCallback* eviction_callback, const uint32_t* hash_seed,
|
|
1043
1045
|
const typename Table::Opts& opts)
|
|
1044
1046
|
: CacheShardBase(metadata_charge_policy),
|
|
1045
1047
|
table_(capacity, strict_capacity_limit, metadata_charge_policy, allocator,
|
|
1046
|
-
eviction_callback, opts),
|
|
1048
|
+
eviction_callback, hash_seed, opts),
|
|
1047
1049
|
capacity_(capacity),
|
|
1048
1050
|
strict_capacity_limit_(strict_capacity_limit) {
|
|
1049
1051
|
// Initial charge metadata should not exceed capacity
|
|
@@ -1082,10 +1084,11 @@ void ClockCacheShard<Table>::ApplyToSomeEntries(
|
|
|
1082
1084
|
*state = index_end << (sizeof(size_t) * 8u - length_bits);
|
|
1083
1085
|
}
|
|
1084
1086
|
|
|
1087
|
+
auto hash_seed = table_.GetHashSeed();
|
|
1085
1088
|
table_.ConstApplyToEntriesRange(
|
|
1086
|
-
[callback](const HandleImpl& h) {
|
|
1089
|
+
[callback, hash_seed](const HandleImpl& h) {
|
|
1087
1090
|
UniqueId64x2 unhashed;
|
|
1088
|
-
callback(ReverseHash(h.hashed_key, &unhashed), h.value,
|
|
1091
|
+
callback(ReverseHash(h.hashed_key, &unhashed, hash_seed), h.value,
|
|
1089
1092
|
h.GetTotalCharge(), h.helper);
|
|
1090
1093
|
},
|
|
1091
1094
|
index_begin, index_end, false);
|
|
@@ -1282,25 +1285,20 @@ size_t ClockCacheShard<Table>::GetTableAddressCount() const {
|
|
|
1282
1285
|
// Explicit instantiation
|
|
1283
1286
|
template class ClockCacheShard<HyperClockTable>;
|
|
1284
1287
|
|
|
1285
|
-
HyperClockCache::HyperClockCache(
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
std::shared_ptr<MemoryAllocator> memory_allocator)
|
|
1290
|
-
: ShardedCache(capacity, num_shard_bits, strict_capacity_limit,
|
|
1291
|
-
std::move(memory_allocator)) {
|
|
1292
|
-
assert(estimated_value_size > 0 ||
|
|
1293
|
-
metadata_charge_policy != kDontChargeCacheMetadata);
|
|
1288
|
+
HyperClockCache::HyperClockCache(const HyperClockCacheOptions& opts)
|
|
1289
|
+
: ShardedCache(opts) {
|
|
1290
|
+
assert(opts.estimated_entry_charge > 0 ||
|
|
1291
|
+
opts.metadata_charge_policy != kDontChargeCacheMetadata);
|
|
1294
1292
|
// TODO: should not need to go through two levels of pointer indirection to
|
|
1295
1293
|
// get to table entries
|
|
1296
1294
|
size_t per_shard = GetPerShardCapacity();
|
|
1297
1295
|
MemoryAllocator* alloc = this->memory_allocator();
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
opts.
|
|
1302
|
-
|
|
1303
|
-
|
|
1296
|
+
InitShards([&](Shard* cs) {
|
|
1297
|
+
HyperClockTable::Opts table_opts;
|
|
1298
|
+
table_opts.estimated_value_size = opts.estimated_entry_charge;
|
|
1299
|
+
new (cs) Shard(per_shard, opts.strict_capacity_limit,
|
|
1300
|
+
opts.metadata_charge_policy, alloc, &eviction_callback_,
|
|
1301
|
+
&hash_seed_, table_opts);
|
|
1304
1302
|
});
|
|
1305
1303
|
}
|
|
1306
1304
|
|
|
@@ -1460,21 +1458,23 @@ std::shared_ptr<Cache> NewClockCache(
|
|
|
1460
1458
|
}
|
|
1461
1459
|
|
|
1462
1460
|
std::shared_ptr<Cache> HyperClockCacheOptions::MakeSharedCache() const {
|
|
1463
|
-
|
|
1464
|
-
|
|
1461
|
+
// For sanitized options
|
|
1462
|
+
HyperClockCacheOptions opts = *this;
|
|
1463
|
+
if (opts.num_shard_bits >= 20) {
|
|
1465
1464
|
return nullptr; // The cache cannot be sharded into too many fine pieces.
|
|
1466
1465
|
}
|
|
1467
|
-
if (
|
|
1466
|
+
if (opts.num_shard_bits < 0) {
|
|
1468
1467
|
// Use larger shard size to reduce risk of large entries clustering
|
|
1469
1468
|
// or skewing individual shards.
|
|
1470
1469
|
constexpr size_t min_shard_size = 32U * 1024U * 1024U;
|
|
1471
|
-
|
|
1470
|
+
opts.num_shard_bits =
|
|
1471
|
+
GetDefaultCacheShardBits(opts.capacity, min_shard_size);
|
|
1472
1472
|
}
|
|
1473
|
-
std::shared_ptr<Cache> cache =
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1473
|
+
std::shared_ptr<Cache> cache =
|
|
1474
|
+
std::make_shared<clock_cache::HyperClockCache>(opts);
|
|
1475
|
+
if (opts.secondary_cache) {
|
|
1476
|
+
cache = std::make_shared<CacheWithSecondaryAdapter>(cache,
|
|
1477
|
+
opts.secondary_cache);
|
|
1478
1478
|
}
|
|
1479
1479
|
return cache;
|
|
1480
1480
|
}
|
|
@@ -407,7 +407,7 @@ class HyperClockTable {
|
|
|
407
407
|
CacheMetadataChargePolicy metadata_charge_policy,
|
|
408
408
|
MemoryAllocator* allocator,
|
|
409
409
|
const Cache::EvictionCallback* eviction_callback,
|
|
410
|
-
const Opts& opts);
|
|
410
|
+
const uint32_t* hash_seed, const Opts& opts);
|
|
411
411
|
~HyperClockTable();
|
|
412
412
|
|
|
413
413
|
Status Insert(const ClockHandleBasicData& proto, HandleImpl** handle,
|
|
@@ -448,6 +448,8 @@ class HyperClockTable {
|
|
|
448
448
|
return standalone_usage_.load(std::memory_order_relaxed);
|
|
449
449
|
}
|
|
450
450
|
|
|
451
|
+
uint32_t GetHashSeed() const { return hash_seed_; }
|
|
452
|
+
|
|
451
453
|
// Acquire/release N references
|
|
452
454
|
void TEST_RefN(HandleImpl& handle, size_t n);
|
|
453
455
|
void TEST_ReleaseN(HandleImpl* handle, size_t n);
|
|
@@ -546,6 +548,9 @@ class HyperClockTable {
|
|
|
546
548
|
// A reference to Cache::eviction_callback_
|
|
547
549
|
const Cache::EvictionCallback& eviction_callback_;
|
|
548
550
|
|
|
551
|
+
// A reference to ShardedCacheBase::hash_seed_
|
|
552
|
+
const uint32_t& hash_seed_;
|
|
553
|
+
|
|
549
554
|
// We partition the following members into different cache lines
|
|
550
555
|
// to avoid false sharing among Lookup, Release, Erase and Insert
|
|
551
556
|
// operations in ClockCacheShard.
|
|
@@ -573,7 +578,7 @@ class ALIGN_AS(CACHE_LINE_SIZE) ClockCacheShard final : public CacheShardBase {
|
|
|
573
578
|
CacheMetadataChargePolicy metadata_charge_policy,
|
|
574
579
|
MemoryAllocator* allocator,
|
|
575
580
|
const Cache::EvictionCallback* eviction_callback,
|
|
576
|
-
const typename Table::Opts& opts);
|
|
581
|
+
const uint32_t* hash_seed, const typename Table::Opts& opts);
|
|
577
582
|
|
|
578
583
|
// For CacheShard concept
|
|
579
584
|
using HandleImpl = typename Table::HandleImpl;
|
|
@@ -583,22 +588,23 @@ class ALIGN_AS(CACHE_LINE_SIZE) ClockCacheShard final : public CacheShardBase {
|
|
|
583
588
|
static inline uint32_t HashPieceForSharding(HashCref hash) {
|
|
584
589
|
return Upper32of64(hash[0]);
|
|
585
590
|
}
|
|
586
|
-
static inline HashVal ComputeHash(const Slice& key) {
|
|
591
|
+
static inline HashVal ComputeHash(const Slice& key, uint32_t seed) {
|
|
587
592
|
assert(key.size() == kCacheKeySize);
|
|
588
593
|
HashVal in;
|
|
589
594
|
HashVal out;
|
|
590
595
|
// NOTE: endian dependence
|
|
591
596
|
// TODO: use GetUnaligned?
|
|
592
597
|
std::memcpy(&in, key.data(), kCacheKeySize);
|
|
593
|
-
BijectiveHash2x64(in[1], in[0], &out[1], &out[0]);
|
|
598
|
+
BijectiveHash2x64(in[1], in[0] ^ seed, &out[1], &out[0]);
|
|
594
599
|
return out;
|
|
595
600
|
}
|
|
596
601
|
|
|
597
602
|
// For reconstructing key from hashed_key. Requires the caller to provide
|
|
598
603
|
// backing storage for the Slice in `unhashed`
|
|
599
604
|
static inline Slice ReverseHash(const UniqueId64x2& hashed,
|
|
600
|
-
UniqueId64x2* unhashed) {
|
|
605
|
+
UniqueId64x2* unhashed, uint32_t seed) {
|
|
601
606
|
BijectiveUnhash2x64(hashed[1], hashed[0], &(*unhashed)[1], &(*unhashed)[0]);
|
|
607
|
+
(*unhashed)[0] ^= seed;
|
|
602
608
|
// NOTE: endian dependence
|
|
603
609
|
return Slice(reinterpret_cast<const char*>(unhashed), kCacheKeySize);
|
|
604
610
|
}
|
|
@@ -682,10 +688,7 @@ class HyperClockCache
|
|
|
682
688
|
public:
|
|
683
689
|
using Shard = ClockCacheShard<HyperClockTable>;
|
|
684
690
|
|
|
685
|
-
HyperClockCache(
|
|
686
|
-
int num_shard_bits, bool strict_capacity_limit,
|
|
687
|
-
CacheMetadataChargePolicy metadata_charge_policy,
|
|
688
|
-
std::shared_ptr<MemoryAllocator> memory_allocator);
|
|
691
|
+
explicit HyperClockCache(const HyperClockCacheOptions& opts);
|
|
689
692
|
|
|
690
693
|
const char* Name() const override { return "HyperClockCache"; }
|
|
691
694
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
#include <cstdint>
|
|
10
10
|
#include <memory>
|
|
11
11
|
|
|
12
|
-
#include "memory/
|
|
12
|
+
#include "memory/memory_allocator_impl.h"
|
|
13
13
|
#include "monitoring/perf_context_imp.h"
|
|
14
14
|
#include "util/compression.h"
|
|
15
15
|
#include "util/string_util.h"
|
|
@@ -17,23 +17,8 @@
|
|
|
17
17
|
namespace ROCKSDB_NAMESPACE {
|
|
18
18
|
|
|
19
19
|
CompressedSecondaryCache::CompressedSecondaryCache(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
std::shared_ptr<MemoryAllocator> memory_allocator, bool use_adaptive_mutex,
|
|
23
|
-
CacheMetadataChargePolicy metadata_charge_policy,
|
|
24
|
-
CompressionType compression_type, uint32_t compress_format_version,
|
|
25
|
-
bool enable_custom_split_merge,
|
|
26
|
-
const CacheEntryRoleSet& do_not_compress_roles)
|
|
27
|
-
: cache_options_(capacity, num_shard_bits, strict_capacity_limit,
|
|
28
|
-
high_pri_pool_ratio, low_pri_pool_ratio, memory_allocator,
|
|
29
|
-
use_adaptive_mutex, metadata_charge_policy,
|
|
30
|
-
compression_type, compress_format_version,
|
|
31
|
-
enable_custom_split_merge, do_not_compress_roles) {
|
|
32
|
-
cache_ =
|
|
33
|
-
NewLRUCache(capacity, num_shard_bits, strict_capacity_limit,
|
|
34
|
-
high_pri_pool_ratio, memory_allocator, use_adaptive_mutex,
|
|
35
|
-
metadata_charge_policy, low_pri_pool_ratio);
|
|
36
|
-
}
|
|
20
|
+
const CompressedSecondaryCacheOptions& opts)
|
|
21
|
+
: cache_(opts.LRUCacheOptions::MakeSharedCache()), cache_options_(opts) {}
|
|
37
22
|
|
|
38
23
|
CompressedSecondaryCache::~CompressedSecondaryCache() { cache_.reset(); }
|
|
39
24
|
|
|
@@ -311,31 +296,9 @@ const Cache::CacheItemHelper* CompressedSecondaryCache::GetHelper(
|
|
|
311
296
|
}
|
|
312
297
|
}
|
|
313
298
|
|
|
314
|
-
std::shared_ptr<SecondaryCache>
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
std::shared_ptr<MemoryAllocator> memory_allocator, bool use_adaptive_mutex,
|
|
318
|
-
CacheMetadataChargePolicy metadata_charge_policy,
|
|
319
|
-
CompressionType compression_type, uint32_t compress_format_version,
|
|
320
|
-
bool enable_custom_split_merge,
|
|
321
|
-
const CacheEntryRoleSet& do_not_compress_roles) {
|
|
322
|
-
return std::make_shared<CompressedSecondaryCache>(
|
|
323
|
-
capacity, num_shard_bits, strict_capacity_limit, high_pri_pool_ratio,
|
|
324
|
-
low_pri_pool_ratio, memory_allocator, use_adaptive_mutex,
|
|
325
|
-
metadata_charge_policy, compression_type, compress_format_version,
|
|
326
|
-
enable_custom_split_merge, do_not_compress_roles);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
std::shared_ptr<SecondaryCache> NewCompressedSecondaryCache(
|
|
330
|
-
const CompressedSecondaryCacheOptions& opts) {
|
|
331
|
-
// The secondary_cache is disabled for this LRUCache instance.
|
|
332
|
-
assert(opts.secondary_cache == nullptr);
|
|
333
|
-
return NewCompressedSecondaryCache(
|
|
334
|
-
opts.capacity, opts.num_shard_bits, opts.strict_capacity_limit,
|
|
335
|
-
opts.high_pri_pool_ratio, opts.low_pri_pool_ratio, opts.memory_allocator,
|
|
336
|
-
opts.use_adaptive_mutex, opts.metadata_charge_policy,
|
|
337
|
-
opts.compression_type, opts.compress_format_version,
|
|
338
|
-
opts.enable_custom_split_merge, opts.do_not_compress_roles);
|
|
299
|
+
std::shared_ptr<SecondaryCache>
|
|
300
|
+
CompressedSecondaryCacheOptions::MakeSharedSecondaryCache() const {
|
|
301
|
+
return std::make_shared<CompressedSecondaryCache>(*this);
|
|
339
302
|
}
|
|
340
303
|
|
|
341
304
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
#include <memory>
|
|
11
11
|
|
|
12
12
|
#include "cache/lru_cache.h"
|
|
13
|
-
#include "memory/
|
|
13
|
+
#include "memory/memory_allocator_impl.h"
|
|
14
14
|
#include "rocksdb/secondary_cache.h"
|
|
15
15
|
#include "rocksdb/slice.h"
|
|
16
16
|
#include "rocksdb/status.h"
|
|
@@ -69,18 +69,8 @@ class CompressedSecondaryCacheResultHandle : public SecondaryCacheResultHandle {
|
|
|
69
69
|
|
|
70
70
|
class CompressedSecondaryCache : public SecondaryCache {
|
|
71
71
|
public:
|
|
72
|
-
CompressedSecondaryCache(
|
|
73
|
-
|
|
74
|
-
double high_pri_pool_ratio, double low_pri_pool_ratio,
|
|
75
|
-
std::shared_ptr<MemoryAllocator> memory_allocator = nullptr,
|
|
76
|
-
bool use_adaptive_mutex = kDefaultToAdaptiveMutex,
|
|
77
|
-
CacheMetadataChargePolicy metadata_charge_policy =
|
|
78
|
-
kDefaultCacheMetadataChargePolicy,
|
|
79
|
-
CompressionType compression_type = CompressionType::kLZ4Compression,
|
|
80
|
-
uint32_t compress_format_version = 2,
|
|
81
|
-
bool enable_custom_split_merge = false,
|
|
82
|
-
const CacheEntryRoleSet& do_not_compress_roles = {
|
|
83
|
-
CacheEntryRole::kFilterBlock});
|
|
72
|
+
explicit CompressedSecondaryCache(
|
|
73
|
+
const CompressedSecondaryCacheOptions& opts);
|
|
84
74
|
~CompressedSecondaryCache() override;
|
|
85
75
|
|
|
86
76
|
const char* Name() const override { return "CompressedSecondaryCache"; }
|
|
@@ -626,8 +626,9 @@ class CompressedSecondaryCacheTestBase : public testing::Test,
|
|
|
626
626
|
|
|
627
627
|
using CacheValueChunk = CompressedSecondaryCache::CacheValueChunk;
|
|
628
628
|
std::unique_ptr<CompressedSecondaryCache> sec_cache =
|
|
629
|
-
std::make_unique<CompressedSecondaryCache>(
|
|
630
|
-
|
|
629
|
+
std::make_unique<CompressedSecondaryCache>(
|
|
630
|
+
CompressedSecondaryCacheOptions(1000, 0, true, 0.5, 0.0,
|
|
631
|
+
allocator));
|
|
631
632
|
Random rnd(301);
|
|
632
633
|
// 8500 = 8169 + 233 + 98, so there should be 3 chunks after split.
|
|
633
634
|
size_t str_size{8500};
|
|
@@ -678,7 +679,8 @@ class CompressedSecondaryCacheTestBase : public testing::Test,
|
|
|
678
679
|
std::string str = str1 + str2 + str3;
|
|
679
680
|
|
|
680
681
|
std::unique_ptr<CompressedSecondaryCache> sec_cache =
|
|
681
|
-
std::make_unique<CompressedSecondaryCache>(
|
|
682
|
+
std::make_unique<CompressedSecondaryCache>(
|
|
683
|
+
CompressedSecondaryCacheOptions(1000, 0, true, 0.5, 0.0));
|
|
682
684
|
size_t charge{0};
|
|
683
685
|
CacheAllocationPtr value =
|
|
684
686
|
sec_cache->MergeChunksIntoValue(chunks_head, charge);
|
|
@@ -708,8 +710,9 @@ class CompressedSecondaryCacheTestBase : public testing::Test,
|
|
|
708
710
|
|
|
709
711
|
using CacheValueChunk = CompressedSecondaryCache::CacheValueChunk;
|
|
710
712
|
std::unique_ptr<CompressedSecondaryCache> sec_cache =
|
|
711
|
-
std::make_unique<CompressedSecondaryCache>(
|
|
712
|
-
|
|
713
|
+
std::make_unique<CompressedSecondaryCache>(
|
|
714
|
+
CompressedSecondaryCacheOptions(1000, 0, true, 0.5, 0.0,
|
|
715
|
+
allocator));
|
|
713
716
|
Random rnd(301);
|
|
714
717
|
// 8500 = 8169 + 233 + 98, so there should be 3 chunks after split.
|
|
715
718
|
size_t str_size{8500};
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
#include "cache/secondary_cache_adapter.h"
|
|
18
18
|
#include "monitoring/perf_context_imp.h"
|
|
19
|
-
#include "monitoring/
|
|
19
|
+
#include "monitoring/statistics_impl.h"
|
|
20
20
|
#include "port/lang.h"
|
|
21
21
|
#include "util/distributed_mutex.h"
|
|
22
22
|
|
|
@@ -646,23 +646,15 @@ void LRUCacheShard::AppendPrintableOptions(std::string& str) const {
|
|
|
646
646
|
str.append(buffer);
|
|
647
647
|
}
|
|
648
648
|
|
|
649
|
-
LRUCache::LRUCache(
|
|
650
|
-
bool strict_capacity_limit, double high_pri_pool_ratio,
|
|
651
|
-
double low_pri_pool_ratio,
|
|
652
|
-
std::shared_ptr<MemoryAllocator> allocator,
|
|
653
|
-
bool use_adaptive_mutex,
|
|
654
|
-
CacheMetadataChargePolicy metadata_charge_policy)
|
|
655
|
-
: ShardedCache(capacity, num_shard_bits, strict_capacity_limit,
|
|
656
|
-
std::move(allocator)) {
|
|
649
|
+
LRUCache::LRUCache(const LRUCacheOptions& opts) : ShardedCache(opts) {
|
|
657
650
|
size_t per_shard = GetPerShardCapacity();
|
|
658
651
|
MemoryAllocator* alloc = memory_allocator();
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
eviction_callback);
|
|
652
|
+
InitShards([&](LRUCacheShard* cs) {
|
|
653
|
+
new (cs) LRUCacheShard(per_shard, opts.strict_capacity_limit,
|
|
654
|
+
opts.high_pri_pool_ratio, opts.low_pri_pool_ratio,
|
|
655
|
+
opts.use_adaptive_mutex, opts.metadata_charge_policy,
|
|
656
|
+
/* max_upper_hash_bits */ 32 - opts.num_shard_bits,
|
|
657
|
+
alloc, &eviction_callback_);
|
|
666
658
|
});
|
|
667
659
|
}
|
|
668
660
|
|
|
@@ -692,13 +684,7 @@ double LRUCache::GetHighPriPoolRatio() {
|
|
|
692
684
|
|
|
693
685
|
} // namespace lru_cache
|
|
694
686
|
|
|
695
|
-
std::shared_ptr<Cache>
|
|
696
|
-
size_t capacity, int num_shard_bits, bool strict_capacity_limit,
|
|
697
|
-
double high_pri_pool_ratio,
|
|
698
|
-
std::shared_ptr<MemoryAllocator> memory_allocator, bool use_adaptive_mutex,
|
|
699
|
-
CacheMetadataChargePolicy metadata_charge_policy,
|
|
700
|
-
const std::shared_ptr<SecondaryCache>& secondary_cache,
|
|
701
|
-
double low_pri_pool_ratio) {
|
|
687
|
+
std::shared_ptr<Cache> LRUCacheOptions::MakeSharedCache() const {
|
|
702
688
|
if (num_shard_bits >= 20) {
|
|
703
689
|
return nullptr; // The cache cannot be sharded into too many fine pieces.
|
|
704
690
|
}
|
|
@@ -714,36 +700,24 @@ std::shared_ptr<Cache> NewLRUCache(
|
|
|
714
700
|
// Invalid high_pri_pool_ratio and low_pri_pool_ratio combination
|
|
715
701
|
return nullptr;
|
|
716
702
|
}
|
|
717
|
-
|
|
718
|
-
|
|
703
|
+
// For sanitized options
|
|
704
|
+
LRUCacheOptions opts = *this;
|
|
705
|
+
if (opts.num_shard_bits < 0) {
|
|
706
|
+
opts.num_shard_bits = GetDefaultCacheShardBits(capacity);
|
|
719
707
|
}
|
|
720
|
-
std::shared_ptr<Cache> cache = std::make_shared<LRUCache>(
|
|
721
|
-
capacity, num_shard_bits, strict_capacity_limit, high_pri_pool_ratio,
|
|
722
|
-
low_pri_pool_ratio, std::move(memory_allocator), use_adaptive_mutex,
|
|
723
|
-
metadata_charge_policy);
|
|
708
|
+
std::shared_ptr<Cache> cache = std::make_shared<LRUCache>(opts);
|
|
724
709
|
if (secondary_cache) {
|
|
725
710
|
cache = std::make_shared<CacheWithSecondaryAdapter>(cache, secondary_cache);
|
|
726
711
|
}
|
|
727
712
|
return cache;
|
|
728
713
|
}
|
|
729
714
|
|
|
730
|
-
std::shared_ptr<
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
std::shared_ptr<Cache> NewLRUCache(
|
|
740
|
-
size_t capacity, int num_shard_bits, bool strict_capacity_limit,
|
|
741
|
-
double high_pri_pool_ratio,
|
|
742
|
-
std::shared_ptr<MemoryAllocator> memory_allocator, bool use_adaptive_mutex,
|
|
743
|
-
CacheMetadataChargePolicy metadata_charge_policy,
|
|
744
|
-
double low_pri_pool_ratio) {
|
|
745
|
-
return NewLRUCache(capacity, num_shard_bits, strict_capacity_limit,
|
|
746
|
-
high_pri_pool_ratio, memory_allocator, use_adaptive_mutex,
|
|
747
|
-
metadata_charge_policy, nullptr, low_pri_pool_ratio);
|
|
715
|
+
std::shared_ptr<GeneralCache> LRUCacheOptions::MakeSharedGeneralCache() const {
|
|
716
|
+
if (secondary_cache) {
|
|
717
|
+
// Not allowed for a GeneralCache
|
|
718
|
+
return nullptr;
|
|
719
|
+
}
|
|
720
|
+
// Works while GeneralCache is an alias for Cache
|
|
721
|
+
return MakeSharedCache();
|
|
748
722
|
}
|
|
749
723
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -279,8 +279,8 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
|
|
|
279
279
|
using HashCref = uint32_t;
|
|
280
280
|
|
|
281
281
|
public: // Function definitions expected as parameter to ShardedCache
|
|
282
|
-
static inline HashVal ComputeHash(const Slice& key) {
|
|
283
|
-
return Lower32of64(GetSliceNPHash64(key));
|
|
282
|
+
static inline HashVal ComputeHash(const Slice& key, uint32_t seed) {
|
|
283
|
+
return Lower32of64(GetSliceNPHash64(key, seed));
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
// Separate from constructor so caller can easily make an array of LRUCache
|
|
@@ -446,12 +446,7 @@ class LRUCache
|
|
|
446
446
|
#endif
|
|
447
447
|
: public ShardedCache<LRUCacheShard> {
|
|
448
448
|
public:
|
|
449
|
-
LRUCache(
|
|
450
|
-
double high_pri_pool_ratio, double low_pri_pool_ratio,
|
|
451
|
-
std::shared_ptr<MemoryAllocator> memory_allocator = nullptr,
|
|
452
|
-
bool use_adaptive_mutex = kDefaultToAdaptiveMutex,
|
|
453
|
-
CacheMetadataChargePolicy metadata_charge_policy =
|
|
454
|
-
kDontChargeCacheMetadata);
|
|
449
|
+
explicit LRUCache(const LRUCacheOptions& opts);
|
|
455
450
|
const char* Name() const override { return "LRUCache"; }
|
|
456
451
|
ObjectPtr Value(Handle* handle) override;
|
|
457
452
|
size_t GetCharge(Handle* handle) const override;
|
|
@@ -397,7 +397,7 @@ class ClockCacheTest : public testing::Test {
|
|
|
397
397
|
opts.estimated_value_size = 1;
|
|
398
398
|
new (shard_)
|
|
399
399
|
Shard(capacity, strict_capacity_limit, kDontChargeCacheMetadata,
|
|
400
|
-
/*allocator*/ nullptr, &eviction_callback_, opts);
|
|
400
|
+
/*allocator*/ nullptr, &eviction_callback_, &hash_seed_, opts);
|
|
401
401
|
}
|
|
402
402
|
|
|
403
403
|
Status Insert(const UniqueId64x2& hashed_key,
|
|
@@ -455,6 +455,7 @@ class ClockCacheTest : public testing::Test {
|
|
|
455
455
|
|
|
456
456
|
private:
|
|
457
457
|
Cache::EvictionCallback eviction_callback_;
|
|
458
|
+
uint32_t hash_seed_ = 0;
|
|
458
459
|
};
|
|
459
460
|
|
|
460
461
|
TEST_F(ClockCacheTest, Misc) {
|
|
@@ -95,8 +95,7 @@ Cache::Handle* CacheWithSecondaryAdapter::Promote(
|
|
|
95
95
|
PERF_COUNTER_ADD(secondary_cache_hit_count, 1);
|
|
96
96
|
RecordTick(stats, SECONDARY_CACHE_HITS);
|
|
97
97
|
|
|
98
|
-
//
|
|
99
|
-
// implementation
|
|
98
|
+
// Note: SecondaryCache::Size() is really charge (from the CreateCallback)
|
|
100
99
|
size_t charge = secondary_handle->Size();
|
|
101
100
|
Handle* result = nullptr;
|
|
102
101
|
// Insert into primary cache, possibly as a standalone+dummy entries.
|
|
@@ -13,20 +13,57 @@
|
|
|
13
13
|
#include <cstdint>
|
|
14
14
|
#include <memory>
|
|
15
15
|
|
|
16
|
+
#include "env/unique_id_gen.h"
|
|
17
|
+
#include "rocksdb/env.h"
|
|
16
18
|
#include "util/hash.h"
|
|
17
19
|
#include "util/math.h"
|
|
18
20
|
#include "util/mutexlock.h"
|
|
19
21
|
|
|
20
22
|
namespace ROCKSDB_NAMESPACE {
|
|
23
|
+
namespace {
|
|
24
|
+
// The generated seeds must fit in 31 bits so that
|
|
25
|
+
// ShardedCacheOptions::hash_seed can be set to it explicitly, for
|
|
26
|
+
// diagnostic/debugging purposes.
|
|
27
|
+
constexpr uint32_t kSeedMask = 0x7fffffff;
|
|
28
|
+
uint32_t DetermineSeed(int32_t hash_seed_option) {
|
|
29
|
+
if (hash_seed_option >= 0) {
|
|
30
|
+
// User-specified exact seed
|
|
31
|
+
return static_cast<uint32_t>(hash_seed_option);
|
|
32
|
+
}
|
|
33
|
+
static SemiStructuredUniqueIdGen gen;
|
|
34
|
+
if (hash_seed_option == ShardedCacheOptions::kHostHashSeed) {
|
|
35
|
+
std::string hostname;
|
|
36
|
+
Status s = Env::Default()->GetHostNameString(&hostname);
|
|
37
|
+
if (s.ok()) {
|
|
38
|
+
return GetSliceHash(hostname) & kSeedMask;
|
|
39
|
+
} else {
|
|
40
|
+
// Fall back on something stable within the process.
|
|
41
|
+
return static_cast<uint32_t>(gen.GetBaseUpper()) & kSeedMask;
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
44
|
+
// for kQuasiRandomHashSeed and fallback
|
|
45
|
+
uint32_t val = gen.GenerateNext<uint32_t>() & kSeedMask;
|
|
46
|
+
// Perform some 31-bit bijective transformations so that we get
|
|
47
|
+
// quasirandom, not just incrementing. (An incrementing seed from a
|
|
48
|
+
// random starting point would be fine, but hard to describe in a name.)
|
|
49
|
+
// See https://en.wikipedia.org/wiki/Quasirandom and using a murmur-like
|
|
50
|
+
// transformation here for our bijection in the lower 31 bits.
|
|
51
|
+
// See https://en.wikipedia.org/wiki/MurmurHash
|
|
52
|
+
val *= /*31-bit prime*/ 1150630961;
|
|
53
|
+
val ^= (val & kSeedMask) >> 17;
|
|
54
|
+
val *= /*31-bit prime*/ 1320603883;
|
|
55
|
+
return val & kSeedMask;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
} // namespace
|
|
21
59
|
|
|
22
|
-
ShardedCacheBase::ShardedCacheBase(
|
|
23
|
-
|
|
24
|
-
std::shared_ptr<MemoryAllocator> allocator)
|
|
25
|
-
: Cache(std::move(allocator)),
|
|
60
|
+
ShardedCacheBase::ShardedCacheBase(const ShardedCacheOptions& opts)
|
|
61
|
+
: Cache(opts.memory_allocator),
|
|
26
62
|
last_id_(1),
|
|
27
|
-
shard_mask_((uint32_t{1} << num_shard_bits) - 1),
|
|
28
|
-
|
|
29
|
-
|
|
63
|
+
shard_mask_((uint32_t{1} << opts.num_shard_bits) - 1),
|
|
64
|
+
hash_seed_(DetermineSeed(opts.hash_seed)),
|
|
65
|
+
strict_capacity_limit_(opts.strict_capacity_limit),
|
|
66
|
+
capacity_(opts.capacity) {}
|
|
30
67
|
|
|
31
68
|
size_t ShardedCacheBase::ComputePerShardCapacity(size_t capacity) const {
|
|
32
69
|
uint32_t num_shards = GetNumShards();
|
|
@@ -34,8 +34,8 @@ class CacheShardBase {
|
|
|
34
34
|
std::string GetPrintableOptions() const { return ""; }
|
|
35
35
|
using HashVal = uint64_t;
|
|
36
36
|
using HashCref = uint64_t;
|
|
37
|
-
static inline HashVal ComputeHash(const Slice& key) {
|
|
38
|
-
return GetSliceNPHash64(key);
|
|
37
|
+
static inline HashVal ComputeHash(const Slice& key, uint32_t seed) {
|
|
38
|
+
return GetSliceNPHash64(key, seed);
|
|
39
39
|
}
|
|
40
40
|
static inline uint32_t HashPieceForSharding(HashCref hash) {
|
|
41
41
|
return Lower32of64(hash);
|
|
@@ -89,9 +89,7 @@ class CacheShardBase {
|
|
|
89
89
|
// Portions of ShardedCache that do not depend on the template parameter
|
|
90
90
|
class ShardedCacheBase : public Cache {
|
|
91
91
|
public:
|
|
92
|
-
ShardedCacheBase(
|
|
93
|
-
bool strict_capacity_limit,
|
|
94
|
-
std::shared_ptr<MemoryAllocator> memory_allocator);
|
|
92
|
+
explicit ShardedCacheBase(const ShardedCacheOptions& opts);
|
|
95
93
|
virtual ~ShardedCacheBase() = default;
|
|
96
94
|
|
|
97
95
|
int GetNumShardBits() const;
|
|
@@ -106,6 +104,8 @@ class ShardedCacheBase : public Cache {
|
|
|
106
104
|
size_t GetUsage(Handle* handle) const override;
|
|
107
105
|
std::string GetPrintableOptions() const override;
|
|
108
106
|
|
|
107
|
+
uint32_t GetHashSeed() const override { return hash_seed_; }
|
|
108
|
+
|
|
109
109
|
protected: // fns
|
|
110
110
|
virtual void AppendPrintableOptions(std::string& str) const = 0;
|
|
111
111
|
size_t GetPerShardCapacity() const;
|
|
@@ -114,6 +114,7 @@ class ShardedCacheBase : public Cache {
|
|
|
114
114
|
protected: // data
|
|
115
115
|
std::atomic<uint64_t> last_id_; // For NewId
|
|
116
116
|
const uint32_t shard_mask_;
|
|
117
|
+
const uint32_t hash_seed_;
|
|
117
118
|
|
|
118
119
|
// Dynamic configuration parameters, guarded by config_mutex_
|
|
119
120
|
bool strict_capacity_limit_;
|
|
@@ -134,10 +135,8 @@ class ShardedCache : public ShardedCacheBase {
|
|
|
134
135
|
using HashCref = typename CacheShard::HashCref;
|
|
135
136
|
using HandleImpl = typename CacheShard::HandleImpl;
|
|
136
137
|
|
|
137
|
-
ShardedCache(
|
|
138
|
-
|
|
139
|
-
: ShardedCacheBase(capacity, num_shard_bits, strict_capacity_limit,
|
|
140
|
-
allocator),
|
|
138
|
+
explicit ShardedCache(const ShardedCacheOptions& opts)
|
|
139
|
+
: ShardedCacheBase(opts),
|
|
141
140
|
shards_(reinterpret_cast<CacheShard*>(port::cacheline_aligned_alloc(
|
|
142
141
|
sizeof(CacheShard) * GetNumShards()))),
|
|
143
142
|
destroy_shards_in_dtor_(false) {}
|
|
@@ -175,7 +174,7 @@ class ShardedCache : public ShardedCacheBase {
|
|
|
175
174
|
size_t charge, Handle** handle = nullptr,
|
|
176
175
|
Priority priority = Priority::LOW) override {
|
|
177
176
|
assert(helper);
|
|
178
|
-
HashVal hash = CacheShard::ComputeHash(key);
|
|
177
|
+
HashVal hash = CacheShard::ComputeHash(key, hash_seed_);
|
|
179
178
|
auto h_out = reinterpret_cast<HandleImpl**>(handle);
|
|
180
179
|
return GetShard(hash).Insert(key, hash, obj, helper, charge, h_out,
|
|
181
180
|
priority);
|
|
@@ -185,7 +184,7 @@ class ShardedCache : public ShardedCacheBase {
|
|
|
185
184
|
const CacheItemHelper* helper, size_t charge,
|
|
186
185
|
bool allow_uncharged) override {
|
|
187
186
|
assert(helper);
|
|
188
|
-
HashVal hash = CacheShard::ComputeHash(key);
|
|
187
|
+
HashVal hash = CacheShard::ComputeHash(key, hash_seed_);
|
|
189
188
|
HandleImpl* result = GetShard(hash).CreateStandalone(
|
|
190
189
|
key, hash, obj, helper, charge, allow_uncharged);
|
|
191
190
|
return reinterpret_cast<Handle*>(result);
|
|
@@ -195,14 +194,14 @@ class ShardedCache : public ShardedCacheBase {
|
|
|
195
194
|
CreateContext* create_context = nullptr,
|
|
196
195
|
Priority priority = Priority::LOW,
|
|
197
196
|
Statistics* stats = nullptr) override {
|
|
198
|
-
HashVal hash = CacheShard::ComputeHash(key);
|
|
197
|
+
HashVal hash = CacheShard::ComputeHash(key, hash_seed_);
|
|
199
198
|
HandleImpl* result = GetShard(hash).Lookup(key, hash, helper,
|
|
200
199
|
create_context, priority, stats);
|
|
201
200
|
return reinterpret_cast<Handle*>(result);
|
|
202
201
|
}
|
|
203
202
|
|
|
204
203
|
void Erase(const Slice& key) override {
|
|
205
|
-
HashVal hash = CacheShard::ComputeHash(key);
|
|
204
|
+
HashVal hash = CacheShard::ComputeHash(key, hash_seed_);
|
|
206
205
|
GetShard(hash).Erase(key, hash);
|
|
207
206
|
}
|
|
208
207
|
|
|
@@ -226,7 +225,7 @@ class ShardedCache : public ShardedCacheBase {
|
|
|
226
225
|
return SumOverShards2(&CacheShard::GetPinnedUsage);
|
|
227
226
|
}
|
|
228
227
|
size_t GetOccupancyCount() const override {
|
|
229
|
-
return SumOverShards2(&CacheShard::
|
|
228
|
+
return SumOverShards2(&CacheShard::GetOccupancyCount);
|
|
230
229
|
}
|
|
231
230
|
size_t GetTableAddressCount() const override {
|
|
232
231
|
return SumOverShards2(&CacheShard::GetTableAddressCount);
|