diff --git a/sstables/compaction_manager.cc b/sstables/compaction_manager.cc index fb05f126f5..4f0b12eb67 100644 --- a/sstables/compaction_manager.cc +++ b/sstables/compaction_manager.cc @@ -673,13 +673,15 @@ future<> compaction_manager::rewrite_sstables(column_family* cf, sstables::compa compacting->release_compacting(exhausted_sstables); }; - _stats.pending_tasks--; - _stats.active_tasks++; - task->compaction_running = true; - compaction_backlog_tracker user_initiated(std::make_unique(_compaction_controller.backlog_of_shares(200), _available_memory)); - return do_with(std::move(user_initiated), [this, &cf, descriptor = std::move(descriptor)] (compaction_backlog_tracker& bt) mutable { - return with_scheduling_group(_scheduling_group, [this, &cf, descriptor = std::move(descriptor)] () mutable { - return cf.run_compaction(std::move(descriptor)); + return with_semaphore(_rewrite_sstables_sem, 1, [this, task, &cf, descriptor = std::move(descriptor)] () mutable { + _stats.pending_tasks--; + _stats.active_tasks++; + task->compaction_running = true; + compaction_backlog_tracker user_initiated(std::make_unique(_compaction_controller.backlog_of_shares(200), _available_memory)); + return do_with(std::move(user_initiated), [this, &cf, descriptor = std::move(descriptor)] (compaction_backlog_tracker& bt) mutable { + return with_scheduling_group(_scheduling_group, [this, &cf, descriptor = std::move(descriptor)]() mutable { + return cf.run_compaction(std::move(descriptor)); + }); }); }).then_wrapped([this, task, compacting] (future<> f) mutable { task->compaction_running = false; diff --git a/sstables/compaction_manager.hh b/sstables/compaction_manager.hh index e499bbbabc..8193e8ef17 100644 --- a/sstables/compaction_manager.hh +++ b/sstables/compaction_manager.hh @@ -110,6 +110,7 @@ private: std::unordered_map _compaction_locks; semaphore _custom_job_sem{1}; + seastar::named_semaphore _rewrite_sstables_sem = {1, named_semaphore_exception_factory{"rewrite sstables"}}; std::function compaction_submission_callback(); // all registered column families are submitted for compaction at a constant interval.