From 765597fa7891f9171ba6965b0971b97d85f6032a Mon Sep 17 00:00:00 2001 From: Yueh-Hsuan Chiang Date: Thu, 10 Mar 2016 14:34:28 -0800 Subject: [PATCH] Update compaction score right after CompactFiles forms a compaction Summary: This is a follow-up patch of https://reviews.facebook.net/D54891. As the information about files being compacted will also be used when making compaction decision, it is necessary to update the compaction score when a compaction plan has been made but not yet execute. This patch adds a missing call to update the compaction score in CompactFiles(). Test Plan: compact_files_test Reviewers: sdong, IslamAbdelRahman, kradhakrishnan, yiwu, andrewkr Reviewed By: andrewkr Subscribers: andrewkr, dhruba, leveldb Differential Revision: https://reviews.facebook.net/D55227 --- db/db_impl.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/db/db_impl.cc b/db/db_impl.cc index ebcbe1a4e..675669ad2 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -1844,6 +1844,17 @@ Status DBImpl::CompactFilesImpl( // support for CompactFiles, we should have CompactFiles API // pass a pointer of CompactionJobStats as the out-value // instead of using EventListener. + + // Creating a compaction influences the compaction score because the score + // takes running compactions into account (by skipping files that are already + // being compacted). Since we just changed compaction score, we recalculate it + // here. + { + CompactionOptionsFIFO dummy_compaction_options_fifo; + version->storage_info()->ComputeCompactionScore( + *c->mutable_cf_options(), dummy_compaction_options_fifo); + } + compaction_job.Prepare(); mutex_.Unlock();