From 68cb2e66fc2db4f58a82a1b1a0c69fda6cddcde7 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Tue, 28 Nov 2023 14:07:04 +0300 Subject: [PATCH] discard_sstables: Do not allocate pruner This allocation remained from the pre-coroutine times of the method. Now the contents of prumer -- refernce on table, vector and replay_position can reside on coroutine frame Signed-off-by: Pavel Emelyanov --- replica/table.cc | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/replica/table.cc b/replica/table.cc index d4042c5de8..f5054fc3d5 100644 --- a/replica/table.cc +++ b/replica/table.cc @@ -2011,8 +2011,7 @@ future table::discard_sstables(db_clock::time_point truncat return _compaction_manager.compaction_disabled(cg->as_table_state()); })); - struct pruner { - column_family& cf; + column_family& cf = *this; db::replay_position rp; struct removed_sstable { compaction_group& cg; @@ -2021,16 +2020,13 @@ future table::discard_sstables(db_clock::time_point truncat }; std::vector remove; - pruner(column_family& cf) - : cf(cf) {} - - void prune(compaction_group& cg, db_clock::time_point truncated_at) { + auto prune = [&] (compaction_group& cg, db_clock::time_point truncated_at) { auto gc_trunc = to_gc_clock(truncated_at); auto pruned = make_lw_shared(cf._compaction_strategy.make_sstable_set(cf._schema)); auto maintenance_pruned = cf.make_maintenance_sstable_set(); - auto prune = [this, &cg, &gc_trunc] (lw_shared_ptr& pruned, + auto prune = [&] (lw_shared_ptr& pruned, const lw_shared_ptr& pruning, replica::enable_backlog_tracker enable_backlog_tracker) mutable { pruning->for_each_sstable([&] (const sstables::shared_sstable& p) mutable { @@ -2047,26 +2043,25 @@ future table::discard_sstables(db_clock::time_point truncat cg.set_main_sstables(std::move(pruned)); cg.set_maintenance_sstables(std::move(maintenance_pruned)); - } - }; - auto p = make_lw_shared(*this); - co_await _cache.invalidate(row_cache::external_updater([this, p, truncated_at] { + }; + + co_await _cache.invalidate(row_cache::external_updater([this, &prune, truncated_at] { // FIXME: the following isn't exception safe. for (const compaction_group_ptr& cg : compaction_groups()) { - p->prune(*cg, truncated_at); + prune(*cg, truncated_at); } refresh_compound_sstable_set(); tlogger.debug("cleaning out row cache"); })); rebuild_statistics(); - co_await coroutine::parallel_for_each(p->remove, [this, p] (pruner::removed_sstable& r) -> future<> { + co_await coroutine::parallel_for_each(remove, [this] (removed_sstable& r) -> future<> { if (r.enable_backlog_tracker) { remove_sstable_from_backlog_tracker(r.cg.get_backlog_tracker(), r.sst); } co_await get_sstables_manager().delete_atomically({r.sst}); erase_sstable_cleanup_state(r.sst); }); - co_return p->rp; + co_return rp; } void table::mark_ready_for_writes(db::commitlog* cl) {