test: row_cache: Use more narrow key range to stress overlapping reads more

This makes catching issues related to concurrent access of same or
adjacent entries more likely. For example, catches #11239.

Closes #11260
This commit is contained in:
Tomasz Grabiec
2022-08-09 12:54:08 +02:00
committed by Botond Dénes
parent be44fd63f9
commit 8ee5b69f80
3 changed files with 12 additions and 0 deletions

View File

@@ -3352,6 +3352,7 @@ SEASTAR_TEST_CASE(test_tombstone_merging_of_overlapping_tombstones_in_many_versi
SEASTAR_TEST_CASE(test_concurrent_reads_and_eviction) {
return seastar::async([] {
random_mutation_generator gen(random_mutation_generator::generate_counters::no);
gen.set_key_cardinality(16);
memtable_snapshot_source underlying(gen.schema());
schema_ptr s = gen.schema();
schema_ptr rev_s = s->make_reversed();

View File

@@ -2013,6 +2013,11 @@ public:
_blobs = boost::copy_range<std::vector<bytes>>(keys | boost::adaptors::transformed([this] (sstring& k) { return to_bytes(k); }));
}
void set_key_cardinality(size_t n_keys) {
assert(n_keys <= n_blobs);
_ck_index_dist = std::uniform_int_distribution<size_t>{0, n_keys - 1};
}
bytes random_blob() {
return _blobs[std::min(_blobs.size() - 1, std::max<size_t>(0, _ck_index_dist(_gen)))];
}
@@ -2332,6 +2337,10 @@ std::vector<query::clustering_range> random_mutation_generator::make_random_rang
return _impl->make_random_ranges(n_ranges);
}
void random_mutation_generator::set_key_cardinality(size_t n_keys) {
_impl->set_key_cardinality(n_keys);
}
void for_each_schema_change(std::function<void(schema_ptr, const std::vector<mutation>&,
schema_ptr, const std::vector<mutation>&)> fn) {
auto map_of_int_to_int = map_type_impl::get_instance(int32_type, int32_type, true);

View File

@@ -64,6 +64,8 @@ public:
range_tombstone make_random_range_tombstone();
std::vector<dht::decorated_key> make_partition_keys(size_t n);
std::vector<query::clustering_range> make_random_ranges(unsigned n_ranges);
// Sets the number of distinct clustering keys which will be used in generated mutations.
void set_key_cardinality(size_t);
};
bytes make_blob(size_t blob_size);