@@ -74,6 +74,8 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor<TBlobSt
7474
7575 bool Done = false ;
7676
77+ NLWTrace::TOrbit Orbit;
78+
7779 struct TIncarnationRecord {
7880 ui64 IncarnationGuid = 0 ;
7981 TMonotonic ExpirationTimestamp = TMonotonic::Max();
@@ -121,6 +123,22 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor<TBlobSt
121123
122124 // Send to VDisks.
123125 for (auto & ev : events) {
126+ if (LWPROBE_ENABLED (DSProxyVPutSent) || Orbit.HasShuttles ()) {
127+ auto vDiskId = std::visit ([](const auto & item) { return VDiskIDFromVDiskID (item->Record .GetVDiskID ()); }, ev);
128+ auto itemsCount = std::visit (overloaded{
129+ [](const std::unique_ptr<TEvBlobStorage::TEvVPut>&) { return 1 ; },
130+ [](const std::unique_ptr<TEvBlobStorage::TEvVMultiPut>& item) { return item->Record .GetItems ().size (); }
131+ }, ev);
132+ LWTRACK (
133+ DSProxyVPutSent, Orbit,
134+ std::visit ([](const auto & item) { return item->Type (); }, ev),
135+ vDiskId.ToStringWOGeneration (),
136+ Info->GetFailDomainOrderNumber (vDiskId),
137+ itemsCount,
138+ std::visit ([](const auto & item) { return item->GetBufferBytes (); }, ev),
139+ accelerate
140+ );
141+ }
124142 std::visit ([&](auto & ev) { SendToQueue (std::move (ev), 0 , TimeStatsEnabled); }, ev);
125143 ++RequestsSent;
126144 }
@@ -250,7 +268,7 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor<TBlobSt
250268 HandleIncarnation (TActivationContext::Monotonic (), Info->GetOrderNumber (shortId), record.GetIncarnationGuid ());
251269 }
252270
253- LWPROBE (DSProxyVDiskRequestDuration, TEvBlobStorage::EvVPut, blobId.BlobSize (), blobId.TabletID (),
271+ LWTRACK (DSProxyVDiskRequestDuration, Orbit , TEvBlobStorage::EvVPut, blobId.BlobSize (), blobId.TabletID (),
254272 Info->GroupID .GetRawId (), blobId.Channel (), Info->GetFailDomainOrderNumber (shortId),
255273 GetStartTime (record.GetTimestamps ()),
256274 GetTotalTimeMs (record.GetTimestamps ()),
@@ -320,11 +338,12 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor<TBlobSt
320338 WaitingVDiskResponseCount[vdisk]--;
321339
322340 // Trace put request duration
323- if (LWPROBE_ENABLED (DSProxyVDiskRequestDuration)) {
341+ if (LWPROBE_ENABLED (DSProxyVDiskRequestDuration) || Orbit. HasShuttles () ) {
324342 for (auto &item : record.GetItems ()) {
325343 TLogoBlobID blobId = LogoBlobIDFromLogoBlobID (item.GetBlobID ());
326344 NKikimrProto::EReplyStatus itemStatus = item.GetStatus ();
327- LWPROBE (DSProxyVDiskRequestDuration, TEvBlobStorage::EvVMultiPut, blobId.BlobSize (), blobId.TabletID (),
345+ LWTRACK (DSProxyVDiskRequestDuration, Orbit,
346+ TEvBlobStorage::EvVMultiPut, blobId.BlobSize (), blobId.TabletID (),
328347 Info->GroupID .GetRawId (), blobId.Channel (), Info->GetFailDomainOrderNumber (shortId),
329348 GetStartTime (record.GetTimestamps ()),
330349 GetTotalTimeMs (record.GetTimestamps ()),
@@ -373,6 +392,7 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor<TBlobSt
373392 if (WaitingVDiskCount > 0 && WaitingVDiskCount <= 2 && RequestsSent > 1 ) {
374393 ui64 timeToAccelerateUs = Max<ui64>(1 , PutImpl.GetTimeToAccelerateNs (LogCtx, 2 - AccelerateRequestsSent) / 1000 );
375394 TDuration timeSinceStart = TActivationContext::Monotonic () - StartTime;
395+ LWTRACK (DSProxyScheduleAccelerate, Orbit, timeToAccelerateUs > timeSinceStart.MicroSeconds () ? (timeToAccelerateUs - timeSinceStart.MicroSeconds ()) / 1000.0 : 0.0 );
376396 if (timeSinceStart.MicroSeconds () < timeToAccelerateUs) {
377397 ui64 causeIdx = RootCauseTrack.RegisterAccelerate ();
378398 Schedule (TDuration::MicroSeconds (timeToAccelerateUs - timeSinceStart.MicroSeconds ()),
@@ -430,7 +450,10 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor<TBlobSt
430450 ResponsesSent++;
431451 Y_ABORT_UNLESS (ResponsesSent <= PutImpl.Blobs .size ());
432452 RootCauseTrack.RenderTrack (PutImpl.Blobs [blobIdx].Orbit );
433- LWTRACK (DSProxyPutReply, PutImpl.Blobs [blobIdx].Orbit );
453+ if (PutImpl.Blobs [blobIdx].Orbit .HasShuttles ()) {
454+ LWTRACK (DSProxyPutReply, PutImpl.Blobs [blobIdx].Orbit , blobId.ToString (), NKikimrProto::EReplyStatus_Name (status), putResult->ErrorReason );
455+ }
456+ LWTRACK (DSProxyPutReply, Orbit, blobId.ToString (), NKikimrProto::EReplyStatus_Name (status), putResult->ErrorReason );
434457 putResult->Orbit = std::move (PutImpl.Blobs [blobIdx].Orbit );
435458 putResult->WrittenBeyondBarrier = PutImpl.WrittenBeyondBarrier [blobIdx];
436459 putResult->ExecutionRelay = std::move (PutImpl.Blobs [blobIdx].ExecutionRelay );
@@ -601,6 +624,22 @@ class TBlobStorageGroupPutRequest : public TBlobStorageGroupRequestActor<TBlobSt
601624 LWTRACK (DSProxyPutBootstrapStart, PutImpl.Blobs [blobIdx].Orbit );
602625 }
603626
627+ auto getTotalSize = [&]() {
628+ ui64 totalSize = 0 ;
629+ for (auto & blob : PutImpl.Blobs ) {
630+ totalSize += blob.BufferSize ;
631+ }
632+ return totalSize;
633+ };
634+ LWTRACK (
635+ DSProxyPutRequest, Orbit,
636+ Info->GroupID .GetRawId (),
637+ NKikimrBlobStorage::EPutHandleClass_Name (HandleClass),
638+ TEvBlobStorage::TEvPut::TacticName (Tactic),
639+ PutImpl.Blobs .size (),
640+ getTotalSize ()
641+ );
642+
604643 Become (&TThis::StateWait, TDuration::MilliSeconds (DsPutWakeupMs), new TKikimrEvents::TEvWakeup);
605644
606645 PartSets.resize (PutImpl.Blobs .size ());
0 commit comments