From 25f24c07480bc1eb7bfbecaf23d9aa84892fc6dd Mon Sep 17 00:00:00 2001 From: "Raphael S. Carvalho" Date: Thu, 16 Jul 2015 18:50:51 -0300 Subject: [PATCH] sstables: fix size-tiered strategy If old average is equals to new average, then we would remove new average entry. That's totally wrong. Signed-off-by: Raphael S. Carvalho --- sstables/compaction.cc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/sstables/compaction.cc b/sstables/compaction.cc index 7d78bfcc48..9cf207189e 100644 --- a/sstables/compaction.cc +++ b/sstables/compaction.cc @@ -210,7 +210,7 @@ size_tiered_compaction_strategy::get_buckets(const sstable_list& sstables) { // group in the same bucket if it's w/in 50% of the average for this bucket, // or this file and the bucket are all considered "small" (less than `minSSTableSize`) for (auto& entry : buckets) { - auto& bucket = entry.second; + std::vector bucket = entry.second; size_t old_average_size = entry.first; if ((size > (old_average_size * bucket_low) && size < (old_average_size * bucket_high)) @@ -220,11 +220,8 @@ size_tiered_compaction_strategy::get_buckets(const sstable_list& sstables) { size_t new_average_size = (total_size + size) / (bucket.size() + 1); bucket.push_back(pair.first); - buckets.insert({ new_average_size, std::move(bucket) }); - - // remove and re-add under new new average size - // NOTE: we must remove bucket just here because we move its vector right above. buckets.erase(old_average_size); + buckets.insert({ new_average_size, std::move(bucket) }); found = true; break;