@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
|
@@ -173,7 +173,7 @@ inline int LRUHandleTable::FindSlot(const Slice& key,
|
|
|
173
173
|
LRUCacheShard::LRUCacheShard(size_t capacity, size_t estimated_value_size,
|
|
174
174
|
bool strict_capacity_limit,
|
|
175
175
|
CacheMetadataChargePolicy metadata_charge_policy)
|
|
176
|
-
:
|
|
176
|
+
: CacheShardBase(metadata_charge_policy),
|
|
177
177
|
capacity_(capacity),
|
|
178
178
|
strict_capacity_limit_(strict_capacity_limit),
|
|
179
179
|
table_(
|
|
@@ -211,27 +211,27 @@ void LRUCacheShard::EraseUnRefEntries() {
|
|
|
211
211
|
void LRUCacheShard::ApplyToSomeEntries(
|
|
212
212
|
const std::function<void(const Slice& key, void* value, size_t charge,
|
|
213
213
|
DeleterFn deleter)>& callback,
|
|
214
|
-
|
|
214
|
+
size_t average_entries_per_lock, size_t* state) {
|
|
215
215
|
// The state is essentially going to be the starting hash, which works
|
|
216
216
|
// nicely even if we resize between calls because we use upper-most
|
|
217
217
|
// hash bits for table indexes.
|
|
218
218
|
DMutexLock l(mutex_);
|
|
219
|
-
|
|
220
|
-
|
|
219
|
+
size_t length_bits = table_.GetLengthBits();
|
|
220
|
+
size_t length = table_.GetTableSize();
|
|
221
221
|
|
|
222
222
|
assert(average_entries_per_lock > 0);
|
|
223
223
|
// Assuming we are called with same average_entries_per_lock repeatedly,
|
|
224
224
|
// this simplifies some logic (index_end will not overflow).
|
|
225
225
|
assert(average_entries_per_lock < length || *state == 0);
|
|
226
226
|
|
|
227
|
-
|
|
228
|
-
|
|
227
|
+
size_t index_begin = *state >> (sizeof(size_t) * 8u - length_bits);
|
|
228
|
+
size_t index_end = index_begin + average_entries_per_lock;
|
|
229
229
|
if (index_end >= length) {
|
|
230
230
|
// Going to end
|
|
231
231
|
index_end = length;
|
|
232
|
-
*state =
|
|
232
|
+
*state = SIZE_MAX;
|
|
233
233
|
} else {
|
|
234
|
-
*state = index_end << (
|
|
234
|
+
*state = index_end << (sizeof(size_t) * 8u - length_bits);
|
|
235
235
|
}
|
|
236
236
|
|
|
237
237
|
table_.ApplyToEntriesRange(
|
|
@@ -322,8 +322,7 @@ void LRUCacheShard::SetStrictCapacityLimit(bool strict_capacity_limit) {
|
|
|
322
322
|
|
|
323
323
|
Status LRUCacheShard::Insert(const Slice& key, uint32_t hash, void* value,
|
|
324
324
|
size_t charge, Cache::DeleterFn deleter,
|
|
325
|
-
|
|
326
|
-
Cache::Priority /*priority*/) {
|
|
325
|
+
LRUHandle** handle, Cache::Priority /*priority*/) {
|
|
327
326
|
if (key.size() != kCacheKeySize) {
|
|
328
327
|
return Status::NotSupported("FastLRUCache only supports key size " +
|
|
329
328
|
std::to_string(kCacheKeySize) + "B");
|
|
@@ -409,7 +408,7 @@ Status LRUCacheShard::Insert(const Slice& key, uint32_t hash, void* value,
|
|
|
409
408
|
if (!h->HasRefs()) {
|
|
410
409
|
h->Ref();
|
|
411
410
|
}
|
|
412
|
-
*handle =
|
|
411
|
+
*handle = h;
|
|
413
412
|
}
|
|
414
413
|
}
|
|
415
414
|
}
|
|
@@ -422,7 +421,7 @@ Status LRUCacheShard::Insert(const Slice& key, uint32_t hash, void* value,
|
|
|
422
421
|
return s;
|
|
423
422
|
}
|
|
424
423
|
|
|
425
|
-
|
|
424
|
+
LRUHandle* LRUCacheShard::Lookup(const Slice& key, uint32_t hash) {
|
|
426
425
|
LRUHandle* h = nullptr;
|
|
427
426
|
{
|
|
428
427
|
DMutexLock l(mutex_);
|
|
@@ -437,23 +436,21 @@ Cache::Handle* LRUCacheShard::Lookup(const Slice& key, uint32_t hash) {
|
|
|
437
436
|
h->Ref();
|
|
438
437
|
}
|
|
439
438
|
}
|
|
440
|
-
return
|
|
439
|
+
return h;
|
|
441
440
|
}
|
|
442
441
|
|
|
443
|
-
bool LRUCacheShard::Ref(
|
|
444
|
-
LRUHandle* e = reinterpret_cast<LRUHandle*>(h);
|
|
442
|
+
bool LRUCacheShard::Ref(LRUHandle* h) {
|
|
445
443
|
DMutexLock l(mutex_);
|
|
446
444
|
// To create another reference - entry must be already externally referenced.
|
|
447
|
-
assert(
|
|
448
|
-
|
|
445
|
+
assert(h->HasRefs());
|
|
446
|
+
h->Ref();
|
|
449
447
|
return true;
|
|
450
448
|
}
|
|
451
449
|
|
|
452
|
-
bool LRUCacheShard::Release(
|
|
453
|
-
if (
|
|
450
|
+
bool LRUCacheShard::Release(LRUHandle* h, bool erase_if_last_ref) {
|
|
451
|
+
if (h == nullptr) {
|
|
454
452
|
return false;
|
|
455
453
|
}
|
|
456
|
-
LRUHandle* h = reinterpret_cast<LRUHandle*>(handle);
|
|
457
454
|
LRUHandle copy;
|
|
458
455
|
bool last_reference = false;
|
|
459
456
|
{
|
|
@@ -535,41 +532,18 @@ size_t LRUCacheShard::GetTableAddressCount() const {
|
|
|
535
532
|
return table_.GetTableSize();
|
|
536
533
|
}
|
|
537
534
|
|
|
538
|
-
std::string LRUCacheShard::GetPrintableOptions() const { return std::string{}; }
|
|
539
|
-
|
|
540
535
|
LRUCache::LRUCache(size_t capacity, size_t estimated_value_size,
|
|
541
536
|
int num_shard_bits, bool strict_capacity_limit,
|
|
542
537
|
CacheMetadataChargePolicy metadata_charge_policy)
|
|
543
|
-
: ShardedCache(capacity, num_shard_bits, strict_capacity_limit
|
|
538
|
+
: ShardedCache(capacity, num_shard_bits, strict_capacity_limit,
|
|
539
|
+
nullptr /*allocator*/) {
|
|
544
540
|
assert(estimated_value_size > 0 ||
|
|
545
541
|
metadata_charge_policy != kDontChargeCacheMetadata);
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
new (&shards_[i])
|
|
552
|
-
LRUCacheShard(per_shard, estimated_value_size, strict_capacity_limit,
|
|
553
|
-
metadata_charge_policy);
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
LRUCache::~LRUCache() {
|
|
558
|
-
if (shards_ != nullptr) {
|
|
559
|
-
assert(num_shards_ > 0);
|
|
560
|
-
for (int i = 0; i < num_shards_; i++) {
|
|
561
|
-
shards_[i].~LRUCacheShard();
|
|
562
|
-
}
|
|
563
|
-
port::cacheline_aligned_free(shards_);
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
CacheShard* LRUCache::GetShard(uint32_t shard) {
|
|
568
|
-
return reinterpret_cast<CacheShard*>(&shards_[shard]);
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
const CacheShard* LRUCache::GetShard(uint32_t shard) const {
|
|
572
|
-
return reinterpret_cast<CacheShard*>(&shards_[shard]);
|
|
542
|
+
size_t per_shard = GetPerShardCapacity();
|
|
543
|
+
InitShards([=](LRUCacheShard* cs) {
|
|
544
|
+
new (cs) LRUCacheShard(per_shard, estimated_value_size,
|
|
545
|
+
strict_capacity_limit, metadata_charge_policy);
|
|
546
|
+
});
|
|
573
547
|
}
|
|
574
548
|
|
|
575
549
|
void* LRUCache::Value(Handle* handle) {
|
|
@@ -577,12 +551,8 @@ void* LRUCache::Value(Handle* handle) {
|
|
|
577
551
|
}
|
|
578
552
|
|
|
579
553
|
size_t LRUCache::GetCharge(Handle* handle) const {
|
|
580
|
-
CacheMetadataChargePolicy metadata_charge_policy = kDontChargeCacheMetadata;
|
|
581
|
-
if (num_shards_ > 0) {
|
|
582
|
-
metadata_charge_policy = shards_[0].metadata_charge_policy_;
|
|
583
|
-
}
|
|
584
554
|
return reinterpret_cast<const LRUHandle*>(handle)->GetCharge(
|
|
585
|
-
|
|
555
|
+
GetShard(0).metadata_charge_policy_);
|
|
586
556
|
}
|
|
587
557
|
|
|
588
558
|
Cache::DeleterFn LRUCache::GetDeleter(Handle* handle) const {
|
|
@@ -590,18 +560,6 @@ Cache::DeleterFn LRUCache::GetDeleter(Handle* handle) const {
|
|
|
590
560
|
return h->deleter;
|
|
591
561
|
}
|
|
592
562
|
|
|
593
|
-
uint32_t LRUCache::GetHash(Handle* handle) const {
|
|
594
|
-
return reinterpret_cast<const LRUHandle*>(handle)->hash;
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
void LRUCache::DisownData() {
|
|
598
|
-
// Leak data only if that won't generate an ASAN/valgrind warning.
|
|
599
|
-
if (!kMustFreeHeapAllocations) {
|
|
600
|
-
shards_ = nullptr;
|
|
601
|
-
num_shards_ = 0;
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
|
|
605
563
|
} // namespace fast_lru_cache
|
|
606
564
|
|
|
607
565
|
std::shared_ptr<Cache> NewFastLRUCache(
|
|
@@ -141,6 +141,9 @@ struct LRUHandle {
|
|
|
141
141
|
|
|
142
142
|
Slice key() const { return Slice(key_data.data(), kCacheKeySize); }
|
|
143
143
|
|
|
144
|
+
// For HandleImpl concept
|
|
145
|
+
uint32_t GetHash() const { return hash; }
|
|
146
|
+
|
|
144
147
|
// Increase the reference count by 1.
|
|
145
148
|
void Ref() { refs++; }
|
|
146
149
|
|
|
@@ -260,8 +263,8 @@ class LRUHandleTable {
|
|
|
260
263
|
void Assign(int slot, LRUHandle* h);
|
|
261
264
|
|
|
262
265
|
template <typename T>
|
|
263
|
-
void ApplyToEntriesRange(T func,
|
|
264
|
-
for (
|
|
266
|
+
void ApplyToEntriesRange(T func, size_t index_begin, size_t index_end) {
|
|
267
|
+
for (size_t i = index_begin; i < index_end; i++) {
|
|
265
268
|
LRUHandle* h = &array_[i];
|
|
266
269
|
if (h->IsVisible()) {
|
|
267
270
|
func(h);
|
|
@@ -316,20 +319,30 @@ class LRUHandleTable {
|
|
|
316
319
|
};
|
|
317
320
|
|
|
318
321
|
// A single shard of sharded cache.
|
|
319
|
-
class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public
|
|
322
|
+
class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShardBase {
|
|
320
323
|
public:
|
|
321
324
|
LRUCacheShard(size_t capacity, size_t estimated_value_size,
|
|
322
325
|
bool strict_capacity_limit,
|
|
323
326
|
CacheMetadataChargePolicy metadata_charge_policy);
|
|
324
|
-
|
|
327
|
+
|
|
328
|
+
// For CacheShard concept
|
|
329
|
+
using HandleImpl = LRUHandle;
|
|
330
|
+
|
|
331
|
+
// Keep 32-bit hashing for now (FIXME: upgrade to 64-bit)
|
|
332
|
+
using HashVal = uint32_t;
|
|
333
|
+
using HashCref = uint32_t;
|
|
334
|
+
static inline HashVal ComputeHash(const Slice& key) {
|
|
335
|
+
return Lower32of64(GetSliceNPHash64(key));
|
|
336
|
+
}
|
|
337
|
+
static inline uint32_t HashPieceForSharding(HashCref hash) { return hash; }
|
|
325
338
|
|
|
326
339
|
// Separate from constructor so caller can easily make an array of LRUCache
|
|
327
340
|
// if current usage is more than new capacity, the function will attempt to
|
|
328
341
|
// free the needed space.
|
|
329
|
-
void SetCapacity(size_t capacity)
|
|
342
|
+
void SetCapacity(size_t capacity);
|
|
330
343
|
|
|
331
344
|
// Set the flag to reject insertion if cache if full.
|
|
332
|
-
void SetStrictCapacityLimit(bool strict_capacity_limit)
|
|
345
|
+
void SetStrictCapacityLimit(bool strict_capacity_limit);
|
|
333
346
|
|
|
334
347
|
// Like Cache methods, but with an extra "hash" parameter.
|
|
335
348
|
// Insert an item into the hash table and, if handle is null, insert into
|
|
@@ -337,48 +350,45 @@ class ALIGN_AS(CACHE_LINE_SIZE) LRUCacheShard final : public CacheShard {
|
|
|
337
350
|
// and free_handle_on_fail is true, the item is deleted and handle is set to
|
|
338
351
|
// nullptr.
|
|
339
352
|
Status Insert(const Slice& key, uint32_t hash, void* value, size_t charge,
|
|
340
|
-
Cache::DeleterFn deleter,
|
|
341
|
-
Cache::Priority priority)
|
|
353
|
+
Cache::DeleterFn deleter, LRUHandle** handle,
|
|
354
|
+
Cache::Priority priority);
|
|
342
355
|
|
|
343
356
|
Status Insert(const Slice& key, uint32_t hash, void* value,
|
|
344
357
|
const Cache::CacheItemHelper* helper, size_t charge,
|
|
345
|
-
|
|
358
|
+
LRUHandle** handle, Cache::Priority priority) {
|
|
346
359
|
return Insert(key, hash, value, charge, helper->del_cb, handle, priority);
|
|
347
360
|
}
|
|
348
361
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
362
|
+
LRUHandle* Lookup(const Slice& key, uint32_t hash,
|
|
363
|
+
const Cache::CacheItemHelper* /*helper*/,
|
|
364
|
+
const Cache::CreateCallback& /*create_cb*/,
|
|
365
|
+
Cache::Priority /*priority*/, bool /*wait*/,
|
|
366
|
+
Statistics* /*stats*/) {
|
|
354
367
|
return Lookup(key, hash);
|
|
355
368
|
}
|
|
356
|
-
|
|
369
|
+
LRUHandle* Lookup(const Slice& key, uint32_t hash);
|
|
357
370
|
|
|
358
|
-
bool Release(
|
|
359
|
-
bool erase_if_last_ref) override {
|
|
371
|
+
bool Release(LRUHandle* handle, bool /*useful*/, bool erase_if_last_ref) {
|
|
360
372
|
return Release(handle, erase_if_last_ref);
|
|
361
373
|
}
|
|
362
|
-
bool IsReady(
|
|
363
|
-
void Wait(
|
|
374
|
+
bool IsReady(LRUHandle* /*handle*/) { return true; }
|
|
375
|
+
void Wait(LRUHandle* /*handle*/) {}
|
|
364
376
|
|
|
365
|
-
bool Ref(
|
|
366
|
-
bool Release(
|
|
367
|
-
void Erase(const Slice& key, uint32_t hash)
|
|
377
|
+
bool Ref(LRUHandle* handle);
|
|
378
|
+
bool Release(LRUHandle* handle, bool erase_if_last_ref = false);
|
|
379
|
+
void Erase(const Slice& key, uint32_t hash);
|
|
368
380
|
|
|
369
|
-
size_t GetUsage() const
|
|
370
|
-
size_t GetPinnedUsage() const
|
|
371
|
-
size_t GetOccupancyCount() const
|
|
372
|
-
size_t GetTableAddressCount() const
|
|
381
|
+
size_t GetUsage() const;
|
|
382
|
+
size_t GetPinnedUsage() const;
|
|
383
|
+
size_t GetOccupancyCount() const;
|
|
384
|
+
size_t GetTableAddressCount() const;
|
|
373
385
|
|
|
374
386
|
void ApplyToSomeEntries(
|
|
375
387
|
const std::function<void(const Slice& key, void* value, size_t charge,
|
|
376
388
|
DeleterFn deleter)>& callback,
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
void EraseUnRefEntries() override;
|
|
389
|
+
size_t average_entries_per_lock, size_t* state);
|
|
380
390
|
|
|
381
|
-
|
|
391
|
+
void EraseUnRefEntries();
|
|
382
392
|
|
|
383
393
|
private:
|
|
384
394
|
friend class LRUCache;
|
|
@@ -446,25 +456,16 @@ class LRUCache
|
|
|
446
456
|
#ifdef NDEBUG
|
|
447
457
|
final
|
|
448
458
|
#endif
|
|
449
|
-
: public ShardedCache {
|
|
459
|
+
: public ShardedCache<LRUCacheShard> {
|
|
450
460
|
public:
|
|
451
461
|
LRUCache(size_t capacity, size_t estimated_value_size, int num_shard_bits,
|
|
452
462
|
bool strict_capacity_limit,
|
|
453
463
|
CacheMetadataChargePolicy metadata_charge_policy =
|
|
454
464
|
kDontChargeCacheMetadata);
|
|
455
|
-
~LRUCache() override;
|
|
456
465
|
const char* Name() const override { return "LRUCache"; }
|
|
457
|
-
CacheShard* GetShard(uint32_t shard) override;
|
|
458
|
-
const CacheShard* GetShard(uint32_t shard) const override;
|
|
459
466
|
void* Value(Handle* handle) override;
|
|
460
467
|
size_t GetCharge(Handle* handle) const override;
|
|
461
|
-
uint32_t GetHash(Handle* handle) const override;
|
|
462
468
|
DeleterFn GetDeleter(Handle* handle) const override;
|
|
463
|
-
void DisownData() override;
|
|
464
|
-
|
|
465
|
-
private:
|
|
466
|
-
LRUCacheShard* shards_ = nullptr;
|
|
467
|
-
int num_shards_ = 0;
|
|
468
469
|
};
|
|
469
470
|
} // namespace fast_lru_cache
|
|
470
471
|
|