@@ -146,7 +146,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
146
146
}
147
147
148
148
auto groupId = GROUP_START_ID;
149
-
149
+
150
150
auto group = pbConfig->add_group ();
151
151
group->CopyFrom (groupSample);
152
152
group->set_groupid (groupId);
@@ -155,7 +155,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
155
155
156
156
group->clear_vslotid ();
157
157
auto vslotId = VCARD_START_ID;
158
-
158
+
159
159
for (auto status: vdiskStatuses) {
160
160
auto vslot = pbConfig->add_vslot ();
161
161
vslot->CopyFrom (vslotSample);
@@ -192,7 +192,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
192
192
}
193
193
194
194
auto groupId = GROUP_START_ID;
195
-
195
+
196
196
auto group = pbConfig->add_group ();
197
197
group->CopyFrom (groupSample);
198
198
group->set_groupid (groupId);
@@ -201,7 +201,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
201
201
202
202
group->clear_vslotid ();
203
203
auto vslotId = VCARD_START_ID;
204
-
204
+
205
205
for (auto status: vdiskStatuses) {
206
206
auto vslot = pbConfig->add_vslot ();
207
207
vslot->CopyFrom (vslotSample);
@@ -547,7 +547,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
547
547
auto result = RequestHc (1 , 100 , false , true );
548
548
CheckHcProtobufSizeIssue (result, Ydb::Monitoring::StatusFlag::RED, 1 );
549
549
}
550
-
550
+
551
551
void ClearLoadAverage (TEvWhiteboard::TEvSystemStateResponse::TPtr* ev) {
552
552
auto *systemStateInfo = (*ev)->Get ()->Record .MutableSystemStateInfo ();
553
553
for (NKikimrWhiteboard::TSystemStateInfo &state : *systemStateInfo) {
@@ -618,7 +618,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
618
618
(*ev)->Get ()->Record .GetResponse ().operation ().result ().UnpackTo (&listTenantsResult);
619
619
for (const auto &path : paths) {
620
620
listTenantsResult.Addpaths (path);
621
- }
621
+ }
622
622
(*ev)->Get ()->Record .MutableResponse ()->mutable_operation ()->mutable_result ()->PackFrom (listTenantsResult);
623
623
}
624
624
@@ -632,13 +632,13 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
632
632
sharedNodeStats->MutableNodeDomain ()->SetSchemeShard (SHARED_DOMAIN_KEY.OwnerId );
633
633
sharedNodeStats->MutableNodeDomain ()->SetPathId (SHARED_DOMAIN_KEY.LocalPathId );
634
634
}
635
-
635
+
636
636
if (exclusiveDynNodeId) {
637
637
auto *exclusiveNodeStats = record.MutableNodeStats ()->Add ();
638
638
exclusiveNodeStats->SetNodeId (exclusiveDynNodeId);
639
639
exclusiveNodeStats->MutableNodeDomain ()->SetSchemeShard (SERVERLESS_DOMAIN_KEY.OwnerId );
640
640
exclusiveNodeStats->MutableNodeDomain ()->SetPathId (SERVERLESS_DOMAIN_KEY.LocalPathId );
641
- }
641
+ }
642
642
}
643
643
644
644
Y_UNIT_TEST (SpecificServerless) {
@@ -671,7 +671,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
671
671
}
672
672
case TEvTxProxySchemeCache::EvNavigateKeySetResult: {
673
673
auto *x = reinterpret_cast <TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr*>(&ev);
674
- ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeShared, runtime);
674
+ ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeShared, runtime);
675
675
break ;
676
676
}
677
677
case TEvHive::EvResponseHiveNodeStats: {
@@ -762,7 +762,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
762
762
}
763
763
case TEvTxProxySchemeCache::EvNavigateKeySetResult: {
764
764
auto *x = reinterpret_cast <TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr*>(&ev);
765
- ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeExclusive, runtime);
765
+ ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeExclusive, runtime);
766
766
break ;
767
767
}
768
768
case TEvHive::EvResponseHiveNodeStats: {
@@ -864,7 +864,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
864
864
}
865
865
case TEvTxProxySchemeCache::EvNavigateKeySetResult: {
866
866
auto *x = reinterpret_cast <TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr*>(&ev);
867
- ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeShared, runtime);
867
+ ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeShared, runtime);
868
868
break ;
869
869
}
870
870
case TEvHive::EvResponseHiveNodeStats: {
@@ -955,7 +955,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
955
955
}
956
956
case TEvTxProxySchemeCache::EvNavigateKeySetResult: {
957
957
auto *x = reinterpret_cast <TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr*>(&ev);
958
- ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeExclusive, runtime);
958
+ ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeExclusive, runtime);
959
959
break ;
960
960
}
961
961
case TEvHive::EvResponseHiveNodeStats: {
@@ -1000,7 +1000,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
1000
1000
1001
1001
Ctest << result.ShortDebugString ();
1002
1002
UNIT_ASSERT_VALUES_EQUAL (result.self_check_result (), Ydb::Monitoring::SelfCheck::GOOD);
1003
-
1003
+
1004
1004
bool databaseFoundInResult = false ;
1005
1005
for (const auto &database_status : result.database_status ()) {
1006
1006
if (database_status.name () == " /Root/serverless" ) {
@@ -1018,7 +1018,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
1018
1018
}
1019
1019
UNIT_ASSERT (databaseFoundInResult);
1020
1020
}
1021
-
1021
+
1022
1022
Y_UNIT_TEST (ServerlessWhenTroublesWithSharedNodes) {
1023
1023
TPortManager tp;
1024
1024
ui16 port = tp.GetPort (2134 );
@@ -1044,7 +1044,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
1044
1044
}
1045
1045
case TEvTxProxySchemeCache::EvNavigateKeySetResult: {
1046
1046
auto *x = reinterpret_cast <TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr*>(&ev);
1047
- ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeShared, runtime);
1047
+ ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeShared, runtime);
1048
1048
break ;
1049
1049
}
1050
1050
case TEvSchemeShard::EvDescribeSchemeResult: {
@@ -1073,7 +1073,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
1073
1073
return TTestActorRuntime::EEventAction::PROCESS;
1074
1074
};
1075
1075
runtime.SetObserverFunc (observerFunc);
1076
-
1076
+
1077
1077
TActorId sender = runtime.AllocateEdgeActor ();
1078
1078
TAutoPtr<IEventHandle> handle;
1079
1079
@@ -1098,7 +1098,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
1098
1098
UNIT_ASSERT_VALUES_EQUAL (database_status.storage ().pools ().size (), 1 );
1099
1099
UNIT_ASSERT_VALUES_EQUAL (database_status.storage ().pools ()[0 ].id (), SHARED_STORAGE_POOL_NAME);
1100
1100
}
1101
-
1101
+
1102
1102
Y_UNIT_TEST (ServerlessWithExclusiveNodesWhenTroublesWithSharedNodes) {
1103
1103
TPortManager tp;
1104
1104
ui16 port = tp.GetPort (2134 );
@@ -1141,7 +1141,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
1141
1141
}
1142
1142
case TEvTxProxySchemeCache::EvNavigateKeySetResult: {
1143
1143
auto *x = reinterpret_cast <TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr*>(&ev);
1144
- ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeExclusive, runtime);
1144
+ ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeExclusive, runtime);
1145
1145
break ;
1146
1146
}
1147
1147
case TEvHive::EvResponseHiveNodeStats: {
@@ -1277,7 +1277,7 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
1277
1277
}
1278
1278
case TEvTxProxySchemeCache::EvNavigateKeySetResult: {
1279
1279
auto *x = reinterpret_cast <TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr*>(&ev);
1280
- ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeExclusive, runtime);
1280
+ ChangeNavigateKeyResultServerless (x, NKikimrSubDomains::EServerlessComputeResourcesModeExclusive, runtime);
1281
1281
break ;
1282
1282
}
1283
1283
case TEvHive::EvResponseHiveNodeStats: {
@@ -1370,6 +1370,111 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
1370
1370
UNIT_ASSERT (sharedDatabaseFoundInResult);
1371
1371
UNIT_ASSERT (rootDatabaseFoundInResult);
1372
1372
}
1373
- }
1374
1373
1374
+ Y_UNIT_TEST (NoStoragePools) {
1375
+ TPortManager tp;
1376
+ ui16 port = tp.GetPort (2134 );
1377
+ ui16 grpcPort = tp.GetPort (2135 );
1378
+ auto settings = TServerSettings (port)
1379
+ .SetNodeCount (1 )
1380
+ .SetDynamicNodeCount (1 )
1381
+ .SetUseRealThreads (false )
1382
+ .SetDomainName (" Root" );
1383
+ TServer server (settings);
1384
+ server.EnableGRpc (grpcPort);
1385
+ TClient client (settings);
1386
+ TTestActorRuntime& runtime = *server.GetRuntime ();
1387
+
1388
+ auto &dynamicNameserviceConfig = runtime.GetAppData ().DynamicNameserviceConfig ;
1389
+ dynamicNameserviceConfig->MaxStaticNodeId = runtime.GetNodeId (server.StaticNodes () - 1 );
1390
+ dynamicNameserviceConfig->MinDynamicNodeId = runtime.GetNodeId (server.StaticNodes ());
1391
+ dynamicNameserviceConfig->MaxDynamicNodeId = runtime.GetNodeId (server.StaticNodes () + server.DynamicNodes () - 1 );
1392
+
1393
+ ui32 dynNodeId = runtime.GetNodeId (1 );
1394
+
1395
+ const TPathId SUBDOMAIN_KEY = {7000000000 , 1 };
1396
+
1397
+ auto observerFunc = [&](TAutoPtr<IEventHandle>& ev) {
1398
+ switch (ev->GetTypeRewrite ()) {
1399
+ case NConsole::TEvConsole::EvGetTenantStatusResponse: {
1400
+ auto *x = reinterpret_cast <NConsole::TEvConsole::TEvGetTenantStatusResponse::TPtr*>(&ev);
1401
+ ChangeGetTenantStatusResponse (x, " /Root/database" );
1402
+ break ;
1403
+ }
1404
+ case TEvTxProxySchemeCache::EvNavigateKeySetResult: {
1405
+ auto *x = reinterpret_cast <TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr*>(&ev);
1406
+ TSchemeCacheNavigate::TEntry& entry ((*x)->Get ()->Request ->ResultSet .front ());
1407
+ TString path = CanonizePath (entry.Path );
1408
+ if (path == " /Root/database" || entry.TableId .PathId == SUBDOMAIN_KEY) {
1409
+ entry.Status = TSchemeCacheNavigate::EStatus::Ok;
1410
+ entry.Kind = TSchemeCacheNavigate::EKind::KindExtSubdomain;
1411
+ entry.Path = {" Root" , " database" };
1412
+ entry.DomainInfo = MakeIntrusive<TDomainInfo>(SUBDOMAIN_KEY, SUBDOMAIN_KEY);
1413
+ auto domains = runtime.GetAppData ().DomainsInfo ;
1414
+ auto domain = domains->Domains .begin ()->second ;
1415
+ ui64 hiveId = domains->GetHive (domain->DefaultHiveUid );
1416
+ entry.DomainInfo ->Params .SetHive (hiveId);
1417
+ }
1418
+ break ;
1419
+ }
1420
+ case TEvHive::EvResponseHiveNodeStats: {
1421
+ auto *x = reinterpret_cast <TEvHive::TEvResponseHiveNodeStats::TPtr*>(&ev);
1422
+ auto &record = (*x)->Get ()->Record ;
1423
+ auto *nodeStats = record.MutableNodeStats ()->Add ();
1424
+ nodeStats->SetNodeId (dynNodeId);
1425
+ nodeStats->MutableNodeDomain ()->SetSchemeShard (SUBDOMAIN_KEY.OwnerId );
1426
+ nodeStats->MutableNodeDomain ()->SetPathId (SUBDOMAIN_KEY.LocalPathId );
1427
+ break ;
1428
+ }
1429
+ case TEvSchemeShard::EvDescribeSchemeResult: {
1430
+ auto *x = reinterpret_cast <NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult::TPtr*>(&ev);
1431
+ auto record = (*x)->Get ()->MutableRecord ();
1432
+ if (record->path () == " /Root/database" ) {
1433
+ record->set_status (NKikimrScheme::StatusSuccess);
1434
+ // no pools
1435
+ }
1436
+ break ;
1437
+ }
1438
+ case TEvBlobStorage::EvControllerConfigResponse: {
1439
+ auto *x = reinterpret_cast <TEvBlobStorage::TEvControllerConfigResponse::TPtr*>(&ev);
1440
+ TVector<NKikimrBlobStorage::EVDiskStatus> vdiskStatuses = { NKikimrBlobStorage::EVDiskStatus::READY };
1441
+ AddGroupVSlotInControllerConfigResponseWithStaticGroup (x, NKikimrBlobStorage::TGroupStatus::FULL, vdiskStatuses);
1442
+ break ;
1443
+ }
1444
+ case TEvWhiteboard::EvSystemStateResponse: {
1445
+ auto *x = reinterpret_cast <TEvWhiteboard::TEvSystemStateResponse::TPtr*>(&ev);
1446
+ ClearLoadAverage (x);
1447
+ break ;
1448
+ }
1449
+ }
1450
+
1451
+ return TTestActorRuntime::EEventAction::PROCESS;
1452
+ };
1453
+ runtime.SetObserverFunc (observerFunc);
1454
+
1455
+ TActorId sender = runtime.AllocateEdgeActor ();
1456
+ TAutoPtr<IEventHandle> handle;
1457
+
1458
+ auto *request = new NHealthCheck::TEvSelfCheckRequest;
1459
+ request->Request .set_return_verbose_status (true );
1460
+ request->Database = " /Root/database" ;
1461
+ runtime.Send (new IEventHandle (NHealthCheck::MakeHealthCheckID (), sender, request, 0 ));
1462
+ const auto result = runtime.GrabEdgeEvent <NHealthCheck::TEvSelfCheckResult>(handle)->Result ;
1463
+
1464
+ Ctest << result.ShortDebugString ();
1465
+
1466
+ UNIT_ASSERT_VALUES_EQUAL (result.self_check_result (), Ydb::Monitoring::SelfCheck::EMERGENCY);
1467
+ UNIT_ASSERT_VALUES_EQUAL (result.database_status_size (), 1 );
1468
+ const auto &database_status = result.database_status (0 );
1469
+ UNIT_ASSERT_VALUES_EQUAL (database_status.name (), " /Root/database" );
1470
+ UNIT_ASSERT_VALUES_EQUAL (database_status.overall (), Ydb::Monitoring::StatusFlag::RED);
1471
+
1472
+ UNIT_ASSERT_VALUES_EQUAL (database_status.compute ().overall (), Ydb::Monitoring::StatusFlag::GREEN);
1473
+ UNIT_ASSERT_VALUES_EQUAL (database_status.compute ().nodes ().size (), 1 );
1474
+ UNIT_ASSERT_VALUES_EQUAL (database_status.compute ().nodes ()[0 ].id (), ToString (dynNodeId));
1475
+
1476
+ UNIT_ASSERT_VALUES_EQUAL (database_status.storage ().overall (), Ydb::Monitoring::StatusFlag::RED);
1477
+ UNIT_ASSERT_VALUES_EQUAL (database_status.storage ().pools ().size (), 0 );
1478
+ }
1479
+ }
1375
1480
}
0 commit comments