diff options
author | andrew-rykov <arykov@ydb.tech> | 2023-05-19 13:12:17 +0300 |
---|---|---|
committer | andrew-rykov <arykov@ydb.tech> | 2023-05-19 13:12:17 +0300 |
commit | 1c61d3c39a24c9392a406352c70c70a8c2c8bd79 (patch) | |
tree | 310085b868ad3acc5098dd88e4b0494f234a2f8c | |
parent | 2ae222a2b0deedd196778ba7a703e0b27c97ec3c (diff) | |
download | ydb-1c61d3c39a24c9392a406352c70c70a8c2c8bd79.tar.gz |
orange group when red blue vdisks
-rw-r--r-- | ydb/core/health_check/health_check.cpp | 1 | ||||
-rw-r--r-- | ydb/core/health_check/health_check_ut.cpp | 100 |
2 files changed, 100 insertions, 1 deletions
diff --git a/ydb/core/health_check/health_check.cpp b/ydb/core/health_check/health_check.cpp index a2e0e9ebb65..146a06ff57d 100644 --- a/ydb/core/health_check/health_check.cpp +++ b/ydb/core/health_check/health_check.cpp @@ -1661,6 +1661,7 @@ public: if (!vDiskInfo.GetReplicated()) { context.IssueRecords.clear(); context.ReportStatus(Ydb::Monitoring::StatusFlag::BLUE, "Replication in progress", ETags::VDiskState); + storageVDiskStatus.set_overall(context.GetOverallStatus()); return; } diff --git a/ydb/core/health_check/health_check_ut.cpp b/ydb/core/health_check/health_check_ut.cpp index 79d5d935aca..331ad9e05f9 100644 --- a/ydb/core/health_check/health_check_ut.cpp +++ b/ydb/core/health_check/health_check_ut.cpp @@ -47,7 +47,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) { } int const GROUP_START_ID = 1200; - int const VCARD_START_ID = 5500; + int const VCARD_START_ID = 124; void ChangeDescribeSchemeResult(TEvSchemeShard::TEvDescribeSchemeResult::TPtr* ev, ui64 size = 20000000, ui64 quota = 90000000) { auto record = (*ev)->Get()->MutableRecord(); @@ -96,6 +96,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) { auto group = pbConfig->add_group(); group->CopyFrom(groupSample); group->set_groupid(groupId); + group->set_erasurespecies("block-4-2"); group->clear_vslotid(); for (int j = 0; j < vslotCount; j++) { @@ -134,6 +135,48 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) { } } + void AddVSlotInVDiskStateResponse(NNodeWhiteboard::TEvWhiteboard::TEvVDiskStateResponse::TPtr* ev, TVector<Ydb::Monitoring::StatusFlag::Status> vdiskStatuses) { + auto& pbRecord = (*ev)->Get()->Record; + + auto sample = pbRecord.vdiskstateinfo(0); + pbRecord.clear_vdiskstateinfo(); + + auto groupId = GROUP_START_ID; + auto vslotId = VCARD_START_ID; + + for (auto status: vdiskStatuses) { + switch (status) { + case Ydb::Monitoring::StatusFlag::RED: { + auto state = pbRecord.add_vdiskstateinfo(); + state->CopyFrom(sample); + state->mutable_vdiskid()->set_vdisk(vslotId++); + state->mutable_vdiskid()->set_groupid(groupId); + state->set_vdiskstate(NKikimrWhiteboard::EVDiskState::PDiskError); + break; + } + case Ydb::Monitoring::StatusFlag::BLUE: { + auto state = pbRecord.add_vdiskstateinfo(); + state->CopyFrom(sample); + state->mutable_vdiskid()->set_vdisk(vslotId++); + state->mutable_vdiskid()->set_groupid(groupId); + state->set_vdiskstate(NKikimrWhiteboard::EVDiskState::OK); + state->set_replicated(false); + break; + } + case Ydb::Monitoring::StatusFlag::YELLOW: { + auto state = pbRecord.add_vdiskstateinfo(); + state->CopyFrom(sample); + state->mutable_vdiskid()->set_vdisk(vslotId++); + state->mutable_vdiskid()->set_groupid(groupId); + state->set_vdiskstate(NKikimrWhiteboard::EVDiskState::SyncGuidRecovery); + break; + } + default: + break; + } + } + } + void ListingTest(int const groupNumber, int const vdiscPerGroupNumber) { TPortManager tp; ui16 port = tp.GetPort(2134); @@ -214,6 +257,61 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) { UNIT_ASSERT_VALUES_EQUAL(issueVdiscCount, issueVdiscNumber); } + Y_UNIT_TEST(OrangeGroupWhenRedBlueVdisks) { + TPortManager tp; + ui16 port = tp.GetPort(2134); + ui16 grpcPort = tp.GetPort(2135); + auto settings = TServerSettings(port) + .SetNodeCount(2) + .SetUseRealThreads(false) + .SetDomainName("Root"); + TServer server(settings); + server.EnableGRpc(grpcPort); + TClient client(settings); + TTestActorRuntime &runtime = *server.GetRuntime(); + + TActorId sender = runtime.AllocateEdgeActor(); + TAutoPtr<IEventHandle> handle; + + auto observerFunc = [&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) { + switch (ev->GetTypeRewrite()) { + case TEvSchemeShard::EvDescribeSchemeResult: { + auto *x = reinterpret_cast<NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult::TPtr*>(&ev); + ChangeDescribeSchemeResult(x); + break; + } + case TEvBlobStorage::EvControllerSelectGroupsResult: { + auto *x = reinterpret_cast<TEvBlobStorage::TEvControllerSelectGroupsResult::TPtr*>(&ev); + AddGroupsInControllerSelectGroupsResult(x, 1); + break; + } + case TEvBlobStorage::EvControllerConfigResponse: { + auto *x = reinterpret_cast<TEvBlobStorage::TEvControllerConfigResponse::TPtr*>(&ev); + AddGroupVSlotInControllerConfigResponse(x, 1, 2); + break; + } + case NNodeWhiteboard::TEvWhiteboard::EvVDiskStateResponse: { + auto *x = reinterpret_cast<NNodeWhiteboard::TEvWhiteboard::TEvVDiskStateResponse::TPtr*>(&ev); + AddVSlotInVDiskStateResponse(x, {Ydb::Monitoring::StatusFlag::RED, Ydb::Monitoring::StatusFlag::BLUE}); + break; + } + } + + return TTestActorRuntime::EEventAction::PROCESS; + }; + runtime.SetObserverFunc(observerFunc); + + auto *request = new NHealthCheck::TEvSelfCheckRequest; + runtime.Send(new IEventHandle(NHealthCheck::MakeHealthCheckID(), sender, request, 0)); + NHealthCheck::TEvSelfCheckResult* result = runtime.GrabEdgeEvent<NHealthCheck::TEvSelfCheckResult>(handle); + + for (const auto& issue_log : result->Result.Getissue_log()) { + if (issue_log.type() == "STORAGE_GROUP" && issue_log.location().storage().pool().name() == "/Root:test") { + UNIT_ASSERT_VALUES_EQUAL((int)issue_log.status(), (int)Ydb::Monitoring::StatusFlag::ORANGE); + } + } + } + Y_UNIT_TEST(IssuesGroupsListing) { int groupNumber = NHealthCheck::TSelfCheckRequest::MERGING_IGNORE_SIZE; ListingTest(groupNumber, 1); |