Skip to content

Commit

Permalink
issue-2137: if all ranges in CompactionMap have the 'compacted' flag …
Browse files Browse the repository at this point in the history
…then GetTop{Compaction,Garbage}Score should return zero (in order not to trigger dud Compaction iterations all the time) (#2455)
  • Loading branch information
qkrorlqr authored Nov 9, 2024
1 parent ba8f76a commit b8217dc
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
6 changes: 4 additions & 2 deletions cloud/filestore/libs/storage/tablet/model/compaction_map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ struct TGroup
ui32 i = GetTop<TCompareByCompactionScore>(CompactedRanges);
TopCompactionScore = {
GroupIndex + i,
GetCompactionScore(Stats[i])};
CompactedRanges.Get(i) ? 0 : GetCompactionScore(Stats[i])};
}

// 'compacted' flag is deliberately ignored for cleanup score
Expand All @@ -216,7 +216,9 @@ struct TGroup
TopGarbageScore = { rangeId, garbageScore};
} else if (TopGarbageScore.RangeId == rangeId) {
ui32 i = GetTop<TCompareByGarbageScore>(CompactedRanges);
TopGarbageScore = { GroupIndex + i, GetGarbageScore(Stats[i]) };
TopGarbageScore = {
GroupIndex + i,
CompactedRanges.Get(i) ? 0 : GetGarbageScore(Stats[i])};
}

return diff;
Expand Down
16 changes: 16 additions & 0 deletions cloud/filestore/libs/storage/tablet/model/compaction_map_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,22 @@ Y_UNIT_TEST_SUITE(TCompactionMapTest)
UNIT_ASSERT_VALUES_EQUAL(10, topRanges[1].Stats.BlobsCount);
UNIT_ASSERT_VALUES_EQUAL(100, topRanges[1].Stats.DeletionsCount);
UNIT_ASSERT_VALUES_EQUAL(1000, topRanges[1].Stats.GarbageBlocksCount);

compactionMap.Update(1, 20, 200, 2000, true);
compactionMap.Update(0, 10, 100, 1000, true);

topRanges = compactionMap.GetTopRangesByCompactionScore(3);
UNIT_ASSERT_VALUES_EQUAL(0, topRanges.size());

counter = compactionMap.GetTopCompactionScore();
UNIT_ASSERT_VALUES_EQUAL(0, counter.Score);

counter = compactionMap.GetTopCleanupScore();
UNIT_ASSERT_VALUES_EQUAL(10001, counter.RangeId);
UNIT_ASSERT_VALUES_EQUAL(400, counter.Score);

counter = compactionMap.GetTopGarbageScore();
UNIT_ASSERT_VALUES_EQUAL(0, counter.Score);
}

Y_UNIT_TEST(ShouldReturnNonEmptyRanges)
Expand Down

0 comments on commit b8217dc

Please sign in to comment.