@@ -283,6 +283,7 @@ class TBaseChangeSender {
283
283
284
284
Y_ABORT_UNLESS (sender.Ready );
285
285
sender.Ready = false ;
286
+ ReadySenders--;
286
287
287
288
sender.Pending .reserve (sender.Prepared .size ());
288
289
for (const auto & record : sender.Prepared ) {
@@ -438,6 +439,7 @@ class TBaseChangeSender {
438
439
ActorOps->Send (sender.ActorId , new TEvents::TEvPoisonPill ());
439
440
}
440
441
}
442
+ ReadySenders = 0 ;
441
443
}
442
444
443
445
void RemoveRecords () {
@@ -531,6 +533,7 @@ class TBaseChangeSender {
531
533
532
534
auto & sender = it->second ;
533
535
sender.Ready = true ;
536
+ ReadySenders++;
534
537
535
538
if (sender.Pending ) {
536
539
RemoveRecords (std::exchange (sender.Pending , {}));
@@ -555,6 +558,9 @@ class TBaseChangeSender {
555
558
}
556
559
557
560
ReEnqueueRecords (it->second );
561
+ if (it->second .Ready ) {
562
+ --ReadySenders;
563
+ }
558
564
Senders.erase (it);
559
565
GonePartitions.push_back (partitionId);
560
566
@@ -580,6 +586,10 @@ class TBaseChangeSender {
580
586
, MemUsage(0 )
581
587
{}
582
588
589
+ bool IsAllSendersReady () {
590
+ return ReadySenders == Senders.size ();
591
+ }
592
+
583
593
void RenderHtmlPage (ui64 tabletId, NMon::TEvRemoteHttpInfo::TPtr& ev, const TActorContext& ctx) {
584
594
const auto & cgi = ev->Get ()->Cgi ();
585
595
if (const auto & str = cgi.Get (" partitionId" )) {
@@ -782,6 +792,7 @@ class TBaseChangeSender {
782
792
ui64 MemUsage;
783
793
784
794
THashMap<ui64, TSender> Senders; // ui64 is partition id
795
+ ui64 ReadySenders = 0 ;
785
796
TSet<TEnqueuedRecord> Enqueued;
786
797
TSet<TIncompleteRecord> PendingBody;
787
798
TMap<ui64, typename TChangeRecord::TPtr> PendingSent; // ui64 is order
0 commit comments