@@ -81,14 +81,15 @@ class TSaveStatisticsQuery : public NKikimr::TQueryBase {
81
81
const ui64 StatType;
82
82
const std::vector<ui32> ColumnTags;
83
83
const std::vector<TString> Data;
84
+
84
85
public:
85
86
TSaveStatisticsQuery (const TPathId& pathId, ui64 statType,
86
- std::vector<ui32>&& columnTags, std::vector<TString>& & data)
87
+ const std::vector<ui32>& columnTags, const std::vector<TString>& data)
87
88
: NKikimr::TQueryBase(NKikimrServices::STATISTICS, {}, {}, true )
88
89
, PathId(pathId)
89
90
, StatType(statType)
90
- , ColumnTags(std::move( columnTags) )
91
- , Data(std::move( data) )
91
+ , ColumnTags(columnTags)
92
+ , Data(data)
92
93
{
93
94
Y_ABORT_UNLESS (ColumnTags.size () == Data.size ());
94
95
}
@@ -148,15 +149,61 @@ class TSaveStatisticsQuery : public NKikimr::TQueryBase {
148
149
void OnFinish (Ydb::StatusIds::StatusCode status, NYql::TIssues&& issues) override {
149
150
Y_UNUSED (issues);
150
151
auto response = std::make_unique<TEvStatistics::TEvSaveStatisticsQueryResponse>();
152
+ response->Status = status;
153
+ response->Issues = std::move (issues);
151
154
response->Success = (status == Ydb::StatusIds::SUCCESS);
152
155
Send (Owner, response.release ());
153
156
}
154
157
};
155
158
156
- NActors::IActor* CreateSaveStatisticsQuery (const TPathId& pathId, ui64 statType,
157
- std::vector<ui32>&& columnTags, std::vector<TString>&& data)
159
+ class TSaveStatisticsRetryingQuery : public TActorBootstrapped <TSaveStatisticsRetryingQuery> {
160
+ private:
161
+ const NActors::TActorId ReplyActorId;
162
+ const TPathId PathId;
163
+ const ui64 StatType;
164
+ const std::vector<ui32> ColumnTags;
165
+ const std::vector<TString> Data;
166
+
167
+ public:
168
+ using TSaveRetryingQuery = TQueryRetryActor<
169
+ TSaveStatisticsQuery, TEvStatistics::TEvSaveStatisticsQueryResponse,
170
+ const TPathId&, ui64, const std::vector<ui32>&, const std::vector<TString>&>;
171
+
172
+ TSaveStatisticsRetryingQuery (const NActors::TActorId& replyActorId,
173
+ const TPathId& pathId, ui64 statType, std::vector<ui32>&& columnTags, std::vector<TString>&& data)
174
+ : ReplyActorId(replyActorId)
175
+ , PathId(pathId)
176
+ , StatType(statType)
177
+ , ColumnTags(std::move(columnTags))
178
+ , Data(std::move(data))
179
+ {}
180
+
181
+ void Bootstrap () {
182
+ Register (new TSaveRetryingQuery (
183
+ SelfId (),
184
+ TSaveRetryingQuery::IRetryPolicy::GetExponentialBackoffPolicy (
185
+ TSaveRetryingQuery::Retryable, TDuration::MilliSeconds (10 ),
186
+ TDuration::MilliSeconds (200 ), TDuration::Seconds (1 ),
187
+ std::numeric_limits<size_t >::max (), TDuration::Seconds (1 )),
188
+ PathId, StatType, ColumnTags, Data
189
+ ));
190
+ Become (&TSaveStatisticsRetryingQuery::StateFunc);
191
+ }
192
+
193
+ STRICT_STFUNC (StateFunc,
194
+ hFunc (TEvStatistics::TEvSaveStatisticsQueryResponse, Handle );
195
+ )
196
+
197
+ void Handle (TEvStatistics::TEvSaveStatisticsQueryResponse::TPtr& ev) {
198
+ Send (ReplyActorId, ev->Release ().Release ());
199
+ PassAway ();
200
+ }
201
+ };
202
+
203
+ NActors::IActor* CreateSaveStatisticsQuery (const NActors::TActorId& replyActorId,
204
+ const TPathId& pathId, ui64 statType, std::vector<ui32>&& columnTags, std::vector<TString>&& data)
158
205
{
159
- return new TSaveStatisticsQuery ( pathId, statType, std::move (columnTags), std::move (data));
206
+ return new TSaveStatisticsRetryingQuery (replyActorId, pathId, statType, std::move (columnTags), std::move (data));
160
207
}
161
208
162
209
@@ -231,6 +278,8 @@ class TLoadStatisticsQuery : public NKikimr::TQueryBase {
231
278
void OnFinish (Ydb::StatusIds::StatusCode status, NYql::TIssues&& issues) override {
232
279
Y_UNUSED (issues);
233
280
auto response = std::make_unique<TEvStatistics::TEvLoadStatisticsQueryResponse>();
281
+ response->Status = status;
282
+ response->Issues = std::move (issues);
234
283
response->Success = (status == Ydb::StatusIds::SUCCESS);
235
284
response->Cookie = Cookie;
236
285
if (response->Success ) {
@@ -240,10 +289,54 @@ class TLoadStatisticsQuery : public NKikimr::TQueryBase {
240
289
}
241
290
};
242
291
243
- NActors::IActor* CreateLoadStatisticsQuery (const TPathId& pathId, ui64 statType,
244
- ui32 columnTag, ui64 cookie)
292
+ class TLoadStatisticsRetryingQuery : public TActorBootstrapped <TLoadStatisticsRetryingQuery> {
293
+ private:
294
+ const NActors::TActorId ReplyActorId;
295
+ const TPathId PathId;
296
+ const ui64 StatType;
297
+ const ui32 ColumnTag;
298
+ const ui64 Cookie;
299
+
300
+ public:
301
+ using TLoadRetryingQuery = TQueryRetryActor<
302
+ TLoadStatisticsQuery, TEvStatistics::TEvLoadStatisticsQueryResponse,
303
+ const TPathId&, ui64, ui32, ui64>;
304
+
305
+ TLoadStatisticsRetryingQuery (const NActors::TActorId& replyActorId,
306
+ const TPathId& pathId, ui64 statType, ui32 columnTag, ui64 cookie)
307
+ : ReplyActorId(replyActorId)
308
+ , PathId(pathId)
309
+ , StatType(statType)
310
+ , ColumnTag(columnTag)
311
+ , Cookie(cookie)
312
+ {}
313
+
314
+ void Bootstrap () {
315
+ Register (new TLoadRetryingQuery (
316
+ SelfId (),
317
+ TLoadRetryingQuery::IRetryPolicy::GetExponentialBackoffPolicy (
318
+ TLoadRetryingQuery::Retryable, TDuration::MilliSeconds (10 ),
319
+ TDuration::MilliSeconds (200 ), TDuration::Seconds (1 ),
320
+ std::numeric_limits<size_t >::max (), TDuration::Seconds (1 )),
321
+ PathId, StatType, ColumnTag, Cookie
322
+ ));
323
+ Become (&TLoadStatisticsRetryingQuery::StateFunc);
324
+ }
325
+
326
+ STRICT_STFUNC (StateFunc,
327
+ hFunc (TEvStatistics::TEvLoadStatisticsQueryResponse, Handle );
328
+ )
329
+
330
+ void Handle (TEvStatistics::TEvLoadStatisticsQueryResponse::TPtr& ev) {
331
+ Send (ReplyActorId, ev->Release ().Release ());
332
+ PassAway ();
333
+ }
334
+ };
335
+
336
+ NActors::IActor* CreateLoadStatisticsQuery (const NActors::TActorId& replyActorId,
337
+ const TPathId& pathId, ui64 statType, ui32 columnTag, ui64 cookie)
245
338
{
246
- return new TLoadStatisticsQuery ( pathId, statType, columnTag, cookie);
339
+ return new TLoadStatisticsRetryingQuery (replyActorId, pathId, statType, columnTag, cookie);
247
340
}
248
341
249
342
@@ -288,14 +381,53 @@ class TDeleteStatisticsQuery : public NKikimr::TQueryBase {
288
381
void OnFinish (Ydb::StatusIds::StatusCode status, NYql::TIssues&& issues) override {
289
382
Y_UNUSED (issues);
290
383
auto response = std::make_unique<TEvStatistics::TEvDeleteStatisticsQueryResponse>();
384
+ response->Status = status;
385
+ response->Issues = std::move (issues);
291
386
response->Success = (status == Ydb::StatusIds::SUCCESS);
292
387
Send (Owner, response.release ());
293
388
}
294
389
};
295
390
296
- NActors::IActor* CreateDeleteStatisticsQuery (const TPathId& pathId)
391
+ class TDeleteStatisticsRetryingQuery : public TActorBootstrapped <TDeleteStatisticsRetryingQuery> {
392
+ private:
393
+ const NActors::TActorId ReplyActorId;
394
+ const TPathId PathId;
395
+
396
+ public:
397
+ using TDeleteRetryingQuery = TQueryRetryActor<
398
+ TDeleteStatisticsQuery, TEvStatistics::TEvDeleteStatisticsQueryResponse,
399
+ const TPathId&>;
400
+
401
+ TDeleteStatisticsRetryingQuery (const NActors::TActorId& replyActorId, const TPathId& pathId)
402
+ : ReplyActorId(replyActorId)
403
+ , PathId(pathId)
404
+ {}
405
+
406
+ void Bootstrap () {
407
+ Register (new TDeleteRetryingQuery (
408
+ SelfId (),
409
+ TDeleteRetryingQuery::IRetryPolicy::GetExponentialBackoffPolicy (
410
+ TDeleteRetryingQuery::Retryable, TDuration::MilliSeconds (10 ),
411
+ TDuration::MilliSeconds (200 ), TDuration::Seconds (1 ),
412
+ std::numeric_limits<size_t >::max (), TDuration::Seconds (1 )),
413
+ PathId
414
+ ));
415
+ Become (&TDeleteStatisticsRetryingQuery::StateFunc);
416
+ }
417
+
418
+ STRICT_STFUNC (StateFunc,
419
+ hFunc (TEvStatistics::TEvDeleteStatisticsQueryResponse, Handle );
420
+ )
421
+
422
+ void Handle (TEvStatistics::TEvDeleteStatisticsQueryResponse::TPtr& ev) {
423
+ Send (ReplyActorId, ev->Release ().Release ());
424
+ PassAway ();
425
+ }
426
+ };
427
+
428
+ NActors::IActor* CreateDeleteStatisticsQuery (const NActors::TActorId& replyActorId, const TPathId& pathId)
297
429
{
298
- return new TDeleteStatisticsQuery ( pathId);
430
+ return new TDeleteStatisticsRetryingQuery (replyActorId, pathId);
299
431
}
300
432
301
433
} // NKikimr::NStat
0 commit comments