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 <xemul@scylladb.com>
This commit is contained in:
Pavel Emelyanov
2023-11-28 14:07:04 +03:00
parent 1e80bdb440
commit 68cb2e66fc

View File

@@ -2011,8 +2011,7 @@ future<db::replay_position> 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<db::replay_position> table::discard_sstables(db_clock::time_point truncat
};
std::vector<removed_sstable> 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<sstables::sstable_set>(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<sstables::sstable_set>& pruned,
auto prune = [&] (lw_shared_ptr<sstables::sstable_set>& pruned,
const lw_shared_ptr<sstables::sstable_set>& pruning,
replica::enable_backlog_tracker enable_backlog_tracker) mutable {
pruning->for_each_sstable([&] (const sstables::shared_sstable& p) mutable {
@@ -2047,26 +2043,25 @@ future<db::replay_position> 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<pruner>(*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) {