@nxtedition/rocksdb 7.1.20 → 7.1.21
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/deps/rocksdb/rocksdb/CMakeLists.txt +13 -6
- package/deps/rocksdb/rocksdb/Makefile +1 -1
- package/deps/rocksdb/rocksdb/TARGETS +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
- package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
- package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
- package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
- 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_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
- package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
- package/deps/rocksdb/rocksdb/src.mk +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
- package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
- package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
- package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
- package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
- package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
- package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
- package/index.js +12 -4
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -38,21 +38,14 @@ namespace lru_cache {
|
|
|
38
38
|
// (refs == 0 && in_cache == true)
|
|
39
39
|
// 3. Referenced externally AND not in hash table.
|
|
40
40
|
// In that case the entry is not in the LRU list and not in hash table.
|
|
41
|
-
// The entry
|
|
41
|
+
// The entry must be freed if refs becomes 0 in this state.
|
|
42
42
|
// (refs >= 1 && in_cache == false)
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
// To move from state 1 to state 3, either call LRUCacheShard::Erase or
|
|
50
|
-
// LRUCacheShard::Insert with the same key (but possibly different value).
|
|
51
|
-
// To move from state 2 to state 1, use LRUCacheShard::Lookup.
|
|
52
|
-
// Before destruction, make sure that no handles are in state 1. This means
|
|
53
|
-
// that any successful LRUCacheShard::Lookup/LRUCacheShard::Insert have a
|
|
54
|
-
// matching LRUCache::Release (to move into state 2) or LRUCacheShard::Erase
|
|
55
|
-
// (to move into state 3).
|
|
43
|
+
// If you call LRUCacheShard::Release enough times on an entry in state 1, it
|
|
44
|
+
// will go into state 2. To move from state 1 to state 3, either call
|
|
45
|
+
// LRUCacheShard::Erase or LRUCacheShard::Insert with the same key (but
|
|
46
|
+
// possibly different value). To move from state 2 to state 1, use
|
|
47
|
+
// LRUCacheShard::Lookup.
|
|
48
|
+
// While refs > 0, public properties like value and deleter must not change.
|
|
56
49
|
|
|
57
50
|
struct LRUHandle {
|
|
58
51
|
void* value;
|
|
@@ -60,7 +53,7 @@ struct LRUHandle {
|
|
|
60
53
|
Info() {}
|
|
61
54
|
~Info() {}
|
|
62
55
|
Cache::DeleterFn deleter;
|
|
63
|
-
const
|
|
56
|
+
const Cache::CacheItemHelper* helper;
|
|
64
57
|
} info_;
|
|
65
58
|
// An entry is not added to the LRUHandleTable until the secondary cache
|
|
66
59
|
// lookup is complete, so its safe to have this union.
|
|
@@ -77,45 +70,47 @@ struct LRUHandle {
|
|
|
77
70
|
// The number of external refs to this entry. The cache itself is not counted.
|
|
78
71
|
uint32_t refs;
|
|
79
72
|
|
|
80
|
-
|
|
73
|
+
// Mutable flags - access controlled by mutex
|
|
74
|
+
// The m_ and M_ prefixes (and im_ and IM_ later) are to hopefully avoid
|
|
75
|
+
// checking an M_ flag on im_flags or an IM_ flag on m_flags.
|
|
76
|
+
uint8_t m_flags;
|
|
77
|
+
enum MFlags : uint8_t {
|
|
81
78
|
// Whether this entry is referenced by the hash table.
|
|
82
|
-
|
|
83
|
-
// Whether this entry is high priority entry.
|
|
84
|
-
IS_HIGH_PRI = (1 << 1),
|
|
85
|
-
// Whether this entry is in high-pri pool.
|
|
86
|
-
IN_HIGH_PRI_POOL = (1 << 2),
|
|
79
|
+
M_IN_CACHE = (1 << 0),
|
|
87
80
|
// Whether this entry has had any lookups (hits).
|
|
88
|
-
|
|
81
|
+
M_HAS_HIT = (1 << 1),
|
|
82
|
+
// Whether this entry is in high-pri pool.
|
|
83
|
+
M_IN_HIGH_PRI_POOL = (1 << 2),
|
|
84
|
+
// Whether this entry is in low-pri pool.
|
|
85
|
+
M_IN_LOW_PRI_POOL = (1 << 3),
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// "Immutable" flags - only set in single-threaded context and then
|
|
89
|
+
// can be accessed without mutex
|
|
90
|
+
uint8_t im_flags;
|
|
91
|
+
enum ImFlags : uint8_t {
|
|
92
|
+
// Whether this entry is high priority entry.
|
|
93
|
+
IM_IS_HIGH_PRI = (1 << 0),
|
|
94
|
+
// Whether this entry is low priority entry.
|
|
95
|
+
IM_IS_LOW_PRI = (1 << 1),
|
|
89
96
|
// Can this be inserted into the secondary cache.
|
|
90
|
-
|
|
97
|
+
IM_IS_SECONDARY_CACHE_COMPATIBLE = (1 << 2),
|
|
91
98
|
// Is the handle still being read from a lower tier.
|
|
92
|
-
|
|
99
|
+
IM_IS_PENDING = (1 << 3),
|
|
93
100
|
// Whether this handle is still in a lower tier
|
|
94
|
-
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
// Whether this entry is in low-pri pool.
|
|
98
|
-
IN_LOW_PRI_POOL = (1 << 8),
|
|
99
|
-
// Whether this entry is not inserted into the cache (both hash table and
|
|
100
|
-
// LRU list).
|
|
101
|
-
IS_STANDALONE = (1 << 9),
|
|
101
|
+
IM_IS_IN_SECONDARY_CACHE = (1 << 4),
|
|
102
|
+
// Marks result handles that should not be inserted into cache
|
|
103
|
+
IM_IS_STANDALONE = (1 << 5),
|
|
102
104
|
};
|
|
103
105
|
|
|
104
|
-
uint16_t flags;
|
|
105
|
-
|
|
106
|
-
#ifdef __SANITIZE_THREAD__
|
|
107
|
-
// TSAN can report a false data race on flags, where one thread is writing
|
|
108
|
-
// to one of the mutable bits and another thread is reading this immutable
|
|
109
|
-
// bit. So precisely suppress that TSAN warning, we separate out this bit
|
|
110
|
-
// during TSAN runs.
|
|
111
|
-
bool is_secondary_cache_compatible_for_tsan;
|
|
112
|
-
#endif // __SANITIZE_THREAD__
|
|
113
|
-
|
|
114
106
|
// Beginning of the key (MUST BE THE LAST FIELD IN THIS STRUCT!)
|
|
115
107
|
char key_data[1];
|
|
116
108
|
|
|
117
109
|
Slice key() const { return Slice(key_data, key_length); }
|
|
118
110
|
|
|
111
|
+
// For HandleImpl concept
|
|
112
|
+
uint32_t GetHash() const { return hash; }
|
|
113
|
+
|
|
119
114
|
// Increase the reference count by 1.
|
|
120
115
|
void Ref() { refs++; }
|
|
121
116
|
|
|
@@ -129,104 +124,94 @@ struct LRUHandle {
|
|
|
129
124
|
// Return true if there are external refs, false otherwise.
|
|
130
125
|
bool HasRefs() const { return refs > 0; }
|
|
131
126
|
|
|
132
|
-
bool InCache() const { return
|
|
133
|
-
bool IsHighPri() const { return
|
|
134
|
-
bool InHighPriPool() const { return
|
|
135
|
-
bool IsLowPri() const { return
|
|
136
|
-
bool InLowPriPool() const { return
|
|
137
|
-
bool HasHit() const { return
|
|
127
|
+
bool InCache() const { return m_flags & M_IN_CACHE; }
|
|
128
|
+
bool IsHighPri() const { return im_flags & IM_IS_HIGH_PRI; }
|
|
129
|
+
bool InHighPriPool() const { return m_flags & M_IN_HIGH_PRI_POOL; }
|
|
130
|
+
bool IsLowPri() const { return im_flags & IM_IS_LOW_PRI; }
|
|
131
|
+
bool InLowPriPool() const { return m_flags & M_IN_LOW_PRI_POOL; }
|
|
132
|
+
bool HasHit() const { return m_flags & M_HAS_HIT; }
|
|
138
133
|
bool IsSecondaryCacheCompatible() const {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
134
|
+
return im_flags & IM_IS_SECONDARY_CACHE_COMPATIBLE;
|
|
135
|
+
}
|
|
136
|
+
bool IsPending() const { return im_flags & IM_IS_PENDING; }
|
|
137
|
+
bool IsInSecondaryCache() const {
|
|
138
|
+
return im_flags & IM_IS_IN_SECONDARY_CACHE;
|
|
144
139
|
}
|
|
145
|
-
bool
|
|
146
|
-
bool IsInSecondaryCache() const { return flags & IS_IN_SECONDARY_CACHE; }
|
|
147
|
-
bool IsStandalone() const { return flags & IS_STANDALONE; }
|
|
140
|
+
bool IsStandalone() const { return im_flags & IM_IS_STANDALONE; }
|
|
148
141
|
|
|
149
142
|
void SetInCache(bool in_cache) {
|
|
150
143
|
if (in_cache) {
|
|
151
|
-
|
|
144
|
+
m_flags |= M_IN_CACHE;
|
|
152
145
|
} else {
|
|
153
|
-
|
|
146
|
+
m_flags &= ~M_IN_CACHE;
|
|
154
147
|
}
|
|
155
148
|
}
|
|
156
149
|
|
|
157
150
|
void SetPriority(Cache::Priority priority) {
|
|
158
151
|
if (priority == Cache::Priority::HIGH) {
|
|
159
|
-
|
|
160
|
-
|
|
152
|
+
im_flags |= IM_IS_HIGH_PRI;
|
|
153
|
+
im_flags &= ~IM_IS_LOW_PRI;
|
|
161
154
|
} else if (priority == Cache::Priority::LOW) {
|
|
162
|
-
|
|
163
|
-
|
|
155
|
+
im_flags &= ~IM_IS_HIGH_PRI;
|
|
156
|
+
im_flags |= IM_IS_LOW_PRI;
|
|
164
157
|
} else {
|
|
165
|
-
|
|
166
|
-
|
|
158
|
+
im_flags &= ~IM_IS_HIGH_PRI;
|
|
159
|
+
im_flags &= ~IM_IS_LOW_PRI;
|
|
167
160
|
}
|
|
168
161
|
}
|
|
169
162
|
|
|
170
163
|
void SetInHighPriPool(bool in_high_pri_pool) {
|
|
171
164
|
if (in_high_pri_pool) {
|
|
172
|
-
|
|
165
|
+
m_flags |= M_IN_HIGH_PRI_POOL;
|
|
173
166
|
} else {
|
|
174
|
-
|
|
167
|
+
m_flags &= ~M_IN_HIGH_PRI_POOL;
|
|
175
168
|
}
|
|
176
169
|
}
|
|
177
170
|
|
|
178
171
|
void SetInLowPriPool(bool in_low_pri_pool) {
|
|
179
172
|
if (in_low_pri_pool) {
|
|
180
|
-
|
|
173
|
+
m_flags |= M_IN_LOW_PRI_POOL;
|
|
181
174
|
} else {
|
|
182
|
-
|
|
175
|
+
m_flags &= ~M_IN_LOW_PRI_POOL;
|
|
183
176
|
}
|
|
184
177
|
}
|
|
185
178
|
|
|
186
|
-
void SetHit() {
|
|
179
|
+
void SetHit() { m_flags |= M_HAS_HIT; }
|
|
187
180
|
|
|
188
181
|
void SetSecondaryCacheCompatible(bool compat) {
|
|
189
182
|
if (compat) {
|
|
190
|
-
|
|
183
|
+
im_flags |= IM_IS_SECONDARY_CACHE_COMPATIBLE;
|
|
191
184
|
} else {
|
|
192
|
-
|
|
185
|
+
im_flags &= ~IM_IS_SECONDARY_CACHE_COMPATIBLE;
|
|
193
186
|
}
|
|
194
|
-
#ifdef __SANITIZE_THREAD__
|
|
195
|
-
is_secondary_cache_compatible_for_tsan = compat;
|
|
196
|
-
#endif // __SANITIZE_THREAD__
|
|
197
187
|
}
|
|
198
188
|
|
|
199
|
-
void
|
|
200
|
-
if (
|
|
201
|
-
|
|
189
|
+
void SetIsPending(bool pending) {
|
|
190
|
+
if (pending) {
|
|
191
|
+
im_flags |= IM_IS_PENDING;
|
|
202
192
|
} else {
|
|
203
|
-
|
|
193
|
+
im_flags &= ~IM_IS_PENDING;
|
|
204
194
|
}
|
|
205
195
|
}
|
|
206
196
|
|
|
207
197
|
void SetIsInSecondaryCache(bool is_in_secondary_cache) {
|
|
208
198
|
if (is_in_secondary_cache) {
|
|
209
|
-
|
|
199
|
+
im_flags |= IM_IS_IN_SECONDARY_CACHE;
|
|
210
200
|
} else {
|
|
211
|
-
|
|
201
|
+
im_flags &= ~IM_IS_IN_SECONDARY_CACHE;
|
|
212
202
|
}
|
|
213
203
|
}
|
|
214
204
|
|
|
215
205
|
void SetIsStandalone(bool is_standalone) {
|
|
216
206
|
if (is_standalone) {
|
|
217
|
-
|
|
207
|
+
im_flags |= IM_IS_STANDALONE;
|
|
218
208
|
} else {
|
|
219
|
-
|
|
209
|
+
im_flags &= ~IM_IS_STANDALONE;
|
|
220
210
|
}
|
|
221
211
|
}
|
|
222
212
|
|
|
223
213
|
void Free() {
|
|
224
214
|
assert(refs == 0);
|
|
225
|
-
#ifdef __SANITIZE_THREAD__
|
|
226
|
-
// Here we can safely assert they are the same without a data race reported
|
|
227
|
-
assert(((flags & IS_SECONDARY_CACHE_COMPATIBLE) != 0) ==
|
|
228
|
-
is_secondary_cache_compatible_for_tsan);
|
|
229
|
-
#endif // __SANITIZE_THREAD__
|
|
230
215
|
if (!IsSecondaryCacheCompatible() && info_.deleter) {
|
|
231
216
|
(*info_.deleter)(key(), value);
|
|
232
217
|
} else if (IsSecondaryCacheCompatible()) {
|
|
@@ -280,9 +265,6 @@ struct LRUHandle {
|
|
|
280
265
|
// 4.4.3's builtin hashtable.
|
|
281
266
|
class LRUHandleTable {
|
|
282
267
|
public:
|
|
283
|
-
// If the table uses more hash bits than `max_upper_hash_bits`,
|
|
284
|
-
// it will eat into the bits used for sharding, which are constant
|
|
285
|
-
// for a given LRUHandleTable.
|
|
286
268
|
explicit LRUHandleTable(int max_upper_hash_bits);
|
|
287
269
|
~LRUHandleTable();
|
|
288
270
|
|
|
@@ -291,8 +273,8 @@ class LRUHandleTable {
|
|
|
291
273
|
LRUHandle* Remove(const Slice& key, uint32_t hash);
|
|
292
274
|
|
|
293
275
|
template <typename T>
|
|
294
|
-
void ApplyToEntriesRange(T func,
|
|
295
|
-
for (
|
|
276
|
+
void ApplyToEntriesRange(T func, size_t index_begin, size_t index_end) {
|
|
277
|
+
for (size_t i = index_begin; i < index_end; i++) {
|
|
296
278
|
LRUHandle* h = list_[i];
|
|
297
279
|
while (h != nullptr) {
|
|
298
280
|
auto n = h->next_hash;
|
|
@@ -331,23 +313,31 @@ class LRUHandleTable {
|
|
|
331
313
|
};
|
|
332
314
|
|
|
333
315
|
// A single shard of sharded cache.
|
|
334
|
-
class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public
|
|
316
|
+
class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
|
|
335
317
|
public:
|
|
336
318
|
LRUCacheShard(size_t capacity, bool strict_capacity_limit,
|
|
337
319
|
double high_pri_pool_ratio, double low_pri_pool_ratio,
|
|
338
320
|
bool use_adaptive_mutex,
|
|
339
321
|
CacheMetadataChargePolicy metadata_charge_policy,
|
|
340
|
-
int max_upper_hash_bits,
|
|
341
|
-
|
|
342
|
-
|
|
322
|
+
int max_upper_hash_bits, SecondaryCache* secondary_cache);
|
|
323
|
+
|
|
324
|
+
public: // Type definitions expected as parameter to ShardedCache
|
|
325
|
+
using HandleImpl = LRUHandle;
|
|
326
|
+
using HashVal = uint32_t;
|
|
327
|
+
using HashCref = uint32_t;
|
|
328
|
+
|
|
329
|
+
public: // Function definitions expected as parameter to ShardedCache
|
|
330
|
+
static inline HashVal ComputeHash(const Slice& key) {
|
|
331
|
+
return Lower32of64(GetSliceNPHash64(key));
|
|
332
|
+
}
|
|
343
333
|
|
|
344
334
|
// Separate from constructor so caller can easily make an array of LRUCache
|
|
345
335
|
// if current usage is more than new capacity, the function will attempt to
|
|
346
336
|
// free the needed space.
|
|
347
|
-
|
|
337
|
+
void SetCapacity(size_t capacity);
|
|
348
338
|
|
|
349
339
|
// Set the flag to reject insertion if cache if full.
|
|
350
|
-
|
|
340
|
+
void SetStrictCapacityLimit(bool strict_capacity_limit);
|
|
351
341
|
|
|
352
342
|
// Set percentage of capacity reserved for high-pri cache entries.
|
|
353
343
|
void SetHighPriorityPoolRatio(double high_pri_pool_ratio);
|
|
@@ -356,58 +346,49 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
|
|
|
356
346
|
void SetLowPriorityPoolRatio(double low_pri_pool_ratio);
|
|
357
347
|
|
|
358
348
|
// Like Cache methods, but with an extra "hash" parameter.
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
Cache::Priority priority) override {
|
|
349
|
+
inline Status Insert(const Slice& key, uint32_t hash, void* value,
|
|
350
|
+
size_t charge, Cache::DeleterFn deleter,
|
|
351
|
+
LRUHandle** handle, Cache::Priority priority) {
|
|
363
352
|
return Insert(key, hash, value, charge, deleter, nullptr, handle, priority);
|
|
364
353
|
}
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
Cache::Priority priority) override {
|
|
354
|
+
inline Status Insert(const Slice& key, uint32_t hash, void* value,
|
|
355
|
+
const Cache::CacheItemHelper* helper, size_t charge,
|
|
356
|
+
LRUHandle** handle, Cache::Priority priority) {
|
|
369
357
|
assert(helper);
|
|
370
358
|
return Insert(key, hash, value, charge, nullptr, helper, handle, priority);
|
|
371
359
|
}
|
|
372
360
|
// If helper_cb is null, the values of the following arguments don't matter.
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
virtual Cache::Handle* Lookup(const Slice& key, uint32_t hash) override {
|
|
361
|
+
LRUHandle* Lookup(const Slice& key, uint32_t hash,
|
|
362
|
+
const Cache::CacheItemHelper* helper,
|
|
363
|
+
const Cache::CreateCallback& create_cb,
|
|
364
|
+
Cache::Priority priority, bool wait, Statistics* stats);
|
|
365
|
+
inline LRUHandle* Lookup(const Slice& key, uint32_t hash) {
|
|
379
366
|
return Lookup(key, hash, nullptr, nullptr, Cache::Priority::LOW, true,
|
|
380
367
|
nullptr);
|
|
381
368
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
virtual void Wait(Cache::Handle* /*handle*/) override {}
|
|
388
|
-
virtual bool Ref(Cache::Handle* handle) override;
|
|
389
|
-
virtual bool Release(Cache::Handle* handle,
|
|
390
|
-
bool erase_if_last_ref = false) override;
|
|
391
|
-
virtual void Erase(const Slice& key, uint32_t hash) override;
|
|
369
|
+
bool Release(LRUHandle* handle, bool useful, bool erase_if_last_ref);
|
|
370
|
+
bool IsReady(LRUHandle* /*handle*/);
|
|
371
|
+
void Wait(LRUHandle* /*handle*/) {}
|
|
372
|
+
bool Ref(LRUHandle* handle);
|
|
373
|
+
void Erase(const Slice& key, uint32_t hash);
|
|
392
374
|
|
|
393
375
|
// Although in some platforms the update of size_t is atomic, to make sure
|
|
394
376
|
// GetUsage() and GetPinnedUsage() work correctly under any platform, we'll
|
|
395
377
|
// protect them with mutex_.
|
|
396
378
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
379
|
+
size_t GetUsage() const;
|
|
380
|
+
size_t GetPinnedUsage() const;
|
|
381
|
+
size_t GetOccupancyCount() const;
|
|
382
|
+
size_t GetTableAddressCount() const;
|
|
401
383
|
|
|
402
|
-
|
|
384
|
+
void ApplyToSomeEntries(
|
|
403
385
|
const std::function<void(const Slice& key, void* value, size_t charge,
|
|
404
386
|
DeleterFn deleter)>& callback,
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
virtual void EraseUnRefEntries() override;
|
|
387
|
+
size_t average_entries_per_lock, size_t* state);
|
|
408
388
|
|
|
409
|
-
|
|
389
|
+
void EraseUnRefEntries();
|
|
410
390
|
|
|
391
|
+
public: // other function definitions
|
|
411
392
|
void TEST_GetLRUList(LRUHandle** lru, LRUHandle** lru_low_pri,
|
|
412
393
|
LRUHandle** lru_bottom_pri);
|
|
413
394
|
|
|
@@ -421,17 +402,19 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
|
|
|
421
402
|
// Retrieves low pri pool ratio
|
|
422
403
|
double GetLowPriPoolRatio();
|
|
423
404
|
|
|
405
|
+
void AppendPrintableOptions(std::string& /*str*/) const;
|
|
406
|
+
|
|
424
407
|
private:
|
|
425
408
|
friend class LRUCache;
|
|
426
409
|
// Insert an item into the hash table and, if handle is null, insert into
|
|
427
410
|
// the LRU list. Older items are evicted as necessary. If the cache is full
|
|
428
411
|
// and free_handle_on_fail is true, the item is deleted and handle is set to
|
|
429
412
|
// nullptr.
|
|
430
|
-
Status InsertItem(LRUHandle* item,
|
|
413
|
+
Status InsertItem(LRUHandle* item, LRUHandle** handle,
|
|
431
414
|
bool free_handle_on_fail);
|
|
432
415
|
Status Insert(const Slice& key, uint32_t hash, void* value, size_t charge,
|
|
433
416
|
DeleterFn deleter, const Cache::CacheItemHelper* helper,
|
|
434
|
-
|
|
417
|
+
LRUHandle** handle, Cache::Priority priority);
|
|
435
418
|
// Promote an item looked up from the secondary cache to the LRU cache.
|
|
436
419
|
// The item may be still in the secondary cache.
|
|
437
420
|
// It is only inserted into the hash table and not the LRU list, and only
|
|
@@ -518,14 +501,15 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
|
|
|
518
501
|
// don't mind mutex_ invoking the non-const actions.
|
|
519
502
|
mutable DMutex mutex_;
|
|
520
503
|
|
|
521
|
-
|
|
504
|
+
// Owned by LRUCache
|
|
505
|
+
SecondaryCache* secondary_cache_;
|
|
522
506
|
};
|
|
523
507
|
|
|
524
508
|
class LRUCache
|
|
525
509
|
#ifdef NDEBUG
|
|
526
510
|
final
|
|
527
511
|
#endif
|
|
528
|
-
: public ShardedCache {
|
|
512
|
+
: public ShardedCache<LRUCacheShard> {
|
|
529
513
|
public:
|
|
530
514
|
LRUCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit,
|
|
531
515
|
double high_pri_pool_ratio, double low_pri_pool_ratio,
|
|
@@ -533,27 +517,21 @@ class LRUCache
|
|
|
533
517
|
bool use_adaptive_mutex = kDefaultToAdaptiveMutex,
|
|
534
518
|
CacheMetadataChargePolicy metadata_charge_policy =
|
|
535
519
|
kDontChargeCacheMetadata,
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
virtual size_t GetCharge(Handle* handle) const override;
|
|
543
|
-
virtual uint32_t GetHash(Handle* handle) const override;
|
|
544
|
-
virtual DeleterFn GetDeleter(Handle* handle) const override;
|
|
545
|
-
virtual void DisownData() override;
|
|
546
|
-
virtual void WaitAll(std::vector<Handle*>& handles) override;
|
|
547
|
-
std::string GetPrintableOptions() const override;
|
|
520
|
+
std::shared_ptr<SecondaryCache> secondary_cache = nullptr);
|
|
521
|
+
const char* Name() const override { return "LRUCache"; }
|
|
522
|
+
void* Value(Handle* handle) override;
|
|
523
|
+
size_t GetCharge(Handle* handle) const override;
|
|
524
|
+
DeleterFn GetDeleter(Handle* handle) const override;
|
|
525
|
+
void WaitAll(std::vector<Handle*>& handles) override;
|
|
548
526
|
|
|
549
527
|
// Retrieves number of elements in LRU, for unit test purpose only.
|
|
550
528
|
size_t TEST_GetLRUSize();
|
|
551
529
|
// Retrieves high pri pool ratio.
|
|
552
530
|
double GetHighPriPoolRatio();
|
|
553
531
|
|
|
532
|
+
void AppendPrintableOptions(std::string& str) const override;
|
|
533
|
+
|
|
554
534
|
private:
|
|
555
|
-
LRUCacheShard* shards_ = nullptr;
|
|
556
|
-
int num_shards_ = 0;
|
|
557
535
|
std::shared_ptr<SecondaryCache> secondary_cache_;
|
|
558
536
|
};
|
|
559
537
|
|