@nxtedition/rocksdb 8.2.8 → 9.0.1
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 +0 -21
- package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
- package/deps/rocksdb/rocksdb/Makefile +37 -25
- package/deps/rocksdb/rocksdb/README.md +29 -0
- package/deps/rocksdb/rocksdb/TARGETS +25 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
- package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
- package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
- package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
- package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
- package/deps/rocksdb/rocksdb/db/c.cc +233 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
- package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
- package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
- package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
- package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
- package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
- package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
- package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
- package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
- package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
- package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
- package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
- package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
- package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
- package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
- package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
- package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
- package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
- package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
- package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
- package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
- package/deps/rocksdb/rocksdb/env/env.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
- package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
- package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
- package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
- package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
- package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
- package/deps/rocksdb/rocksdb/options/options.cc +15 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/README +10 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
- package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
- package/deps/rocksdb/rocksdb/src.mk +10 -1
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
- package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/format.cc +175 -33
- package/deps/rocksdb/rocksdb/table/format.h +63 -10
- package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
- package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
- package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
- package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
- package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
- package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
- package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +119 -35
- package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
- package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
- package/deps/rocksdb/rocksdb/util/hash.h +7 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
- package/deps/rocksdb/rocksdb/util/math.h +58 -6
- package/deps/rocksdb/rocksdb/util/math128.h +29 -7
- package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
- package/deps/rocksdb/rocksdb/util/overload.h +23 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
- package/deps/rocksdb/rocksdb/util/status.cc +1 -0
- package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
- package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
- package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
- package/deps/rocksdb/rocksdb.gyp +6 -2
- package/index.js +0 -8
- 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/cmake/modules/CxxFlags.cmake +0 -7
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
|
@@ -9,36 +9,4 @@
|
|
|
9
9
|
|
|
10
10
|
namespace ROCKSDB_NAMESPACE {
|
|
11
11
|
|
|
12
|
-
namespace {
|
|
13
|
-
|
|
14
|
-
void NoopDelete(Cache::ObjectPtr, MemoryAllocator*) {}
|
|
15
|
-
|
|
16
|
-
size_t SliceSize(Cache::ObjectPtr obj) {
|
|
17
|
-
return static_cast<Slice*>(obj)->size();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
Status SliceSaveTo(Cache::ObjectPtr from_obj, size_t from_offset, size_t length,
|
|
21
|
-
char* out) {
|
|
22
|
-
const Slice& slice = *static_cast<Slice*>(from_obj);
|
|
23
|
-
std::memcpy(out, slice.data() + from_offset, length);
|
|
24
|
-
return Status::OK();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
Status FailCreate(const Slice&, Cache::CreateContext*, MemoryAllocator*,
|
|
28
|
-
Cache::ObjectPtr*, size_t*) {
|
|
29
|
-
return Status::NotSupported("Only for dumping data into SecondaryCache");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
} // namespace
|
|
33
|
-
|
|
34
|
-
Status SecondaryCache::InsertSaved(const Slice& key, const Slice& saved) {
|
|
35
|
-
static Cache::CacheItemHelper helper_no_secondary{CacheEntryRole::kMisc,
|
|
36
|
-
&NoopDelete};
|
|
37
|
-
static Cache::CacheItemHelper helper{
|
|
38
|
-
CacheEntryRole::kMisc, &NoopDelete, &SliceSize,
|
|
39
|
-
&SliceSaveTo, &FailCreate, &helper_no_secondary};
|
|
40
|
-
// NOTE: depends on Insert() being synchronous, not keeping pointer `&saved`
|
|
41
|
-
return Insert(key, const_cast<Slice*>(&saved), &helper);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
12
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
#include "cache/secondary_cache_adapter.h"
|
|
7
7
|
|
|
8
|
+
#include <atomic>
|
|
9
|
+
|
|
10
|
+
#include "cache/tiered_secondary_cache.h"
|
|
8
11
|
#include "monitoring/perf_context_imp.h"
|
|
12
|
+
#include "test_util/sync_point.h"
|
|
13
|
+
#include "util/cast_util.h"
|
|
9
14
|
|
|
10
15
|
namespace ROCKSDB_NAMESPACE {
|
|
11
16
|
|
|
@@ -16,33 +21,121 @@ struct Dummy {
|
|
|
16
21
|
};
|
|
17
22
|
const Dummy kDummy{};
|
|
18
23
|
Cache::ObjectPtr const kDummyObj = const_cast<Dummy*>(&kDummy);
|
|
24
|
+
const char* kTieredCacheName = "TieredCache";
|
|
19
25
|
} // namespace
|
|
20
26
|
|
|
27
|
+
// When CacheWithSecondaryAdapter is constructed with the distribute_cache_res
|
|
28
|
+
// parameter set to true, it manages the entire memory budget across the
|
|
29
|
+
// primary and secondary cache. The secondary cache is assumed to be in
|
|
30
|
+
// memory, such as the CompressedSecondaryCache. When a placeholder entry
|
|
31
|
+
// is inserted by a CacheReservationManager instance to reserve memory,
|
|
32
|
+
// the CacheWithSecondaryAdapter ensures that the reservation is distributed
|
|
33
|
+
// proportionally across the primary/secondary caches.
|
|
34
|
+
//
|
|
35
|
+
// The primary block cache is initially sized to the sum of the primary cache
|
|
36
|
+
// budget + teh secondary cache budget, as follows -
|
|
37
|
+
// |--------- Primary Cache Configured Capacity -----------|
|
|
38
|
+
// |---Secondary Cache Budget----|----Primary Cache Budget-----|
|
|
39
|
+
//
|
|
40
|
+
// A ConcurrentCacheReservationManager member in the CacheWithSecondaryAdapter,
|
|
41
|
+
// pri_cache_res_,
|
|
42
|
+
// is used to help with tracking the distribution of memory reservations.
|
|
43
|
+
// Initially, it accounts for the entire secondary cache budget as a
|
|
44
|
+
// reservation against the primary cache. This shrinks the usable capacity of
|
|
45
|
+
// the primary cache to the budget that the user originally desired.
|
|
46
|
+
//
|
|
47
|
+
// |--Reservation for Sec Cache--|-Pri Cache Usable Capacity---|
|
|
48
|
+
//
|
|
49
|
+
// When a reservation placeholder is inserted into the adapter, it is inserted
|
|
50
|
+
// directly into the primary cache. This means the entire charge of the
|
|
51
|
+
// placeholder is counted against the primary cache. To compensate and count
|
|
52
|
+
// a portion of it against the secondary cache, the secondary cache Deflate()
|
|
53
|
+
// method is called to shrink it. Since the Deflate() causes the secondary
|
|
54
|
+
// actual usage to shrink, it is refelcted here by releasing an equal amount
|
|
55
|
+
// from the pri_cache_res_ reservation. The Deflate() in the secondary cache
|
|
56
|
+
// can be, but is not required to be, implemented using its own cache
|
|
57
|
+
// reservation manager.
|
|
58
|
+
//
|
|
59
|
+
// For example, if the pri/sec ratio is 70/30, and the combined capacity is
|
|
60
|
+
// 100MB, the intermediate and final state after inserting a reservation
|
|
61
|
+
// placeholder for 10MB would be as follows -
|
|
62
|
+
//
|
|
63
|
+
// |-Reservation for Sec Cache-|-Pri Cache Usable Capacity-|---R---|
|
|
64
|
+
// 1. After inserting the placeholder in primary
|
|
65
|
+
// |------- 30MB -------------|------- 60MB -------------|-10MB--|
|
|
66
|
+
// 2. After deflating the secondary and adjusting the reservation for
|
|
67
|
+
// secondary against the primary
|
|
68
|
+
// |------- 27MB -------------|------- 63MB -------------|-10MB--|
|
|
69
|
+
//
|
|
70
|
+
// Likewise, when the user inserted placeholder is released, the secondary
|
|
71
|
+
// cache Inflate() method is called to grow it, and the pri_cache_res_
|
|
72
|
+
// reservation is increased by an equal amount.
|
|
73
|
+
//
|
|
74
|
+
// Another way of implementing this would have been to simply split the user
|
|
75
|
+
// reservation into primary and seconary components. However, this would
|
|
76
|
+
// require allocating a structure to track the associated secondary cache
|
|
77
|
+
// reservation, which adds some complexity and overhead.
|
|
78
|
+
//
|
|
21
79
|
CacheWithSecondaryAdapter::CacheWithSecondaryAdapter(
|
|
22
80
|
std::shared_ptr<Cache> target,
|
|
23
|
-
std::shared_ptr<SecondaryCache> secondary_cache
|
|
81
|
+
std::shared_ptr<SecondaryCache> secondary_cache,
|
|
82
|
+
TieredAdmissionPolicy adm_policy, bool distribute_cache_res)
|
|
24
83
|
: CacheWrapper(std::move(target)),
|
|
25
|
-
secondary_cache_(std::move(secondary_cache))
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
84
|
+
secondary_cache_(std::move(secondary_cache)),
|
|
85
|
+
adm_policy_(adm_policy),
|
|
86
|
+
distribute_cache_res_(distribute_cache_res) {
|
|
87
|
+
target_->SetEvictionCallback(
|
|
88
|
+
[this](const Slice& key, Handle* handle, bool was_hit) {
|
|
89
|
+
return EvictionHandler(key, handle, was_hit);
|
|
90
|
+
});
|
|
91
|
+
if (distribute_cache_res_) {
|
|
92
|
+
size_t sec_capacity = 0;
|
|
93
|
+
pri_cache_res_ = std::make_shared<ConcurrentCacheReservationManager>(
|
|
94
|
+
std::make_shared<CacheReservationManagerImpl<CacheEntryRole::kMisc>>(
|
|
95
|
+
target_));
|
|
96
|
+
Status s = secondary_cache_->GetCapacity(sec_capacity);
|
|
97
|
+
assert(s.ok());
|
|
98
|
+
// Initially, the primary cache is sized to uncompressed cache budget plsu
|
|
99
|
+
// compressed secondary cache budget. The secondary cache budget is then
|
|
100
|
+
// taken away from the primary cache through cache reservations. Later,
|
|
101
|
+
// when a placeholder entry is inserted by the caller, its inserted
|
|
102
|
+
// into the primary cache and the portion that should be assigned to the
|
|
103
|
+
// secondary cache is freed from the reservation.
|
|
104
|
+
s = pri_cache_res_->UpdateCacheReservation(sec_capacity);
|
|
105
|
+
assert(s.ok());
|
|
106
|
+
sec_cache_res_ratio_.store((double)sec_capacity / target_->GetCapacity(),
|
|
107
|
+
std::memory_order_relaxed);
|
|
108
|
+
}
|
|
29
109
|
}
|
|
30
110
|
|
|
31
111
|
CacheWithSecondaryAdapter::~CacheWithSecondaryAdapter() {
|
|
32
112
|
// `*this` will be destroyed before `*target_`, so we have to prevent
|
|
33
113
|
// use after free
|
|
34
114
|
target_->SetEvictionCallback({});
|
|
115
|
+
#ifndef NDEBUG
|
|
116
|
+
if (distribute_cache_res_ && !ratio_changed_) {
|
|
117
|
+
size_t sec_capacity = 0;
|
|
118
|
+
Status s = secondary_cache_->GetCapacity(sec_capacity);
|
|
119
|
+
assert(s.ok());
|
|
120
|
+
assert(pri_cache_res_->GetTotalMemoryUsed() == sec_capacity);
|
|
121
|
+
}
|
|
122
|
+
#endif // NDEBUG
|
|
35
123
|
}
|
|
36
124
|
|
|
37
125
|
bool CacheWithSecondaryAdapter::EvictionHandler(const Slice& key,
|
|
38
|
-
Handle* handle) {
|
|
126
|
+
Handle* handle, bool was_hit) {
|
|
39
127
|
auto helper = GetCacheItemHelper(handle);
|
|
40
|
-
if (helper->IsSecondaryCacheCompatible()
|
|
128
|
+
if (helper->IsSecondaryCacheCompatible() &&
|
|
129
|
+
adm_policy_ != TieredAdmissionPolicy::kAdmPolicyThreeQueue) {
|
|
41
130
|
auto obj = target_->Value(handle);
|
|
42
131
|
// Ignore dummy entry
|
|
43
132
|
if (obj != kDummyObj) {
|
|
133
|
+
bool hit = false;
|
|
134
|
+
if (adm_policy_ == TieredAdmissionPolicy::kAdmPolicyAllowCacheHits) {
|
|
135
|
+
hit = was_hit;
|
|
136
|
+
}
|
|
44
137
|
// Spill into secondary cache.
|
|
45
|
-
secondary_cache_->Insert(key, obj, helper).PermitUncheckedError();
|
|
138
|
+
secondary_cache_->Insert(key, obj, helper, hit).PermitUncheckedError();
|
|
46
139
|
}
|
|
47
140
|
}
|
|
48
141
|
// Never takes ownership of obj
|
|
@@ -136,6 +229,32 @@ Cache::Handle* CacheWithSecondaryAdapter::Promote(
|
|
|
136
229
|
return result;
|
|
137
230
|
}
|
|
138
231
|
|
|
232
|
+
Status CacheWithSecondaryAdapter::Insert(const Slice& key, ObjectPtr value,
|
|
233
|
+
const CacheItemHelper* helper,
|
|
234
|
+
size_t charge, Handle** handle,
|
|
235
|
+
Priority priority,
|
|
236
|
+
const Slice& compressed_value,
|
|
237
|
+
CompressionType type) {
|
|
238
|
+
Status s = target_->Insert(key, value, helper, charge, handle, priority);
|
|
239
|
+
if (s.ok() && value == nullptr && distribute_cache_res_) {
|
|
240
|
+
size_t sec_charge = static_cast<size_t>(
|
|
241
|
+
charge * (sec_cache_res_ratio_.load(std::memory_order_relaxed)));
|
|
242
|
+
s = secondary_cache_->Deflate(sec_charge);
|
|
243
|
+
assert(s.ok());
|
|
244
|
+
s = pri_cache_res_->UpdateCacheReservation(sec_charge, /*increase=*/false);
|
|
245
|
+
assert(s.ok());
|
|
246
|
+
}
|
|
247
|
+
// Warm up the secondary cache with the compressed block. The secondary
|
|
248
|
+
// cache may choose to ignore it based on the admission policy.
|
|
249
|
+
if (value != nullptr && !compressed_value.empty() &&
|
|
250
|
+
adm_policy_ == TieredAdmissionPolicy::kAdmPolicyThreeQueue) {
|
|
251
|
+
Status status = secondary_cache_->InsertSaved(key, compressed_value, type);
|
|
252
|
+
assert(status.ok() || status.IsNotSupported());
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return s;
|
|
256
|
+
}
|
|
257
|
+
|
|
139
258
|
Cache::Handle* CacheWithSecondaryAdapter::Lookup(const Slice& key,
|
|
140
259
|
const CacheItemHelper* helper,
|
|
141
260
|
CreateContext* create_context,
|
|
@@ -162,6 +281,25 @@ Cache::Handle* CacheWithSecondaryAdapter::Lookup(const Slice& key,
|
|
|
162
281
|
return result;
|
|
163
282
|
}
|
|
164
283
|
|
|
284
|
+
bool CacheWithSecondaryAdapter::Release(Handle* handle,
|
|
285
|
+
bool erase_if_last_ref) {
|
|
286
|
+
if (erase_if_last_ref) {
|
|
287
|
+
ObjectPtr v = target_->Value(handle);
|
|
288
|
+
if (v == nullptr && distribute_cache_res_) {
|
|
289
|
+
size_t charge = target_->GetCharge(handle);
|
|
290
|
+
size_t sec_charge = static_cast<size_t>(
|
|
291
|
+
charge * (sec_cache_res_ratio_.load(std::memory_order_relaxed)));
|
|
292
|
+
TEST_SYNC_POINT("CacheWithSecondaryAdapter::Release:ChargeSecCache1");
|
|
293
|
+
TEST_SYNC_POINT("CacheWithSecondaryAdapter::Release:ChargeSecCache2");
|
|
294
|
+
Status s = secondary_cache_->Inflate(sec_charge);
|
|
295
|
+
assert(s.ok());
|
|
296
|
+
s = pri_cache_res_->UpdateCacheReservation(sec_charge, /*increase=*/true);
|
|
297
|
+
assert(s.ok());
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return target_->Release(handle, erase_if_last_ref);
|
|
301
|
+
}
|
|
302
|
+
|
|
165
303
|
Cache::ObjectPtr CacheWithSecondaryAdapter::Value(Handle* handle) {
|
|
166
304
|
ObjectPtr v = target_->Value(handle);
|
|
167
305
|
// TODO with stacked secondaries: might fail in EvictionHandler
|
|
@@ -265,7 +403,7 @@ void CacheWithSecondaryAdapter::WaitAll(AsyncLookupHandle* async_handles,
|
|
|
265
403
|
for (AsyncLookupHandle* cur : my_pending) {
|
|
266
404
|
my_secondary_handles.push_back(cur->pending_handle);
|
|
267
405
|
}
|
|
268
|
-
secondary_cache_->WaitAll(my_secondary_handles);
|
|
406
|
+
secondary_cache_->WaitAll(std::move(my_secondary_handles));
|
|
269
407
|
}
|
|
270
408
|
|
|
271
409
|
// Process results
|
|
@@ -288,8 +426,297 @@ std::string CacheWithSecondaryAdapter::GetPrintableOptions() const {
|
|
|
288
426
|
}
|
|
289
427
|
|
|
290
428
|
const char* CacheWithSecondaryAdapter::Name() const {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
429
|
+
if (distribute_cache_res_) {
|
|
430
|
+
return kTieredCacheName;
|
|
431
|
+
} else {
|
|
432
|
+
// To the user, at least for now, configure the underlying cache with
|
|
433
|
+
// a secondary cache. So we pretend to be that cache
|
|
434
|
+
return target_->Name();
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// Update the total cache capacity. If we're distributing cache reservations
|
|
439
|
+
// to both primary and secondary, then update the pri_cache_res_reservation
|
|
440
|
+
// as well. At the moment, we don't have a good way of handling the case
|
|
441
|
+
// where the new capacity < total cache reservations.
|
|
442
|
+
void CacheWithSecondaryAdapter::SetCapacity(size_t capacity) {
|
|
443
|
+
size_t sec_capacity = static_cast<size_t>(
|
|
444
|
+
capacity * (distribute_cache_res_
|
|
445
|
+
? sec_cache_res_ratio_.load(std::memory_order_relaxed)
|
|
446
|
+
: 0.0));
|
|
447
|
+
size_t old_sec_capacity = 0;
|
|
448
|
+
|
|
449
|
+
if (distribute_cache_res_) {
|
|
450
|
+
MutexLock m(&mutex_);
|
|
451
|
+
|
|
452
|
+
Status s = secondary_cache_->GetCapacity(old_sec_capacity);
|
|
453
|
+
if (!s.ok()) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
if (old_sec_capacity > sec_capacity) {
|
|
457
|
+
// We're shrinking the cache. We do things in the following order to
|
|
458
|
+
// avoid a temporary spike in usage over the configured capacity -
|
|
459
|
+
// 1. Lower the secondary cache capacity
|
|
460
|
+
// 2. Credit an equal amount (by decreasing pri_cache_res_) to the
|
|
461
|
+
// primary cache
|
|
462
|
+
// 3. Decrease the primary cache capacity to the total budget
|
|
463
|
+
s = secondary_cache_->SetCapacity(sec_capacity);
|
|
464
|
+
if (s.ok()) {
|
|
465
|
+
s = pri_cache_res_->UpdateCacheReservation(
|
|
466
|
+
old_sec_capacity - sec_capacity,
|
|
467
|
+
/*increase=*/false);
|
|
468
|
+
assert(s.ok());
|
|
469
|
+
target_->SetCapacity(capacity);
|
|
470
|
+
}
|
|
471
|
+
} else {
|
|
472
|
+
// We're expanding the cache. Do it in the following order to avoid
|
|
473
|
+
// unnecessary evictions -
|
|
474
|
+
// 1. Increase the primary cache capacity to total budget
|
|
475
|
+
// 2. Reserve additional memory in primary on behalf of secondary (by
|
|
476
|
+
// increasing pri_cache_res_ reservation)
|
|
477
|
+
// 3. Increase secondary cache capacity
|
|
478
|
+
target_->SetCapacity(capacity);
|
|
479
|
+
s = pri_cache_res_->UpdateCacheReservation(
|
|
480
|
+
sec_capacity - old_sec_capacity,
|
|
481
|
+
/*increase=*/true);
|
|
482
|
+
assert(s.ok());
|
|
483
|
+
s = secondary_cache_->SetCapacity(sec_capacity);
|
|
484
|
+
assert(s.ok());
|
|
485
|
+
}
|
|
486
|
+
} else {
|
|
487
|
+
// No cache reservation distribution. Just set the primary cache capacity.
|
|
488
|
+
target_->SetCapacity(capacity);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
Status CacheWithSecondaryAdapter::GetSecondaryCacheCapacity(
|
|
493
|
+
size_t& size) const {
|
|
494
|
+
return secondary_cache_->GetCapacity(size);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
Status CacheWithSecondaryAdapter::GetSecondaryCachePinnedUsage(
|
|
498
|
+
size_t& size) const {
|
|
499
|
+
Status s;
|
|
500
|
+
if (distribute_cache_res_) {
|
|
501
|
+
MutexLock m(&mutex_);
|
|
502
|
+
size_t capacity = 0;
|
|
503
|
+
s = secondary_cache_->GetCapacity(capacity);
|
|
504
|
+
if (s.ok()) {
|
|
505
|
+
size = capacity - pri_cache_res_->GetTotalMemoryUsed();
|
|
506
|
+
} else {
|
|
507
|
+
size = 0;
|
|
508
|
+
}
|
|
509
|
+
} else {
|
|
510
|
+
size = 0;
|
|
511
|
+
}
|
|
512
|
+
return s;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// Update the secondary/primary allocation ratio (remember, the primary
|
|
516
|
+
// capacity is the total memory budget when distribute_cache_res_ is true).
|
|
517
|
+
// When the ratio changes, we may accumulate some error in the calculations
|
|
518
|
+
// for secondary cache inflate/deflate and pri_cache_res_ reservations.
|
|
519
|
+
// This is due to the rounding of the reservation amount.
|
|
520
|
+
//
|
|
521
|
+
// We rely on the current pri_cache_res_ total memory used to estimate the
|
|
522
|
+
// new secondary cache reservation after the ratio change. For this reason,
|
|
523
|
+
// once the ratio is lowered to 0.0 (effectively disabling the secondary
|
|
524
|
+
// cache and pri_cache_res_ total mem used going down to 0), we cannot
|
|
525
|
+
// increase the ratio and re-enable it, We might remove this limitation
|
|
526
|
+
// in the future.
|
|
527
|
+
Status CacheWithSecondaryAdapter::UpdateCacheReservationRatio(
|
|
528
|
+
double compressed_secondary_ratio) {
|
|
529
|
+
if (!distribute_cache_res_ ||
|
|
530
|
+
sec_cache_res_ratio_.load(std::memory_order_relaxed) == 0.0) {
|
|
531
|
+
return Status::NotSupported();
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
MutexLock m(&mutex_);
|
|
535
|
+
size_t pri_capacity = target_->GetCapacity();
|
|
536
|
+
size_t sec_capacity =
|
|
537
|
+
static_cast<size_t>(pri_capacity * compressed_secondary_ratio);
|
|
538
|
+
size_t old_sec_capacity;
|
|
539
|
+
Status s = secondary_cache_->GetCapacity(old_sec_capacity);
|
|
540
|
+
if (!s.ok()) {
|
|
541
|
+
return s;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
TEST_SYNC_POINT(
|
|
545
|
+
"CacheWithSecondaryAdapter::UpdateCacheReservationRatio:Begin");
|
|
546
|
+
|
|
547
|
+
// There's a possible race condition here. Since the read of pri_cache_res_
|
|
548
|
+
// memory used (secondary cache usage charged to primary cache), and the
|
|
549
|
+
// change to sec_cache_res_ratio_ are not guarded by a mutex, its possible
|
|
550
|
+
// that an Insert/Release in another thread might decrease/increase the
|
|
551
|
+
// pri_cache_res_ reservation by the wrong amount. This should not be a
|
|
552
|
+
// problem because updating the sec/pri ratio is a rare operation, and
|
|
553
|
+
// the worst that can happen is we may over/under charge the secondary
|
|
554
|
+
// cache usage by a little bit. But we do need to protect against
|
|
555
|
+
// underflow of old_sec_reserved.
|
|
556
|
+
// TODO: Make the accounting more accurate by tracking the total memory
|
|
557
|
+
// reservation on the primary cache. This will also allow us to remove
|
|
558
|
+
// the restriction of not being able to change the sec/pri ratio from
|
|
559
|
+
// 0.0 to higher.
|
|
560
|
+
size_t sec_charge_to_pri = pri_cache_res_->GetTotalMemoryUsed();
|
|
561
|
+
size_t old_sec_reserved = (old_sec_capacity > sec_charge_to_pri)
|
|
562
|
+
? (old_sec_capacity - sec_charge_to_pri)
|
|
563
|
+
: 0;
|
|
564
|
+
// Calculate the new secondary cache reservation
|
|
565
|
+
size_t sec_reserved = static_cast<size_t>(
|
|
566
|
+
old_sec_reserved *
|
|
567
|
+
(double)(compressed_secondary_ratio /
|
|
568
|
+
sec_cache_res_ratio_.load(std::memory_order_relaxed)));
|
|
569
|
+
sec_cache_res_ratio_.store(compressed_secondary_ratio,
|
|
570
|
+
std::memory_order_relaxed);
|
|
571
|
+
if (sec_capacity > old_sec_capacity) {
|
|
572
|
+
// We're increasing the ratio, thus ending up with a larger secondary
|
|
573
|
+
// cache and a smaller usable primary cache capacity. Similar to
|
|
574
|
+
// SetCapacity(), we try to avoid a temporary increase in total usage
|
|
575
|
+
// beyond teh configured capacity -
|
|
576
|
+
// 1. A higher secondary cache ratio means it gets a higher share of
|
|
577
|
+
// cache reservations. So first account for that by deflating the
|
|
578
|
+
// secondary cache
|
|
579
|
+
// 2. Increase pri_cache_res_ reservation to reflect the new secondary
|
|
580
|
+
// cache utilization (increase in capacity - increase in share of cache
|
|
581
|
+
// reservation)
|
|
582
|
+
// 3. Increase secondary cache capacity
|
|
583
|
+
s = secondary_cache_->Deflate(sec_reserved - old_sec_reserved);
|
|
584
|
+
assert(s.ok());
|
|
585
|
+
s = pri_cache_res_->UpdateCacheReservation(
|
|
586
|
+
(sec_capacity - old_sec_capacity) - (sec_reserved - old_sec_reserved),
|
|
587
|
+
/*increase=*/true);
|
|
588
|
+
assert(s.ok());
|
|
589
|
+
s = secondary_cache_->SetCapacity(sec_capacity);
|
|
590
|
+
assert(s.ok());
|
|
591
|
+
} else {
|
|
592
|
+
// We're shrinking the ratio. Try to avoid unnecessary evictions -
|
|
593
|
+
// 1. Lower the secondary cache capacity
|
|
594
|
+
// 2. Decrease pri_cache_res_ reservation to relect lower secondary
|
|
595
|
+
// cache utilization (decrease in capacity - decrease in share of cache
|
|
596
|
+
// reservations)
|
|
597
|
+
// 3. Inflate the secondary cache to give it back the reduction in its
|
|
598
|
+
// share of cache reservations
|
|
599
|
+
s = secondary_cache_->SetCapacity(sec_capacity);
|
|
600
|
+
if (s.ok()) {
|
|
601
|
+
s = pri_cache_res_->UpdateCacheReservation(
|
|
602
|
+
(old_sec_capacity - sec_capacity) - (old_sec_reserved - sec_reserved),
|
|
603
|
+
/*increase=*/false);
|
|
604
|
+
assert(s.ok());
|
|
605
|
+
s = secondary_cache_->Inflate(old_sec_reserved - sec_reserved);
|
|
606
|
+
assert(s.ok());
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
TEST_SYNC_POINT("CacheWithSecondaryAdapter::UpdateCacheReservationRatio:End");
|
|
611
|
+
#ifndef NDEBUG
|
|
612
|
+
// As mentioned in the function comments, we may accumulate some erros when
|
|
613
|
+
// the ratio is changed. We set a flag here which disables some assertions
|
|
614
|
+
// in the destructor
|
|
615
|
+
ratio_changed_ = true;
|
|
616
|
+
#endif
|
|
617
|
+
return s;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
Status CacheWithSecondaryAdapter::UpdateAdmissionPolicy(
|
|
621
|
+
TieredAdmissionPolicy adm_policy) {
|
|
622
|
+
adm_policy_ = adm_policy;
|
|
623
|
+
return Status::OK();
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
std::shared_ptr<Cache> NewTieredCache(const TieredCacheOptions& _opts) {
|
|
627
|
+
if (!_opts.cache_opts) {
|
|
628
|
+
return nullptr;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
TieredCacheOptions opts = _opts;
|
|
632
|
+
{
|
|
633
|
+
bool valid_adm_policy = true;
|
|
634
|
+
|
|
635
|
+
switch (_opts.adm_policy) {
|
|
636
|
+
case TieredAdmissionPolicy::kAdmPolicyAuto:
|
|
637
|
+
// Select an appropriate default policy
|
|
638
|
+
if (opts.adm_policy == TieredAdmissionPolicy::kAdmPolicyAuto) {
|
|
639
|
+
if (opts.nvm_sec_cache) {
|
|
640
|
+
opts.adm_policy = TieredAdmissionPolicy::kAdmPolicyThreeQueue;
|
|
641
|
+
} else {
|
|
642
|
+
opts.adm_policy = TieredAdmissionPolicy::kAdmPolicyPlaceholder;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
break;
|
|
646
|
+
case TieredAdmissionPolicy::kAdmPolicyPlaceholder:
|
|
647
|
+
case TieredAdmissionPolicy::kAdmPolicyAllowCacheHits:
|
|
648
|
+
if (opts.nvm_sec_cache) {
|
|
649
|
+
valid_adm_policy = false;
|
|
650
|
+
}
|
|
651
|
+
break;
|
|
652
|
+
case TieredAdmissionPolicy::kAdmPolicyThreeQueue:
|
|
653
|
+
if (!opts.nvm_sec_cache) {
|
|
654
|
+
valid_adm_policy = false;
|
|
655
|
+
}
|
|
656
|
+
break;
|
|
657
|
+
default:
|
|
658
|
+
valid_adm_policy = false;
|
|
659
|
+
}
|
|
660
|
+
if (!valid_adm_policy) {
|
|
661
|
+
return nullptr;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
std::shared_ptr<Cache> cache;
|
|
666
|
+
if (opts.cache_type == PrimaryCacheType::kCacheTypeLRU) {
|
|
667
|
+
LRUCacheOptions cache_opts =
|
|
668
|
+
*(static_cast_with_check<LRUCacheOptions, ShardedCacheOptions>(
|
|
669
|
+
opts.cache_opts));
|
|
670
|
+
cache_opts.capacity = opts.total_capacity;
|
|
671
|
+
cache = cache_opts.MakeSharedCache();
|
|
672
|
+
} else if (opts.cache_type == PrimaryCacheType::kCacheTypeHCC) {
|
|
673
|
+
HyperClockCacheOptions cache_opts =
|
|
674
|
+
*(static_cast_with_check<HyperClockCacheOptions, ShardedCacheOptions>(
|
|
675
|
+
opts.cache_opts));
|
|
676
|
+
cache_opts.capacity = opts.total_capacity;
|
|
677
|
+
cache = cache_opts.MakeSharedCache();
|
|
678
|
+
} else {
|
|
679
|
+
return nullptr;
|
|
680
|
+
}
|
|
681
|
+
std::shared_ptr<SecondaryCache> sec_cache;
|
|
682
|
+
opts.comp_cache_opts.capacity = static_cast<size_t>(
|
|
683
|
+
opts.total_capacity * opts.compressed_secondary_ratio);
|
|
684
|
+
sec_cache = NewCompressedSecondaryCache(opts.comp_cache_opts);
|
|
685
|
+
|
|
686
|
+
if (opts.nvm_sec_cache) {
|
|
687
|
+
if (opts.adm_policy == TieredAdmissionPolicy::kAdmPolicyThreeQueue) {
|
|
688
|
+
sec_cache = std::make_shared<TieredSecondaryCache>(
|
|
689
|
+
sec_cache, opts.nvm_sec_cache,
|
|
690
|
+
TieredAdmissionPolicy::kAdmPolicyThreeQueue);
|
|
691
|
+
} else {
|
|
692
|
+
return nullptr;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
return std::make_shared<CacheWithSecondaryAdapter>(
|
|
697
|
+
cache, sec_cache, opts.adm_policy, /*distribute_cache_res=*/true);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
Status UpdateTieredCache(const std::shared_ptr<Cache>& cache,
|
|
701
|
+
int64_t total_capacity,
|
|
702
|
+
double compressed_secondary_ratio,
|
|
703
|
+
TieredAdmissionPolicy adm_policy) {
|
|
704
|
+
if (!cache || strcmp(cache->Name(), kTieredCacheName)) {
|
|
705
|
+
return Status::InvalidArgument();
|
|
706
|
+
}
|
|
707
|
+
CacheWithSecondaryAdapter* tiered_cache =
|
|
708
|
+
static_cast<CacheWithSecondaryAdapter*>(cache.get());
|
|
709
|
+
|
|
710
|
+
Status s;
|
|
711
|
+
if (total_capacity > 0) {
|
|
712
|
+
tiered_cache->SetCapacity(total_capacity);
|
|
713
|
+
}
|
|
714
|
+
if (compressed_secondary_ratio >= 0.0 && compressed_secondary_ratio <= 1.0) {
|
|
715
|
+
s = tiered_cache->UpdateCacheReservationRatio(compressed_secondary_ratio);
|
|
716
|
+
}
|
|
717
|
+
if (adm_policy < TieredAdmissionPolicy::kAdmPolicyMax) {
|
|
718
|
+
s = tiered_cache->UpdateAdmissionPolicy(adm_policy);
|
|
719
|
+
}
|
|
720
|
+
return s;
|
|
294
721
|
}
|
|
295
722
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
#pragma once
|
|
7
7
|
|
|
8
|
+
#include "cache/cache_reservation_manager.h"
|
|
8
9
|
#include "rocksdb/secondary_cache.h"
|
|
9
10
|
|
|
10
11
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -13,15 +14,27 @@ class CacheWithSecondaryAdapter : public CacheWrapper {
|
|
|
13
14
|
public:
|
|
14
15
|
explicit CacheWithSecondaryAdapter(
|
|
15
16
|
std::shared_ptr<Cache> target,
|
|
16
|
-
std::shared_ptr<SecondaryCache> secondary_cache
|
|
17
|
+
std::shared_ptr<SecondaryCache> secondary_cache,
|
|
18
|
+
TieredAdmissionPolicy adm_policy = TieredAdmissionPolicy::kAdmPolicyAuto,
|
|
19
|
+
bool distribute_cache_res = false);
|
|
17
20
|
|
|
18
21
|
~CacheWithSecondaryAdapter() override;
|
|
19
22
|
|
|
23
|
+
Status Insert(
|
|
24
|
+
const Slice& key, ObjectPtr value, const CacheItemHelper* helper,
|
|
25
|
+
size_t charge, Handle** handle = nullptr,
|
|
26
|
+
Priority priority = Priority::LOW,
|
|
27
|
+
const Slice& compressed_value = Slice(),
|
|
28
|
+
CompressionType type = CompressionType::kNoCompression) override;
|
|
29
|
+
|
|
20
30
|
Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
|
|
21
31
|
CreateContext* create_context,
|
|
22
32
|
Priority priority = Priority::LOW,
|
|
23
33
|
Statistics* stats = nullptr) override;
|
|
24
34
|
|
|
35
|
+
using Cache::Release;
|
|
36
|
+
bool Release(Handle* handle, bool erase_if_last_ref = false) override;
|
|
37
|
+
|
|
25
38
|
ObjectPtr Value(Handle* handle) override;
|
|
26
39
|
|
|
27
40
|
void StartAsyncLookup(AsyncLookupHandle& async_handle) override;
|
|
@@ -32,8 +45,22 @@ class CacheWithSecondaryAdapter : public CacheWrapper {
|
|
|
32
45
|
|
|
33
46
|
const char* Name() const override;
|
|
34
47
|
|
|
48
|
+
void SetCapacity(size_t capacity) override;
|
|
49
|
+
|
|
50
|
+
Status GetSecondaryCacheCapacity(size_t& size) const override;
|
|
51
|
+
|
|
52
|
+
Status GetSecondaryCachePinnedUsage(size_t& size) const override;
|
|
53
|
+
|
|
54
|
+
Status UpdateCacheReservationRatio(double ratio);
|
|
55
|
+
|
|
56
|
+
Status UpdateAdmissionPolicy(TieredAdmissionPolicy adm_policy);
|
|
57
|
+
|
|
58
|
+
Cache* TEST_GetCache() { return target_.get(); }
|
|
59
|
+
|
|
60
|
+
SecondaryCache* TEST_GetSecondaryCache() { return secondary_cache_.get(); }
|
|
61
|
+
|
|
35
62
|
private:
|
|
36
|
-
bool EvictionHandler(const Slice& key, Handle* handle);
|
|
63
|
+
bool EvictionHandler(const Slice& key, Handle* handle, bool was_hit);
|
|
37
64
|
|
|
38
65
|
void StartAsyncLookupOnMySecondary(AsyncLookupHandle& async_handle);
|
|
39
66
|
|
|
@@ -47,6 +74,21 @@ class CacheWithSecondaryAdapter : public CacheWrapper {
|
|
|
47
74
|
void CleanupCacheObject(ObjectPtr obj, const CacheItemHelper* helper);
|
|
48
75
|
|
|
49
76
|
std::shared_ptr<SecondaryCache> secondary_cache_;
|
|
77
|
+
TieredAdmissionPolicy adm_policy_;
|
|
78
|
+
// Whether to proportionally distribute cache memory reservations, i.e
|
|
79
|
+
// placeholder entries with null value and a non-zero charge, across
|
|
80
|
+
// the primary and secondary caches.
|
|
81
|
+
bool distribute_cache_res_;
|
|
82
|
+
// A cache reservation manager to keep track of secondary cache memory
|
|
83
|
+
// usage by reserving equivalent capacity against the primary cache
|
|
84
|
+
std::shared_ptr<ConcurrentCacheReservationManager> pri_cache_res_;
|
|
85
|
+
// Fraction of a cache memory reservation to be assigned to the secondary
|
|
86
|
+
// cache
|
|
87
|
+
std::atomic<double> sec_cache_res_ratio_;
|
|
88
|
+
mutable port::Mutex mutex_;
|
|
89
|
+
#ifndef NDEBUG
|
|
90
|
+
bool ratio_changed_ = false;
|
|
91
|
+
#endif
|
|
50
92
|
};
|
|
51
93
|
|
|
52
94
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -38,7 +38,7 @@ uint32_t DetermineSeed(int32_t hash_seed_option) {
|
|
|
38
38
|
return GetSliceHash(hostname) & kSeedMask;
|
|
39
39
|
} else {
|
|
40
40
|
// Fall back on something stable within the process.
|
|
41
|
-
return
|
|
41
|
+
return BitwiseAnd(gen.GetBaseUpper(), kSeedMask);
|
|
42
42
|
}
|
|
43
43
|
} else {
|
|
44
44
|
// for kQuasiRandomHashSeed and fallback
|
|
@@ -83,6 +83,16 @@ size_t ShardedCacheBase::GetCapacity() const {
|
|
|
83
83
|
return capacity_;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
Status ShardedCacheBase::GetSecondaryCacheCapacity(size_t& size) const {
|
|
87
|
+
size = 0;
|
|
88
|
+
return Status::OK();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
Status ShardedCacheBase::GetSecondaryCachePinnedUsage(size_t& size) const {
|
|
92
|
+
size = 0;
|
|
93
|
+
return Status::OK();
|
|
94
|
+
}
|
|
95
|
+
|
|
86
96
|
bool ShardedCacheBase::HasStrictCapacityLimit() const {
|
|
87
97
|
MutexLock l(&config_mutex_);
|
|
88
98
|
return strict_capacity_limit_;
|