11#include " checker.h"
2+ #include " fetcher.h"
23
34#include < ydb/core/base/path.h>
45#include < ydb/core/cms/console/configs_dispatcher.h>
@@ -153,7 +154,7 @@ class TResourcePoolClassifierPreparationActor : public TActorBootstrapped<TResou
153154 return ;
154155 }
155156
156- if (ev->Get ()->NumberClassifiers >= CLASSIFIER_COUNT_LIMIT) {
157+ if (Context. GetActivityType () == NMetadata::NModifications::IOperationsManager::EActivityType::Create && ev->Get ()->NumberClassifiers >= CLASSIFIER_COUNT_LIMIT) {
157158 FailAndPassAway (TStringBuilder () << " Number of resource pool classifiers reached limit in " << CLASSIFIER_COUNT_LIMIT);
158159 return ;
159160 }
@@ -204,11 +205,28 @@ class TResourcePoolClassifierPreparationActor : public TActorBootstrapped<TResou
204205 CheckFeatureFlag (ev->Get ()->Config ->GetFeatureFlags ());
205206 }
206207
208+ void Handle (NMetadata::NProvider::TEvRefreshSubscriberData::TPtr& ev) {
209+ const auto & snapshot = ev->Get ()->GetSnapshotAs <TResourcePoolClassifierSnapshot>();
210+ for (const auto & objectRecord : AlterContext.GetRestoreObjectIds ().GetTableRecords ()) {
211+ TResourcePoolClassifierConfig object;
212+ TResourcePoolClassifierConfig::TDecoder::DeserializeFromRecord (object, objectRecord);
213+
214+ if (!snapshot->GetClassifierConfig (CanonizePath (object.GetDatabase ()), object.GetName ())) {
215+ FailAndPassAway (TStringBuilder () << " Classifier with name " << object.GetName () << " not found in database " << object.GetDatabase ());
216+ return ;
217+ }
218+ }
219+
220+ ExistenceChecked = true ;
221+ TryFinish ();
222+ }
223+
207224 STRICT_STFUNC (StateFunc,
208225 hFunc (TEvPrivate::TEvRanksCheckerResponse, Handle);
209226 hFunc (TEvPrivate::TEvFetchDatabaseResponse, Handle);
210227 hFunc (TEvents::TEvUndelivered, Handle);
211228 hFunc (NConsole::TEvConfigsDispatcher::TEvGetConfigResponse, Handle);
229+ hFunc (NMetadata::NProvider::TEvRefreshSubscriberData, Handle)
212230 )
213231
214232private:
@@ -237,14 +255,14 @@ class TResourcePoolClassifierPreparationActor : public TActorBootstrapped<TResou
237255 }
238256
239257 Register (new TQueryRetryActor<TRanksCheckerActor, TEvPrivate::TEvRanksCheckerResponse, TString, TString, TString, std::unordered_map<i64 , TString>>(
240- SelfId (), Context.GetExternalData ().GetDatabase (), AlterContext.SessionId , AlterContext.TransactionId , ranksToNames
258+ SelfId (), Context.GetExternalData ().GetDatabase (), AlterContext.GetSessionId () , AlterContext.GetTransactionId () , ranksToNames
241259 ));
242260 }
243261
244262 void CheckFeatureFlag (const NKikimrConfig::TFeatureFlags& featureFlags) {
245263 if (Context.GetActivityType () == NMetadata::NModifications::IOperationsManager::EActivityType::Drop) {
246264 FeatureFlagChecked = true ;
247- TryFinish ();
265+ ValidateExistence ();
248266 return ;
249267 }
250268
@@ -258,6 +276,16 @@ class TResourcePoolClassifierPreparationActor : public TActorBootstrapped<TResou
258276 }
259277
260278 FeatureFlagChecked = true ;
279+ ValidateExistence ();
280+ }
281+
282+ void ValidateExistence () {
283+ if (Context.GetActivityType () != NMetadata::NModifications::IOperationsManager::EActivityType::Create && NMetadata::NProvider::TServiceOperator::IsEnabled ()) {
284+ Send (NMetadata::NProvider::MakeServiceId (SelfId ().NodeId ()), new NMetadata::NProvider::TEvAskSnapshot (std::make_shared<TResourcePoolClassifierSnapshotsFetcher>()));
285+ return ;
286+ }
287+
288+ ExistenceChecked = true ;
261289 TryFinish ();
262290 }
263291
@@ -271,7 +299,7 @@ class TResourcePoolClassifierPreparationActor : public TActorBootstrapped<TResou
271299 }
272300
273301 void TryFinish () {
274- if (!FeatureFlagChecked || !RanksChecked) {
302+ if (!FeatureFlagChecked || !RanksChecked || !ExistenceChecked ) {
275303 return ;
276304 }
277305
@@ -286,6 +314,7 @@ class TResourcePoolClassifierPreparationActor : public TActorBootstrapped<TResou
286314 bool Serverless = false ;
287315 bool FeatureFlagChecked = false ;
288316 bool RanksChecked = false ;
317+ bool ExistenceChecked = false ;
289318
290319 NMetadata::NModifications::IAlterPreparationController<TResourcePoolClassifierConfig>::TPtr Controller;
291320 std::vector<TResourcePoolClassifierConfig> PatchedObjects;
0 commit comments