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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user