diff options
author | zalyalov <zalyalov@yandex-team.com> | 2023-06-07 12:05:11 +0300 |
---|---|---|
committer | zalyalov <zalyalov@yandex-team.com> | 2023-06-07 12:05:11 +0300 |
commit | 1e15d27332622ed8ad02eb5ff93058621e67cbb0 (patch) | |
tree | 088b29333cbc92109d3b5b2a05be526b773a7ac3 | |
parent | 1b0bc8e35f703b96ceea4158139dfa036f64c0f2 (diff) | |
download | ydb-1e15d27332622ed8ad02eb5ff93058621e67cbb0.tar.gz |
use Occupancy instead of AvailableSize
-rw-r--r-- | ydb/core/mind/hive/hive_ut.cpp | 33 | ||||
-rw-r--r-- | ydb/core/mind/hive/leader_tablet_info.cpp | 14 |
2 files changed, 21 insertions, 26 deletions
diff --git a/ydb/core/mind/hive/hive_ut.cpp b/ydb/core/mind/hive/hive_ut.cpp index 4cffec5b525..2cac6433e51 100644 --- a/ydb/core/mind/hive/hive_ut.cpp +++ b/ydb/core/mind/hive/hive_ut.cpp @@ -2534,15 +2534,18 @@ Y_UNIT_TEST_SUITE(THiveTest) { auto updateDiskStatus = MakeHolder<TEvBlobStorage::TEvControllerUpdateDiskStatus>(); for (ui32 groupId = 0x80000000; groupId < 0x8000000a; ++groupId) { - if (tabletGroups.count(groupId) == 0) { - NKikimrBlobStorage::TVDiskMetrics* vdiskMetrics = updateDiskStatus->Record.AddVDisksMetrics(); - - vdiskMetrics->MutableVDiskId()->SetGroupID(groupId); - vdiskMetrics->MutableVDiskId()->SetGroupGeneration(1); - vdiskMetrics->MutableVDiskId()->SetRing(0); - vdiskMetrics->MutableVDiskId()->SetDomain(0); - vdiskMetrics->MutableVDiskId()->SetVDisk(0); - vdiskMetrics->SetAvailableSize(100000); + NKikimrBlobStorage::TVDiskMetrics* vdiskMetrics = updateDiskStatus->Record.AddVDisksMetrics(); + + vdiskMetrics->MutableVDiskId()->SetGroupID(groupId); + vdiskMetrics->MutableVDiskId()->SetGroupGeneration(1); + vdiskMetrics->MutableVDiskId()->SetRing(0); + vdiskMetrics->MutableVDiskId()->SetDomain(0); + vdiskMetrics->MutableVDiskId()->SetVDisk(0); + + if (tabletGroups.contains(groupId)) { + vdiskMetrics->SetOccupancy(1.0); + } else { + vdiskMetrics->SetOccupancy(0.8); } } @@ -2743,22 +2746,20 @@ Y_UNIT_TEST_SUITE(THiveTest) { struct TTestGroupInfo { ui32 Id; - ui64 AvailiableSize; - ui64 MaximumSize; + double Occupancy; }; auto groupMetricsExchange = MakeHolder<TEvBlobStorage::TEvControllerGroupMetricsExchange>(); - std::vector<TTestGroupInfo> groups = {{initialGroup, 100000, 200000}, - {badGroup, 200000, 800000}, // has more space in absolute units, but less in % - {goodGroup, 105001, 200000}}; + std::vector<TTestGroupInfo> groups = {{initialGroup, 0.9}, + {badGroup, 0.91}, + {goodGroup, 0.89}}; for (const auto& group : groups) { NKikimrBlobStorage::TGroupMetrics* metrics = groupMetricsExchange->Record.AddGroupMetrics(); metrics->SetGroupId(group.Id); metrics->MutableGroupParameters()->SetGroupID(group.Id); metrics->MutableGroupParameters()->SetStoragePoolName("def1"); - metrics->MutableGroupParameters()->MutableAssuredResources()->SetSpace(group.MaximumSize); - metrics->MutableGroupParameters()->SetAvailableSize(group.AvailiableSize); + metrics->MutableGroupParameters()->MutableCurrentResources()->SetOccupancy(group.Occupancy); } runtime.SendToPipe(MakeBSControllerID(0), sender, groupMetricsExchange.Release(), 0, GetPipeConfigWithRetries()); diff --git a/ydb/core/mind/hive/leader_tablet_info.cpp b/ydb/core/mind/hive/leader_tablet_info.cpp index 1a8d3c71301..dd181bc372b 100644 --- a/ydb/core/mind/hive/leader_tablet_info.cpp +++ b/ydb/core/mind/hive/leader_tablet_info.cpp @@ -242,15 +242,9 @@ const NKikimrBlobStorage::TEvControllerSelectGroupsResult::TGroupParameters* TLe auto filterBySpace = [params = *params, currentGroup, &maxUsage](const TStorageGroupInfo& newGroup) -> bool { if (newGroup.IsMatchesParameters(params)) { if (currentGroup) { - double currentMaximumSize = 1.0; - double newMaximumSize = 1.0; - if (newGroup.MaximumSize != 0 && currentGroup->MaximumSize != 0) { - currentMaximumSize = currentGroup->MaximumSize; - newMaximumSize = newGroup.MaximumSize; - } bool result = newGroup.Id != currentGroup->Id - && newGroup.GroupParameters.GetAvailableSize() * currentMaximumSize - > currentGroup->GroupParameters.GetAvailableSize() * newMaximumSize; + && newGroup.GroupParameters.GetCurrentResources().GetOccupancy() + < currentGroup->GroupParameters.GetCurrentResources().GetOccupancy(); if (result) { maxUsage = std::max(maxUsage, newGroup.GetUsage()); } @@ -266,8 +260,8 @@ const NKikimrBlobStorage::TEvControllerSelectGroupsResult::TGroupParameters* TLe auto calculateUsageWithSpacePenalty = [currentGroup, &maxUsage, spacePenaltyThreshold, spacePenalty](const TStorageGroupInfo* newGroup) -> double { double usage = newGroup->GetUsage(); if (currentGroup && currentGroup->MaximumSize) { - if (newGroup->GroupParameters.GetAvailableSize() * currentGroup->MaximumSize - < spacePenaltyThreshold * currentGroup->GroupParameters.GetAvailableSize() * newGroup->MaximumSize) { + if (1 - newGroup->GroupParameters.GetCurrentResources().GetOccupancy() + < spacePenaltyThreshold * (1 - currentGroup->GroupParameters.GetCurrentResources().GetOccupancy())) { double avail = maxUsage - usage; usage = maxUsage - avail * spacePenalty; } |