Skip to content

Commit 22c6241

Browse files
authored
Merge 381007a into da40f72
2 parents da40f72 + 381007a commit 22c6241

2 files changed

Lines changed: 59 additions & 30 deletions

File tree

ydb/core/viewer/counters_hosts.h

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ using namespace NActors;
1616
using namespace NNodeWhiteboard;
1717

1818
class TCountersHostsList : public TActorBootstrapped<TCountersHostsList> {
19+
using TBase = TActorBootstrapped<TCountersHostsList>;
20+
1921
IViewer* Viewer;
2022
NMon::TEvHttpInfo::TPtr Event;
2123
THolder<TEvInterconnect::TEvNodesInfo> NodesInfo;
2224
TMap<TNodeId, THolder<TEvWhiteboard::TEvSystemStateResponse>> NodesResponses;
25+
THashSet<TActorId> TcpProxies;
2326
ui32 NodesRequested = 0;
2427
ui32 NodesReceived = 0;
2528
bool StaticNodesOnly = false;
@@ -35,47 +38,48 @@ class TCountersHostsList : public TActorBootstrapped<TCountersHostsList> {
3538
, Event(ev)
3639
{}
3740

38-
void Bootstrap(const TActorContext& ctx) {
41+
void Bootstrap() {
3942
const auto& params(Event->Get()->Request.GetParams());
4043
StaticNodesOnly = FromStringWithDefault<bool>(params.Get("static_only"), StaticNodesOnly);
4144
DynamicNodesOnly = FromStringWithDefault<bool>(params.Get("dynamic_only"), DynamicNodesOnly);
4245
const TActorId nameserviceId = GetNameserviceActorId();
43-
ctx.Send(nameserviceId, new TEvInterconnect::TEvListNodes());
44-
ctx.Schedule(TDuration::Seconds(10), new TEvents::TEvWakeup());
46+
Send(nameserviceId, new TEvInterconnect::TEvListNodes());
47+
Schedule(TDuration::Seconds(10), new TEvents::TEvWakeup());
4548
Become(&TThis::StateRequestedList);
4649
}
4750

4851
STFUNC(StateRequestedList) {
4952
switch (ev->GetTypeRewrite()) {
50-
HFunc(TEvInterconnect::TEvNodesInfo, Handle);
51-
CFunc(TEvents::TSystem::Wakeup, Timeout);
53+
hFunc(TEvInterconnect::TEvNodesInfo, Handle);
54+
cFunc(TEvents::TSystem::Wakeup, Timeout);
5255
}
5356
}
5457

5558
STFUNC(StateRequestedSysInfo) {
5659
switch (ev->GetTypeRewrite()) {
57-
HFunc(TEvWhiteboard::TEvSystemStateResponse, Handle);
58-
HFunc(TEvents::TEvUndelivered, Undelivered);
59-
HFunc(TEvInterconnect::TEvNodeDisconnected, Disconnected);
60-
CFunc(TEvents::TSystem::Wakeup, Timeout);
60+
hFunc(TEvWhiteboard::TEvSystemStateResponse, Handle);
61+
hFunc(TEvents::TEvUndelivered, Undelivered);
62+
hFunc(TEvInterconnect::TEvNodeDisconnected, Disconnected);
63+
hFunc(TEvInterconnect::TEvNodeConnected, Connected);
64+
cFunc(TEvents::TSystem::Wakeup, Timeout);
6165
}
6266
}
6367

64-
void SendRequest(ui32 nodeId, const TActorContext& ctx) {
68+
void SendRequest(ui32 nodeId) {
6569
TActorId whiteboardServiceId = MakeNodeWhiteboardServiceId(nodeId);
6670
THolder<TEvWhiteboard::TEvSystemStateRequest> request = MakeHolder<TEvWhiteboard::TEvSystemStateRequest>();
67-
ctx.Send(whiteboardServiceId, request.Release(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
68-
++NodesRequested;
71+
Send(whiteboardServiceId, request.Release(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
72+
NodesRequested++;
6973
}
7074

71-
void NodeStateInfoReceived(const TActorContext& ctx) {
75+
void NodeStateInfoReceived() {
7276
++NodesReceived;
7377
if (NodesRequested == NodesReceived) {
74-
ReplyAndDie(ctx);
78+
ReplyAndDie();
7579
}
7680
}
7781

78-
void Handle(TEvInterconnect::TEvNodesInfo::TPtr& ev, const TActorContext& ctx) {
82+
void Handle(TEvInterconnect::TEvNodesInfo::TPtr& ev) {
7983
NodesInfo = ev->Release();
8084
ui32 minAllowedNodeId = std::numeric_limits<ui32>::min();
8185
ui32 maxAllowedNodeId = std::numeric_limits<ui32>::max();
@@ -90,33 +94,38 @@ class TCountersHostsList : public TActorBootstrapped<TCountersHostsList> {
9094
}
9195
for (const auto& nodeInfo : NodesInfo->Nodes) {
9296
if (nodeInfo.NodeId >= minAllowedNodeId && nodeInfo.NodeId <= maxAllowedNodeId) {
93-
SendRequest(nodeInfo.NodeId, ctx);
97+
SendRequest(nodeInfo.NodeId);
9498
}
9599
}
96100
Become(&TThis::StateRequestedSysInfo);
97101
}
98102

99-
void Handle(TEvWhiteboard::TEvSystemStateResponse::TPtr& ev, const TActorContext& ctx) {
103+
void Handle(TEvWhiteboard::TEvSystemStateResponse::TPtr& ev) {
100104
ui64 nodeId = ev.Get()->Cookie;
101105
NodesResponses[nodeId] = ev->Release();
102-
NodeStateInfoReceived(ctx);
106+
NodeStateInfoReceived();
103107
}
104108

105-
void Undelivered(TEvents::TEvUndelivered::TPtr& ev, const TActorContext& ctx) {
109+
void Undelivered(TEvents::TEvUndelivered::TPtr& ev) {
106110
ui32 nodeId = ev.Get()->Cookie;
107111
if (NodesResponses.emplace(nodeId, nullptr).second) {
108-
NodeStateInfoReceived(ctx);
112+
NodeStateInfoReceived();
109113
}
110114
}
111115

112-
void Disconnected(TEvInterconnect::TEvNodeDisconnected::TPtr& ev, const TActorContext& ctx) {
116+
void Disconnected(TEvInterconnect::TEvNodeDisconnected::TPtr& ev) {
113117
ui32 nodeId = ev->Get()->NodeId;
118+
TcpProxies.erase(ev->Sender);
114119
if (NodesResponses.emplace(nodeId, nullptr).second) {
115-
NodeStateInfoReceived(ctx);
120+
NodeStateInfoReceived();
116121
}
117122
}
118123

119-
void ReplyAndDie(const TActorContext& ctx) {
124+
void Connected(TEvInterconnect::TEvNodeConnected::TPtr& ev) {
125+
TcpProxies.insert(ev->Sender);
126+
}
127+
128+
void ReplyAndDie() {
120129
TStringStream text;
121130
for (const auto& [nodeId, sysInfo] : NodesResponses) {
122131
if (sysInfo) {
@@ -147,12 +156,19 @@ class TCountersHostsList : public TActorBootstrapped<TCountersHostsList> {
147156
}
148157
}
149158
}
150-
ctx.Send(Event->Sender, new NMon::TEvHttpInfoRes(Viewer->GetHTTPOKTEXT(Event->Get()) + text.Str(), 0, NMon::IEvHttpInfoRes::EContentType::Custom));
151-
Die(ctx);
159+
Send(Event->Sender, new NMon::TEvHttpInfoRes(Viewer->GetHTTPOKTEXT(Event->Get()) + text.Str(), 0, NMon::IEvHttpInfoRes::EContentType::Custom));
160+
PassAway();
161+
}
162+
163+
void PassAway() {
164+
for (auto &tcpPorxy: TcpProxies) {
165+
Send(tcpPorxy, new TEvents::TEvUnsubscribe);
166+
}
167+
TBase::PassAway();
152168
}
153169

154-
void Timeout(const TActorContext &ctx) {
155-
ReplyAndDie(ctx);
170+
void Timeout() {
171+
ReplyAndDie();
156172
}
157173
};
158174

ydb/core/viewer/json_vdisk_req.h

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ class TJsonVDiskRequest : public TViewerPipeClient<TJsonVDiskRequest<RequestType
6060
ui32 PDiskId = 0;
6161
ui32 VSlotId = 0;
6262

63+
std::optional<TActorId> TcpProxyId;
64+
6365
public:
6466
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
6567
return NKikimrServices::TActivity::VIEWER_HANDLER;
@@ -111,6 +113,7 @@ class TJsonVDiskRequest : public TViewerPipeClient<TJsonVDiskRequest<RequestType
111113
hFunc(ResponseType, Handle);
112114
cFunc(TEvRetryNodeRequest::EventType, HandleRetry);
113115
cFunc(TEvents::TEvUndelivered::EventType, Undelivered);
116+
hFunc(TEvInterconnect::TEvNodeConnected, Connected);
114117
cFunc(TEvInterconnect::TEvNodeDisconnected::EventType, Disconnected);
115118
cFunc(TEvents::TSystem::Wakeup, HandleTimeout);
116119
}
@@ -143,7 +146,12 @@ class TJsonVDiskRequest : public TViewerPipeClient<TJsonVDiskRequest<RequestType
143146
}
144147
}
145148

149+
void Connected(TEvInterconnect::TEvNodeConnected::TPtr &ev) {
150+
TcpProxyId = ev->Sender;
151+
}
152+
146153
void Disconnected() {
154+
TcpProxyId = {};
147155
if (!RetryRequest()) {
148156
TBase::RequestDone();
149157
}
@@ -170,6 +178,13 @@ class TJsonVDiskRequest : public TViewerPipeClient<TJsonVDiskRequest<RequestType
170178
}
171179
}
172180

181+
void PassAway() override {
182+
if (TcpProxyId) {
183+
this->Send(*TcpProxyId, new TEvents::TEvUnsubscribe);
184+
}
185+
TBase::PassAway();
186+
}
187+
173188
void ReplyAndPassAway(const TString &error = "") {
174189
try {
175190
TStringStream json;
@@ -182,10 +197,8 @@ class TJsonVDiskRequest : public TViewerPipeClient<TJsonVDiskRequest<RequestType
182197
} catch (const std::exception& e) {
183198
TBase::Send(Initiator, new NMon::TEvHttpInfoRes(TString("HTTP/1.1 400 Bad Request\r\n\r\n") + e.what(), 0, NMon::IEvHttpInfoRes::EContentType::Custom));
184199
}
185-
TBase::PassAway();
200+
PassAway();
186201
}
187-
188-
189202
};
190203

191204
template <typename RequestType, typename ResponseType>

0 commit comments

Comments
 (0)