@@ -26,7 +26,6 @@ class TPutImpl {
2626 TBlobStorageGroupInfo::TServiceIds VDisksSvc;
2727 TBlobStorageGroupInfo::TVDiskIds VDisksId;
2828
29- TInstant Deadline;
3029 const TIntrusivePtr<TBlobStorageGroupInfo> Info;
3130
3231 TBlackboard Blackboard;
@@ -56,10 +55,11 @@ class TPutImpl {
5655 std::vector<std::pair<ui64, ui32>> ExtraBlockChecks;
5756 NWilson::TSpan Span;
5857 std::shared_ptr<TEvBlobStorage::TExecutionRelay> ExecutionRelay;
58+ TInstant Deadline;
5959
6060 TBlobInfo (TLogoBlobID id, TRope&& buffer, TActorId recipient, ui64 cookie, NWilson::TTraceId traceId,
6161 NLWTrace::TOrbit&& orbit, std::vector<std::pair<ui64, ui32>> extraBlockChecks, bool single,
62- std::shared_ptr<TEvBlobStorage::TExecutionRelay> executionRelay)
62+ std::shared_ptr<TEvBlobStorage::TExecutionRelay> executionRelay, TInstant deadline )
6363 : BlobId(id)
6464 , Buffer(std::move(buffer))
6565 , BufferSize(Buffer.size())
@@ -69,6 +69,7 @@ class TPutImpl {
6969 , ExtraBlockChecks(std::move(extraBlockChecks))
7070 , Span(single ? NWilson::TSpan() : NWilson::TSpan(TWilson::BlobStorage, std::move(traceId), " DSProxy.Put.Blob" ))
7171 , ExecutionRelay(std::move(executionRelay))
72+ , Deadline(deadline)
7273 {}
7374
7475 void Output (IOutputStream& s) const {
@@ -103,8 +104,7 @@ class TPutImpl {
103104 TPutImpl (const TIntrusivePtr<TBlobStorageGroupInfo> &info, const TIntrusivePtr<TGroupQueues> &state,
104105 TEvBlobStorage::TEvPut *ev, const TIntrusivePtr<TBlobStorageGroupProxyMon> &mon,
105106 bool enableRequestMod3x3ForMinLatecy, TActorId recipient, ui64 cookie, NWilson::TTraceId traceId)
106- : Deadline(ev->Deadline)
107- , Info(info)
107+ : Info(info)
108108 , Blackboard(info, state, ev->HandleClass, NKikimrBlobStorage::EGetHandleClass::AsyncRead)
109109 , IsDone(1 )
110110 , WrittenBeyondBarrier(1 )
@@ -116,7 +116,7 @@ class TPutImpl {
116116 {
117117 BlobMap.emplace (ev->Id , Blobs.size ());
118118 Blobs.emplace_back (ev->Id , TRope (ev->Buffer ), recipient, cookie, std::move (traceId), std::move (ev->Orbit ),
119- std::move (ev->ExtraBlockChecks ), true , std::move (ev->ExecutionRelay ));
119+ std::move (ev->ExtraBlockChecks ), true , std::move (ev->ExecutionRelay ), ev-> Deadline );
120120
121121 auto & blob = Blobs.back ();
122122 LWPROBE (DSProxyBlobPutTactics, blob.BlobId .TabletID (), Info->GroupID , blob.BlobId .ToString (), Tactic,
@@ -127,8 +127,7 @@ class TPutImpl {
127127 TBatchedVec<TEvBlobStorage::TEvPut::TPtr> &events, const TIntrusivePtr<TBlobStorageGroupProxyMon> &mon,
128128 NKikimrBlobStorage::EPutHandleClass putHandleClass, TEvBlobStorage::TEvPut::ETactic tactic,
129129 bool enableRequestMod3x3ForMinLatecy)
130- : Deadline(TInstant::Zero())
131- , Info(info)
130+ : Info(info)
132131 , Blackboard(info, state, putHandleClass, NKikimrBlobStorage::EGetHandleClass::AsyncRead)
133132 , IsDone(events.size())
134133 , WrittenBeyondBarrier(events.size())
@@ -146,8 +145,8 @@ class TPutImpl {
146145 Y_ABORT_UNLESS (msg.Tactic == tactic);
147146 BlobMap.emplace (msg.Id , Blobs.size ());
148147 Blobs.emplace_back (msg.Id , TRope (msg.Buffer ), ev->Sender , ev->Cookie , std::move (ev->TraceId ),
149- std::move (msg.Orbit ), std::move (msg.ExtraBlockChecks ), false , std::move (msg.ExecutionRelay ));
150- Deadline = Max (Deadline, msg.Deadline );
148+ std::move (msg.Orbit ), std::move (msg.ExtraBlockChecks ), false , std::move (msg.ExecutionRelay ),
149+ msg.Deadline );
151150
152151 auto & blob = Blobs.back ();
153152 LWPROBE (DSProxyBlobPutTactics, blob.BlobId .TabletID (), Info->GroupID , blob.BlobId .ToString (), Tactic,
@@ -222,7 +221,7 @@ class TPutImpl {
222221 if (std::next (it) == end) { // TEvVPut
223222 auto [orderNumber, ptr] = *it++;
224223 auto ev = std::make_unique<TEvBlobStorage::TEvVPut>(ptr->Id , ptr->Buffer , Info->GetVDiskId (orderNumber),
225- false , nullptr , Deadline, Blackboard.PutHandleClass );
224+ false , nullptr , Blobs[ptr-> BlobIdx ]. Deadline , Blackboard.PutHandleClass );
226225
227226 auto & record = ev->Record ;
228227 for (const auto & [tabletId, generation] : Blobs[ptr->BlobIdx ].ExtraBlockChecks ) {
@@ -235,7 +234,12 @@ class TPutImpl {
235234 HandoffPartsSent += ptr->IsHandoff ;
236235 ++VPutRequests;
237236 } else { // TEvVMultiPut
238- auto ev = std::make_unique<TEvBlobStorage::TEvVMultiPut>(Info->GetVDiskId (it->first ), Deadline,
237+ TInstant deadline;
238+ for (auto temp = it; temp != end; ++temp) {
239+ auto [orderNumber, ptr] = *temp;
240+ deadline = Max (deadline, Blobs[ptr->BlobIdx ].Deadline );
241+ }
242+ auto ev = std::make_unique<TEvBlobStorage::TEvVMultiPut>(Info->GetVDiskId (it->first ), deadline,
239243 Blackboard.PutHandleClass , false );
240244 while (it != end) {
241245 auto [orderNumber, ptr] = *it++;
0 commit comments