aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Efimov <xeno@prnwatch.com>2022-06-15 20:45:41 +0300
committerAlexey Efimov <xeno@prnwatch.com>2022-06-15 20:45:41 +0300
commit3591e3bbb489851930d8202b55551c1369d423fa (patch)
tree2c00a79c67785971c39e28dee67c3a0370decf35
parentedcdffd89ad455563a8ca70d38d1fefc4ecac7ce (diff)
downloadydb-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.cpp19
-rw-r--r--ydb/core/mon/async_http_mon.h10
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