From 43d9a8225a998276aa338812e939209ca0a1693c Mon Sep 17 00:00:00 2001 From: Dhruba Borthakur Date: Tue, 13 Nov 2012 10:30:00 -0800 Subject: [PATCH] Fix asserts so that "make check OPT=-g" works on performance branch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Compilation used to fail with the error: db/version_set.cc:1773: error: ‘number_of_files_to_sort_’ is not a member of ‘leveldb::VersionSet’ I created a new method called CheckConsistencyForDeletes() so that all the high cost checking is done only when OPT=-g is specified. I also fixed a bug in PickCompactionBySize that was triggered when OPT=-g was switched on. The base_index in the compaction record was not set correctly. Test Plan: make check OPT=-g Differential Revision: https://reviews.facebook.net/D6687 --- db/version_set.cc | 49 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/db/version_set.cc b/db/version_set.cc index 7cb550d2d..610dcf3b0 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -734,6 +734,38 @@ class VersionSet::Builder { #endif } + void CheckConsistencyForDeletes(VersionEdit* edit, int number, int level) { +#ifndef NDEBUG + // a file to be deleted better exist in the previous version + bool found = false; + for (int l = 0; !found && l < edit->number_levels_; l++) { + const std::vector& base_files = base_->files_[l]; + for (int i = 0; i < base_files.size(); i++) { + FileMetaData* f = base_files[i]; + if (f->number == number) { + found = true; + break; + } + } + } + // if the file did not exist in the previous version, then it + // is possibly moved from lower level to higher level in current + // version + for (int l = level+1; !found && l < edit->number_levels_; l++) { + const FileSet* added = levels_[l].added_files; + for (FileSet::const_iterator added_iter = added->begin(); + added_iter != added->end(); ++added_iter) { + FileMetaData* f = *added_iter; + if (f->number == number) { + found = true; + break; + } + } + } + assert(found); +#endif + } + // Apply all of the edits in *edit to the current state. void Apply(VersionEdit* edit) { CheckConsistency(base_); @@ -753,18 +785,7 @@ class VersionSet::Builder { const int level = iter->first; const uint64_t number = iter->second; levels_[level].deleted_files.insert(number); - -#ifndef NDEBUG - // none of the files to be deleted could have been added - // by a concurrent compaction process - const FileSet* added = levels_[level].added_files; - for (FileSet::const_iterator added_iter = added->begin(); - added_iter != added->end(); - ++added_iter) { - FileMetaData* f = *added_iter; - assert(f->number != number); - } -#endif + CheckConsistencyForDeletes(edit, number, level); } // Add new files @@ -1771,7 +1792,7 @@ Compaction* VersionSet::PickCompactionBySize(int level) { // check to verify files are arranged in descending size assert((i == file_size.size() - 1) || - (i >= VersionSet::number_of_files_to_sort_-1) || + (i >= Version::number_of_files_to_sort_-1) || (f->file_size >= current_->files_[level][file_size[i+1]]->file_size)); // do not pick a file to compact if it is being compacted @@ -1796,7 +1817,7 @@ Compaction* VersionSet::PickCompactionBySize(int level) { continue; } c->inputs_[0].push_back(f); - c->base_index_ = i; + c->base_index_ = index; c->parent_index_ = parent_index; break; } -- GitLab