From 4632239d1342566a22961fc7e63a1b12f0a80c1c Mon Sep 17 00:00:00 2001 From: sdong Date: Thu, 7 Aug 2014 13:19:58 -0700 Subject: [PATCH] Need to schedule compactions when manual compaction finishes Summary: If there is an outstanding compaction scheduled but at the time a manual compaction is triggered, the manual compaction will preempt. In the end of the manual compaction, we should try to schedule compactions to make sure those preempted ones are not skipped. Test Plan: make all check Reviewers: yhchiang, ljin Reviewed By: ljin Subscribers: leveldb, dhruba, igor Differential Revision: https://reviews.facebook.net/D21321 --- db/db_impl.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/db/db_impl.cc b/db/db_impl.cc index 5a559fc52..43442a15c 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -1834,6 +1834,11 @@ Status DBImpl::RunManualCompaction(ColumnFamilyData* cfd, int input_level, assert(!manual.in_progress); assert(bg_manual_only_ > 0); --bg_manual_only_; + if (bg_manual_only_ == 0) { + // an automatic compaction should have been scheduled might have be + // preempted by the manual compactions. Need to schedule it back. + MaybeScheduleFlushOrCompaction(); + } return manual.status; }