Fix asserts so that "make check OPT=-g" works on performance branch
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
This commit is contained in:
parent
95dda37858
commit
43d9a8225a
@ -734,6 +734,38 @@ class VersionSet::Builder {
|
|||||||
#endif
|
#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<FileMetaData*>& 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.
|
// Apply all of the edits in *edit to the current state.
|
||||||
void Apply(VersionEdit* edit) {
|
void Apply(VersionEdit* edit) {
|
||||||
CheckConsistency(base_);
|
CheckConsistency(base_);
|
||||||
@ -753,18 +785,7 @@ class VersionSet::Builder {
|
|||||||
const int level = iter->first;
|
const int level = iter->first;
|
||||||
const uint64_t number = iter->second;
|
const uint64_t number = iter->second;
|
||||||
levels_[level].deleted_files.insert(number);
|
levels_[level].deleted_files.insert(number);
|
||||||
|
CheckConsistencyForDeletes(edit, number, level);
|
||||||
#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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add new files
|
// Add new files
|
||||||
@ -1771,7 +1792,7 @@ Compaction* VersionSet::PickCompactionBySize(int level) {
|
|||||||
|
|
||||||
// check to verify files are arranged in descending size
|
// check to verify files are arranged in descending size
|
||||||
assert((i == file_size.size() - 1) ||
|
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));
|
(f->file_size >= current_->files_[level][file_size[i+1]]->file_size));
|
||||||
|
|
||||||
// do not pick a file to compact if it is being compacted
|
// do not pick a file to compact if it is being compacted
|
||||||
@ -1796,7 +1817,7 @@ Compaction* VersionSet::PickCompactionBySize(int level) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
c->inputs_[0].push_back(f);
|
c->inputs_[0].push_back(f);
|
||||||
c->base_index_ = i;
|
c->base_index_ = index;
|
||||||
c->parent_index_ = parent_index;
|
c->parent_index_ = parent_index;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user