16
16
17
17
namespace NYql ::NDqs::NExecutionHelpers {
18
18
19
+ struct TQueueItem {
20
+ TQueueItem (NDq::TDqSerializedBatch&& data, const TString& messageId)
21
+ : Data(std::move(data))
22
+ , MessageId(messageId)
23
+ , SentProcessedEvent(false )
24
+ , IsFinal(false )
25
+ , Size(Data.Size())
26
+ {
27
+ }
28
+
29
+ static TQueueItem Final () {
30
+ TQueueItem item ({}, " FinalMessage" );
31
+ item.SentProcessedEvent = true ;
32
+ item.IsFinal = true ;
33
+ return item;
34
+ }
35
+
36
+ NDq::TDqSerializedBatch Data;
37
+ const TString MessageId;
38
+ bool SentProcessedEvent = false ;
39
+ bool IsFinal = false ;
40
+ ui64 Size = 0 ;
41
+ };
42
+
43
+ struct TWriteQueue {
44
+ TQueue<TQueueItem> Queue;
45
+ ui64 ByteSize = 0 ;
46
+
47
+ template < class ... Args >
48
+ decltype (auto ) emplace( Args&&... args) {
49
+ Queue.emplace (std::forward<Args>(args)...);
50
+ ByteSize += Queue.back ().Size ;
51
+ }
52
+
53
+ auto & front () {
54
+ return Queue.front ();
55
+ }
56
+
57
+ auto & back () {
58
+ return Queue.back ();
59
+ }
60
+
61
+ auto pop () {
62
+ YQL_ENSURE (ByteSize >= Queue.front ().Size );
63
+ ByteSize -= Queue.front ().Size ;
64
+ return Queue.pop ();
65
+ }
66
+
67
+ auto empty () const {
68
+ return Queue.empty ();
69
+ }
70
+
71
+ void clear () {
72
+ Queue.clear ();
73
+ ByteSize = 0 ;
74
+ }
75
+ };
76
+
19
77
template <class TDerived >
20
78
class TResultActorBase : public NYql ::TSynchronizableRichActor<TDerived>, public NYql::TCounters {
21
79
protected:
@@ -180,6 +238,10 @@ namespace NYql::NDqs::NExecutionHelpers {
180
238
}
181
239
}
182
240
241
+ ui64 InflightBytes () {
242
+ return WriteQueue.ByteSize ;
243
+ }
244
+
183
245
private:
184
246
void OnQueryResult (TEvQueryResponse::TPtr& ev, const NActors::TActorContext&) {
185
247
YQL_LOG_CTX_ROOT_SESSION_SCOPE (TraceId);
@@ -349,29 +411,6 @@ namespace NYql::NDqs::NExecutionHelpers {
349
411
TBase::Send (FullResultWriterID, std::move (req));
350
412
}
351
413
352
- private:
353
- struct TQueueItem {
354
- TQueueItem (NDq::TDqSerializedBatch&& data, const TString& messageId)
355
- : Data(std::move(data))
356
- , MessageId(messageId)
357
- , SentProcessedEvent(false )
358
- , IsFinal(false )
359
- {
360
- }
361
-
362
- static TQueueItem Final () {
363
- TQueueItem item ({}, " FinalMessage" );
364
- item.SentProcessedEvent = true ;
365
- item.IsFinal = true ;
366
- return item;
367
- }
368
-
369
- NDq::TDqSerializedBatch Data;
370
- const TString MessageId;
371
- bool SentProcessedEvent = false ;
372
- bool IsFinal = false ;
373
- };
374
-
375
414
protected:
376
415
const NActors::TActorId ExecuterID;
377
416
const TString TraceId;
@@ -383,7 +422,7 @@ namespace NYql::NDqs::NExecutionHelpers {
383
422
const bool FullResultTableEnabled;
384
423
const NActors::TActorId GraphExecutionEventsId;
385
424
const bool Discard;
386
- TQueue<TQueueItem> WriteQueue;
425
+ TWriteQueue WriteQueue;
387
426
ui64 SizeLimit;
388
427
TMaybe<ui64> RowsLimit;
389
428
ui64 Rows;
0 commit comments