From a494121d6be275e531c7450b0c8edbe093054168 Mon Sep 17 00:00:00 2001 From: Demiao WU Date: Tue, 29 Aug 2017 11:18:25 +0800 Subject: [PATCH] avoid lose efficacy for CompactRange RT --- db/db_impl.cc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/db/db_impl.cc b/db/db_impl.cc index f43ad76..a2c09e9 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -579,6 +579,29 @@ void DBImpl::CompactRange(const Slice* begin, const Slice* end) { for (int level = 0; level < max_level_with_files; level++) { TEST_CompactRange(level, begin, end); } + + int old_max_level_with_file = max_level_with_files; + while (old_max_level_with_file < config::kNumLevels-1) { + { + MutexLock l(&mutex_); + Version *base = versions_->current(); + for (int level = old_max_level_with_file + 1; level < config::kNumLevels; ++ level) { + if (base->OverlapInLevel(level, begin, end)) { + max_level_with_files = level; + } + } + } + + if (max_level_with_files != old_max_level_with_file) { + for (int level = old_max_level_with_file; level < max_level_with_files; ++ level) { + TEST_CompactRange(level, begin, end); + } + + old_max_level_with_file = max_level_with_files; + } else { + break; + } + } } void DBImpl::TEST_CompactRange(int level, const Slice* begin,const Slice* end) {