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:
@@ -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);
|
||||
} } }
|
||||
|
||||
Reference in New Issue
Block a user