@@ -325,8 +325,8 @@ void CopyInfo(NKikimrSysView::TPDiskInfo* info, const THolder<TBlobStorageContro
325
325
}
326
326
327
327
void SerializeVSlotInfo (NKikimrSysView::TVSlotInfo *pb, const TVDiskID& vdiskId, const NKikimrBlobStorage::TVDiskMetrics& m,
328
- std::optional<NKikimrBlobStorage::EVDiskStatus> status, NHPTimer::STime statusTimestamp ,
329
- NKikimrBlobStorage::TVDiskKind::EVDiskKind kind, bool isBeingDeleted) {
328
+ std::optional<NKikimrBlobStorage::EVDiskStatus> status, NKikimrBlobStorage::TVDiskKind::EVDiskKind kind ,
329
+ bool isBeingDeleted) {
330
330
pb->SetGroupId (vdiskId.GroupID .GetRawId ());
331
331
pb->SetGroupGeneration (vdiskId.GroupGeneration );
332
332
pb->SetFailRealm (vdiskId.FailRealm );
@@ -338,9 +338,6 @@ void SerializeVSlotInfo(NKikimrSysView::TVSlotInfo *pb, const TVDiskID& vdiskId,
338
338
if (m.HasAvailableSize ()) {
339
339
pb->SetAvailableSize (m.GetAvailableSize ());
340
340
}
341
- if (!status && CyclesToDuration (GetCycleCountFast () - statusTimestamp) > TDuration::Seconds (15 )) {
342
- status = NKikimrBlobStorage::EVDiskStatus::ERROR;
343
- }
344
341
if (status) {
345
342
pb->SetStatusV2 (NKikimrBlobStorage::EVDiskStatus_Name (*status));
346
343
}
@@ -352,7 +349,7 @@ void SerializeVSlotInfo(NKikimrSysView::TVSlotInfo *pb, const TVDiskID& vdiskId,
352
349
353
350
void CopyInfo (NKikimrSysView::TVSlotInfo* info, const THolder<TBlobStorageController::TVSlotInfo>& vSlotInfo) {
354
351
SerializeVSlotInfo (info, vSlotInfo->GetVDiskId (), vSlotInfo->Metrics , vSlotInfo->VDiskStatus ,
355
- vSlotInfo->VDiskStatusTimestamp , vSlotInfo-> Kind , vSlotInfo->IsBeingDeleted ());
352
+ vSlotInfo->Kind , vSlotInfo->IsBeingDeleted ());
356
353
}
357
354
358
355
void CopyInfo (NKikimrSysView::TGroupInfo* info, const THolder<TBlobStorageController::TGroupInfo>& groupInfo) {
@@ -428,6 +425,21 @@ void TBlobStorageController::UpdateSystemViews() {
428
425
return ;
429
426
}
430
427
428
+ const TMonotonic now = TActivationContext::Monotonic ();
429
+ const TDuration expiration = TDuration::Seconds (15 );
430
+ for (auto & [key, value] : VSlots) {
431
+ if (!value->VDiskStatus && value->VDiskStatusTimestamp + expiration <= now) {
432
+ value->VDiskStatus = NKikimrBlobStorage::ERROR;
433
+ SysViewChangedVSlots.insert (key);
434
+ }
435
+ }
436
+ for (auto & [key, value] : StaticVSlots) {
437
+ if (!value.VDiskStatus && value.VDiskStatusTimestamp + expiration <= now) {
438
+ value.VDiskStatus = NKikimrBlobStorage::ERROR;
439
+ SysViewChangedVSlots.insert (key);
440
+ }
441
+ }
442
+
431
443
if (!SysViewChangedPDisks.empty () || !SysViewChangedVSlots.empty () || !SysViewChangedGroups.empty () ||
432
444
!SysViewChangedStoragePools.empty () || SysViewChangedSettings) {
433
445
auto update = MakeHolder<TEvControllerUpdateSystemViews>();
@@ -468,7 +480,7 @@ void TBlobStorageController::UpdateSystemViews() {
468
480
if (SysViewChangedVSlots.count (vslotId)) {
469
481
static const NKikimrBlobStorage::TVDiskMetrics zero;
470
482
SerializeVSlotInfo (&state.VSlots [vslotId], vslot.VDiskId , vslot.VDiskMetrics ? *vslot.VDiskMetrics : zero,
471
- vslot.VDiskStatus , vslot.VDiskStatusTimestamp , vslot. VDiskKind , false );
483
+ vslot.VDiskStatus , vslot.VDiskKind , false );
472
484
}
473
485
}
474
486
if (StorageConfig.HasBlobStorageConfig ()) {
0 commit comments