@@ -228,12 +228,13 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
228
228
TTabletId HiveId = {};
229
229
TPathId ResourcePathId = {};
230
230
TVector<TNodeId> ComputeNodeIds;
231
- TVector <TString> StoragePoolNames;
231
+ THashSet <TString> StoragePoolNames;
232
232
THashMap<std::pair<TTabletId, NNodeWhiteboard::TFollowerId>, const NKikimrHive::TTabletInfo*> MergedTabletState;
233
233
THashMap<TNodeId, TNodeTabletState> MergedNodeTabletState;
234
234
THashMap<TNodeId, ui32> NodeRestartsPerPeriod;
235
235
ui64 StorageQuota;
236
236
ui64 StorageUsage;
237
+ TMaybeServerlessComputeResourcesMode ServerlessComputeResourcesMode;
237
238
};
238
239
239
240
struct TSelfCheckResult {
@@ -514,7 +515,7 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
514
515
TDuration Timeout = TDuration::MilliSeconds(20000 );
515
516
static constexpr TStringBuf STATIC_STORAGE_POOL_NAME = " static" ;
516
517
517
- bool IsSpecificDatabaseFilter () {
518
+ bool IsSpecificDatabaseFilter () const {
518
519
return FilterDatabase && FilterDatabase != DomainPath;
519
520
}
520
521
@@ -593,7 +594,7 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
593
594
StoragePoolState[storagePoolName].Groups .emplace (group.groupid ());
594
595
595
596
if (!IsSpecificDatabaseFilter ()) {
596
- DatabaseState[DomainPath].StoragePoolNames .emplace_back (storagePoolName);
597
+ DatabaseState[DomainPath].StoragePoolNames .emplace (storagePoolName);
597
598
}
598
599
}
599
600
}
@@ -869,12 +870,12 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
869
870
TDatabaseState& state (DatabaseState[path]);
870
871
for (const auto & storagePool : ev->Get ()->GetRecord ().pathdescription ().domaindescription ().storagepools ()) {
871
872
TString storagePoolName = storagePool.name ();
872
- state.StoragePoolNames .emplace_back (storagePoolName);
873
+ state.StoragePoolNames .emplace (storagePoolName);
873
874
StoragePoolState[storagePoolName].Kind = storagePool.kind ();
874
875
RequestSelectGroups (storagePoolName);
875
876
}
876
877
if (path == DomainPath) {
877
- state.StoragePoolNames .emplace_back (STATIC_STORAGE_POOL_NAME);
878
+ state.StoragePoolNames .emplace (STATIC_STORAGE_POOL_NAME);
878
879
}
879
880
state.StorageUsage = ev->Get ()->GetRecord ().pathdescription ().domaindescription ().diskspaceusage ().tables ().totalsize ();
880
881
state.StorageQuota = ev->Get ()->GetRecord ().pathdescription ().domaindescription ().databasequotas ().data_size_hard_quota ();
@@ -888,12 +889,19 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
888
889
if (ev->Get ()->Request ->ResultSet .size () == 1 && ev->Get ()->Request ->ResultSet .begin ()->Status == NSchemeCache::TSchemeCacheNavigate::EStatus::Ok) {
889
890
auto domainInfo = ev->Get ()->Request ->ResultSet .begin ()->DomainInfo ;
890
891
TString path = CanonizePath (ev->Get ()->Request ->ResultSet .begin ()->Path );
891
-
892
- if (domainInfo->DomainKey != domainInfo->ResourcesDomainKey ) {
893
- if (SharedDatabases.emplace (domainInfo->ResourcesDomainKey , path).second ) {
894
- RequestSchemeCacheNavigate (domainInfo->ResourcesDomainKey );
892
+ if (domainInfo->IsServerless ()) {
893
+ if (NeedHealthCheckForServerless (domainInfo)) {
894
+ if (SharedDatabases.emplace (domainInfo->ResourcesDomainKey , path).second ) {
895
+ RequestSchemeCacheNavigate (domainInfo->ResourcesDomainKey );
896
+ }
897
+ DatabaseState[path].ResourcePathId = domainInfo->ResourcesDomainKey ;
898
+ DatabaseState[path].ServerlessComputeResourcesMode = domainInfo->ServerlessComputeResourcesMode ;
899
+ } else {
900
+ DatabaseState.erase (path);
901
+ DatabaseStatusByPath.erase (path);
902
+ RequestDone (" TEvNavigateKeySetResult" );
903
+ return ;
895
904
}
896
- DatabaseState[path].ResourcePathId = domainInfo->ResourcesDomainKey ;
897
905
}
898
906
TTabletId hiveId = domainInfo->Params .GetHive ();
899
907
if (hiveId) {
@@ -918,6 +926,11 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
918
926
RequestDone (" TEvNavigateKeySetResult" );
919
927
}
920
928
929
+ bool NeedHealthCheckForServerless (TIntrusivePtr<NSchemeCache::TDomainInfo> domainInfo) const {
930
+ return IsSpecificDatabaseFilter ()
931
+ || domainInfo->ServerlessComputeResourcesMode == NKikimrSubDomains::EServerlessComputeResourcesModeExclusive;
932
+ }
933
+
921
934
void Handle (TEvHive::TEvResponseHiveDomainStats::TPtr& ev) {
922
935
TTabletId hiveId = TabletRequests.CompleteRequest (ev->Cookie );
923
936
for (const NKikimrHive::THiveDomainStats& hiveStat : ev->Get ()->Record .GetDomainStats ()) {
@@ -951,15 +964,9 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
951
964
Ydb::Cms::GetDatabaseStatusResult getTenantStatusResult;
952
965
operation.result ().UnpackTo (&getTenantStatusResult);
953
966
TString path = getTenantStatusResult.path ();
954
-
955
- bool ignoreServerlessDatabases = !IsSpecificDatabaseFilter (); // we don't ignore sl database if it was exactly specified
956
- if (getTenantStatusResult.has_serverless_resources () && ignoreServerlessDatabases) {
957
- DatabaseState.erase (path);
958
- } else {
959
- DatabaseStatusByPath[path] = std::move (getTenantStatusResult);
960
- DatabaseState[path];
961
- RequestSchemeCacheNavigate (path);
962
- }
967
+ DatabaseStatusByPath[path] = std::move (getTenantStatusResult);
968
+ DatabaseState[path];
969
+ RequestSchemeCacheNavigate (path);
963
970
}
964
971
RequestDone (" TEvGetTenantStatusResponse" );
965
972
}
@@ -1298,7 +1305,9 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
1298
1305
1299
1306
void FillCompute (TDatabaseState& databaseState, Ydb::Monitoring::ComputeStatus& computeStatus, TSelfCheckContext context) {
1300
1307
TVector<TNodeId>* computeNodeIds = &databaseState.ComputeNodeIds ;
1301
- if (databaseState.ResourcePathId ) {
1308
+ if (databaseState.ResourcePathId
1309
+ && databaseState.ServerlessComputeResourcesMode != NKikimrSubDomains::EServerlessComputeResourcesModeExclusive)
1310
+ {
1302
1311
auto itDatabase = FilterDomainKey.find (TSubDomainKey (databaseState.ResourcePathId .OwnerId , databaseState.ResourcePathId .LocalPathId ));
1303
1312
if (itDatabase != FilterDomainKey.end ()) {
1304
1313
const TString& sharedDatabaseName = itDatabase->second ;
@@ -2124,7 +2133,7 @@ class TSelfCheckRequest : public TActorBootstrapped<TSelfCheckRequest> {
2124
2133
TDatabaseState unknownDatabase;
2125
2134
for (auto & [name, pool] : StoragePoolState) {
2126
2135
if (StoragePoolSeen.count (name) == 0 ) {
2127
- unknownDatabase.StoragePoolNames .push_back (name);
2136
+ unknownDatabase.StoragePoolNames .insert (name);
2128
2137
}
2129
2138
}
2130
2139
if (!unknownDatabase.StoragePoolNames .empty ()) {
0 commit comments