diff options
author | Alexey Efimov <xeno@prnwatch.com> | 2022-06-15 20:45:41 +0300 |
---|---|---|
committer | Alexey Efimov <xeno@prnwatch.com> | 2022-06-15 20:45:41 +0300 |
commit | 3591e3bbb489851930d8202b55551c1369d423fa (patch) | |
tree | 2c00a79c67785971c39e28dee67c3a0370decf35 | |
parent | edcdffd89ad455563a8ca70d38d1fefc4ecac7ce (diff) | |
download | ydb-3591e3bbb489851930d8202b55551c1369d423fa.tar.gz |
evaluate path right away because parent page could be destroyed later KIKIMR-15124
ref:49412b85b7f9c8b7697e15a2a15b7124ca7fe646
-rw-r--r-- | ydb/core/mon/async_http_mon.cpp | 19 | ||||
-rw-r--r-- | ydb/core/mon/async_http_mon.h | 10 |
2 files changed, 20 insertions, 9 deletions
diff --git a/ydb/core/mon/async_http_mon.cpp b/ydb/core/mon/async_http_mon.cpp index 835bb094bdf..99fd92134a8 100644 --- a/ydb/core/mon/async_http_mon.cpp +++ b/ydb/core/mon/async_http_mon.cpp @@ -683,8 +683,8 @@ void TAsyncHttpMon::Start(TActorSystem* actorSystem) { ActorSystem->Send(HttpProxyActorId, addPort.release()); ActorSystem->Send(HttpProxyActorId, new NHttp::TEvHttpProxy::TEvRegisterHandler("/", HttpMonServiceActorId)); ActorSystem->Send(HttpProxyActorId, new NHttp::TEvHttpProxy::TEvRegisterHandler("/node", NodeProxyServiceActorId)); - for (NMonitoring::IMonPage* page : ActorMonPages) { - RegisterActorMonPage(page); + for (auto& pageInfo : ActorMonPages) { + RegisterActorMonPage(pageInfo); } ActorMonPages.clear(); } @@ -712,14 +712,14 @@ NMonitoring::TIndexMonPage* TAsyncHttpMon::RegisterIndexPage(const TString& path return page; } -void TAsyncHttpMon::RegisterActorMonPage(NMonitoring::IMonPage* page) { +void TAsyncHttpMon::RegisterActorMonPage(const TActorMonPageInfo& pageInfo) { if (ActorSystem) { - TActorMonPage* actorMonPage = reinterpret_cast<TActorMonPage*>(page); + TActorMonPage* actorMonPage = reinterpret_cast<TActorMonPage*>(pageInfo.Page); auto actorId = ActorSystem->Register( new THttpMonServiceLegacyActor(actorMonPage), TMailboxType::ReadAsFilled, ActorSystem->AppData<NKikimr::TAppData>()->UserPoolId); - ActorSystem->Send(HttpProxyActorId, new NHttp::TEvHttpProxy::TEvRegisterHandler(GetPageFullPath(actorMonPage), actorId)); + ActorSystem->Send(HttpProxyActorId, new NHttp::TEvHttpProxy::TEvRegisterHandler(pageInfo.Path, actorId)); ActorServices.push_back(actorId); } } @@ -741,10 +741,15 @@ NMonitoring::IMonPage* TAsyncHttpMon::RegisterActorPage(TRegisterActorPageFields Register(page); } + TActorMonPageInfo pageInfo = { + .Page = page, + .Path = GetPageFullPath(page), + }; + if (ActorSystem && HttpProxyActorId) { - RegisterActorMonPage(page); + RegisterActorMonPage(pageInfo); } else { - ActorMonPages.push_back(page); + ActorMonPages.emplace_back(pageInfo); } return page; diff --git a/ydb/core/mon/async_http_mon.h b/ydb/core/mon/async_http_mon.h index e7948e14fff..1b09d6be218 100644 --- a/ydb/core/mon/async_http_mon.h +++ b/ydb/core/mon/async_http_mon.h @@ -33,10 +33,16 @@ protected: TActorId HttpProxyActorId; TActorId HttpMonServiceActorId; TActorId NodeProxyServiceActorId; - std::vector<NMonitoring::IMonPage*> ActorMonPages; + + struct TActorMonPageInfo { + NMonitoring::IMonPage* Page; + TString Path; + }; + + std::vector<TActorMonPageInfo> ActorMonPages; std::vector<TActorId> ActorServices; - void RegisterActorMonPage(NMonitoring::IMonPage* page); + void RegisterActorMonPage(const TActorMonPageInfo& pageInfo); }; } // NActors |