diff --git a/ydb/core/blobstorage/vdisk/hullop/blobstorage_hullcompact.h b/ydb/core/blobstorage/vdisk/hullop/blobstorage_hullcompact.h index 7485638d890b..c9e7af000394 100644 --- a/ydb/core/blobstorage/vdisk/hullop/blobstorage_hullcompact.h +++ b/ydb/core/blobstorage/vdisk/hullop/blobstorage_hullcompact.h @@ -167,7 +167,9 @@ namespace NKikimr { // the same logic for every yard response: apply response and restart main cycle void HandleYardResponse(NPDisk::TEvChunkReadResult::TPtr& ev, const TActorContext &ctx) { --PendingResponses; - HullCtx->VCtx->CostTracker->CountPDiskResponse(); + if (HullCtx->VCtx->CostTracker) { + HullCtx->VCtx->CostTracker->CountPDiskResponse(); + } if (ev->Get()->Status != NKikimrProto::CORRUPTED) { CHECK_PDISK_RESPONSE(HullCtx->VCtx, ev, ctx); } @@ -200,7 +202,9 @@ namespace NKikimr { void HandleYardResponse(NPDisk::TEvChunkWriteResult::TPtr& ev, const TActorContext &ctx) { --PendingResponses; - HullCtx->VCtx->CostTracker->CountPDiskResponse(); + if (HullCtx->VCtx->CostTracker) { + HullCtx->VCtx->CostTracker->CountPDiskResponse(); + } CHECK_PDISK_RESPONSE(HullCtx->VCtx, ev, ctx); if (FinalizeIfAborting(ctx)) { return; diff --git a/ydb/core/blobstorage/vdisk/scrub/scrub_actor_pdisk.cpp b/ydb/core/blobstorage/vdisk/scrub/scrub_actor_pdisk.cpp index e477ce788fc8..22e93924194c 100644 --- a/ydb/core/blobstorage/vdisk/scrub/scrub_actor_pdisk.cpp +++ b/ydb/core/blobstorage/vdisk/scrub/scrub_actor_pdisk.cpp @@ -11,7 +11,9 @@ namespace NKikimr { Send(ScrubCtx->PDiskCtx->PDiskId, msg.release()); CurrentState = TStringBuilder() << "reading data from " << part.ToString(); auto res = WaitForPDiskEvent(); - ScrubCtx->VCtx->CostTracker->CountPDiskResponse(); + if (ScrubCtx->VCtx->CostTracker) { + ScrubCtx->VCtx->CostTracker->CountPDiskResponse(); + } auto *m = res->Get(); Y_VERIFY_S(m->Status == NKikimrProto::OK || m->Status == NKikimrProto::CORRUPTED, "Status# " << NKikimrProto::EReplyStatus_Name(m->Status)); @@ -42,7 +44,9 @@ namespace NKikimr { Send(ScrubCtx->PDiskCtx->PDiskId, msg.release()); CurrentState = TStringBuilder() << "writing index to " << part.ToString(); auto res = WaitForPDiskEvent(); - ScrubCtx->VCtx->CostTracker->CountPDiskResponse(); + if (ScrubCtx->VCtx->CostTracker) { + ScrubCtx->VCtx->CostTracker->CountPDiskResponse(); + } Y_ABORT_UNLESS(res->Get()->Status == NKikimrProto::OK); // FIXME: good logic } diff --git a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp index 88eb8708e636..b86813b1e12f 100644 --- a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp +++ b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp @@ -1259,10 +1259,14 @@ namespace NKikimr { } else { if (clientId.GetType() == NBackpressure::EQueueClientType::DSProxy) { CostGroup.SkeletonFrontUserCostNs() += cost; - VCtx->CostTracker->CountUserCost(advancedCost); + if (VCtx->CostTracker) { + VCtx->CostTracker->CountUserCost(advancedCost); + } } else { CostGroup.SkeletonFrontInternalCostNs() += cost; - VCtx->CostTracker->CountInternalCost(advancedCost); + if (VCtx->CostTracker) { + VCtx->CostTracker->CountInternalCost(advancedCost); + } } } } @@ -1609,7 +1613,9 @@ namespace NKikimr { extQueue.Completed(ctx, msgCtx, event); TIntQueueClass &intQueue = GetIntQueue(msgCtx.IntQueueId); intQueue.Completed(ctx, msgCtx, *this); - VCtx->CostTracker->CountPDiskResponse(); + if (VCtx->CostTracker) { + VCtx->CostTracker->CountPDiskResponse(); + } if (!ev->Get()->DoNotResend) { TActivationContext::Send(event.release()); } diff --git a/ydb/core/blobstorage/vdisk/skeleton/skeleton_oos_tracker.cpp b/ydb/core/blobstorage/vdisk/skeleton/skeleton_oos_tracker.cpp index 5ecaabc3b673..175f45fa8d56 100644 --- a/ydb/core/blobstorage/vdisk/skeleton/skeleton_oos_tracker.cpp +++ b/ydb/core/blobstorage/vdisk/skeleton/skeleton_oos_tracker.cpp @@ -96,7 +96,9 @@ namespace NKikimr { if (msg->NumSlots > 0) { ui32 timeAvailable = 1'000'000'000 / msg->NumSlots; CostGroup.DiskTimeAvailableNs() = timeAvailable; - VCtx->CostTracker->SetTimeAvailable(timeAvailable); + if (VCtx->CostTracker) { + VCtx->CostTracker->SetTimeAvailable(timeAvailable); + } } Become(&TThis::WaitFunc);