Skip to content

Commit 8447b05

Browse files
committed
Add ICB SemiStrictSpaceIsolation to override SpaceColorBorder (#26038)
(cherry picked from commit 64ee86c)
1 parent a47e532 commit 8447b05

File tree

7 files changed

+59
-5
lines changed

7 files changed

+59
-5
lines changed

ydb/core/blobstorage/pdisk/blobstorage_pdisk_chunk_tracker.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ using TColor = NKikimrBlobStorage::TPDiskSpaceColor;
250250
THolder<TQuotaRecord> SharedQuota;
251251
THolder<TPerOwnerQuotaTracker> OwnerQuota;
252252
TKeeperParams Params;
253+
TColorLimits ColorLimits;
253254

254255
TColor::E ColorBorder = NKikimrBlobStorage::TPDiskSpaceColor::GREEN;
255256
double ColorBorderOccupancy = 0;
@@ -275,6 +276,7 @@ using TColor = NKikimrBlobStorage::TPDiskSpaceColor;
275276

276277
bool Reset(const TKeeperParams &params, const TColorLimits &limits, TString &outErrorReason) {
277278
Params = params;
279+
ColorLimits = limits;
278280

279281
GlobalQuota->Reset(params.TotalChunks, limits);
280282
i64 unappropriated = params.TotalChunks;
@@ -610,6 +612,11 @@ using TColor = NKikimrBlobStorage::TPDiskSpaceColor;
610612
void SetExpectedOwnerCount(size_t newOwnerCount) {
611613
OwnerQuota->SetExpectedOwnerCount(newOwnerCount);
612614
}
615+
616+
void SetColorBorder(NKikimrBlobStorage::TPDiskSpaceColor::E colorBorder) {
617+
ColorBorder = colorBorder;
618+
ColorBorderOccupancy = ColorLimits.GetOccupancyForColor(ColorBorder, GlobalQuota->GetHardLimit(OwnerBeginUser));
619+
}
613620
};
614621

615622
} // NPDisk

ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ TPDisk::TPDisk(std::shared_ptr<TPDiskCtx> pCtx, const TIntrusivePtr<TPDiskConfig
6666
UseNoopSchedulerSSD = TControlWrapper(Cfg->UseNoopScheduler, 0, 1);
6767
UseNoopSchedulerHDD = TControlWrapper(Cfg->UseNoopScheduler, 0, 1);
6868

69+
// Override PDiskConfig.SpaceColorBorder:
70+
// 0 - overriding disabled, respect PDiskConfig value
71+
// 1 - LightYellowMove
72+
// 2 - YellowStop
73+
SemiStrictSpaceIsolation = TControlWrapper(0, 0, 2);
74+
SemiStrictSpaceIsolationCached = 0;
75+
6976
if (Cfg->SectorMap) {
7077
auto diskModeParams = Cfg->SectorMap->GetDiskModeParams();
7178
if (diskModeParams) {
@@ -2878,6 +2885,7 @@ bool TPDisk::Initialize() {
28782885
REGISTER_LOCAL_CONTROL(ForsetiOpPieceSizeRot);
28792886
icb->RegisterSharedControl(UseNoopSchedulerHDD, "PDiskControls.UseNoopSchedulerHDD");
28802887
icb->RegisterSharedControl(UseNoopSchedulerSSD, "PDiskControls.UseNoopSchedulerSSD");
2888+
icb->RegisterSharedControl(SemiStrictSpaceIsolation, "PDiskControls.SemiStrictSpaceIsolation");
28812889

28822890
if (Cfg->SectorMap) {
28832891
auto diskModeParams = Cfg->SectorMap->GetDiskModeParams();
@@ -3862,6 +3870,13 @@ void TPDisk::Update() {
38623870
}
38633871
}
38643872

3873+
using TColor = NKikimrBlobStorage::TPDiskSpaceColor;
3874+
if (i64 currentIsolation = SemiStrictSpaceIsolation; currentIsolation != SemiStrictSpaceIsolationCached) {
3875+
TColor::E colorBorder = GetColorBorderIcb();
3876+
Keeper.SetColorBorder(colorBorder);
3877+
SemiStrictSpaceIsolationCached = currentIsolation;
3878+
}
3879+
38653880
// Switch the scheduler when possible
38663881
ForsetiScheduler.SetIsBinLogEnabled(EnableForsetiBinLog);
38673882

ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,16 @@ class TPDisk : public IPDisk {
110110
TControlWrapper ForsetiOpPieceSizeRot;
111111
TControlWrapper UseNoopSchedulerSSD;
112112
TControlWrapper UseNoopSchedulerHDD;
113+
TControlWrapper SemiStrictSpaceIsolation;
114+
i64 SemiStrictSpaceIsolationCached = 0;
115+
NKikimrBlobStorage::TPDiskSpaceColor::E GetColorBorderIcb() {
116+
using TColor = NKikimrBlobStorage::TPDiskSpaceColor;
117+
switch (SemiStrictSpaceIsolation) {
118+
case 1: return TColor::LIGHT_YELLOW;
119+
case 2: return TColor::YELLOW;
120+
default: return Cfg->SpaceColorBorder;
121+
}
122+
}
113123
bool UseNoopSchedulerCached = false;
114124

115125
// SectorMap Controls

ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1655,7 +1655,7 @@ void TPDisk::ProcessReadLogResult(const NPDisk::TEvReadLogResult &evReadLogResul
16551655
}
16561656
params.CommonLogSize = LogChunks.size();
16571657
params.MaxCommonLogChunks = Cfg->MaxCommonLogChunks;
1658-
params.SpaceColorBorder = Cfg->SpaceColorBorder;
1658+
params.SpaceColorBorder = GetColorBorderIcb();
16591659
params.ChunkBaseLimit = Cfg->ChunkBaseLimit;
16601660
for (ui32 ownerId = OwnerBeginUser; ownerId < OwnerEndUser; ++ownerId) {
16611661
if (OwnerData[ownerId].VDiskId != TVDiskID::InvalidId) {

ydb/core/blobstorage/pdisk/blobstorage_pdisk_keeper.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,10 +176,18 @@ class TKeeper {
176176
return ChunkTracker.ColorFlagLimit(owner, color);
177177
}
178178

179+
//
180+
// Runtime (re)configuration
181+
//
182+
179183
void SetExpectedOwnerCount(size_t newOwnerCount) {
180184
ChunkTracker.SetExpectedOwnerCount(newOwnerCount);
181185
}
182186

187+
void SetColorBorder(NKikimrBlobStorage::TPDiskSpaceColor::E colorBorder) {
188+
ChunkTracker.SetColorBorder(colorBorder);
189+
}
190+
183191
//
184192
// GUI
185193
//

ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
12751275
const ui32 firstNodeId = testCtx.GetRuntime()->GetFirstNodeId();
12761276
auto pdiskConfig = testCtx.GetPDiskConfig();
12771277
using TColor = NKikimrBlobStorage::TPDiskSpaceColor;
1278-
pdiskConfig->SpaceColorBorder = TColor::YELLOW;
1278+
pdiskConfig->SpaceColorBorder = TColor::ORANGE;
12791279
testCtx.UpdateConfigRecreatePDisk(pdiskConfig);
12801280
// The actual value of SharedQuota.HardLimit internally initialized in TActorTestContext
12811281
// Feel free to update if some day it changes
@@ -1329,7 +1329,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
13291329
}
13301330
vdisk0.CommitReservedChunks();
13311331

1332-
CheckEvCheckSpace(testCtx, vdisk0, sharedFree, fairQuota, vdisk0Used, 2, 3, TColor::YELLOW);
1332+
CheckEvCheckSpace(testCtx, vdisk0, sharedFree, fairQuota, vdisk0Used, 2, 3, TColor::ORANGE);
13331333
CheckEvCheckSpace(testCtx, vdisk1, sharedFree, fairQuota*2, 0, 2, 3, TColor::GREEN);
13341334

13351335
// State 4:
@@ -1363,10 +1363,19 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
13631363

13641364
fairQuota = sharedQuota / 4;
13651365
UNIT_ASSERT_VALUES_EQUAL(vdisk0Used, fairQuota);
1366-
CheckEvCheckSpace(testCtx, vdisk0, sharedFree, fairQuota, vdisk0Used, 3, 4, TColor::YELLOW);
1366+
CheckEvCheckSpace(testCtx, vdisk0, sharedFree, fairQuota, vdisk0Used, 3, 4, TColor::ORANGE);
13671367
CheckEvCheckSpace(testCtx, vdisk1, sharedFree, fairQuota, 0, 3, 4, TColor::GREEN);
13681368
CheckEvCheckSpace(testCtx, vdisk2, sharedFree, fairQuota*2, 0, 3, 4, TColor::GREEN);
13691369

1370+
auto &icb = testCtx.GetRuntime()->GetAppData().Icb;
1371+
TControlWrapper semiStrictSpaceIsolation(0, 0, 2);
1372+
TControlBoard::RegisterSharedControl(semiStrictSpaceIsolation, icb->PDiskControls.SemiStrictSpaceIsolation);
1373+
semiStrictSpaceIsolation = 1;
1374+
CheckEvCheckSpace(testCtx, vdisk0, sharedFree, fairQuota, vdisk0Used, 3, 4, TColor::LIGHT_YELLOW);
1375+
semiStrictSpaceIsolation = 2;
1376+
CheckEvCheckSpace(testCtx, vdisk0, sharedFree, fairQuota, vdisk0Used, 3, 4, TColor::YELLOW);
1377+
semiStrictSpaceIsolation = 0;
1378+
13701379
// State 6:
13711380
// Owners.GroupSizeInUnits: [0u, 2u, 1u]
13721381
// Owners.GroupSizeInUnits: [1, 1, 1]
@@ -1399,7 +1408,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
13991408

14001409
fairQuota = sharedQuota / 8;
14011410
UNIT_ASSERT_VALUES_EQUAL(vdisk0Used, fairQuota*2);
1402-
CheckEvCheckSpace(testCtx, vdisk0, sharedFree, fairQuota, vdisk0Used, 3, 4, TColor::YELLOW);
1411+
CheckEvCheckSpace(testCtx, vdisk0, sharedFree, fairQuota, vdisk0Used, 3, 4, TColor::ORANGE);
14031412
CheckEvCheckSpace(testCtx, vdisk1, sharedFree, fairQuota*2, 0, 3, 4, TColor::GREEN);
14041413
CheckEvCheckSpace(testCtx, vdisk2, sharedFree, fairQuota, 0, 3, 4, TColor::GREEN);
14051414

ydb/core/protos/config.proto

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1774,6 +1774,11 @@ message TImmediateControlsConfig {
17741774
MinValue: 0,
17751775
MaxValue: 1,
17761776
DefaultValue: 0 }];
1777+
optional uint64 SemiStrictSpaceIsolation = 5 [(ControlOptions) = {
1778+
Description: "If not 0, override PDiskConfig.SpaceColorBorder: 1 - LightYellowMove, 2 - YellowStop",
1779+
MinValue: 0,
1780+
MaxValue: 2,
1781+
DefaultValue: 0 }];
17771782

17781783
}
17791784

0 commit comments

Comments
 (0)