avoid lose efficacy for CompactRange

RT
This commit is contained in:
Demiao WU 2017-08-29 11:18:25 +08:00 committed by GitHub
parent 09a3c8e741
commit a494121d6b

View File

@ -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) {