@@ -42,10 +42,6 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor {
42
42
TErasureSplitContext ErasureSplitContext = TErasureSplitContext::Init(MaxBytesToSplitAtOnce);
43
43
TBatchedVec<TStackVec<TRope, TypicalPartsInBlob>> PartSets;
44
44
45
- using TDeadlineMask = std::bitset<MaxBatchedPutRequests>;
46
- std::map<TInstant, TDeadlineMask> PutDeadlineMasks;
47
- TDeadlineMask DeadlineMask;
48
-
49
45
TStackVec<ui64, TypicalDisksInGroup> WaitingVDiskResponseCount;
50
46
ui64 WaitingVDiskCount = 0 ;
51
47
@@ -651,7 +647,6 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor {
651
647
<< " RestartCounter# " << RestartCounter);
652
648
653
649
for (size_t blobIdx = 0 ; blobIdx < PutImpl.Blobs .size (); ++blobIdx) {
654
- PutDeadlineMasks[PutImpl.Blobs [blobIdx].Deadline ].set (blobIdx);
655
650
LWTRACK (DSProxyPutBootstrapStart, PutImpl.Blobs [blobIdx].Orbit );
656
651
}
657
652
@@ -672,8 +667,7 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor {
672
667
getTotalSize ()
673
668
);
674
669
675
- Become (&TBlobStorageGroupPutRequest::StateWait);
676
- ScheduleWakeup (TInstant::Zero ());
670
+ Become (&TBlobStorageGroupPutRequest::StateWait, TDuration::MilliSeconds (DsPutWakeupMs), new TKikimrEvents::TEvWakeup);
677
671
678
672
PartSets.resize (PutImpl.Blobs .size ());
679
673
for (auto & partSet : PartSets) {
@@ -724,27 +718,15 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor {
724
718
<< " BlobIDs# " << BlobIdSequenceToString ()
725
719
<< " Not answered in "
726
720
<< (TActivationContext::Monotonic () - RequestStartTime) << " seconds" );
727
-
728
721
const TInstant now = TActivationContext::Now ();
729
- while (!PutDeadlineMasks.empty ()) {
730
- auto [deadline, mask] = *PutDeadlineMasks.begin ();
731
- if (deadline <= now) {
732
- DeadlineMask |= mask;
733
- PutDeadlineMasks.erase (PutDeadlineMasks.begin ());
734
- } else {
735
- break ;
736
- }
737
- }
738
-
739
722
TPutImpl::TPutResultVec putResults;
740
723
for (size_t blobIdx = 0 ; blobIdx < PutImpl.Blobs .size (); ++blobIdx) {
741
- if (!PutImpl.Blobs [blobIdx].Replied && DeadlineMask [blobIdx]) {
724
+ if (!PutImpl.Blobs [blobIdx].Replied && now > PutImpl. Blobs [blobIdx]. Deadline ) {
742
725
PutImpl.PrepareOneReply (NKikimrProto::DEADLINE, blobIdx, LogCtx, " Deadline timer hit" , putResults);
743
726
}
744
727
}
745
- if (!ReplyAndDieWithLastResponse (putResults)) {
746
- ScheduleWakeup (now);
747
- }
728
+ ReplyAndDieWithLastResponse (putResults);
729
+ Schedule (TDuration::MilliSeconds (DsPutWakeupMs), new TKikimrEvents::TEvWakeup);
748
730
}
749
731
750
732
void UpdatePengingVDiskResponseCount (const TDeque<TPutImpl::TPutEvent>& putEvents) {
@@ -811,21 +793,6 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor {
811
793
<< " State# " << PutImpl.DumpFullState ());
812
794
}
813
795
814
- void ScheduleWakeup (TInstant lastWakeup) {
815
- TInstant now = TActivationContext::Now ();
816
- TInstant deadline = lastWakeup + DsMinimumDelayBetweenPutWakeups;
817
-
818
- // find first deadline after now
819
- for (auto it = PutDeadlineMasks.begin (); it != PutDeadlineMasks.end (); ++it) {
820
- deadline = std::max (deadline, it->first );
821
- if (it->first > now) {
822
- break ;
823
- }
824
- }
825
-
826
- Schedule (deadline, new TKikimrEvents::TEvWakeup);
827
- }
828
-
829
796
STATEFN (StateWait) {
830
797
if (ProcessEvent (ev, true )) {
831
798
return ;
0 commit comments