From 5aa81f04faf94361852117b7155f94473cf42a8e Mon Sep 17 00:00:00 2001 From: sdong Date: Thu, 13 Mar 2014 11:21:03 -0700 Subject: [PATCH] Fix extra compaction tasks scheduled after D16767 in some cases Summary: With D16767, there is a case compaction tasks are scheduled infinitely: (1) no flush thread is configured and more than 1 compaction threads (2) a flush is going on by one compaction hread (3) the state of SST files is in the state that versions_->current()->NeedsCompaction() will generate a false positive (return true actually there is no work to be done) In that case, a infinite loop will be formed. This patch would fix it. Test Plan: make all check Reviewers: haobo, igor, ljin Reviewed By: igor CC: dhruba, yhchiang, leveldb Differential Revision: https://reviews.facebook.net/D16863 --- db/db_impl.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/db_impl.cc b/db/db_impl.cc index 52c538277..cc17e743d 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -1842,7 +1842,7 @@ void DBImpl::MaybeScheduleFlushOrCompaction() { // memtable flush needed bg_flush_scheduled_++; env_->Schedule(&DBImpl::BGWorkFlush, this, Env::Priority::HIGH); - } else { + } else if (options_.max_background_flushes > 0) { bg_schedule_needed_ = true; } }