Skip to content

Commit a0930a2

Browse files
authored
minor fixes for storage groups (#10249)
1 parent 912ae27 commit a0930a2

File tree

1 file changed

+38
-8
lines changed

1 file changed

+38
-8
lines changed

ydb/core/viewer/storage_groups.h

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ class TStorageGroups : public TViewerPipeClient {
267267
TString Erasure;
268268
TErasureType::EErasureSpecies ErasureSpecies = TErasureType::ErasureNone;
269269
TString State;
270+
ui32 StateSortKey = 0;
270271
ui32 EncryptionMode = 0;
271272
ui64 AllocationUnits = 0;
272273
float Usage = 0;
@@ -290,11 +291,13 @@ class TStorageGroups : public TViewerPipeClient {
290291
TString result;
291292
result += ::ToString(failedDomains.size());
292293
result += '(';
294+
bool was_domains = false;
293295
for (ui8 domains : failedDomains) {
294-
if (!result.empty()) {
296+
if (was_domains) {
295297
result += ',';
296298
}
297299
result += ::ToString(domains);
300+
was_domains = true;
298301
}
299302
result += ')';
300303
return result;
@@ -377,35 +380,43 @@ class TStorageGroups : public TViewerPipeClient {
377380
if (MissingDisks == 0) {
378381
Overall = NKikimrViewer::EFlag::Green;
379382
State = "ok";
383+
StateSortKey = 0;
380384
} else {
381385
if (ErasureSpecies == TErasureType::ErasureNone) {
382386
TString state;
383387
Overall = NKikimrViewer::EFlag::Red;
384388
if (MissingDisks == startingDisks) {
385389
state = "starting";
390+
StateSortKey = 10;
386391
} else {
387392
state = "dead";
393+
StateSortKey = 100;
388394
}
389395
State = TStringBuilder() << state << ':' << MissingDisks;
390396
} else if (ErasureSpecies == TErasureType::Erasure4Plus2Block) {
391397
TString state;
392398
if (MissingDisks > 2) {
393399
Overall = NKikimrViewer::EFlag::Red;
394400
state = "dead";
401+
StateSortKey = 100;
395402
} else if (MissingDisks == 2) {
396403
Overall = NKikimrViewer::EFlag::Orange;
397404
state = "degraded";
405+
StateSortKey = 50 + MissingDisks;
398406
} else if (MissingDisks == 1) {
399407
if (MissingDisks == replicatingDisks + startingDisks) {
400408
Overall = NKikimrViewer::EFlag::Blue;
401409
if (replicatingDisks) {
402410
state = "replicating";
411+
StateSortKey = 20;
403412
} else {
404413
state = "starting";
414+
StateSortKey = 10;
405415
}
406416
} else {
407417
Overall = NKikimrViewer::EFlag::Yellow;
408418
state = "degraded";
419+
StateSortKey = 50 + MissingDisks;
409420
}
410421
}
411422
State = TStringBuilder() << state << ':' << MissingDisks;
@@ -418,20 +429,25 @@ class TStorageGroups : public TViewerPipeClient {
418429
if (failedDomainsPerRealm.size() > 2 || (failedDomainsPerRealm.size() == 2 && failedDomainsPerRealm[1] > 1)) {
419430
Overall = NKikimrViewer::EFlag::Red;
420431
state = "dead";
432+
StateSortKey = 100;
421433
} else if (failedDomainsPerRealm.size() == 2) {
422434
Overall = NKikimrViewer::EFlag::Orange;
423435
state = "degraded";
436+
StateSortKey = 50 + failedDomainsPerRealm.size() * 10 + MissingDisks;
424437
} else if (failedDomainsPerRealm.size()) {
425438
if (MissingDisks == replicatingDisks + startingDisks) {
426439
Overall = NKikimrViewer::EFlag::Blue;
427440
if (replicatingDisks > startingDisks) {
428441
state = "replicating";
442+
StateSortKey = 20;
429443
} else {
430444
state = "starting";
445+
StateSortKey = 10;
431446
}
432447
} else {
433448
Overall = NKikimrViewer::EFlag::Yellow;
434449
state = "degraded";
450+
StateSortKey = 50 + failedDomainsPerRealm.size() * 10 + MissingDisks;
435451
}
436452
}
437453
State = TStringBuilder() << state << ':' << PrintDomains(failedDomainsPerRealm);
@@ -533,8 +549,9 @@ class TStorageGroups : public TViewerPipeClient {
533549
case EGroupFields::PoolName:
534550
case EGroupFields::Kind:
535551
case EGroupFields::MediaType:
536-
case EGroupFields::State:
537552
return GetGroupName(groupBy);
553+
case EGroupFields::State:
554+
return StateSortKey;
538555
case EGroupFields::Usage:
539556
return Usage;
540557
case EGroupFields::DiskSpaceUsage:
@@ -1091,11 +1108,11 @@ class TStorageGroups : public TViewerPipeClient {
10911108
case EGroupFields::Kind:
10921109
case EGroupFields::Encryption:
10931110
case EGroupFields::MediaType:
1094-
case EGroupFields::State:
10951111
GroupCollection();
10961112
SortCollection(GroupGroups, [](const TGroupGroup& groupGroup) { return groupGroup.SortKey; });
10971113
NeedGroup = false;
10981114
break;
1115+
case EGroupFields::State:
10991116
case EGroupFields::Usage:
11001117
case EGroupFields::DiskSpaceUsage:
11011118
case EGroupFields::MissingDisks:
@@ -1169,7 +1186,7 @@ class TStorageGroups : public TViewerPipeClient {
11691186
SortCollection(GroupView, [](const TGroup* group) { return group->Write; }, ReverseSort);
11701187
break;
11711188
case EGroupFields::State:
1172-
SortCollection(GroupView, [](const TGroup* group) { return group->State; }, ReverseSort);
1189+
SortCollection(GroupView, [](const TGroup* group) { return group->StateSortKey; }, ReverseSort);
11731190
break;
11741191
case EGroupFields::Latency:
11751192
SortCollection(GroupView, [](const TGroup* group) { return group->GetLatencyForSort(); }, ReverseSort);
@@ -1207,8 +1224,10 @@ class TStorageGroups : public TViewerPipeClient {
12071224
ApplyLimit();
12081225
}
12091226

1227+
bool CollectedHiveData = false;
1228+
12101229
void CollectHiveData() {
1211-
if (FieldsNeeded(FieldsHive)) {
1230+
if (!CollectedHiveData) {
12121231
if (!GroupView.empty()) {
12131232
ui64 hiveId = AppData()->DomainsInfo->GetHive();
12141233
if (hiveId != TDomainsInfo::BadTabletId) {
@@ -1226,6 +1245,7 @@ class TStorageGroups : public TViewerPipeClient {
12261245
++NavigateKeySetInFlight;
12271246
}
12281247
}
1248+
CollectedHiveData = true;
12291249
}
12301250
}
12311251

@@ -1341,7 +1361,6 @@ class TStorageGroups : public TViewerPipeClient {
13411361
}
13421362
FieldsAvailable |= FieldsBsPools;
13431363
ApplyEverything();
1344-
CollectHiveData();
13451364
} else {
13461365
AddProblem("bsc-storage-pools-no-data");
13471366
}
@@ -1427,6 +1446,9 @@ class TStorageGroups : public TViewerPipeClient {
14271446
}
14281447
}
14291448
if (AreBSControllerRequestsDone()) {
1449+
if (FieldsNeeded(FieldsHive) && !CollectedHiveData) {
1450+
CollectHiveData();
1451+
}
14301452
if (FieldsAvailable.test(+EGroupFields::GroupId) && FieldsNeeded(FieldsHive) && NavigateKeySetInFlight == 0 && HiveStorageStatsInFlight == 0) {
14311453
if (GroupsByGroupId.empty()) {
14321454
RebuildGroupsByGroupId();
@@ -2076,8 +2098,16 @@ class TStorageGroups : public TViewerPipeClient {
20762098
if (FieldsAvailable.test(+EGroupFields::PoolName)) {
20772099
jsonGroup.SetPoolName(group->PoolName);
20782100
}
2079-
for (const TVDisk& vdisk : group->VDisks) {
2080-
RenderVDisk(*jsonGroup.AddVDisks(), vdisk);
2101+
std::vector<const TVDisk*> vdisks;
2102+
vdisks.resize(group->VDisks.size());
2103+
for (size_t idx = 0; idx < group->VDisks.size(); ++idx) {
2104+
vdisks[idx] = &group->VDisks[idx];
2105+
}
2106+
std::sort(vdisks.begin(), vdisks.end(), [](const TVDisk* a, const TVDisk* b) {
2107+
return a->VDiskId < b->VDiskId;
2108+
});
2109+
for (const TVDisk* vdisk : vdisks) {
2110+
RenderVDisk(*jsonGroup.AddVDisks(), *vdisk);
20812111
}
20822112
if (FieldsAvailable.test(+EGroupFields::Encryption)) {
20832113
jsonGroup.SetEncryption(group->EncryptionMode);

0 commit comments

Comments
 (0)