diff options
author | Vinnie Falco <vinnie.falco@gmail.com> | 2013-07-01 08:36:32 -0700 |
---|---|---|
committer | Vinnie Falco <vinnie.falco@gmail.com> | 2013-07-01 08:36:32 -0700 |
commit | fb1da62318f5a7f6e3ec31cdc02178a5445870e4 (patch) | |
tree | 4ef6f0b1017c747e84132427666eea4a36d10b0d /src/leveldb/db/version_set.cc | |
parent | 28bcf3b7ef804f7084938b21708b29c1f5d7c8f8 (diff) | |
parent | adae78ea9940f4d44382967d1296e7db0b54a4de (diff) | |
download | bitcoin-fb1da62318f5a7f6e3ec31cdc02178a5445870e4.tar.xz |
Merge commit 'adae78ea9940f4d44382967d1296e7db0b54a4de' into leveldb-squashed
Diffstat (limited to 'src/leveldb/db/version_set.cc')
-rw-r--r-- | src/leveldb/db/version_set.cc | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/leveldb/db/version_set.cc b/src/leveldb/db/version_set.cc index 7d0a5de2b9..4fd1ddef21 100644 --- a/src/leveldb/db/version_set.cc +++ b/src/leveldb/db/version_set.cc @@ -1331,14 +1331,19 @@ Compaction* VersionSet::CompactRange( } // Avoid compacting too much in one shot in case the range is large. - const uint64_t limit = MaxFileSizeForLevel(level); - uint64_t total = 0; - for (size_t i = 0; i < inputs.size(); i++) { - uint64_t s = inputs[i]->file_size; - total += s; - if (total >= limit) { - inputs.resize(i + 1); - break; + // But we cannot do this for level-0 since level-0 files can overlap + // and we must not pick one file and drop another older file if the + // two files overlap. + if (level > 0) { + const uint64_t limit = MaxFileSizeForLevel(level); + uint64_t total = 0; + for (size_t i = 0; i < inputs.size(); i++) { + uint64_t s = inputs[i]->file_size; + total += s; + if (total >= limit) { + inputs.resize(i + 1); + break; + } } } |