summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlad Kuznetsov <[email protected]>2024-09-30 19:35:38 +0200
committerGitHub <[email protected]>2024-09-30 19:35:38 +0200
commit79db2f2626e86d76c2a74007b63c6a1b66b12d6a (patch)
treeed0b9b646f9af3c2bba051fe58e8d4673401ded2
parente6283827e1ec4e9419c8e4410702e9711ddcd521 (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.cpp60
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