@@ -36,12 +36,14 @@ using namespace NResourceBroker;
36
36
#define LOG_W (stream ) LOG_WARN_S(*TlsActivationContext, NKikimrServices::KQP_RESOURCE_MANAGER, stream)
37
37
#define LOG_N (stream ) LOG_NOTICE_S(*TlsActivationContext, NKikimrServices::KQP_RESOURCE_MANAGER, stream)
38
38
39
- #define LOG_AS_C (stream ) LOG_CRIT_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream)
40
- #define LOG_AS_D (stream ) LOG_DEBUG_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream)
41
- #define LOG_AS_I (stream ) LOG_INFO_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream)
42
- #define LOG_AS_E (stream ) LOG_ERROR_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream)
43
- #define LOG_AS_W (stream ) LOG_WARN_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream)
44
- #define LOG_AS_N (stream ) LOG_NOTICE_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream)
39
+ #define LOG_AS_SAFE (log ) {if (ActorSystem) { log ; }}
40
+
41
+ #define LOG_AS_C (stream ) LOG_AS_SAFE(LOG_CRIT_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream))
42
+ #define LOG_AS_D (stream ) LOG_AS_SAFE(LOG_DEBUG_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream))
43
+ #define LOG_AS_I (stream ) LOG_AS_SAFE(LOG_INFO_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream))
44
+ #define LOG_AS_E (stream ) LOG_AS_SAFE(LOG_ERROR_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream))
45
+ #define LOG_AS_W (stream ) LOG_AS_SAFE(LOG_WARN_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream))
46
+ #define LOG_AS_N (stream ) LOG_AS_SAFE(LOG_NOTICE_S(*ActorSystem, NKikimrServices::KQP_RESOURCE_MANAGER, stream))
45
47
46
48
namespace {
47
49
@@ -165,6 +167,7 @@ class TKqpResourceManager : public IKqpResourceManager {
165
167
, TotalMemoryResource(MakeIntrusive<TMemoryResource>(config.GetQueryMemoryLimit(), (double )100 , config.GetSpillingPercent()))
166
168
, ResourceSnapshotState(std::make_shared<TResourceSnapshotState>())
167
169
{
170
+ PublishAfterBootstrap.clear ();
168
171
SetConfigValues (config);
169
172
}
170
173
@@ -179,6 +182,11 @@ class TKqpResourceManager : public IKqpResourceManager {
179
182
config.GetKqpPatternCachePatternAccessTimesBeforeTryToCompile ());
180
183
181
184
CreateResourceInfoExchanger (config.GetInfoExchangerSettings ());
185
+
186
+ if (PublishAfterBootstrap.test ()) {
187
+ FireResourcesPublishing ();
188
+ PublishAfterBootstrap.clear ();
189
+ }
182
190
}
183
191
184
192
const TIntrusivePtr<TKqpCounters>& GetCounters () const override {
@@ -489,7 +497,11 @@ class TKqpResourceManager : public IKqpResourceManager {
489
497
void FireResourcesPublishing () {
490
498
bool prev = PublishScheduled.test_and_set ();
491
499
if (!prev) {
492
- ActorSystem->Send (SelfId, new TEvPrivate::TEvSchedulePublishResources);
500
+ if (Y_LIKELY (ActorSystem)) {
501
+ ActorSystem->Send (SelfId, new TEvPrivate::TEvSchedulePublishResources);
502
+ } else {
503
+ PublishAfterBootstrap.test_and_set ();
504
+ }
493
505
}
494
506
}
495
507
@@ -535,6 +547,7 @@ class TKqpResourceManager : public IKqpResourceManager {
535
547
// current state
536
548
std::atomic<ui64> LastResourceBrokerTaskId = 0 ;
537
549
550
+ std::atomic_flag PublishAfterBootstrap;
538
551
std::atomic_flag PublishScheduled;
539
552
// pattern cache for different actors
540
553
std::shared_ptr<NMiniKQL::TComputationPatternLRUCache> PatternCache;
0 commit comments