@@ -17,8 +17,7 @@ namespace NPDisk {
1717void TCompletionLogWrite::Exec (TActorSystem *actorSystem) {
1818 // bool isNewChunksCommited = false;
1919 if (CommitedLogChunks) {
20- NWilson::TSpan span (TWilson::PDiskBasic, TraceId.Clone (), " PDisk.CommitLogChunks" );
21- auto * req = PDisk->ReqCreator .CreateFromArgs <TCommitLogChunks>(std::move (CommitedLogChunks), std::move (span));
20+ auto * req = PDisk->ReqCreator .CreateFromArgs <TCommitLogChunks>(std::move (CommitedLogChunks));
2221 PDisk->InputRequest (req);
2322 // isNewChunksCommited = true;
2423 }
@@ -69,6 +68,7 @@ void TCompletionLogWrite::Exec(TActorSystem *actorSystem) {
6968 (*evLog.LogCallback )(actorSystem, *evLog.Result );
7069 }
7170 if (evLog.Result ->Status == NKikimrProto::OK) {
71+ evLog.Span .EndOk ();
7272 if (batch) {
7373 if (batch->Sender == evLog.Sender && batch->Result ->Results .size () < MAX_RESULTS_PER_BATCH) {
7474 batch->Result ->Results .push_back (std::move (evLog.Result ->Results [0 ]));
@@ -80,6 +80,7 @@ void TCompletionLogWrite::Exec(TActorSystem *actorSystem) {
8080 batch = &evLog;
8181 }
8282 } else {
83+ evLog.Span .EndError (evLog.Result ->ErrorReason );
8384 // Send all previous successes...
8485 if (batch) {
8586 sendResponse (batch);
@@ -115,8 +116,7 @@ void TCompletionLogWrite::Release(TActorSystem *actorSystem) {
115116// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
116117
117118TCompletionChunkReadPart::TCompletionChunkReadPart (TPDisk *pDisk, TIntrusivePtr<TChunkRead> &read, ui64 rawReadSize,
118- ui64 payloadReadSize, ui64 commonBufferOffset, TCompletionChunkRead *cumulativeCompletion, bool isTheLastPart,
119- NWilson::TSpan&& span)
119+ ui64 payloadReadSize, ui64 commonBufferOffset, TCompletionChunkRead *cumulativeCompletion, bool isTheLastPart)
120120 : TCompletionAction()
121121 , PDisk(pDisk)
122122 , Read(read)
@@ -127,10 +127,14 @@ TCompletionChunkReadPart::TCompletionChunkReadPart(TPDisk *pDisk, TIntrusivePtr<
127127 , ChunkNonce(CumulativeCompletion->GetChunkNonce ())
128128 , Buffer(PDisk->BufferPool->Pop ())
129129 , IsTheLastPart(isTheLastPart)
130- , Span(std::move(span ))
130+ , Span(read->Span.CreateChild(TWilson::PDiskDetailed, " PDisk.ChunkRead.CompletionPart " ))
131131{
132132 TCompletionAction::CanBeExecutedInAdditionalCompletionThread = true ;
133133
134+ Span.Attribute (" common_buffer_offset" , (i64 )CommonBufferOffset)
135+ .Attribute (" raw_read_size" , RawReadSize)
136+ .Attribute (" is_last_piece" , IsTheLastPart);
137+
134138 TBufferWithGaps *commonBuffer = CumulativeCompletion->GetCommonBuffer ();
135139 Destination = commonBuffer->RawDataPtr (CommonBufferOffset, PayloadReadSize);
136140
@@ -150,7 +154,6 @@ TBuffer *TCompletionChunkReadPart::GetBuffer() {
150154 return Buffer.Get ();
151155}
152156
153-
154157void TCompletionChunkReadPart::UnencryptData (TActorSystem *actorSystem) {
155158 const TDiskFormat &format = PDisk->Format ;
156159
@@ -271,7 +274,6 @@ void TCompletionChunkReadPart::UnencryptData(TActorSystem *actorSystem) {
271274}
272275
273276void TCompletionChunkReadPart::Exec (TActorSystem *actorSystem) {
274- auto execSpan = Span.CreateChild (TWilson::PDiskDetailed, " PDisk.CompletionChunkReadPart.Exec" );
275277 Y_VERIFY (actorSystem);
276278 Y_VERIFY (CumulativeCompletion);
277279 if (TCompletionAction::Result != EIoResult::Ok) {
@@ -280,6 +282,7 @@ void TCompletionChunkReadPart::Exec(TActorSystem *actorSystem) {
280282 }
281283
282284 if (Read->ChunkEncrypted ) {
285+ Span.Event (" PDisk.CompletionChunkReadPart.DecryptionStart" );
283286 UnencryptData (actorSystem);
284287 }
285288
@@ -291,8 +294,7 @@ void TCompletionChunkReadPart::Exec(TActorSystem *actorSystem) {
291294
292295 AtomicSub (PDisk->InFlightChunkRead , RawReadSize);
293296 RawReadSize = 0 ;
294- execSpan.EndOk ();
295- Span.EndOk ();
297+ Span.Event (" PDisk.CompletionChunkReadPart.ExecStop" , {{" RawReadSize" , RawReadSize}, {" EncryptedChunk" , Read->ChunkEncrypted }});
296298 delete this ;
297299}
298300
@@ -308,7 +310,7 @@ void TCompletionChunkReadPart::Release(TActorSystem *actorSystem) {
308310}
309311
310312TCompletionChunkRead::TCompletionChunkRead (TPDisk *pDisk, TIntrusivePtr<TChunkRead> &read, std::function<void ()> onDestroy,
311- ui64 chunkNonce, NWilson::TSpan&& span )
313+ ui64 chunkNonce)
312314 : TCompletionAction()
313315 , PDisk(pDisk)
314316 , Read(read)
@@ -317,7 +319,7 @@ TCompletionChunkRead::TCompletionChunkRead(TPDisk *pDisk, TIntrusivePtr<TChunkRe
317319 , Deletes(0 )
318320 , OnDestroy(std::move(onDestroy))
319321 , ChunkNonce(chunkNonce)
320- , Span(std::move(span ))
322+ , Span(read->Span.CreateChild(TWilson::PDiskBasic, " PDisk.CompletionChunkRead " ))
321323 , DoubleFreeCanary(ReferenceCanary)
322324{
323325 // in case of plain chunks we can have unaligned offset and unaligned size of the read
@@ -348,7 +350,7 @@ TCompletionChunkRead::~TCompletionChunkRead() {
348350}
349351
350352void TCompletionChunkRead::Exec (TActorSystem *actorSystem) {
351- auto execSpan = Span.CreateChild (TWilson::PDiskDetailed, " PDisk.CompletionChunkRead.Exec" );
353+ Read-> Span .Event ( " PDisk.CompletionChunkRead.Exec" );
352354 THolder<TEvChunkReadResult> result = MakeHolder<TEvChunkReadResult>(NKikimrProto::OK,
353355 Read->ChunkIdx , Read->Offset , Read->Cookie , PDisk->GetStatusFlags (Read->Owner , Read->OwnerGroupType ), " " );
354356
@@ -374,10 +376,9 @@ void TCompletionChunkRead::Exec(TActorSystem *actorSystem) {
374376
375377 actorSystem->Send (Read->Sender , result.Release ());
376378 Read->IsReplied = true ;
379+ Read->Span .EndOk ();
377380
378381 PDisk->Mon .GetReadCounter (Read->PriorityClass )->CountResponse ();
379- execSpan.EndOk ();
380- Span.EndOk ();
381382 delete this ;
382383}
383384
@@ -396,6 +397,7 @@ void TCompletionChunkRead::ReplyError(TActorSystem *actorSystem, TString reason)
396397 LOG_WARN_S (*actorSystem, NKikimrServices::BS_PDISK, error.Str ());
397398 actorSystem->Send (Read->Sender , result.Release ());
398399 Read->IsReplied = true ;
400+ Read->Span .EndError (reason);
399401}
400402
401403// Returns true if there is some pending requests to wait
@@ -442,9 +444,7 @@ void TChunkTrimCompletion::Exec(TActorSystem *actorSystem) {
442444 << ui64 (responseTimeMs) << " sizeBytes# " << SizeBytes);
443445 LWPROBE (PDiskTrimResponseTime, PDisk->PCtx ->PDiskId , ReqId.Id , responseTimeMs, SizeBytes);
444446 PDisk->Mon .Trim .CountResponse ();
445- NWilson::TSpan span (TWilson::PDiskBasic, std::move (TraceId), " PDisk.TryTrimChunk" , NWilson::EFlags::AUTO_END, actorSystem);
446- span.Attribute (" size" , static_cast <i64 >(SizeBytes));
447- TTryTrimChunk *tryTrim = PDisk->ReqCreator .CreateFromArgs <TTryTrimChunk>(SizeBytes, std::move (span));
447+ TTryTrimChunk *tryTrim = PDisk->ReqCreator .CreateFromArgs <TTryTrimChunk>(SizeBytes);
448448 PDisk->InputRequest (tryTrim);
449449 delete this ;
450450}
0 commit comments