Fixed compaction-related errors where number of input levels are hard-coded.
Summary: Fixed compaction-related errors where number of input levels are hard-coded. It's a bug found in compaction branch. This diff will be pushed into master. Test Plan: export ROCKSDB_TESTS=Compact make db_test -j32 ./db_test also passed the tests in compaction branch Reviewers: igor, sdong, ljin Reviewed By: ljin Subscribers: leveldb Differential Revision: https://reviews.facebook.net/D20577
This commit is contained in:
parent
f780f35b06
commit
6480717a26
@ -82,8 +82,8 @@ Compaction::~Compaction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Compaction::GenerateFileLevels() {
|
void Compaction::GenerateFileLevels() {
|
||||||
input_levels_.resize(2);
|
input_levels_.resize(num_input_levels());
|
||||||
for (int which = 0; which < 2; which++) {
|
for (int which = 0; which < num_input_levels(); which++) {
|
||||||
DoGenerateFileLevel(&input_levels_[which], inputs_[which].files, &arena_);
|
DoGenerateFileLevel(&input_levels_[which], inputs_[which].files, &arena_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2825,10 +2825,12 @@ Iterator* VersionSet::MakeInputIterator(Compaction* c) {
|
|||||||
// Level-0 files have to be merged together. For other levels,
|
// Level-0 files have to be merged together. For other levels,
|
||||||
// we will make a concatenating iterator per level.
|
// we will make a concatenating iterator per level.
|
||||||
// TODO(opt): use concatenating iterator for level-0 if there is no overlap
|
// TODO(opt): use concatenating iterator for level-0 if there is no overlap
|
||||||
const int space = (c->level() == 0 ? c->input_levels(0)->num_files + 1 : 2);
|
const int space = (c->level() == 0 ?
|
||||||
|
c->input_levels(0)->num_files + c->num_input_levels() - 1:
|
||||||
|
c->num_input_levels());
|
||||||
Iterator** list = new Iterator*[space];
|
Iterator** list = new Iterator*[space];
|
||||||
int num = 0;
|
int num = 0;
|
||||||
for (int which = 0; which < 2; which++) {
|
for (int which = 0; which < c->num_input_levels(); which++) {
|
||||||
if (c->input_levels(which)->num_files != 0) {
|
if (c->input_levels(which)->num_files != 0) {
|
||||||
if (c->level(which) == 0) {
|
if (c->level(which) == 0) {
|
||||||
const FileLevel* flevel = c->input_levels(which);
|
const FileLevel* flevel = c->input_levels(which);
|
||||||
|
Loading…
Reference in New Issue
Block a user