@nxtedition/rocksdb 7.1.14 → 7.1.16
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 +1 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +72 -18
- package/deps/rocksdb/rocksdb/Makefile +91 -11
- package/deps/rocksdb/rocksdb/TARGETS +8 -4
- package/deps/rocksdb/rocksdb/cache/cache.cc +5 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +13 -8
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +116 -57
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +958 -459
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +407 -622
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +104 -40
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +23 -8
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +350 -184
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +12 -2
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +130 -43
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +24 -2
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +423 -98
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +19 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +10 -7
- package/deps/rocksdb/rocksdb/crash_test.mk +2 -2
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +46 -26
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +9 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +90 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +56 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +64 -59
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +11 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +92 -62
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +159 -136
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -13
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +129 -57
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +81 -3
- package/deps/rocksdb/rocksdb/db/c.cc +29 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +10 -1
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +21 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -36
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +344 -102
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +163 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +52 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +35 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +8 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +167 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +8 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +0 -117
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +6 -49
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +18 -11
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +4 -10
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +12 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +144 -93
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +28 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +2 -33
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +11 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +76 -138
- package/deps/rocksdb/rocksdb/db/db_iter.h +26 -23
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +931 -0
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +44 -22
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +155 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +45 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +5 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +24 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +7 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +3 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +79 -18
- package/deps/rocksdb/rocksdb/db/memtable.h +5 -0
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +26 -4
- package/deps/rocksdb/rocksdb/db/memtable_list.h +2 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +113 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +110 -0
- package/deps/rocksdb/rocksdb/db/{periodic_work_scheduler_test.cc → periodic_task_scheduler_test.cc} +33 -39
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +12 -20
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +6 -5
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +12 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +20 -5
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +14 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +17 -8
- package/deps/rocksdb/rocksdb/db/repair_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +49 -66
- package/deps/rocksdb/rocksdb/db/table_cache.cc +92 -63
- package/deps/rocksdb/rocksdb/db/table_cache.h +16 -9
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +2 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -3
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_edit.h +1 -2
- package/deps/rocksdb/rocksdb/db/version_set.cc +379 -145
- package/deps/rocksdb/rocksdb/db/version_set.h +26 -24
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -2
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +10 -2
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +5 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +71 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +14 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +23 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +26 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +105 -34
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +16 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +4 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +282 -25
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +367 -177
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +144 -56
- package/deps/rocksdb/rocksdb/file/filename.cc +3 -3
- package/deps/rocksdb/rocksdb/file/filename.h +4 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +415 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +2 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +36 -45
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +21 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +15 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +163 -68
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +26 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +23 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +21 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +17 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +2 -1
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +4 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +2 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +15 -1
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +17 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +14 -3
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +3 -0
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +50 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +31 -32
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -1
- package/deps/rocksdb/rocksdb/options/options.cc +2 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -1
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -0
- package/deps/rocksdb/rocksdb/src.mk +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +9 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +110 -99
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +11 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +138 -83
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +25 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +31 -30
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +16 -13
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +17 -19
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/format.cc +26 -29
- package/deps/rocksdb/rocksdb/table/format.h +44 -26
- package/deps/rocksdb/rocksdb/table/get_context.cc +17 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +7 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +950 -104
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +28 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +3 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +10 -9
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +22 -20
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +9 -21
- package/deps/rocksdb/rocksdb/table/table_test.cc +12 -12
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +4 -4
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +116 -34
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +6 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/util/autovector.h +12 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/util/stderr_logger.cc +30 -0
- package/deps/rocksdb/rocksdb/util/stderr_logger.h +5 -18
- package/deps/rocksdb/rocksdb/util/timer.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -2
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +34 -53
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +9 -14
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +3 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +26 -8
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +114 -16
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +59 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +39 -0
- package/deps/rocksdb/rocksdb.gyp +0 -1
- package/index.js +6 -10
- 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/db/periodic_work_scheduler.cc +0 -168
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +0 -90
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
#include <string>
|
|
16
16
|
#include <vector>
|
|
17
17
|
|
|
18
|
-
#include "cache/clock_cache.h"
|
|
19
18
|
#include "cache/fast_lru_cache.h"
|
|
20
19
|
#include "cache/lru_cache.h"
|
|
21
20
|
#include "port/stack_trace.h"
|
|
@@ -23,7 +22,7 @@
|
|
|
23
22
|
#include "util/coding.h"
|
|
24
23
|
#include "util/string_util.h"
|
|
25
24
|
|
|
26
|
-
// FastLRUCache and
|
|
25
|
+
// FastLRUCache and HyperClockCache only support 16-byte keys, so some of
|
|
27
26
|
// the tests originally wrote for LRUCache do not work on the other caches.
|
|
28
27
|
// Those tests were adapted to use 16-byte keys. We kept the original ones.
|
|
29
28
|
// TODO: Remove the original tests if they ever become unused.
|
|
@@ -76,7 +75,7 @@ void EraseDeleter2(const Slice& /*key*/, void* value) {
|
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
const std::string kLRU = "lru";
|
|
79
|
-
const std::string
|
|
78
|
+
const std::string kHyperClock = "hyper_clock";
|
|
80
79
|
const std::string kFast = "fast";
|
|
81
80
|
|
|
82
81
|
} // anonymous namespace
|
|
@@ -87,7 +86,7 @@ class CacheTest : public testing::TestWithParam<std::string> {
|
|
|
87
86
|
static std::string type_;
|
|
88
87
|
|
|
89
88
|
static void Deleter(const Slice& key, void* v) {
|
|
90
|
-
if (type_ == kFast || type_ ==
|
|
89
|
+
if (type_ == kFast || type_ == kHyperClock) {
|
|
91
90
|
current_->deleted_keys_.push_back(DecodeKey16Bytes(key));
|
|
92
91
|
} else {
|
|
93
92
|
current_->deleted_keys_.push_back(DecodeKey32Bits(key));
|
|
@@ -106,6 +105,8 @@ class CacheTest : public testing::TestWithParam<std::string> {
|
|
|
106
105
|
std::shared_ptr<Cache> cache_;
|
|
107
106
|
std::shared_ptr<Cache> cache2_;
|
|
108
107
|
|
|
108
|
+
size_t estimated_value_size_ = 1;
|
|
109
|
+
|
|
109
110
|
CacheTest()
|
|
110
111
|
: cache_(NewCache(kCacheSize, kNumShardBits, false)),
|
|
111
112
|
cache2_(NewCache(kCacheSize2, kNumShardBits2, false)) {
|
|
@@ -120,14 +121,14 @@ class CacheTest : public testing::TestWithParam<std::string> {
|
|
|
120
121
|
if (type == kLRU) {
|
|
121
122
|
return NewLRUCache(capacity);
|
|
122
123
|
}
|
|
123
|
-
if (type ==
|
|
124
|
-
return
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
if (type == kHyperClock) {
|
|
125
|
+
return HyperClockCacheOptions(
|
|
126
|
+
capacity, estimated_value_size_ /*estimated_value_size*/)
|
|
127
|
+
.MakeSharedCache();
|
|
127
128
|
}
|
|
128
129
|
if (type == kFast) {
|
|
129
130
|
return NewFastLRUCache(
|
|
130
|
-
capacity,
|
|
131
|
+
capacity, estimated_value_size_, -1 /*num_shard_bits*/,
|
|
131
132
|
false /*strict_capacity_limit*/, kDefaultCacheMetadataChargePolicy);
|
|
132
133
|
}
|
|
133
134
|
return nullptr;
|
|
@@ -146,10 +147,11 @@ class CacheTest : public testing::TestWithParam<std::string> {
|
|
|
146
147
|
co.metadata_charge_policy = charge_policy;
|
|
147
148
|
return NewLRUCache(co);
|
|
148
149
|
}
|
|
149
|
-
if (type ==
|
|
150
|
-
return
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
if (type == kHyperClock) {
|
|
151
|
+
return HyperClockCacheOptions(capacity, 1 /*estimated_value_size*/,
|
|
152
|
+
num_shard_bits, strict_capacity_limit,
|
|
153
|
+
nullptr /*allocator*/, charge_policy)
|
|
154
|
+
.MakeSharedCache();
|
|
153
155
|
}
|
|
154
156
|
if (type == kFast) {
|
|
155
157
|
return NewFastLRUCache(capacity, 1 /*estimated_value_size*/,
|
|
@@ -161,12 +163,11 @@ class CacheTest : public testing::TestWithParam<std::string> {
|
|
|
161
163
|
|
|
162
164
|
// These functions encode/decode keys in tests cases that use
|
|
163
165
|
// int keys.
|
|
164
|
-
// Currently,
|
|
165
|
-
// LRUCache
|
|
166
|
-
// the cache type.
|
|
166
|
+
// Currently, HyperClockCache requires keys to be 16B long, whereas
|
|
167
|
+
// LRUCache doesn't, so the encoding depends on the cache type.
|
|
167
168
|
std::string EncodeKey(int k) {
|
|
168
169
|
auto type = GetParam();
|
|
169
|
-
if (type == kFast || type ==
|
|
170
|
+
if (type == kFast || type == kHyperClock) {
|
|
170
171
|
return EncodeKey16Bytes(k);
|
|
171
172
|
} else {
|
|
172
173
|
return EncodeKey32Bits(k);
|
|
@@ -175,7 +176,7 @@ class CacheTest : public testing::TestWithParam<std::string> {
|
|
|
175
176
|
|
|
176
177
|
int DecodeKey(const Slice& k) {
|
|
177
178
|
auto type = GetParam();
|
|
178
|
-
if (type == kFast || type ==
|
|
179
|
+
if (type == kFast || type == kHyperClock) {
|
|
179
180
|
return DecodeKey16Bytes(k);
|
|
180
181
|
} else {
|
|
181
182
|
return DecodeKey32Bits(k);
|
|
@@ -239,7 +240,10 @@ TEST_P(CacheTest, UsageTest) {
|
|
|
239
240
|
auto cache = NewCache(kCapacity, 8, false, kDontChargeCacheMetadata);
|
|
240
241
|
auto precise_cache = NewCache(kCapacity, 0, false, kFullChargeCacheMetadata);
|
|
241
242
|
ASSERT_EQ(0, cache->GetUsage());
|
|
242
|
-
|
|
243
|
+
size_t baseline_meta_usage = precise_cache->GetUsage();
|
|
244
|
+
if (type != kHyperClock) {
|
|
245
|
+
ASSERT_EQ(0, baseline_meta_usage);
|
|
246
|
+
}
|
|
243
247
|
|
|
244
248
|
size_t usage = 0;
|
|
245
249
|
char value[10] = "abcdef";
|
|
@@ -258,13 +262,17 @@ TEST_P(CacheTest, UsageTest) {
|
|
|
258
262
|
kv_size, DumbDeleter));
|
|
259
263
|
usage += kv_size;
|
|
260
264
|
ASSERT_EQ(usage, cache->GetUsage());
|
|
261
|
-
|
|
265
|
+
if (type == kHyperClock) {
|
|
266
|
+
ASSERT_EQ(baseline_meta_usage + usage, precise_cache->GetUsage());
|
|
267
|
+
} else {
|
|
268
|
+
ASSERT_LT(usage, precise_cache->GetUsage());
|
|
269
|
+
}
|
|
262
270
|
}
|
|
263
271
|
|
|
264
272
|
cache->EraseUnRefEntries();
|
|
265
273
|
precise_cache->EraseUnRefEntries();
|
|
266
274
|
ASSERT_EQ(0, cache->GetUsage());
|
|
267
|
-
ASSERT_EQ(
|
|
275
|
+
ASSERT_EQ(baseline_meta_usage, precise_cache->GetUsage());
|
|
268
276
|
|
|
269
277
|
// make sure the cache will be overloaded
|
|
270
278
|
for (size_t i = 1; i < kCapacity; ++i) {
|
|
@@ -284,7 +292,15 @@ TEST_P(CacheTest, UsageTest) {
|
|
|
284
292
|
ASSERT_GT(kCapacity, cache->GetUsage());
|
|
285
293
|
ASSERT_GT(kCapacity, precise_cache->GetUsage());
|
|
286
294
|
ASSERT_LT(kCapacity * 0.95, cache->GetUsage());
|
|
287
|
-
|
|
295
|
+
if (type != kHyperClock) {
|
|
296
|
+
ASSERT_LT(kCapacity * 0.95, precise_cache->GetUsage());
|
|
297
|
+
} else {
|
|
298
|
+
// estimated value size of 1 is weird for clock cache, because
|
|
299
|
+
// almost all of the capacity will be used for metadata, and due to only
|
|
300
|
+
// using power of 2 table sizes, we might hit strict occupancy limit
|
|
301
|
+
// before hitting capacity limit.
|
|
302
|
+
ASSERT_LT(kCapacity * 0.80, precise_cache->GetUsage());
|
|
303
|
+
}
|
|
288
304
|
}
|
|
289
305
|
|
|
290
306
|
// TODO: This test takes longer than expected on ClockCache. This is
|
|
@@ -301,6 +317,10 @@ TEST_P(CacheTest, PinnedUsageTest) {
|
|
|
301
317
|
const size_t kCapacity = 200000;
|
|
302
318
|
auto cache = NewCache(kCapacity, 8, false, kDontChargeCacheMetadata);
|
|
303
319
|
auto precise_cache = NewCache(kCapacity, 8, false, kFullChargeCacheMetadata);
|
|
320
|
+
size_t baseline_meta_usage = precise_cache->GetUsage();
|
|
321
|
+
if (type != kHyperClock) {
|
|
322
|
+
ASSERT_EQ(0, baseline_meta_usage);
|
|
323
|
+
}
|
|
304
324
|
|
|
305
325
|
size_t pinned_usage = 0;
|
|
306
326
|
char value[10] = "abcdef";
|
|
@@ -390,7 +410,7 @@ TEST_P(CacheTest, PinnedUsageTest) {
|
|
|
390
410
|
cache->EraseUnRefEntries();
|
|
391
411
|
precise_cache->EraseUnRefEntries();
|
|
392
412
|
ASSERT_EQ(0, cache->GetUsage());
|
|
393
|
-
ASSERT_EQ(
|
|
413
|
+
ASSERT_EQ(baseline_meta_usage, precise_cache->GetUsage());
|
|
394
414
|
}
|
|
395
415
|
|
|
396
416
|
TEST_P(CacheTest, HitAndMiss) {
|
|
@@ -407,16 +427,30 @@ TEST_P(CacheTest, HitAndMiss) {
|
|
|
407
427
|
ASSERT_EQ(-1, Lookup(300));
|
|
408
428
|
|
|
409
429
|
Insert(100, 102);
|
|
410
|
-
|
|
430
|
+
if (GetParam() == kHyperClock) {
|
|
431
|
+
// ClockCache usually doesn't overwrite on Insert
|
|
432
|
+
ASSERT_EQ(101, Lookup(100));
|
|
433
|
+
} else {
|
|
434
|
+
ASSERT_EQ(102, Lookup(100));
|
|
435
|
+
}
|
|
411
436
|
ASSERT_EQ(201, Lookup(200));
|
|
412
437
|
ASSERT_EQ(-1, Lookup(300));
|
|
413
438
|
|
|
414
439
|
ASSERT_EQ(1U, deleted_keys_.size());
|
|
415
440
|
ASSERT_EQ(100, deleted_keys_[0]);
|
|
416
|
-
|
|
441
|
+
if (GetParam() == kHyperClock) {
|
|
442
|
+
ASSERT_EQ(102, deleted_values_[0]);
|
|
443
|
+
} else {
|
|
444
|
+
ASSERT_EQ(101, deleted_values_[0]);
|
|
445
|
+
}
|
|
417
446
|
}
|
|
418
447
|
|
|
419
448
|
TEST_P(CacheTest, InsertSameKey) {
|
|
449
|
+
if (GetParam() == kHyperClock) {
|
|
450
|
+
ROCKSDB_GTEST_BYPASS(
|
|
451
|
+
"ClockCache doesn't guarantee Insert overwrite same key.");
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
420
454
|
Insert(1, 1);
|
|
421
455
|
Insert(1, 2);
|
|
422
456
|
ASSERT_EQ(2, Lookup(1));
|
|
@@ -442,6 +476,11 @@ TEST_P(CacheTest, Erase) {
|
|
|
442
476
|
}
|
|
443
477
|
|
|
444
478
|
TEST_P(CacheTest, EntriesArePinned) {
|
|
479
|
+
if (GetParam() == kHyperClock) {
|
|
480
|
+
ROCKSDB_GTEST_BYPASS(
|
|
481
|
+
"ClockCache doesn't guarantee Insert overwrite same key.");
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
445
484
|
Insert(100, 101);
|
|
446
485
|
Cache::Handle* h1 = cache_->Lookup(EncodeKey(100));
|
|
447
486
|
ASSERT_EQ(101, DecodeValue(cache_->Value(h1)));
|
|
@@ -474,7 +513,6 @@ TEST_P(CacheTest, EntriesArePinned) {
|
|
|
474
513
|
TEST_P(CacheTest, EvictionPolicy) {
|
|
475
514
|
Insert(100, 101);
|
|
476
515
|
Insert(200, 201);
|
|
477
|
-
|
|
478
516
|
// Frequently used entry must be kept around
|
|
479
517
|
for (int i = 0; i < 2 * kCacheSize; i++) {
|
|
480
518
|
Insert(1000+i, 2000+i);
|
|
@@ -503,6 +541,12 @@ TEST_P(CacheTest, ExternalRefPinsEntries) {
|
|
|
503
541
|
for (int j = 0; j < 2 * kCacheSize + 100; j++) {
|
|
504
542
|
Insert(1000 + j, 2000 + j);
|
|
505
543
|
}
|
|
544
|
+
// Clock cache is even more stateful and needs more churn to evict
|
|
545
|
+
if (GetParam() == kHyperClock) {
|
|
546
|
+
for (int j = 0; j < kCacheSize; j++) {
|
|
547
|
+
Insert(11000 + j, 11000 + j);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
506
550
|
if (i < 2) {
|
|
507
551
|
ASSERT_EQ(101, Lookup(100));
|
|
508
552
|
}
|
|
@@ -697,9 +741,9 @@ TEST_P(CacheTest, ReleaseWithoutErase) {
|
|
|
697
741
|
|
|
698
742
|
TEST_P(CacheTest, SetCapacity) {
|
|
699
743
|
auto type = GetParam();
|
|
700
|
-
if (type == kFast || type ==
|
|
744
|
+
if (type == kFast || type == kHyperClock) {
|
|
701
745
|
ROCKSDB_GTEST_BYPASS(
|
|
702
|
-
"FastLRUCache and
|
|
746
|
+
"FastLRUCache and HyperClockCache don't support arbitrary capacity "
|
|
703
747
|
"adjustments.");
|
|
704
748
|
return;
|
|
705
749
|
}
|
|
@@ -810,11 +854,6 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
|
|
|
810
854
|
}
|
|
811
855
|
|
|
812
856
|
TEST_P(CacheTest, OverCapacity) {
|
|
813
|
-
auto type = GetParam();
|
|
814
|
-
if (type == kClock) {
|
|
815
|
-
ROCKSDB_GTEST_BYPASS("Requires LRU eviction policy.");
|
|
816
|
-
return;
|
|
817
|
-
}
|
|
818
857
|
size_t n = 10;
|
|
819
858
|
|
|
820
859
|
// a LRUCache with n entries and one shard only
|
|
@@ -842,23 +881,34 @@ TEST_P(CacheTest, OverCapacity) {
|
|
|
842
881
|
for (int i = 0; i < static_cast<int>(n + 1); i++) {
|
|
843
882
|
cache->Release(handles[i]);
|
|
844
883
|
}
|
|
845
|
-
// Make sure eviction is triggered.
|
|
846
|
-
cache->SetCapacity(n);
|
|
847
884
|
|
|
848
|
-
|
|
849
|
-
|
|
885
|
+
if (GetParam() == kHyperClock) {
|
|
886
|
+
// Make sure eviction is triggered.
|
|
887
|
+
ASSERT_OK(cache->Insert(EncodeKey(-1), nullptr, 1, &deleter, &handles[0]));
|
|
850
888
|
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
889
|
+
// cache is under capacity now since elements were released
|
|
890
|
+
ASSERT_GE(n, cache->GetUsage());
|
|
891
|
+
|
|
892
|
+
// clean up
|
|
893
|
+
cache->Release(handles[0]);
|
|
894
|
+
} else {
|
|
895
|
+
// LRUCache checks for over-capacity in Release.
|
|
896
|
+
|
|
897
|
+
// cache is exactly at capacity now with minimal eviction
|
|
898
|
+
ASSERT_EQ(n, cache->GetUsage());
|
|
899
|
+
|
|
900
|
+
// element 0 is evicted and the rest is there
|
|
901
|
+
// This is consistent with the LRU policy since the element 0
|
|
902
|
+
// was released first
|
|
903
|
+
for (int i = 0; i < static_cast<int>(n + 1); i++) {
|
|
904
|
+
std::string key = EncodeKey(i + 1);
|
|
905
|
+
auto h = cache->Lookup(key);
|
|
906
|
+
if (h) {
|
|
907
|
+
ASSERT_NE(static_cast<size_t>(i), 0U);
|
|
908
|
+
cache->Release(h);
|
|
909
|
+
} else {
|
|
910
|
+
ASSERT_EQ(static_cast<size_t>(i), 0U);
|
|
911
|
+
}
|
|
862
912
|
}
|
|
863
913
|
}
|
|
864
914
|
}
|
|
@@ -966,19 +1016,31 @@ TEST_P(CacheTest, ApplyToAllEntriesDuringResize) {
|
|
|
966
1016
|
}
|
|
967
1017
|
|
|
968
1018
|
TEST_P(CacheTest, DefaultShardBits) {
|
|
969
|
-
//
|
|
970
|
-
|
|
971
|
-
|
|
1019
|
+
// Prevent excessive allocation (to save time & space)
|
|
1020
|
+
estimated_value_size_ = 100000;
|
|
1021
|
+
// Implementations use different minimum shard sizes
|
|
1022
|
+
size_t min_shard_size =
|
|
1023
|
+
(GetParam() == kHyperClock ? 32U * 1024U : 512U) * 1024U;
|
|
1024
|
+
|
|
1025
|
+
std::shared_ptr<Cache> cache = NewCache(32U * min_shard_size);
|
|
972
1026
|
ShardedCache* sc = dynamic_cast<ShardedCache*>(cache.get());
|
|
973
1027
|
ASSERT_EQ(5, sc->GetNumShardBits());
|
|
974
1028
|
|
|
975
|
-
cache =
|
|
1029
|
+
cache = NewCache(min_shard_size / 1000U * 999U);
|
|
976
1030
|
sc = dynamic_cast<ShardedCache*>(cache.get());
|
|
977
1031
|
ASSERT_EQ(0, sc->GetNumShardBits());
|
|
978
1032
|
|
|
979
|
-
cache =
|
|
1033
|
+
cache = NewCache(3U * 1024U * 1024U * 1024U);
|
|
980
1034
|
sc = dynamic_cast<ShardedCache*>(cache.get());
|
|
1035
|
+
// current maximum of 6
|
|
981
1036
|
ASSERT_EQ(6, sc->GetNumShardBits());
|
|
1037
|
+
|
|
1038
|
+
if constexpr (sizeof(size_t) > 4) {
|
|
1039
|
+
cache = NewCache(128U * min_shard_size);
|
|
1040
|
+
sc = dynamic_cast<ShardedCache*>(cache.get());
|
|
1041
|
+
// current maximum of 6
|
|
1042
|
+
ASSERT_EQ(6, sc->GetNumShardBits());
|
|
1043
|
+
}
|
|
982
1044
|
}
|
|
983
1045
|
|
|
984
1046
|
TEST_P(CacheTest, GetChargeAndDeleter) {
|
|
@@ -990,11 +1052,8 @@ TEST_P(CacheTest, GetChargeAndDeleter) {
|
|
|
990
1052
|
cache_->Release(h1);
|
|
991
1053
|
}
|
|
992
1054
|
|
|
993
|
-
std::shared_ptr<Cache> (*new_clock_cache_func)(size_t, size_t, int, bool,
|
|
994
|
-
CacheMetadataChargePolicy) =
|
|
995
|
-
ExperimentalNewClockCache;
|
|
996
1055
|
INSTANTIATE_TEST_CASE_P(CacheTestInstance, CacheTest,
|
|
997
|
-
testing::Values(kLRU,
|
|
1056
|
+
testing::Values(kLRU, kHyperClock, kFast));
|
|
998
1057
|
INSTANTIATE_TEST_CASE_P(CacheTestInstance, LRUCacheTest,
|
|
999
1058
|
testing::Values(kLRU, kFast));
|
|
1000
1059
|
|