mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-22 09:30:45 +00:00
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 <raphaelsc@cloudius-systems.com>
This commit is contained in:
@@ -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<sstables::shared_sstable> 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;
|
||||
|
||||
Reference in New Issue
Block a user