diff options
| author | Vlad Kuznetsov <[email protected]> | 2024-09-30 19:35:38 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-09-30 19:35:38 +0200 |
| commit | 79db2f2626e86d76c2a74007b63c6a1b66b12d6a (patch) | |
| tree | ed0b9b646f9af3c2bba051fe58e8d4673401ded2 | |
| parent | e6283827e1ec4e9419c8e4410702e9711ddcd521 (diff) | |
Add UT in PDisk to check that occupancy is calculated correctly for different color borders (#9912)
| -rw-r--r-- | ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_color_limits.cpp | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_color_limits.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_color_limits.cpp index cc52bda0e0d..5d6112a4293 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_color_limits.cpp +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_color_limits.cpp @@ -1,11 +1,12 @@ #include "blobstorage_pdisk_abstract.h" +#include "blobstorage_pdisk_chunk_tracker.h" +#include "blobstorage_pdisk_color_limits.h" #include "blobstorage_pdisk_impl.h" #include "blobstorage_pdisk_ut.h" #include "blobstorage_pdisk_ut_actions.h" #include "blobstorage_pdisk_ut_helpers.h" #include "blobstorage_pdisk_ut_run.h" -#include "blobstorage_pdisk_color_limits.h" #include <ydb/core/blobstorage/crypto/default.h> @@ -115,7 +116,7 @@ Y_UNIT_TEST_SUITE(TColorLimitsTest) { SetColor(NKikimrBlobStorage::TPDiskSpaceColor::GREEN); for (i64 i = 0; i < (chunks - all); i++) { Cout << "#"; - + if ((++cur % 100) == 0) { cur = 0; Cout << Endl; @@ -138,5 +139,60 @@ Y_UNIT_TEST_SUITE(TColorLimitsTest) { printLimitsFn(65); printLimitsFn(13); } + + NKikimrBlobStorage::TPDiskSpaceColor_E AllColors[] = { + NKikimrBlobStorage::TPDiskSpaceColor::GREEN, + NKikimrBlobStorage::TPDiskSpaceColor::CYAN, + NKikimrBlobStorage::TPDiskSpaceColor::LIGHT_YELLOW, + NKikimrBlobStorage::TPDiskSpaceColor::YELLOW, + NKikimrBlobStorage::TPDiskSpaceColor::LIGHT_ORANGE, + NKikimrBlobStorage::TPDiskSpaceColor::PRE_ORANGE, + NKikimrBlobStorage::TPDiskSpaceColor::ORANGE, + NKikimrBlobStorage::TPDiskSpaceColor::RED, + NKikimrBlobStorage::TPDiskSpaceColor::BLACK, + }; + + Y_UNIT_TEST(OwnerFreeSpaceShare) { + using namespace NPDisk; + + double prevOccupancy = 0; + + for (auto borderColor : AllColors) { + TChunkTracker chunkTracker; + TKeeperParams params { + .TotalChunks = 1000, + .ExpectedOwnerCount = 2, + .SysLogSize = 0, + .CommonLogSize = 0, + .MaxCommonLogChunks = 0, + .HasStaticGroups = false, + .SpaceColorBorder = borderColor, + .SeparateCommonLog = true, + }; + auto limits = NPDisk::TColorLimits::MakeChunkLimits(params.ChunkBaseLimit); + TString errorReason; + bool ok = chunkTracker.Reset(params, limits, errorReason); + UNIT_ASSERT(ok); + + TOwner owner1 = NPDisk::EOwner::OwnerBeginUser + 1; + TOwner owner2 = NPDisk::EOwner::OwnerBeginUser + 2; + + chunkTracker.AddOwner(owner1, TVDiskID()); + chunkTracker.AddOwner(owner2, TVDiskID()); + + double occupancy; + // consume 100% of personal quota and 50% of common quota + auto color = chunkTracker.EstimateSpaceColor(owner1, params.TotalChunks / 2, &occupancy); + double borderOccupancy = limits.GetOccupancyForColor(color, params.TotalChunks); + Cerr << color << " \t" << occupancy << " \t" << borderOccupancy << Endl; + + UNIT_ASSERT_C(color == borderColor, "Because owner consumed all his quota his color should be equal to border"); + if (color != NKikimrBlobStorage::TPDiskSpaceColor::GREEN) { + UNIT_ASSERT_C(std::fabs(occupancy - borderOccupancy) <= 0.001, + "Because owner consumed all his quota his occupancy should be equal to occupancy border"); + } + UNIT_ASSERT_C(occupancy >= prevOccupancy, "check that with Border is increasing fair occupancy is increasing too"); + } + } } } // namespace NKikimr |
