@@ -69,7 +69,8 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
69
69
70
70
struct TTestVSlotInfo {
71
71
std::optional<NKikimrBlobStorage::EVDiskStatus> Status;
72
- ui32 Generation;
72
+ ui32 Generation = DEFAULT_GROUP_GENERATION;
73
+ NKikimrBlobStorage::EDriveStatus PDiskStatus = NKikimrBlobStorage::ACTIVE;
73
74
74
75
TTestVSlotInfo (std::optional<NKikimrBlobStorage::EVDiskStatus> status = NKikimrBlobStorage::READY,
75
76
ui32 generation = DEFAULT_GROUP_GENERATION)
@@ -78,7 +79,11 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
78
79
{
79
80
}
80
81
81
- TTestVSlotInfo (NKikimrBlobStorage::EVDiskStatus status) : Status(status), Generation(DEFAULT_GROUP_GENERATION) {}
82
+ TTestVSlotInfo (NKikimrBlobStorage::EVDiskStatus status, NKikimrBlobStorage::EDriveStatus pDiskStatus = NKikimrBlobStorage::ACTIVE)
83
+ : Status(status)
84
+ , PDiskStatus(pDiskStatus)
85
+ {
86
+ }
82
87
};
83
88
84
89
using TVDisks = TVector<TTestVSlotInfo>;
@@ -223,18 +228,20 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
223
228
entry->mutable_info ()->set_name (STORAGE_POOL_NAME);
224
229
}
225
230
226
- void AddPDisksToSysViewResponse (NSysView::TEvSysView::TEvGetPDisksResponse::TPtr* ev, size_t count , double occupancy) {
231
+ void AddPDisksToSysViewResponse (NSysView::TEvSysView::TEvGetPDisksResponse::TPtr* ev, const TVDisks& vslots , double occupancy) {
227
232
auto & record = (*ev)->Get ()->Record ;
228
233
auto entrySample = record.entries (0 );
229
234
record.clear_entries ();
230
235
auto pdiskId = PDISK_START_ID;
231
236
const size_t totalSize = 3'200'000'000'000ull ;
232
- for (size_t i = 0 ; i < count; ++i) {
237
+ const auto *descriptor = NKikimrBlobStorage::EDriveStatus_descriptor ();
238
+ for (const auto & vslot : vslots) {
233
239
auto * entry = record.add_entries ();
234
240
entry->CopyFrom (entrySample);
235
241
entry->mutable_key ()->set_pdiskid (pdiskId);
236
242
entry->mutable_info ()->set_totalsize (totalSize);
237
243
entry->mutable_info ()->set_availablesize ((1 - occupancy) * totalSize);
244
+ entry->mutable_info ()->set_statusv2 (descriptor->FindValueByNumber (vslot.PDiskStatus )->name ());
238
245
++pdiskId;
239
246
}
240
247
}
@@ -483,7 +490,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
483
490
}
484
491
case NSysView::TEvSysView::EvGetPDisksResponse: {
485
492
auto * x = reinterpret_cast <NSysView::TEvSysView::TEvGetPDisksResponse::TPtr*>(&ev);
486
- AddPDisksToSysViewResponse (x, vdisks. size () , occupancy);
493
+ AddPDisksToSysViewResponse (x, vdisks, occupancy);
487
494
break ;
488
495
}
489
496
case NSysView::TEvSysView::EvGetGroupsResponse: {
@@ -711,6 +718,14 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
711
718
CheckHcResultHasIssuesWithStatus (result, " STORAGE_GROUP" , Ydb::Monitoring::StatusFlag::RED, 1 );
712
719
}
713
720
721
+ Y_UNIT_TEST (YellowIssueReadyVDisksOnFaultyPDisks) {
722
+ auto result = RequestHcWithVdisks (NKikimrBlobStorage::TGroupStatus::PARTIAL, TVDisks{3 , {NKikimrBlobStorage::READY, NKikimrBlobStorage::FAULTY}});
723
+ Cerr << result.ShortDebugString () << Endl;
724
+ CheckHcResultHasIssuesWithStatus (result, " STORAGE_GROUP" , Ydb::Monitoring::StatusFlag::YELLOW, 1 );
725
+ CheckHcResultHasIssuesWithStatus (result, " STORAGE_GROUP" , Ydb::Monitoring::StatusFlag::ORANGE, 0 );
726
+ CheckHcResultHasIssuesWithStatus (result, " STORAGE_GROUP" , Ydb::Monitoring::StatusFlag::RED, 0 );
727
+ }
728
+
714
729
/* HC currently infers group status on its own, so it's never unknown
715
730
Y_UNIT_TEST(RedGroupIssueWhenUnknownGroupStatus) {
716
731
auto result = RequestHcWithVdisks(NKikimrBlobStorage::TGroupStatus::UNKNOWN, {});
0 commit comments