@@ -43,9 +43,13 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
43
43
TString SharedDatabase;
44
44
bool Direct = false ;
45
45
bool NeedRedirect = true ;
46
- ui32 Requests = 0 ;
46
+ i32 DataRequests = 0 ; // how many requests we wait to process data
47
47
bool PassedAway = false ;
48
- ui32 MaxRequestsInFlight = 200 ;
48
+ bool ReplySent = false ;
49
+ bool UseCache = false ;
50
+ TDuration CachedDataMaxAge;
51
+ TString Error;
52
+ i32 MaxRequestsInFlight = 200 ;
49
53
NWilson::TSpan Span;
50
54
IViewer* Viewer = nullptr ;
51
55
NMon::TEvHttpInfo::TPtr Event;
@@ -57,7 +61,7 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
57
61
58
62
struct TPipeInfo {
59
63
TActorId PipeClient;
60
- ui32 Requests = 0 ;
64
+ i32 Requests = 0 ;
61
65
};
62
66
63
67
std::unordered_map<TTabletId, TPipeInfo> PipeInfo;
@@ -71,7 +75,7 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
71
75
72
76
template <typename T>
73
77
struct TRequestResponse {
74
- std::variant<std::monostate, std::unique_ptr <T>, TString> Response;
78
+ std::variant<std::monostate, std::shared_ptr <T>, TString> Response;
75
79
NWilson::TSpan Span;
76
80
77
81
TRequestResponse () = default ;
@@ -80,27 +84,41 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
80
84
{}
81
85
82
86
TRequestResponse (const TRequestResponse&) = delete ;
87
+ TRequestResponse& operator =(const TRequestResponse& other) = delete ;
83
88
TRequestResponse (TRequestResponse&&) = default ;
84
- TRequestResponse& operator =(const TRequestResponse&) = delete ;
85
89
TRequestResponse& operator =(TRequestResponse&&) = default ;
86
90
87
- bool Set (std::unique_ptr<T>&& response) {
88
- if (IsDone ()) {
89
- return false ;
90
- }
91
- constexpr bool hasErrorCheck = requires (const std::unique_ptr<T>& r) {TViewerPipeClient::IsSuccess (r);};
91
+ TRequestResponse (std::shared_ptr<T>&& response)
92
+ : Response(std::move(response))
93
+ {}
94
+
95
+ void SetInternal (std::shared_ptr<T>&& response) {
96
+ Response = std::move (response);
97
+ }
98
+
99
+ bool Set (std::shared_ptr<T>&& response) {
100
+ constexpr bool hasErrorCheck = requires (const T& r) {TViewerPipeClient::IsSuccess (r);};
101
+ constexpr bool hasUpdateCache = requires (std::shared_ptr<T>&& r) {TEvViewer::TEvUpdateSharedCacheTabletResponse (r);};
92
102
if constexpr (hasErrorCheck) {
93
- if (!TViewerPipeClient::IsSuccess (response)) {
94
- return Error (TViewerPipeClient::GetError (response));
103
+ if (!TViewerPipeClient::IsSuccess (* response)) {
104
+ return Error (TViewerPipeClient::GetError (* response));
95
105
}
96
106
}
97
- Span.EndOk ();
107
+ if (Span) {
108
+ Span.EndOk ();
109
+ }
110
+ if constexpr (hasUpdateCache) {
111
+ TActivationContext::Send (MakeViewerID (TActivationContext::ActorSystem ()->NodeId ), std::make_unique<TEvViewer::TEvUpdateSharedCacheTabletResponse>(response));
112
+ }
113
+ if (IsDone ()) {
114
+ return false ;
115
+ }
98
116
Response = std::move (response);
99
117
return true ;
100
118
}
101
119
102
120
bool Set (TAutoPtr<TEventHandle<T>>&& response) {
103
- return Set (std::unique_ptr <T>(response->Release ().Release ()));
121
+ return Set (std::shared_ptr <T>(response->Release ().Release ()));
104
122
}
105
123
106
124
bool Error (const TString& error) {
@@ -113,7 +131,7 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
113
131
}
114
132
115
133
bool IsOk () const {
116
- return std::holds_alternative<std::unique_ptr <T>>(Response);
134
+ return std::holds_alternative<std::shared_ptr <T>>(Response);
117
135
}
118
136
119
137
bool IsError () const {
@@ -129,11 +147,11 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
129
147
}
130
148
131
149
T* Get () {
132
- return std::get<std::unique_ptr <T>>(Response).get ();
150
+ return std::get<std::shared_ptr <T>>(Response).get ();
133
151
}
134
152
135
153
const T* Get () const {
136
- return std::get<std::unique_ptr <T>>(Response).get ();
154
+ return std::get<std::shared_ptr <T>>(Response).get ();
137
155
}
138
156
139
157
T& GetRef () {
@@ -246,14 +264,16 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
246
264
static TPathId GetPathId (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev);
247
265
static TString GetPath (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev);
248
266
249
- static bool IsSuccess (const std::unique_ptr<TEvTxProxySchemeCache::TEvNavigateKeySetResult>& ev);
250
- static TString GetError (const std::unique_ptr<TEvTxProxySchemeCache::TEvNavigateKeySetResult>& ev);
267
+ static bool IsSuccess (const TEvTxProxySchemeCache::TEvNavigateKeySetResult& ev);
268
+ static TString GetError (const TEvTxProxySchemeCache::TEvNavigateKeySetResult& ev);
269
+
270
+ static bool IsSuccess (const TEvStateStorage::TEvBoardInfo& ev);
271
+ static TString GetError (const TEvStateStorage::TEvBoardInfo& ev);
251
272
252
- static bool IsSuccess (const std::unique_ptr<TEvStateStorage::TEvBoardInfo> & ev);
253
- static TString GetError (const std::unique_ptr<TEvStateStorage::TEvBoardInfo> & ev);
273
+ static bool IsSuccess (const NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult & ev);
274
+ static TString GetError (const NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult & ev);
254
275
255
- static bool IsSuccess (const std::unique_ptr<NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult>& ev);
256
- static TString GetError (const std::unique_ptr<NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult>& ev);
276
+ void UpdateSharedCacheTablet (TTabletId tabletId, std::unique_ptr<IEventBase> request);
257
277
258
278
TRequestResponse<TEvHive::TEvResponseHiveDomainStats> MakeRequestHiveDomainStats (TTabletId hiveId);
259
279
TRequestResponse<TEvHive::TEvResponseHiveStorageStats> MakeRequestHiveStorageStats (TTabletId hiveId);
@@ -279,6 +299,11 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
279
299
TRequestResponse<NSysView::TEvSysView::TEvGetVSlotsResponse> RequestBSControllerVSlots ();
280
300
TRequestResponse<NSysView::TEvSysView::TEvGetPDisksResponse> RequestBSControllerPDisks ();
281
301
TRequestResponse<NSysView::TEvSysView::TEvGetStorageStatsResponse> RequestBSControllerStorageStats ();
302
+ TRequestResponse<NSysView::TEvSysView::TEvGetGroupsResponse> MakeCachedRequestBSControllerGroups ();
303
+ TRequestResponse<NSysView::TEvSysView::TEvGetStoragePoolsResponse> MakeCachedRequestBSControllerPools ();
304
+ TRequestResponse<NSysView::TEvSysView::TEvGetVSlotsResponse> MakeCachedRequestBSControllerVSlots ();
305
+ TRequestResponse<NSysView::TEvSysView::TEvGetPDisksResponse> MakeCachedRequestBSControllerPDisks ();
306
+ TRequestResponse<NSysView::TEvSysView::TEvGetStorageStatsResponse> MakeCachedRequestBSControllerStorageStats ();
282
307
void RequestBSControllerPDiskUpdateStatus (const NKikimrBlobStorage::TUpdateDriveStatus& driveStatus, bool force = false );
283
308
284
309
THolder<NSchemeCache::TSchemeCacheNavigate> SchemeCacheNavigateRequestBuilder (NSchemeCache::TSchemeCacheNavigate::TEntry&& entry);
@@ -315,18 +340,18 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
315
340
}
316
341
317
342
void ClosePipes ();
318
- ui32 FailPipeConnect (TTabletId tabletId);
343
+ i32 FailPipeConnect (TTabletId tabletId);
319
344
320
345
bool IsLastRequest () const {
321
- return Requests == 1 ;
346
+ return DataRequests == 1 ;
322
347
}
323
348
324
349
bool WaitingForResponse () const {
325
- return Requests != 0 ;
350
+ return DataRequests != 0 ;
326
351
}
327
352
328
- bool NoMoreRequests (ui32 requestsDone = 0 ) const {
329
- return Requests == requestsDone;
353
+ bool NoMoreRequests (i32 requestsDone = 0 ) const {
354
+ return DataRequests == requestsDone;
330
355
}
331
356
332
357
TRequestState GetRequest () const ;
@@ -343,10 +368,12 @@ class TViewerPipeClient : public TActorBootstrapped<TViewerPipeClient> {
343
368
TString GetHTTPFORBIDDEN (TString contentType = {}, TString response = {});
344
369
TString MakeForward (const std::vector<ui32>& nodes);
345
370
346
- void RequestDone (ui32 requests = 1 );
371
+ void RequestDone (i32 requests = 1 );
372
+ void CacheRequestDone ();
347
373
void CancelAllRequests ();
348
374
void AddEvent (const TString& name);
349
375
void Handle (TEvTabletPipe::TEvClientConnected::TPtr& ev);
376
+ void Handle (TEvTabletPipe::TEvClientDestroyed::TPtr& ev);
350
377
void HandleResolveDatabase (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev);
351
378
void HandleResolveResource (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev);
352
379
void HandleResolve (TEvStateStorage::TEvBoardInfo::TPtr& ev);
0 commit comments