summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-06-02 18:07:34 -0700
committerSage Weil <sage@inktank.com>2013-06-04 08:27:03 -0700
commitb226e117b5a72c3b04b74aec50a9198601f3730b (patch)
tree672650eb4d3717d4fed1f26425a982976543159d
parentd017afb5b075a1958cb19213dd95e41d54065e45 (diff)
downloadceph-b226e117b5a72c3b04b74aec50a9198601f3730b.tar.gz
os/LevelDBStore: fix merge loop
We were double-incrementing p, both in the for statement and in the body. While we are here, drop the unnecessary else's. Signed-off-by: Sage Weil <sage@inktank.com> (cherry picked from commit eb6d5fcf994d2a25304827d7384eee58f40939af)
-rw-r--r--src/os/LevelDBStore.cc13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/os/LevelDBStore.cc b/src/os/LevelDBStore.cc
index d883797f75d..85b86e41078 100644
--- a/src/os/LevelDBStore.cc
+++ b/src/os/LevelDBStore.cc
@@ -228,26 +228,27 @@ void LevelDBStore::compact_range_async(const string& start, const string& end)
// try to merge adjacent ranges. this is O(n), but the queue should
// be short. note that we do not cover all overlap cases and merge
// opportunities here, but we capture the ones we currently need.
- list< pair<string,string> >::iterator p;
- for (p = compact_queue.begin(); p != compact_queue.end(); ++p) {
+ list< pair<string,string> >::iterator p = compact_queue.begin();
+ while (p != compact_queue.end()) {
if (p->first == start && p->second == end) {
// dup; no-op
return;
- } else if (p->first <= end && p->first > start) {
+ }
+ if (p->first <= end && p->first > start) {
// merge with existing range to the right
compact_queue.push_back(make_pair(start, p->second));
compact_queue.erase(p);
logger->inc(l_leveldb_compact_queue_merge);
break;
- } else if (p->second >= start && p->second < end) {
+ }
+ if (p->second >= start && p->second < end) {
// merge with existing range to the left
compact_queue.push_back(make_pair(p->first, end));
compact_queue.erase(p);
logger->inc(l_leveldb_compact_queue_merge);
break;
- } else {
- ++p;
}
+ ++p;
}
if (p == compact_queue.end()) {
// no merge, new entry.