From d0a00f348980ce75ecc0b1afb4151b2c8b9923bc Mon Sep 17 00:00:00 2001 From: Gleb Natapov Date: Tue, 2 Apr 2024 16:33:16 +0300 Subject: [PATCH] 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. --- service/storage_service.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/service/storage_service.cc b/service/storage_service.cc index 1966ef4985..08e40bbbd6 100644 --- a/service/storage_service.cc +++ b/service/storage_service.cc @@ -6390,10 +6390,10 @@ future> storage_service::get_system_mutations(sc std::vector 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; }