From 7422504d3505cb206d460d79e320b1e79f9f69d2 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Thu, 15 Aug 2024 13:04:44 +0300 Subject: [PATCH 1/3] sstable_directory: Coroutinize outer cotinuation chain Indentation is deliberately left broken Signed-off-by: Pavel Emelyanov --- sstables/sstable_directory.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sstables/sstable_directory.cc b/sstables/sstable_directory.cc index fece4ca789..13b91cdbd8 100644 --- a/sstables/sstable_directory.cc +++ b/sstables/sstable_directory.cc @@ -384,8 +384,8 @@ future<> sstable_directory::sstables_registry_components_lister::commit() { } future<> sstable_directory::sstables_registry_components_lister::garbage_collect(storage& st) { - return do_with(std::set(), [this, &st] (auto& gens_to_remove) { - return _sstables_registry.sstables_registry_list(_location, [&st, &gens_to_remove] (sstring status, sstable_state state, entry_descriptor desc) { + std::set gens_to_remove; + co_await _sstables_registry.sstables_registry_list(_location, [&st, &gens_to_remove] (sstring status, sstable_state state, entry_descriptor desc) { if (status == "sealed") { return make_ready_future<>(); } @@ -393,12 +393,10 @@ future<> sstable_directory::sstables_registry_components_lister::garbage_collect dirlog.info("Removing dangling {} {} entry", desc.generation, status); gens_to_remove.insert(desc.generation); return st.remove_by_registry_entry(std::move(desc)); - }).then([this, &gens_to_remove] { - return parallel_for_each(gens_to_remove, [this] (auto gen) { + }); + co_await coroutine::parallel_for_each(gens_to_remove, [this] (auto gen) { return _sstables_registry.delete_entry(_location, gen); }); - }); - }); } future<> From 7401c0ace2fc3e4b71122844bc8e1458e7b54ce4 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Thu, 15 Aug 2024 13:04:56 +0300 Subject: [PATCH 2/3] sstable_directory: Fix indentation after previous patch Signed-off-by: Pavel Emelyanov --- sstables/sstable_directory.cc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sstables/sstable_directory.cc b/sstables/sstable_directory.cc index 13b91cdbd8..c7d96685a2 100644 --- a/sstables/sstable_directory.cc +++ b/sstables/sstable_directory.cc @@ -384,19 +384,19 @@ future<> sstable_directory::sstables_registry_components_lister::commit() { } future<> sstable_directory::sstables_registry_components_lister::garbage_collect(storage& st) { - std::set gens_to_remove; - co_await _sstables_registry.sstables_registry_list(_location, [&st, &gens_to_remove] (sstring status, sstable_state state, entry_descriptor desc) { - if (status == "sealed") { - return make_ready_future<>(); - } + std::set gens_to_remove; + co_await _sstables_registry.sstables_registry_list(_location, [&st, &gens_to_remove] (sstring status, sstable_state state, entry_descriptor desc) { + if (status == "sealed") { + return make_ready_future<>(); + } - dirlog.info("Removing dangling {} {} entry", desc.generation, status); - gens_to_remove.insert(desc.generation); - return st.remove_by_registry_entry(std::move(desc)); - }); - co_await coroutine::parallel_for_each(gens_to_remove, [this] (auto gen) { - return _sstables_registry.delete_entry(_location, gen); - }); + dirlog.info("Removing dangling {} {} entry", desc.generation, status); + gens_to_remove.insert(desc.generation); + return st.remove_by_registry_entry(std::move(desc)); + }); + co_await coroutine::parallel_for_each(gens_to_remove, [this] (auto gen) { + return _sstables_registry.delete_entry(_location, gen); + }); } future<> From 6a9b8ea135714264120206bdf5dc38f15daf5c31 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Thu, 15 Aug 2024 13:07:18 +0300 Subject: [PATCH 3/3] sstable_directory: Coroutinize inner lambdas Signed-off-by: Pavel Emelyanov --- sstables/sstable_directory.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sstables/sstable_directory.cc b/sstables/sstable_directory.cc index c7d96685a2..5f169510be 100644 --- a/sstables/sstable_directory.cc +++ b/sstables/sstable_directory.cc @@ -385,17 +385,17 @@ future<> sstable_directory::sstables_registry_components_lister::commit() { future<> sstable_directory::sstables_registry_components_lister::garbage_collect(storage& st) { std::set gens_to_remove; - co_await _sstables_registry.sstables_registry_list(_location, [&st, &gens_to_remove] (sstring status, sstable_state state, entry_descriptor desc) { + co_await _sstables_registry.sstables_registry_list(_location, coroutine::lambda([&st, &gens_to_remove] (sstring status, sstable_state state, entry_descriptor desc) -> future<> { if (status == "sealed") { - return make_ready_future<>(); + co_return; } dirlog.info("Removing dangling {} {} entry", desc.generation, status); gens_to_remove.insert(desc.generation); - return st.remove_by_registry_entry(std::move(desc)); - }); - co_await coroutine::parallel_for_each(gens_to_remove, [this] (auto gen) { - return _sstables_registry.delete_entry(_location, gen); + co_await st.remove_by_registry_entry(std::move(desc)); + })); + co_await coroutine::parallel_for_each(gens_to_remove, [this] (auto gen) -> future<> { + co_await _sstables_registry.delete_entry(_location, gen); }); }