compaction/compaction_manager: stop_tasks(): unlink stopped tasks
Stopped tasks currently linger in _tasks until the fiber that created
the task is scheduled again and unlinks the task. This window between
stop and remove prevents reliable checks for empty _tasks list after all
tasks are stopped.
Unlink the task early so really_do_stop() can safely check for an empty
_tasks list (next patch).
(cherry picked from commit d8500472b3)
This commit is contained in:
committed by
Benny Halevy
parent
d63b9efa7e
commit
2a32e2ae82
@@ -1075,6 +1075,7 @@ future<> compaction_manager::stop_tasks(std::vector<shared_ptr<compaction_task_e
|
||||
t->stop_compaction(reason);
|
||||
}
|
||||
co_await coroutine::parallel_for_each(tasks, [] (auto& task) -> future<> {
|
||||
auto unlink_task = deferred_action([task] { task->unlink(); });
|
||||
try {
|
||||
co_await task->compaction_done();
|
||||
} catch (sstables::compaction_stopped_exception&) {
|
||||
|
||||
Reference in New Issue
Block a user