@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
|
@@ -371,11 +371,12 @@ TEST_F(LRUCacheTest, EntriesWithPriority) {
|
|
|
371
371
|
|
|
372
372
|
namespace clock_cache {
|
|
373
373
|
|
|
374
|
+
template <class ClockCache>
|
|
374
375
|
class ClockCacheTest : public testing::Test {
|
|
375
376
|
public:
|
|
376
|
-
using Shard =
|
|
377
|
-
using Table =
|
|
378
|
-
using
|
|
377
|
+
using Shard = typename ClockCache::Shard;
|
|
378
|
+
using Table = typename Shard::Table;
|
|
379
|
+
using TableOpts = typename Table::Opts;
|
|
379
380
|
|
|
380
381
|
ClockCacheTest() {}
|
|
381
382
|
~ClockCacheTest() override { DeleteShard(); }
|
|
@@ -393,8 +394,7 @@ class ClockCacheTest : public testing::Test {
|
|
|
393
394
|
shard_ =
|
|
394
395
|
reinterpret_cast<Shard*>(port::cacheline_aligned_alloc(sizeof(Shard)));
|
|
395
396
|
|
|
396
|
-
|
|
397
|
-
opts.estimated_value_size = 1;
|
|
397
|
+
TableOpts opts{1 /*value_size*/};
|
|
398
398
|
new (shard_)
|
|
399
399
|
Shard(capacity, strict_capacity_limit, kDontChargeCacheMetadata,
|
|
400
400
|
/*allocator*/ nullptr, &eviction_callback_, &hash_seed_, opts);
|
|
@@ -458,43 +458,53 @@ class ClockCacheTest : public testing::Test {
|
|
|
458
458
|
uint32_t hash_seed_ = 0;
|
|
459
459
|
};
|
|
460
460
|
|
|
461
|
-
|
|
462
|
-
|
|
461
|
+
using ClockCacheTypes =
|
|
462
|
+
::testing::Types<AutoHyperClockCache, FixedHyperClockCache>;
|
|
463
|
+
TYPED_TEST_CASE(ClockCacheTest, ClockCacheTypes);
|
|
464
|
+
|
|
465
|
+
TYPED_TEST(ClockCacheTest, Misc) {
|
|
466
|
+
this->NewShard(3);
|
|
467
|
+
// NOTE: templated base class prevents simple naming of inherited members,
|
|
468
|
+
// so lots of `this->`
|
|
469
|
+
auto& shard = *this->shard_;
|
|
463
470
|
|
|
464
471
|
// Key size stuff
|
|
465
|
-
EXPECT_OK(InsertWithLen('a', 16));
|
|
466
|
-
EXPECT_NOK(InsertWithLen('b', 15));
|
|
467
|
-
EXPECT_OK(InsertWithLen('b', 16));
|
|
468
|
-
EXPECT_NOK(InsertWithLen('c', 17));
|
|
469
|
-
EXPECT_NOK(InsertWithLen('d', 1000));
|
|
470
|
-
EXPECT_NOK(InsertWithLen('e', 11));
|
|
471
|
-
EXPECT_NOK(InsertWithLen('f', 0));
|
|
472
|
+
EXPECT_OK(this->InsertWithLen('a', 16));
|
|
473
|
+
EXPECT_NOK(this->InsertWithLen('b', 15));
|
|
474
|
+
EXPECT_OK(this->InsertWithLen('b', 16));
|
|
475
|
+
EXPECT_NOK(this->InsertWithLen('c', 17));
|
|
476
|
+
EXPECT_NOK(this->InsertWithLen('d', 1000));
|
|
477
|
+
EXPECT_NOK(this->InsertWithLen('e', 11));
|
|
478
|
+
EXPECT_NOK(this->InsertWithLen('f', 0));
|
|
472
479
|
|
|
473
480
|
// Some of this is motivated by code coverage
|
|
474
481
|
std::string wrong_size_key(15, 'x');
|
|
475
|
-
EXPECT_FALSE(Lookup(wrong_size_key, TestHashedKey('x')));
|
|
476
|
-
EXPECT_FALSE(
|
|
477
|
-
EXPECT_FALSE(
|
|
478
|
-
|
|
482
|
+
EXPECT_FALSE(this->Lookup(wrong_size_key, this->TestHashedKey('x')));
|
|
483
|
+
EXPECT_FALSE(shard.Ref(nullptr));
|
|
484
|
+
EXPECT_FALSE(shard.Release(nullptr));
|
|
485
|
+
shard.Erase(wrong_size_key, this->TestHashedKey('x')); // no-op
|
|
479
486
|
}
|
|
480
487
|
|
|
481
|
-
|
|
482
|
-
constexpr size_t kCapacity =
|
|
483
|
-
NewShard(kCapacity, false /*strict_capacity_limit*/);
|
|
488
|
+
TYPED_TEST(ClockCacheTest, Limits) {
|
|
489
|
+
constexpr size_t kCapacity = 64;
|
|
490
|
+
this->NewShard(kCapacity, false /*strict_capacity_limit*/);
|
|
491
|
+
auto& shard = *this->shard_;
|
|
492
|
+
using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
|
|
493
|
+
|
|
484
494
|
for (bool strict_capacity_limit : {false, true, false}) {
|
|
485
495
|
SCOPED_TRACE("strict_capacity_limit = " +
|
|
486
496
|
std::to_string(strict_capacity_limit));
|
|
487
497
|
|
|
488
498
|
// Also tests switching between strict limit and not
|
|
489
|
-
|
|
499
|
+
shard.SetStrictCapacityLimit(strict_capacity_limit);
|
|
490
500
|
|
|
491
|
-
UniqueId64x2 hkey = TestHashedKey('x');
|
|
501
|
+
UniqueId64x2 hkey = this->TestHashedKey('x');
|
|
492
502
|
|
|
493
503
|
// Single entry charge beyond capacity
|
|
494
504
|
{
|
|
495
|
-
Status s =
|
|
496
|
-
|
|
497
|
-
|
|
505
|
+
Status s = shard.Insert(this->TestKey(hkey), hkey, nullptr /*value*/,
|
|
506
|
+
&kNoopCacheItemHelper, kCapacity + 2 /*charge*/,
|
|
507
|
+
nullptr /*handle*/, Cache::Priority::LOW);
|
|
498
508
|
if (strict_capacity_limit) {
|
|
499
509
|
EXPECT_TRUE(s.IsMemoryLimit());
|
|
500
510
|
} else {
|
|
@@ -505,11 +515,11 @@ TEST_F(ClockCacheTest, Limits) {
|
|
|
505
515
|
// Single entry fills capacity
|
|
506
516
|
{
|
|
507
517
|
HandleImpl* h;
|
|
508
|
-
ASSERT_OK(
|
|
509
|
-
|
|
510
|
-
|
|
518
|
+
ASSERT_OK(shard.Insert(this->TestKey(hkey), hkey, nullptr /*value*/,
|
|
519
|
+
&kNoopCacheItemHelper, kCapacity /*charge*/, &h,
|
|
520
|
+
Cache::Priority::LOW));
|
|
511
521
|
// Try to insert more
|
|
512
|
-
Status s = Insert('a');
|
|
522
|
+
Status s = this->Insert('a');
|
|
513
523
|
if (strict_capacity_limit) {
|
|
514
524
|
EXPECT_TRUE(s.IsMemoryLimit());
|
|
515
525
|
} else {
|
|
@@ -517,22 +527,22 @@ TEST_F(ClockCacheTest, Limits) {
|
|
|
517
527
|
}
|
|
518
528
|
// Release entry filling capacity.
|
|
519
529
|
// Cover useful = false case.
|
|
520
|
-
|
|
530
|
+
shard.Release(h, false /*useful*/, false /*erase_if_last_ref*/);
|
|
521
531
|
}
|
|
522
532
|
|
|
523
533
|
// Insert more than table size can handle to exceed occupancy limit.
|
|
524
534
|
// (Cleverly using mostly zero-charge entries, but some non-zero to
|
|
525
535
|
// verify usage tracking on detached entries.)
|
|
526
536
|
{
|
|
527
|
-
size_t n =
|
|
537
|
+
size_t n = kCapacity * 5 + 1;
|
|
528
538
|
std::unique_ptr<HandleImpl* []> ha { new HandleImpl* [n] {} };
|
|
529
539
|
Status s;
|
|
530
540
|
for (size_t i = 0; i < n && s.ok(); ++i) {
|
|
531
541
|
hkey[1] = i;
|
|
532
|
-
s =
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
542
|
+
s = shard.Insert(this->TestKey(hkey), hkey, nullptr /*value*/,
|
|
543
|
+
&kNoopCacheItemHelper,
|
|
544
|
+
(i + kCapacity < n) ? 0 : 1 /*charge*/, &ha[i],
|
|
545
|
+
Cache::Priority::LOW);
|
|
536
546
|
if (i == 0) {
|
|
537
547
|
EXPECT_OK(s);
|
|
538
548
|
}
|
|
@@ -543,130 +553,133 @@ TEST_F(ClockCacheTest, Limits) {
|
|
|
543
553
|
EXPECT_OK(s);
|
|
544
554
|
}
|
|
545
555
|
// Same result if not keeping a reference
|
|
546
|
-
s = Insert('a');
|
|
556
|
+
s = this->Insert('a');
|
|
547
557
|
if (strict_capacity_limit) {
|
|
548
558
|
EXPECT_TRUE(s.IsMemoryLimit());
|
|
549
559
|
} else {
|
|
550
560
|
EXPECT_OK(s);
|
|
551
561
|
}
|
|
552
562
|
|
|
563
|
+
EXPECT_EQ(shard.GetOccupancyCount(), shard.GetOccupancyLimit());
|
|
564
|
+
|
|
553
565
|
// Regardless, we didn't allow table to actually get full
|
|
554
|
-
EXPECT_LT(
|
|
566
|
+
EXPECT_LT(shard.GetOccupancyCount(), shard.GetTableAddressCount());
|
|
555
567
|
|
|
556
568
|
// Release handles
|
|
557
569
|
for (size_t i = 0; i < n; ++i) {
|
|
558
570
|
if (ha[i]) {
|
|
559
|
-
|
|
571
|
+
shard.Release(ha[i]);
|
|
560
572
|
}
|
|
561
573
|
}
|
|
562
574
|
}
|
|
563
575
|
}
|
|
564
576
|
}
|
|
565
577
|
|
|
566
|
-
|
|
578
|
+
TYPED_TEST(ClockCacheTest, ClockEvictionTest) {
|
|
567
579
|
for (bool strict_capacity_limit : {false, true}) {
|
|
568
580
|
SCOPED_TRACE("strict_capacity_limit = " +
|
|
569
581
|
std::to_string(strict_capacity_limit));
|
|
570
582
|
|
|
571
|
-
NewShard(6, strict_capacity_limit);
|
|
572
|
-
|
|
573
|
-
EXPECT_OK(Insert('
|
|
574
|
-
EXPECT_OK(Insert('
|
|
575
|
-
EXPECT_OK(Insert('
|
|
576
|
-
EXPECT_OK(Insert('
|
|
577
|
-
EXPECT_OK(Insert('
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
EXPECT_TRUE(Lookup('
|
|
581
|
-
EXPECT_TRUE(Lookup('
|
|
582
|
-
EXPECT_TRUE(Lookup('
|
|
583
|
-
EXPECT_TRUE(Lookup('
|
|
584
|
-
EXPECT_TRUE(Lookup('
|
|
583
|
+
this->NewShard(6, strict_capacity_limit);
|
|
584
|
+
auto& shard = *this->shard_;
|
|
585
|
+
EXPECT_OK(this->Insert('a', Cache::Priority::BOTTOM));
|
|
586
|
+
EXPECT_OK(this->Insert('b', Cache::Priority::LOW));
|
|
587
|
+
EXPECT_OK(this->Insert('c', Cache::Priority::HIGH));
|
|
588
|
+
EXPECT_OK(this->Insert('d', Cache::Priority::BOTTOM));
|
|
589
|
+
EXPECT_OK(this->Insert('e', Cache::Priority::LOW));
|
|
590
|
+
EXPECT_OK(this->Insert('f', Cache::Priority::HIGH));
|
|
591
|
+
|
|
592
|
+
EXPECT_TRUE(this->Lookup('a', /*use*/ false));
|
|
593
|
+
EXPECT_TRUE(this->Lookup('b', /*use*/ false));
|
|
594
|
+
EXPECT_TRUE(this->Lookup('c', /*use*/ false));
|
|
595
|
+
EXPECT_TRUE(this->Lookup('d', /*use*/ false));
|
|
596
|
+
EXPECT_TRUE(this->Lookup('e', /*use*/ false));
|
|
597
|
+
EXPECT_TRUE(this->Lookup('f', /*use*/ false));
|
|
585
598
|
|
|
586
599
|
// Ensure bottom are evicted first, even if new entries are low
|
|
587
|
-
EXPECT_OK(Insert('g', Cache::Priority::LOW));
|
|
588
|
-
EXPECT_OK(Insert('h', Cache::Priority::LOW));
|
|
589
|
-
|
|
590
|
-
EXPECT_FALSE(Lookup('a', /*use*/ false));
|
|
591
|
-
EXPECT_TRUE(Lookup('b', /*use*/ false));
|
|
592
|
-
EXPECT_TRUE(Lookup('c', /*use*/ false));
|
|
593
|
-
EXPECT_FALSE(Lookup('d', /*use*/ false));
|
|
594
|
-
EXPECT_TRUE(Lookup('e', /*use*/ false));
|
|
595
|
-
EXPECT_TRUE(Lookup('f', /*use*/ false));
|
|
600
|
+
EXPECT_OK(this->Insert('g', Cache::Priority::LOW));
|
|
601
|
+
EXPECT_OK(this->Insert('h', Cache::Priority::LOW));
|
|
602
|
+
|
|
603
|
+
EXPECT_FALSE(this->Lookup('a', /*use*/ false));
|
|
604
|
+
EXPECT_TRUE(this->Lookup('b', /*use*/ false));
|
|
605
|
+
EXPECT_TRUE(this->Lookup('c', /*use*/ false));
|
|
606
|
+
EXPECT_FALSE(this->Lookup('d', /*use*/ false));
|
|
607
|
+
EXPECT_TRUE(this->Lookup('e', /*use*/ false));
|
|
608
|
+
EXPECT_TRUE(this->Lookup('f', /*use*/ false));
|
|
596
609
|
// Mark g & h useful
|
|
597
|
-
EXPECT_TRUE(Lookup('g', /*use*/ true));
|
|
598
|
-
EXPECT_TRUE(Lookup('h', /*use*/ true));
|
|
610
|
+
EXPECT_TRUE(this->Lookup('g', /*use*/ true));
|
|
611
|
+
EXPECT_TRUE(this->Lookup('h', /*use*/ true));
|
|
599
612
|
|
|
600
613
|
// Then old LOW entries
|
|
601
|
-
EXPECT_OK(Insert('i', Cache::Priority::LOW));
|
|
602
|
-
EXPECT_OK(Insert('j', Cache::Priority::LOW));
|
|
614
|
+
EXPECT_OK(this->Insert('i', Cache::Priority::LOW));
|
|
615
|
+
EXPECT_OK(this->Insert('j', Cache::Priority::LOW));
|
|
603
616
|
|
|
604
|
-
EXPECT_FALSE(Lookup('b', /*use*/ false));
|
|
605
|
-
EXPECT_TRUE(Lookup('c', /*use*/ false));
|
|
606
|
-
EXPECT_FALSE(Lookup('e', /*use*/ false));
|
|
607
|
-
EXPECT_TRUE(Lookup('f', /*use*/ false));
|
|
617
|
+
EXPECT_FALSE(this->Lookup('b', /*use*/ false));
|
|
618
|
+
EXPECT_TRUE(this->Lookup('c', /*use*/ false));
|
|
619
|
+
EXPECT_FALSE(this->Lookup('e', /*use*/ false));
|
|
620
|
+
EXPECT_TRUE(this->Lookup('f', /*use*/ false));
|
|
608
621
|
// Mark g & h useful once again
|
|
609
|
-
EXPECT_TRUE(Lookup('g', /*use*/ true));
|
|
610
|
-
EXPECT_TRUE(Lookup('h', /*use*/ true));
|
|
611
|
-
EXPECT_TRUE(Lookup('i', /*use*/ false));
|
|
612
|
-
EXPECT_TRUE(Lookup('j', /*use*/ false));
|
|
622
|
+
EXPECT_TRUE(this->Lookup('g', /*use*/ true));
|
|
623
|
+
EXPECT_TRUE(this->Lookup('h', /*use*/ true));
|
|
624
|
+
EXPECT_TRUE(this->Lookup('i', /*use*/ false));
|
|
625
|
+
EXPECT_TRUE(this->Lookup('j', /*use*/ false));
|
|
613
626
|
|
|
614
627
|
// Then old HIGH entries
|
|
615
|
-
EXPECT_OK(Insert('k', Cache::Priority::LOW));
|
|
616
|
-
EXPECT_OK(Insert('l', Cache::Priority::LOW));
|
|
617
|
-
|
|
618
|
-
EXPECT_FALSE(Lookup('c', /*use*/ false));
|
|
619
|
-
EXPECT_FALSE(Lookup('f', /*use*/ false));
|
|
620
|
-
EXPECT_TRUE(Lookup('g', /*use*/ false));
|
|
621
|
-
EXPECT_TRUE(Lookup('h', /*use*/ false));
|
|
622
|
-
EXPECT_TRUE(Lookup('i', /*use*/ false));
|
|
623
|
-
EXPECT_TRUE(Lookup('j', /*use*/ false));
|
|
624
|
-
EXPECT_TRUE(Lookup('k', /*use*/ false));
|
|
625
|
-
EXPECT_TRUE(Lookup('l', /*use*/ false));
|
|
628
|
+
EXPECT_OK(this->Insert('k', Cache::Priority::LOW));
|
|
629
|
+
EXPECT_OK(this->Insert('l', Cache::Priority::LOW));
|
|
630
|
+
|
|
631
|
+
EXPECT_FALSE(this->Lookup('c', /*use*/ false));
|
|
632
|
+
EXPECT_FALSE(this->Lookup('f', /*use*/ false));
|
|
633
|
+
EXPECT_TRUE(this->Lookup('g', /*use*/ false));
|
|
634
|
+
EXPECT_TRUE(this->Lookup('h', /*use*/ false));
|
|
635
|
+
EXPECT_TRUE(this->Lookup('i', /*use*/ false));
|
|
636
|
+
EXPECT_TRUE(this->Lookup('j', /*use*/ false));
|
|
637
|
+
EXPECT_TRUE(this->Lookup('k', /*use*/ false));
|
|
638
|
+
EXPECT_TRUE(this->Lookup('l', /*use*/ false));
|
|
626
639
|
|
|
627
640
|
// Then the (roughly) least recently useful
|
|
628
|
-
EXPECT_OK(Insert('m', Cache::Priority::HIGH));
|
|
629
|
-
EXPECT_OK(Insert('n', Cache::Priority::HIGH));
|
|
641
|
+
EXPECT_OK(this->Insert('m', Cache::Priority::HIGH));
|
|
642
|
+
EXPECT_OK(this->Insert('n', Cache::Priority::HIGH));
|
|
630
643
|
|
|
631
|
-
EXPECT_TRUE(Lookup('g', /*use*/ false));
|
|
632
|
-
EXPECT_TRUE(Lookup('h', /*use*/ false));
|
|
633
|
-
EXPECT_FALSE(Lookup('i', /*use*/ false));
|
|
634
|
-
EXPECT_FALSE(Lookup('j', /*use*/ false));
|
|
635
|
-
EXPECT_TRUE(Lookup('k', /*use*/ false));
|
|
636
|
-
EXPECT_TRUE(Lookup('l', /*use*/ false));
|
|
644
|
+
EXPECT_TRUE(this->Lookup('g', /*use*/ false));
|
|
645
|
+
EXPECT_TRUE(this->Lookup('h', /*use*/ false));
|
|
646
|
+
EXPECT_FALSE(this->Lookup('i', /*use*/ false));
|
|
647
|
+
EXPECT_FALSE(this->Lookup('j', /*use*/ false));
|
|
648
|
+
EXPECT_TRUE(this->Lookup('k', /*use*/ false));
|
|
649
|
+
EXPECT_TRUE(this->Lookup('l', /*use*/ false));
|
|
637
650
|
|
|
638
651
|
// Now try changing capacity down
|
|
639
|
-
|
|
652
|
+
shard.SetCapacity(4);
|
|
640
653
|
// Insert to ensure evictions happen
|
|
641
|
-
EXPECT_OK(Insert('o', Cache::Priority::LOW));
|
|
642
|
-
EXPECT_OK(Insert('p', Cache::Priority::LOW));
|
|
643
|
-
|
|
644
|
-
EXPECT_FALSE(Lookup('g', /*use*/ false));
|
|
645
|
-
EXPECT_FALSE(Lookup('h', /*use*/ false));
|
|
646
|
-
EXPECT_FALSE(Lookup('k', /*use*/ false));
|
|
647
|
-
EXPECT_FALSE(Lookup('l', /*use*/ false));
|
|
648
|
-
EXPECT_TRUE(Lookup('m', /*use*/ false));
|
|
649
|
-
EXPECT_TRUE(Lookup('n', /*use*/ false));
|
|
650
|
-
EXPECT_TRUE(Lookup('o', /*use*/ false));
|
|
651
|
-
EXPECT_TRUE(Lookup('p', /*use*/ false));
|
|
654
|
+
EXPECT_OK(this->Insert('o', Cache::Priority::LOW));
|
|
655
|
+
EXPECT_OK(this->Insert('p', Cache::Priority::LOW));
|
|
656
|
+
|
|
657
|
+
EXPECT_FALSE(this->Lookup('g', /*use*/ false));
|
|
658
|
+
EXPECT_FALSE(this->Lookup('h', /*use*/ false));
|
|
659
|
+
EXPECT_FALSE(this->Lookup('k', /*use*/ false));
|
|
660
|
+
EXPECT_FALSE(this->Lookup('l', /*use*/ false));
|
|
661
|
+
EXPECT_TRUE(this->Lookup('m', /*use*/ false));
|
|
662
|
+
EXPECT_TRUE(this->Lookup('n', /*use*/ false));
|
|
663
|
+
EXPECT_TRUE(this->Lookup('o', /*use*/ false));
|
|
664
|
+
EXPECT_TRUE(this->Lookup('p', /*use*/ false));
|
|
652
665
|
|
|
653
666
|
// Now try changing capacity up
|
|
654
|
-
EXPECT_TRUE(Lookup('m', /*use*/ true));
|
|
655
|
-
EXPECT_TRUE(Lookup('n', /*use*/ true));
|
|
656
|
-
|
|
657
|
-
EXPECT_OK(Insert('q', Cache::Priority::HIGH));
|
|
658
|
-
EXPECT_OK(Insert('r', Cache::Priority::HIGH));
|
|
659
|
-
EXPECT_OK(Insert('s', Cache::Priority::HIGH));
|
|
660
|
-
EXPECT_OK(Insert('t', Cache::Priority::HIGH));
|
|
661
|
-
|
|
662
|
-
EXPECT_FALSE(Lookup('o', /*use*/ false));
|
|
663
|
-
EXPECT_FALSE(Lookup('p', /*use*/ false));
|
|
664
|
-
EXPECT_TRUE(Lookup('m', /*use*/ false));
|
|
665
|
-
EXPECT_TRUE(Lookup('n', /*use*/ false));
|
|
666
|
-
EXPECT_TRUE(Lookup('q', /*use*/ false));
|
|
667
|
-
EXPECT_TRUE(Lookup('r', /*use*/ false));
|
|
668
|
-
EXPECT_TRUE(Lookup('s', /*use*/ false));
|
|
669
|
-
EXPECT_TRUE(Lookup('t', /*use*/ false));
|
|
667
|
+
EXPECT_TRUE(this->Lookup('m', /*use*/ true));
|
|
668
|
+
EXPECT_TRUE(this->Lookup('n', /*use*/ true));
|
|
669
|
+
shard.SetCapacity(6);
|
|
670
|
+
EXPECT_OK(this->Insert('q', Cache::Priority::HIGH));
|
|
671
|
+
EXPECT_OK(this->Insert('r', Cache::Priority::HIGH));
|
|
672
|
+
EXPECT_OK(this->Insert('s', Cache::Priority::HIGH));
|
|
673
|
+
EXPECT_OK(this->Insert('t', Cache::Priority::HIGH));
|
|
674
|
+
|
|
675
|
+
EXPECT_FALSE(this->Lookup('o', /*use*/ false));
|
|
676
|
+
EXPECT_FALSE(this->Lookup('p', /*use*/ false));
|
|
677
|
+
EXPECT_TRUE(this->Lookup('m', /*use*/ false));
|
|
678
|
+
EXPECT_TRUE(this->Lookup('n', /*use*/ false));
|
|
679
|
+
EXPECT_TRUE(this->Lookup('q', /*use*/ false));
|
|
680
|
+
EXPECT_TRUE(this->Lookup('r', /*use*/ false));
|
|
681
|
+
EXPECT_TRUE(this->Lookup('s', /*use*/ false));
|
|
682
|
+
EXPECT_TRUE(this->Lookup('t', /*use*/ false));
|
|
670
683
|
}
|
|
671
684
|
}
|
|
672
685
|
|
|
@@ -682,113 +695,178 @@ const Cache::CacheItemHelper kDeleteCounterHelper{
|
|
|
682
695
|
} // namespace
|
|
683
696
|
|
|
684
697
|
// Testing calls to CorrectNearOverflow in Release
|
|
685
|
-
|
|
686
|
-
NewShard(6, /*strict_capacity_limit*/ false);
|
|
698
|
+
TYPED_TEST(ClockCacheTest, ClockCounterOverflowTest) {
|
|
699
|
+
this->NewShard(6, /*strict_capacity_limit*/ false);
|
|
700
|
+
auto& shard = *this->shard_;
|
|
701
|
+
using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
|
|
702
|
+
|
|
687
703
|
HandleImpl* h;
|
|
688
704
|
DeleteCounter val;
|
|
689
|
-
UniqueId64x2 hkey = TestHashedKey('x');
|
|
690
|
-
ASSERT_OK(
|
|
691
|
-
|
|
705
|
+
UniqueId64x2 hkey = this->TestHashedKey('x');
|
|
706
|
+
ASSERT_OK(shard.Insert(this->TestKey(hkey), hkey, &val, &kDeleteCounterHelper,
|
|
707
|
+
1, &h, Cache::Priority::HIGH));
|
|
692
708
|
|
|
693
709
|
// Some large number outstanding
|
|
694
|
-
|
|
710
|
+
shard.TEST_RefN(h, 123456789);
|
|
695
711
|
// Simulate many lookup/ref + release, plenty to overflow counters
|
|
696
712
|
for (int i = 0; i < 10000; ++i) {
|
|
697
|
-
|
|
698
|
-
|
|
713
|
+
shard.TEST_RefN(h, 1234567);
|
|
714
|
+
shard.TEST_ReleaseN(h, 1234567);
|
|
699
715
|
}
|
|
700
716
|
// Mark it invisible (to reach a different CorrectNearOverflow() in Release)
|
|
701
|
-
|
|
717
|
+
shard.Erase(this->TestKey(hkey), hkey);
|
|
702
718
|
// Simulate many more lookup/ref + release (one-by-one would be too
|
|
703
719
|
// expensive for unit test)
|
|
704
720
|
for (int i = 0; i < 10000; ++i) {
|
|
705
|
-
|
|
706
|
-
|
|
721
|
+
shard.TEST_RefN(h, 1234567);
|
|
722
|
+
shard.TEST_ReleaseN(h, 1234567);
|
|
707
723
|
}
|
|
708
724
|
// Free all but last 1
|
|
709
|
-
|
|
725
|
+
shard.TEST_ReleaseN(h, 123456789);
|
|
710
726
|
// Still alive
|
|
711
727
|
ASSERT_EQ(val.deleted, 0);
|
|
712
728
|
// Free last ref, which will finalize erasure
|
|
713
|
-
|
|
729
|
+
shard.Release(h);
|
|
714
730
|
// Deleted
|
|
715
731
|
ASSERT_EQ(val.deleted, 1);
|
|
716
732
|
}
|
|
717
733
|
|
|
734
|
+
TYPED_TEST(ClockCacheTest, ClockTableFull) {
|
|
735
|
+
// Force clock cache table to fill up (not usually allowed) in order
|
|
736
|
+
// to test full probe sequence that is theoretically possible due to
|
|
737
|
+
// parallel operations
|
|
738
|
+
this->NewShard(6, /*strict_capacity_limit*/ false);
|
|
739
|
+
auto& shard = *this->shard_;
|
|
740
|
+
using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
|
|
741
|
+
|
|
742
|
+
size_t size = shard.GetTableAddressCount();
|
|
743
|
+
ASSERT_LE(size + 3, 256); // for using char keys
|
|
744
|
+
// Modify occupancy and capacity limits to attempt insert on full
|
|
745
|
+
shard.TEST_MutableOccupancyLimit() = size + 100;
|
|
746
|
+
shard.SetCapacity(size + 100);
|
|
747
|
+
|
|
748
|
+
DeleteCounter val;
|
|
749
|
+
std::vector<HandleImpl*> handles;
|
|
750
|
+
// NOTE: the three extra insertions should create standalone entries
|
|
751
|
+
for (size_t i = 0; i < size + 3; ++i) {
|
|
752
|
+
UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i));
|
|
753
|
+
ASSERT_OK(shard.Insert(this->TestKey(hkey), hkey, &val,
|
|
754
|
+
&kDeleteCounterHelper, 1, &handles.emplace_back(),
|
|
755
|
+
Cache::Priority::HIGH));
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
for (size_t i = 0; i < size + 3; ++i) {
|
|
759
|
+
UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i));
|
|
760
|
+
HandleImpl* h = shard.Lookup(this->TestKey(hkey), hkey);
|
|
761
|
+
if (i < size) {
|
|
762
|
+
ASSERT_NE(h, nullptr);
|
|
763
|
+
shard.Release(h);
|
|
764
|
+
} else {
|
|
765
|
+
// Standalone entries not visible by lookup
|
|
766
|
+
ASSERT_EQ(h, nullptr);
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
for (size_t i = 0; i < size + 3; ++i) {
|
|
771
|
+
ASSERT_NE(handles[i], nullptr);
|
|
772
|
+
shard.Release(handles[i]);
|
|
773
|
+
if (i < size) {
|
|
774
|
+
// Everything still in cache
|
|
775
|
+
ASSERT_EQ(val.deleted, 0);
|
|
776
|
+
} else {
|
|
777
|
+
// Standalone entries freed on release
|
|
778
|
+
ASSERT_EQ(val.deleted, i + 1 - size);
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
for (size_t i = size + 3; i > 0; --i) {
|
|
783
|
+
UniqueId64x2 hkey = this->TestHashedKey(static_cast<char>(i - 1));
|
|
784
|
+
shard.Erase(this->TestKey(hkey), hkey);
|
|
785
|
+
if (i - 1 > size) {
|
|
786
|
+
ASSERT_EQ(val.deleted, 3);
|
|
787
|
+
} else {
|
|
788
|
+
ASSERT_EQ(val.deleted, 3 + size - (i - 1));
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
718
793
|
// This test is mostly to exercise some corner case logic, by forcing two
|
|
719
794
|
// keys to have the same hash, and more
|
|
720
|
-
|
|
721
|
-
NewShard(6, /*strict_capacity_limit*/ false);
|
|
795
|
+
TYPED_TEST(ClockCacheTest, CollidingInsertEraseTest) {
|
|
796
|
+
this->NewShard(6, /*strict_capacity_limit*/ false);
|
|
797
|
+
auto& shard = *this->shard_;
|
|
798
|
+
using HandleImpl = typename ClockCacheTest<TypeParam>::Shard::HandleImpl;
|
|
799
|
+
|
|
722
800
|
DeleteCounter val;
|
|
723
|
-
UniqueId64x2 hkey1 = TestHashedKey('x');
|
|
724
|
-
Slice key1 = TestKey(hkey1);
|
|
725
|
-
UniqueId64x2 hkey2 = TestHashedKey('y');
|
|
726
|
-
Slice key2 = TestKey(hkey2);
|
|
727
|
-
UniqueId64x2 hkey3 = TestHashedKey('z');
|
|
728
|
-
Slice key3 = TestKey(hkey3);
|
|
801
|
+
UniqueId64x2 hkey1 = this->TestHashedKey('x');
|
|
802
|
+
Slice key1 = this->TestKey(hkey1);
|
|
803
|
+
UniqueId64x2 hkey2 = this->TestHashedKey('y');
|
|
804
|
+
Slice key2 = this->TestKey(hkey2);
|
|
805
|
+
UniqueId64x2 hkey3 = this->TestHashedKey('z');
|
|
806
|
+
Slice key3 = this->TestKey(hkey3);
|
|
729
807
|
HandleImpl* h1;
|
|
730
|
-
ASSERT_OK(
|
|
731
|
-
|
|
808
|
+
ASSERT_OK(shard.Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, &h1,
|
|
809
|
+
Cache::Priority::HIGH));
|
|
732
810
|
HandleImpl* h2;
|
|
733
|
-
ASSERT_OK(
|
|
734
|
-
|
|
811
|
+
ASSERT_OK(shard.Insert(key2, hkey2, &val, &kDeleteCounterHelper, 1, &h2,
|
|
812
|
+
Cache::Priority::HIGH));
|
|
735
813
|
HandleImpl* h3;
|
|
736
|
-
ASSERT_OK(
|
|
737
|
-
|
|
814
|
+
ASSERT_OK(shard.Insert(key3, hkey3, &val, &kDeleteCounterHelper, 1, &h3,
|
|
815
|
+
Cache::Priority::HIGH));
|
|
738
816
|
|
|
739
817
|
// Can repeatedly lookup+release despite the hash collision
|
|
740
818
|
HandleImpl* tmp_h;
|
|
741
819
|
for (bool erase_if_last_ref : {true, false}) { // but not last ref
|
|
742
|
-
tmp_h =
|
|
820
|
+
tmp_h = shard.Lookup(key1, hkey1);
|
|
743
821
|
ASSERT_EQ(h1, tmp_h);
|
|
744
|
-
ASSERT_FALSE(
|
|
822
|
+
ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
|
|
745
823
|
|
|
746
|
-
tmp_h =
|
|
824
|
+
tmp_h = shard.Lookup(key2, hkey2);
|
|
747
825
|
ASSERT_EQ(h2, tmp_h);
|
|
748
|
-
ASSERT_FALSE(
|
|
826
|
+
ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
|
|
749
827
|
|
|
750
|
-
tmp_h =
|
|
828
|
+
tmp_h = shard.Lookup(key3, hkey3);
|
|
751
829
|
ASSERT_EQ(h3, tmp_h);
|
|
752
|
-
ASSERT_FALSE(
|
|
830
|
+
ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
|
|
753
831
|
}
|
|
754
832
|
|
|
755
833
|
// Make h1 invisible
|
|
756
|
-
|
|
834
|
+
shard.Erase(key1, hkey1);
|
|
757
835
|
// Redundant erase
|
|
758
|
-
|
|
836
|
+
shard.Erase(key1, hkey1);
|
|
759
837
|
|
|
760
838
|
// All still alive
|
|
761
839
|
ASSERT_EQ(val.deleted, 0);
|
|
762
840
|
|
|
763
841
|
// Invisible to Lookup
|
|
764
|
-
tmp_h =
|
|
842
|
+
tmp_h = shard.Lookup(key1, hkey1);
|
|
765
843
|
ASSERT_EQ(nullptr, tmp_h);
|
|
766
844
|
|
|
767
845
|
// Can still find h2, h3
|
|
768
846
|
for (bool erase_if_last_ref : {true, false}) { // but not last ref
|
|
769
|
-
tmp_h =
|
|
847
|
+
tmp_h = shard.Lookup(key2, hkey2);
|
|
770
848
|
ASSERT_EQ(h2, tmp_h);
|
|
771
|
-
ASSERT_FALSE(
|
|
849
|
+
ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
|
|
772
850
|
|
|
773
|
-
tmp_h =
|
|
851
|
+
tmp_h = shard.Lookup(key3, hkey3);
|
|
774
852
|
ASSERT_EQ(h3, tmp_h);
|
|
775
|
-
ASSERT_FALSE(
|
|
853
|
+
ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
|
|
776
854
|
}
|
|
777
855
|
|
|
778
856
|
// Also Insert with invisible entry there
|
|
779
|
-
ASSERT_OK(
|
|
780
|
-
|
|
781
|
-
tmp_h =
|
|
857
|
+
ASSERT_OK(shard.Insert(key1, hkey1, &val, &kDeleteCounterHelper, 1, nullptr,
|
|
858
|
+
Cache::Priority::HIGH));
|
|
859
|
+
tmp_h = shard.Lookup(key1, hkey1);
|
|
782
860
|
// Found but distinct handle
|
|
783
861
|
ASSERT_NE(nullptr, tmp_h);
|
|
784
862
|
ASSERT_NE(h1, tmp_h);
|
|
785
|
-
ASSERT_TRUE(
|
|
863
|
+
ASSERT_TRUE(shard.Release(tmp_h, /*erase_if_last_ref*/ true));
|
|
786
864
|
|
|
787
865
|
// tmp_h deleted
|
|
788
866
|
ASSERT_EQ(val.deleted--, 1);
|
|
789
867
|
|
|
790
868
|
// Release last ref on h1 (already invisible)
|
|
791
|
-
ASSERT_TRUE(
|
|
869
|
+
ASSERT_TRUE(shard.Release(h1, /*erase_if_last_ref*/ false));
|
|
792
870
|
|
|
793
871
|
// h1 deleted
|
|
794
872
|
ASSERT_EQ(val.deleted--, 1);
|
|
@@ -796,57 +874,57 @@ TEST_F(ClockCacheTest, CollidingInsertEraseTest) {
|
|
|
796
874
|
|
|
797
875
|
// Can still find h2, h3
|
|
798
876
|
for (bool erase_if_last_ref : {true, false}) { // but not last ref
|
|
799
|
-
tmp_h =
|
|
877
|
+
tmp_h = shard.Lookup(key2, hkey2);
|
|
800
878
|
ASSERT_EQ(h2, tmp_h);
|
|
801
|
-
ASSERT_FALSE(
|
|
879
|
+
ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
|
|
802
880
|
|
|
803
|
-
tmp_h =
|
|
881
|
+
tmp_h = shard.Lookup(key3, hkey3);
|
|
804
882
|
ASSERT_EQ(h3, tmp_h);
|
|
805
|
-
ASSERT_FALSE(
|
|
883
|
+
ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
|
|
806
884
|
}
|
|
807
885
|
|
|
808
886
|
// Release last ref on h2
|
|
809
|
-
ASSERT_FALSE(
|
|
887
|
+
ASSERT_FALSE(shard.Release(h2, /*erase_if_last_ref*/ false));
|
|
810
888
|
|
|
811
889
|
// h2 still not deleted (unreferenced in cache)
|
|
812
890
|
ASSERT_EQ(val.deleted, 0);
|
|
813
891
|
|
|
814
892
|
// Can still find it
|
|
815
|
-
tmp_h =
|
|
893
|
+
tmp_h = shard.Lookup(key2, hkey2);
|
|
816
894
|
ASSERT_EQ(h2, tmp_h);
|
|
817
895
|
|
|
818
896
|
// Release last ref on h2, with erase
|
|
819
|
-
ASSERT_TRUE(
|
|
897
|
+
ASSERT_TRUE(shard.Release(h2, /*erase_if_last_ref*/ true));
|
|
820
898
|
|
|
821
899
|
// h2 deleted
|
|
822
900
|
ASSERT_EQ(val.deleted--, 1);
|
|
823
|
-
tmp_h =
|
|
901
|
+
tmp_h = shard.Lookup(key2, hkey2);
|
|
824
902
|
ASSERT_EQ(nullptr, tmp_h);
|
|
825
903
|
|
|
826
904
|
// Can still find h3
|
|
827
905
|
for (bool erase_if_last_ref : {true, false}) { // but not last ref
|
|
828
|
-
tmp_h =
|
|
906
|
+
tmp_h = shard.Lookup(key3, hkey3);
|
|
829
907
|
ASSERT_EQ(h3, tmp_h);
|
|
830
|
-
ASSERT_FALSE(
|
|
908
|
+
ASSERT_FALSE(shard.Release(tmp_h, erase_if_last_ref));
|
|
831
909
|
}
|
|
832
910
|
|
|
833
911
|
// Release last ref on h3, without erase
|
|
834
|
-
ASSERT_FALSE(
|
|
912
|
+
ASSERT_FALSE(shard.Release(h3, /*erase_if_last_ref*/ false));
|
|
835
913
|
|
|
836
914
|
// h3 still not deleted (unreferenced in cache)
|
|
837
915
|
ASSERT_EQ(val.deleted, 0);
|
|
838
916
|
|
|
839
917
|
// Explicit erase
|
|
840
|
-
|
|
918
|
+
shard.Erase(key3, hkey3);
|
|
841
919
|
|
|
842
920
|
// h3 deleted
|
|
843
921
|
ASSERT_EQ(val.deleted--, 1);
|
|
844
|
-
tmp_h =
|
|
922
|
+
tmp_h = shard.Lookup(key3, hkey3);
|
|
845
923
|
ASSERT_EQ(nullptr, tmp_h);
|
|
846
924
|
}
|
|
847
925
|
|
|
848
926
|
// This uses the public API to effectively test CalcHashBits etc.
|
|
849
|
-
|
|
927
|
+
TYPED_TEST(ClockCacheTest, TableSizesTest) {
|
|
850
928
|
for (size_t est_val_size : {1U, 5U, 123U, 2345U, 345678U}) {
|
|
851
929
|
SCOPED_TRACE("est_val_size = " + std::to_string(est_val_size));
|
|
852
930
|
for (double est_count : {1.1, 2.2, 511.9, 512.1, 2345.0}) {
|
|
@@ -859,8 +937,10 @@ TEST_F(ClockCacheTest, TableSizesTest) {
|
|
|
859
937
|
/*memory_allocator*/ nullptr, kDontChargeCacheMetadata)
|
|
860
938
|
.MakeSharedCache();
|
|
861
939
|
// Table sizes are currently only powers of two
|
|
862
|
-
EXPECT_GE(cache->GetTableAddressCount(),
|
|
863
|
-
|
|
940
|
+
EXPECT_GE(cache->GetTableAddressCount(),
|
|
941
|
+
est_count / FixedHyperClockTable::kLoadFactor);
|
|
942
|
+
EXPECT_LE(cache->GetTableAddressCount(),
|
|
943
|
+
est_count / FixedHyperClockTable::kLoadFactor * 2.0);
|
|
864
944
|
EXPECT_EQ(cache->GetUsage(), 0);
|
|
865
945
|
|
|
866
946
|
// kFullChargeMetaData
|
|
@@ -877,9 +957,10 @@ TEST_F(ClockCacheTest, TableSizesTest) {
|
|
|
877
957
|
double est_count_after_meta =
|
|
878
958
|
(capacity - cache->GetUsage()) * 1.0 / est_val_size;
|
|
879
959
|
EXPECT_GE(cache->GetTableAddressCount(),
|
|
880
|
-
est_count_after_meta / kLoadFactor);
|
|
881
|
-
EXPECT_LE(
|
|
882
|
-
|
|
960
|
+
est_count_after_meta / FixedHyperClockTable::kLoadFactor);
|
|
961
|
+
EXPECT_LE(
|
|
962
|
+
cache->GetTableAddressCount(),
|
|
963
|
+
est_count_after_meta / FixedHyperClockTable::kLoadFactor * 2.0);
|
|
883
964
|
}
|
|
884
965
|
}
|
|
885
966
|
}
|
|
@@ -902,13 +983,14 @@ class TestSecondaryCache : public SecondaryCache {
|
|
|
902
983
|
|
|
903
984
|
using ResultMap = std::unordered_map<std::string, ResultType>;
|
|
904
985
|
|
|
905
|
-
explicit TestSecondaryCache(size_t capacity)
|
|
986
|
+
explicit TestSecondaryCache(size_t capacity, bool insert_saved = false)
|
|
906
987
|
: cache_(NewLRUCache(capacity, 0, false, 0.5 /* high_pri_pool_ratio */,
|
|
907
988
|
nullptr, kDefaultToAdaptiveMutex,
|
|
908
989
|
kDontChargeCacheMetadata)),
|
|
909
990
|
num_inserts_(0),
|
|
910
991
|
num_lookups_(0),
|
|
911
|
-
inject_failure_(false)
|
|
992
|
+
inject_failure_(false),
|
|
993
|
+
insert_saved_(insert_saved) {}
|
|
912
994
|
|
|
913
995
|
const char* Name() const override { return "TestSecondaryCache"; }
|
|
914
996
|
|
|
@@ -917,7 +999,8 @@ class TestSecondaryCache : public SecondaryCache {
|
|
|
917
999
|
void ResetInjectFailure() { inject_failure_ = false; }
|
|
918
1000
|
|
|
919
1001
|
Status Insert(const Slice& key, Cache::ObjectPtr value,
|
|
920
|
-
const Cache::CacheItemHelper* helper
|
|
1002
|
+
const Cache::CacheItemHelper* helper,
|
|
1003
|
+
bool /*force_insert*/) override {
|
|
921
1004
|
if (inject_failure_) {
|
|
922
1005
|
return Status::Corruption("Insertion Data Corrupted");
|
|
923
1006
|
}
|
|
@@ -938,6 +1021,17 @@ class TestSecondaryCache : public SecondaryCache {
|
|
|
938
1021
|
return cache_.Insert(key, buf, size);
|
|
939
1022
|
}
|
|
940
1023
|
|
|
1024
|
+
Status InsertSaved(const Slice& key, const Slice& saved,
|
|
1025
|
+
CompressionType /*type*/ = kNoCompression,
|
|
1026
|
+
CacheTier /*source*/ = CacheTier::kVolatileTier) override {
|
|
1027
|
+
if (insert_saved_) {
|
|
1028
|
+
return Insert(key, const_cast<Slice*>(&saved), &kSliceCacheItemHelper,
|
|
1029
|
+
/*force_insert=*/true);
|
|
1030
|
+
} else {
|
|
1031
|
+
return Status::OK();
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
|
|
941
1035
|
std::unique_ptr<SecondaryCacheResultHandle> Lookup(
|
|
942
1036
|
const Slice& key, const Cache::CacheItemHelper* helper,
|
|
943
1037
|
Cache::CreateContext* create_context, bool /*wait*/,
|
|
@@ -966,7 +1060,8 @@ class TestSecondaryCache : public SecondaryCache {
|
|
|
966
1060
|
char* ptr = cache_.Value(handle);
|
|
967
1061
|
size_t size = DecodeFixed64(ptr);
|
|
968
1062
|
ptr += sizeof(uint64_t);
|
|
969
|
-
s = helper->create_cb(Slice(ptr, size),
|
|
1063
|
+
s = helper->create_cb(Slice(ptr, size), kNoCompression,
|
|
1064
|
+
CacheTier::kVolatileTier, create_context,
|
|
970
1065
|
/*alloc*/ nullptr, &value, &charge);
|
|
971
1066
|
}
|
|
972
1067
|
if (s.ok()) {
|
|
@@ -1055,6 +1150,7 @@ class TestSecondaryCache : public SecondaryCache {
|
|
|
1055
1150
|
uint32_t num_inserts_;
|
|
1056
1151
|
uint32_t num_lookups_;
|
|
1057
1152
|
bool inject_failure_;
|
|
1153
|
+
bool insert_saved_;
|
|
1058
1154
|
std::string ckey_prefix_;
|
|
1059
1155
|
ResultMap result_map_;
|
|
1060
1156
|
};
|
|
@@ -1085,7 +1181,7 @@ INSTANTIATE_TEST_CASE_P(DBSecondaryCacheTest, DBSecondaryCacheTest,
|
|
|
1085
1181
|
|
|
1086
1182
|
TEST_P(BasicSecondaryCacheTest, BasicTest) {
|
|
1087
1183
|
std::shared_ptr<TestSecondaryCache> secondary_cache =
|
|
1088
|
-
std::make_shared<TestSecondaryCache>(4096);
|
|
1184
|
+
std::make_shared<TestSecondaryCache>(4096, true);
|
|
1089
1185
|
std::shared_ptr<Cache> cache =
|
|
1090
1186
|
NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
|
|
1091
1187
|
false /* strict_capacity_limit */, secondary_cache);
|
|
@@ -1142,7 +1238,7 @@ TEST_P(BasicSecondaryCacheTest, BasicTest) {
|
|
|
1142
1238
|
|
|
1143
1239
|
TEST_P(BasicSecondaryCacheTest, StatsTest) {
|
|
1144
1240
|
std::shared_ptr<TestSecondaryCache> secondary_cache =
|
|
1145
|
-
std::make_shared<TestSecondaryCache>(4096);
|
|
1241
|
+
std::make_shared<TestSecondaryCache>(4096, true);
|
|
1146
1242
|
std::shared_ptr<Cache> cache =
|
|
1147
1243
|
NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
|
|
1148
1244
|
false /* strict_capacity_limit */, secondary_cache);
|
|
@@ -1196,7 +1292,7 @@ TEST_P(BasicSecondaryCacheTest, StatsTest) {
|
|
|
1196
1292
|
|
|
1197
1293
|
TEST_P(BasicSecondaryCacheTest, BasicFailTest) {
|
|
1198
1294
|
std::shared_ptr<TestSecondaryCache> secondary_cache =
|
|
1199
|
-
std::make_shared<TestSecondaryCache>(2048);
|
|
1295
|
+
std::make_shared<TestSecondaryCache>(2048, true);
|
|
1200
1296
|
std::shared_ptr<Cache> cache =
|
|
1201
1297
|
NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
|
|
1202
1298
|
false /* strict_capacity_limit */, secondary_cache);
|
|
@@ -1238,7 +1334,7 @@ TEST_P(BasicSecondaryCacheTest, BasicFailTest) {
|
|
|
1238
1334
|
|
|
1239
1335
|
TEST_P(BasicSecondaryCacheTest, SaveFailTest) {
|
|
1240
1336
|
std::shared_ptr<TestSecondaryCache> secondary_cache =
|
|
1241
|
-
std::make_shared<TestSecondaryCache>(2048);
|
|
1337
|
+
std::make_shared<TestSecondaryCache>(2048, true);
|
|
1242
1338
|
std::shared_ptr<Cache> cache =
|
|
1243
1339
|
NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
|
|
1244
1340
|
false /* strict_capacity_limit */, secondary_cache);
|
|
@@ -1279,7 +1375,7 @@ TEST_P(BasicSecondaryCacheTest, SaveFailTest) {
|
|
|
1279
1375
|
|
|
1280
1376
|
TEST_P(BasicSecondaryCacheTest, CreateFailTest) {
|
|
1281
1377
|
std::shared_ptr<TestSecondaryCache> secondary_cache =
|
|
1282
|
-
std::make_shared<TestSecondaryCache>(2048);
|
|
1378
|
+
std::make_shared<TestSecondaryCache>(2048, true);
|
|
1283
1379
|
std::shared_ptr<Cache> cache =
|
|
1284
1380
|
NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
|
|
1285
1381
|
false /* strict_capacity_limit */, secondary_cache);
|
|
@@ -1320,7 +1416,7 @@ TEST_P(BasicSecondaryCacheTest, CreateFailTest) {
|
|
|
1320
1416
|
TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
|
|
1321
1417
|
for (bool strict_capacity_limit : {false, true}) {
|
|
1322
1418
|
std::shared_ptr<TestSecondaryCache> secondary_cache =
|
|
1323
|
-
std::make_shared<TestSecondaryCache>(2048);
|
|
1419
|
+
std::make_shared<TestSecondaryCache>(2048, true);
|
|
1324
1420
|
std::shared_ptr<Cache> cache =
|
|
1325
1421
|
NewCache(1024 /* capacity */, 0 /* num_shard_bits */,
|
|
1326
1422
|
strict_capacity_limit, secondary_cache);
|
|
@@ -1367,7 +1463,7 @@ TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
|
|
|
1367
1463
|
k2.AsSlice(),
|
|
1368
1464
|
GetHelper(CacheEntryRole::kDataBlock, /*secondary_compatible=*/false),
|
|
1369
1465
|
/*context*/ this, Cache::Priority::LOW);
|
|
1370
|
-
if (strict_capacity_limit ||
|
|
1466
|
+
if (strict_capacity_limit || IsHyperClock()) {
|
|
1371
1467
|
ASSERT_NE(handle2, nullptr);
|
|
1372
1468
|
cache->Release(handle2);
|
|
1373
1469
|
ASSERT_EQ(secondary_cache->num_inserts(), 1u);
|
|
@@ -1392,12 +1488,12 @@ TEST_P(BasicSecondaryCacheTest, FullCapacityTest) {
|
|
|
1392
1488
|
// CORRECTION: this is not quite right. block_1 can be inserted into the block
|
|
1393
1489
|
// cache because strict_capacity_limit=false, but it is removed from the cache
|
|
1394
1490
|
// in Release() because of being over-capacity, without demoting to secondary
|
|
1395
|
-
// cache.
|
|
1396
|
-
// so can demote the over-capacity item to secondary cache. Also, we
|
|
1397
|
-
// add support for demotion in Release, but that currently causes too
|
|
1398
|
-
// unit test churn.
|
|
1491
|
+
// cache. FixedHyperClockCache doesn't check capacity on release (for
|
|
1492
|
+
// efficiency) so can demote the over-capacity item to secondary cache. Also, we
|
|
1493
|
+
// intend to add support for demotion in Release, but that currently causes too
|
|
1494
|
+
// much unit test churn.
|
|
1399
1495
|
TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness1) {
|
|
1400
|
-
if (
|
|
1496
|
+
if (IsHyperClock()) {
|
|
1401
1497
|
// See CORRECTION above
|
|
1402
1498
|
ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
|
|
1403
1499
|
return;
|
|
@@ -1495,7 +1591,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness1) {
|
|
|
1495
1591
|
// insert and cache block_1 in the block cache (this is the different place
|
|
1496
1592
|
// from TestSecondaryCacheCorrectness1)
|
|
1497
1593
|
TEST_P(DBSecondaryCacheTest, TestSecondaryCacheCorrectness2) {
|
|
1498
|
-
if (
|
|
1594
|
+
if (IsHyperClock()) {
|
|
1499
1595
|
ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
|
|
1500
1596
|
return;
|
|
1501
1597
|
}
|
|
@@ -1683,7 +1779,7 @@ TEST_P(DBSecondaryCacheTest, SecondaryCacheIntensiveTesting) {
|
|
|
1683
1779
|
// if we try to insert block_1 to the block cache, it will always fails. Only
|
|
1684
1780
|
// block_2 will be successfully inserted into the block cache.
|
|
1685
1781
|
TEST_P(DBSecondaryCacheTest, SecondaryCacheFailureTest) {
|
|
1686
|
-
if (
|
|
1782
|
+
if (IsHyperClock()) {
|
|
1687
1783
|
ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
|
|
1688
1784
|
return;
|
|
1689
1785
|
}
|
|
@@ -1793,7 +1889,7 @@ TEST_P(BasicSecondaryCacheTest, BasicWaitAllTest) {
|
|
|
1793
1889
|
str.length()));
|
|
1794
1890
|
}
|
|
1795
1891
|
// Force all entries to be evicted to the secondary cache
|
|
1796
|
-
if (
|
|
1892
|
+
if (IsHyperClock()) {
|
|
1797
1893
|
// HCC doesn't respond immediately to SetCapacity
|
|
1798
1894
|
for (int i = 9000; i < 9030; ++i) {
|
|
1799
1895
|
ASSERT_OK(cache->Insert(ock.WithOffset(i).AsSlice(), nullptr,
|
|
@@ -1848,7 +1944,7 @@ TEST_P(BasicSecondaryCacheTest, BasicWaitAllTest) {
|
|
|
1848
1944
|
// a sync point callback in TestSecondaryCache::Lookup. We then control the
|
|
1849
1945
|
// lookup result by setting the ResultMap.
|
|
1850
1946
|
TEST_P(DBSecondaryCacheTest, TestSecondaryCacheMultiGet) {
|
|
1851
|
-
if (
|
|
1947
|
+
if (IsHyperClock()) {
|
|
1852
1948
|
ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
|
|
1853
1949
|
return;
|
|
1854
1950
|
}
|
|
@@ -1939,8 +2035,9 @@ class CacheWithStats : public CacheWrapper {
|
|
|
1939
2035
|
|
|
1940
2036
|
Status Insert(const Slice& key, Cache::ObjectPtr value,
|
|
1941
2037
|
const CacheItemHelper* helper, size_t charge,
|
|
1942
|
-
Handle** handle = nullptr,
|
|
1943
|
-
|
|
2038
|
+
Handle** handle = nullptr, Priority priority = Priority::LOW,
|
|
2039
|
+
const Slice& /*compressed*/ = Slice(),
|
|
2040
|
+
CompressionType /*type*/ = kNoCompression) override {
|
|
1944
2041
|
insert_count_++;
|
|
1945
2042
|
return target_->Insert(key, value, helper, charge, handle, priority);
|
|
1946
2043
|
}
|
|
@@ -2033,7 +2130,7 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadBasic) {
|
|
|
2033
2130
|
// we have a new cache it is empty, then, before we do the Get, we do the
|
|
2034
2131
|
// dumpload
|
|
2035
2132
|
std::shared_ptr<TestSecondaryCache> secondary_cache =
|
|
2036
|
-
std::make_shared<TestSecondaryCache>(2048 * 1024);
|
|
2133
|
+
std::make_shared<TestSecondaryCache>(2048 * 1024, true);
|
|
2037
2134
|
// This time with secondary cache
|
|
2038
2135
|
base_cache = NewCache(1024 * 1024 /* capacity */, 0 /* num_shard_bits */,
|
|
2039
2136
|
false /* strict_capacity_limit */, secondary_cache);
|
|
@@ -2189,7 +2286,7 @@ TEST_P(DBSecondaryCacheTest, LRUCacheDumpLoadWithFilter) {
|
|
|
2189
2286
|
// we have a new cache it is empty, then, before we do the Get, we do the
|
|
2190
2287
|
// dumpload
|
|
2191
2288
|
std::shared_ptr<TestSecondaryCache> secondary_cache =
|
|
2192
|
-
std::make_shared<TestSecondaryCache>(2048 * 1024);
|
|
2289
|
+
std::make_shared<TestSecondaryCache>(2048 * 1024, true);
|
|
2193
2290
|
// This time with secondary_cache
|
|
2194
2291
|
base_cache = NewCache(1024 * 1024 /* capacity */, 0 /* num_shard_bits */,
|
|
2195
2292
|
false /* strict_capacity_limit */, secondary_cache);
|
|
@@ -2349,7 +2446,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionBasic) {
|
|
|
2349
2446
|
// with new options, which set the lowest_used_cache_tier to
|
|
2350
2447
|
// kNonVolatileBlockTier. So secondary cache will be used.
|
|
2351
2448
|
TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionChange) {
|
|
2352
|
-
if (
|
|
2449
|
+
if (IsHyperClock()) {
|
|
2353
2450
|
ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
|
|
2354
2451
|
return;
|
|
2355
2452
|
}
|
|
@@ -2444,7 +2541,7 @@ TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionChange) {
|
|
|
2444
2541
|
// Two DB test. We create 2 DBs sharing the same block cache and secondary
|
|
2445
2542
|
// cache. We diable the secondary cache option for DB2.
|
|
2446
2543
|
TEST_P(DBSecondaryCacheTest, TestSecondaryCacheOptionTwoDB) {
|
|
2447
|
-
if (
|
|
2544
|
+
if (IsHyperClock()) {
|
|
2448
2545
|
ROCKSDB_GTEST_BYPASS("Test depends on LRUCache-specific behaviors");
|
|
2449
2546
|
return;
|
|
2450
2547
|
}
|