storage_service: yield in get_system_mutations

Yield in a loop that converts a result to canonical_mutation. We
observed stalls for very large tables.
This commit is contained in:
Gleb Natapov
2024-04-02 16:33:16 +03:00
parent 87b08c957f
commit d0a00f3489

View File

@@ -6390,10 +6390,10 @@ future<std::vector<canonical_mutation>> storage_service::get_system_mutations(sc
std::vector<canonical_mutation> result;
auto rs = co_await db::system_keyspace::query_mutations(_db, schema);
result.reserve(rs->partitions().size());
boost::range::transform(
rs->partitions(), std::back_inserter(result), [schema] (const partition& p) {
return canonical_mutation{p.mut().unfreeze(schema)};
});
for (const auto& p : rs->partitions()) {
result.emplace_back(canonical_mutation{p.mut().unfreeze(schema)});
co_await coroutine::maybe_yield();
}
co_return result;
}