aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzalyalov <zalyalov@yandex-team.com>2023-06-07 12:05:11 +0300
committerzalyalov <zalyalov@yandex-team.com>2023-06-07 12:05:11 +0300
commit1e15d27332622ed8ad02eb5ff93058621e67cbb0 (patch)
tree088b29333cbc92109d3b5b2a05be526b773a7ac3
parent1b0bc8e35f703b96ceea4158139dfa036f64c0f2 (diff)
downloadydb-1e15d27332622ed8ad02eb5ff93058621e67cbb0.tar.gz
use Occupancy instead of AvailableSize
-rw-r--r--ydb/core/mind/hive/hive_ut.cpp33
-rw-r--r--ydb/core/mind/hive/leader_tablet_info.cpp14
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;
}