From: Adam Kupczyk Date: Wed, 6 Mar 2019 11:57:51 +0000 (+0100) Subject: common/kv/rocksdb: Fixed merging regions for async compations that could cut compatio... X-Git-Tag: v15.0.0~165^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F26786%2Fhead;p=ceph.git common/kv/rocksdb: Fixed merging regions for async compations that could cut compation range. Signed-off-by: Adam Kupczyk --- diff --git a/src/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc index 2f47cb5358f80..7cc83a012666a 100644 --- a/src/kv/RocksDBStore.cc +++ b/src/kv/RocksDBStore.cc @@ -1224,15 +1224,18 @@ void RocksDBStore::compact_range_async(const string& start, const string& end) // dup; no-op return; } - if (p->first <= end && p->first > start) { - // merge with existing range to the right - compact_queue.push_back(make_pair(start, p->second)); + if (start <= p->first && p->first <= end) { + // new region crosses start of existing range + // select right bound that is bigger + compact_queue.push_back(make_pair(start, end > p->second ? end : p->second)); compact_queue.erase(p); logger->inc(l_rocksdb_compact_queue_merge); break; } - if (p->second >= start && p->second < end) { - // merge with existing range to the left + if (start <= p->second && p->second <= end) { + // new region crosses end of existing range + //p->first < p->second and p->second <= end, so p->first <= end. + //But we break if previous condition, so start > p->first. compact_queue.push_back(make_pair(p->first, end)); compact_queue.erase(p); logger->inc(l_rocksdb_compact_queue_merge);