From c17a21a25122c577bbcded56672bffc8baf4324a Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Wed, 6 Mar 2019 12:57:51 +0100 Subject: [PATCH] common/kv/rocksdb: Fixed merging regions for async compations that could cut compation range. Signed-off-by: Adam Kupczyk --- src/kv/RocksDBStore.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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); -- 2.47.3