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
This commit is contained in:
parent
04a1035efe
commit
5aa81f04fa
@ -1842,7 +1842,7 @@ void DBImpl::MaybeScheduleFlushOrCompaction() {
|
|||||||
// memtable flush needed
|
// memtable flush needed
|
||||||
bg_flush_scheduled_++;
|
bg_flush_scheduled_++;
|
||||||
env_->Schedule(&DBImpl::BGWorkFlush, this, Env::Priority::HIGH);
|
env_->Schedule(&DBImpl::BGWorkFlush, this, Env::Priority::HIGH);
|
||||||
} else {
|
} else if (options_.max_background_flushes > 0) {
|
||||||
bg_schedule_needed_ = true;
|
bg_schedule_needed_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user