test/boost/multishard_mutation_query_test: fix querier cache misses expectations

There are two tests, test_read_all and
test_read_with_partition_row_limits, which asserts on every page as well
as at the end that there are no misses whatsoever. This is incorrect,
because it is possible that on a given page, not all shards participate
and thus there won't be a saved reader on every shard. On the subsequent
page, a shard without a reader may produce a miss. This is fine.
Refine the asserts, to check that we have only as much misses, as many
shards we have without readers on them.
This commit is contained in:
Botond Dénes
2023-10-23 07:56:52 -04:00
parent 0a34f29ea5
commit 8180f61147

View File

@@ -545,22 +545,30 @@ SEASTAR_THREAD_TEST_CASE(test_read_all) {
auto results1 = read_all_partitions_one_by_one(env.db(), s, pkeys);
uint64_t lookups = 0;
uint64_t misses = 0;
auto saved_readers = aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::population);
// Then do a paged range-query, with reader caching
auto results2 = read_all_partitions_with_paged_scan(env.db(), s, 4, stateful_query::yes, [&] (size_t page) {
const auto new_lookups = aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::lookups);
const auto new_misses = aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::misses);
if (page) {
tests::require(new_lookups > lookups);
}
lookups = new_lookups;
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::drops), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::misses), 0u);
tests::require_less_equal(new_misses - misses, smp::count - saved_readers);
lookups = new_lookups;
misses = new_misses;
saved_readers = aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::population);
tests::require_greater_equal(saved_readers, 1u);
}).first;
check_results_are_equal(results1, results2);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::drops), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::misses), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::time_based_evictions), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::resource_based_evictions), 0u);
@@ -665,22 +673,31 @@ SEASTAR_THREAD_TEST_CASE(test_read_with_partition_row_limits) {
auto results1 = read_all_partitions_one_by_one(env.db(), s, pkeys);
uint64_t lookups = 0;
uint64_t misses = 0;
auto saved_readers = aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::population);
// Then do a paged range-query, with reader caching
auto results2 = read_all_partitions_with_paged_scan(env.db(), s, 4, stateful_query::yes, [&] (size_t page) {
const auto new_misses = aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::misses);
const auto new_lookups = aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::lookups);
if (page) {
tests::require(new_lookups > lookups);
}
lookups = new_lookups;
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::drops), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::misses), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::drops), 0u);
tests::require_less_equal(new_misses - misses, smp::count - saved_readers);
lookups = new_lookups;
misses = new_misses;
saved_readers = aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::population);
tests::require_greater_equal(saved_readers, 1u);
}).first;
check_results_are_equal(results1, results2);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::drops), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::misses), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::time_based_evictions), 0u);
tests::require_equal(aggregate_querier_cache_stat(env.db(), &query::querier_cache::stats::resource_based_evictions), 0u);
} } }