diff --git a/sstables/sstable_directory.cc b/sstables/sstable_directory.cc index fece4ca789..5f169510be 100644 --- a/sstables/sstable_directory.cc +++ b/sstables/sstable_directory.cc @@ -384,20 +384,18 @@ 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) { - if (status == "sealed") { - return make_ready_future<>(); - } + std::set gens_to_remove; + 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") { + 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)); - }).then([this, &gens_to_remove] { - return 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); + 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); }); }