Skip to content

Commit 65dc86e

Browse files
authored
Add PDisk/VSlot whiteboard states to sys_view (#10491)
Add some PDisk and VSlot whiteboard parameters to sys_view tables
1 parent 95f0b21 commit 65dc86e

21 files changed

+118
-25
lines changed

ydb/core/blobstorage/base/blobstorage_events.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,16 @@ namespace NKikimr {
2121
TEvControllerUpdateDiskStatus() = default;
2222

2323
TEvControllerUpdateDiskStatus(const TVDiskID& vDiskId, ui32 nodeId, ui32 pdiskId, ui32 vslotId,
24-
ui32 satisfactionRankPercent) {
24+
std::optional<ui32> satisfactionRankPercent, NKikimrWhiteboard::EVDiskState state, bool replicated,
25+
NKikimrWhiteboard::EFlag diskSpace) {
2526
NKikimrBlobStorage::TVDiskMetrics* metric = Record.AddVDisksMetrics();
2627
VDiskIDFromVDiskID(vDiskId, metric->MutableVDiskId());
27-
metric->SetSatisfactionRank(satisfactionRankPercent);
28+
if (satisfactionRankPercent) {
29+
metric->SetSatisfactionRank(*satisfactionRankPercent);
30+
}
31+
metric->SetState(state);
32+
metric->SetReplicated(replicated);
33+
metric->SetDiskSpace(diskSpace);
2834
auto *p = metric->MutableVSlotId();
2935
p->SetNodeId(nodeId);
3036
p->SetPDiskId(pdiskId);

ydb/core/blobstorage/base/html.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22

33
#include "defs.h"
4-
#include <ydb/core/protos/node_whiteboard.pb.h>
4+
#include <ydb/core/protos/whiteboard_flags.pb.h>
55

66
namespace NKikimr {
77

ydb/core/blobstorage/vdisk/common/vdisk_mon.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22
#include "defs.h"
33

4-
#include <ydb/core/protos/node_whiteboard.pb.h>
4+
#include <ydb/core/protos/whiteboard_flags.pb.h>
55

66
namespace NKikimr {
77

ydb/core/blobstorage/vdisk/common/vdisk_mongroups.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <ydb/core/base/appdata_fwd.h>
66
#include <ydb/core/protos/node_whiteboard.pb.h>
7+
#include <ydb/core/protos/whiteboard_disk_states.pb.h>
78

89
namespace NKikimr {
910
namespace NMonGroup {

ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeleton.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <ydb/core/blobstorage/vdisk/query/assimilation.h>
3030
#include <ydb/core/blobstorage/vdisk/common/vdisk_private_events.h>
3131
#include <ydb/core/blobstorage/vdisk/common/blobstorage_dblogcutter.h>
32+
#include <ydb/core/blobstorage/vdisk/common/vdisk_mongroups.h>
3233
#include <ydb/core/blobstorage/vdisk/common/blobstorage_status.h>
3334
#include <ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.h>
3435
#include <ydb/core/blobstorage/vdisk/common/vdisk_response.h>
@@ -77,6 +78,12 @@ namespace NKikimr {
7778
NKikimrWhiteboard::TVDiskSatisfactionRank satisfactionRank;
7879
TOverloadHandler::ToWhiteboard(OverloadHandler.get(), satisfactionRank);
7980
// send a message to Whiteboard
81+
// skeleton state
82+
const auto state = VDiskMonGroup.VDiskState();
83+
// replicated?
84+
bool replicated = !ReplMonGroup.ReplUnreplicatedVDisks() && !HasUnreadableBlobs;
85+
// out of space
86+
const auto outOfSpaceFlags = VCtx->GetOutOfSpaceState().LocalWhiteboardFlag();
8087
auto ev = std::make_unique<NNodeWhiteboard::TEvWhiteboard::TEvVDiskStateUpdate>(&satisfactionRank);
8188
const TInstant now = ctx.Now();
8289
const TInstant prev = std::exchange(WhiteboardUpdateTimestamp, now);
@@ -96,7 +103,10 @@ namespace NKikimr {
96103
SelfId().NodeId(),
97104
Config->BaseInfo.PDiskId,
98105
Config->BaseInfo.VDiskSlotId,
99-
OverloadHandler ? OverloadHandler->GetIntegralRankPercent() : 0));
106+
OverloadHandler ? OverloadHandler->GetIntegralRankPercent() : 0,
107+
state,
108+
replicated,
109+
outOfSpaceFlags));
100110
// repeat later
101111
ctx.Schedule(Config->WhiteboardUpdateInterval, new TEvTimeToUpdateWhiteboard());
102112
}
@@ -2814,6 +2824,7 @@ namespace NKikimr {
28142824
, SelfVDiskId(GInfo->GetVDiskId(VCtx->ShortSelfVDisk))
28152825
, Arena(std::make_shared<TRopeArena>(&TRopeArenaBackend::Allocate))
28162826
, VDiskMonGroup(VCtx->VDiskCounters, "subsystem", "state")
2827+
, ReplMonGroup(VCtx->VDiskCounters, "subsystem", "repl")
28172828
, SyncLogIFaceGroup(VCtx->VDiskCounters, "subsystem", "synclog")
28182829
, IFaceMonGroup(std::make_shared<NMonGroup::TVDiskIFaceGroup>(
28192830
VCtx->VDiskCounters, "subsystem", "interface"))
@@ -2860,6 +2871,7 @@ namespace NKikimr {
28602871
bool LocalDbInitialized = false;
28612872
std::shared_ptr<TRopeArena> Arena;
28622873
NMonGroup::TVDiskStateGroup VDiskMonGroup;
2874+
NMonGroup::TReplGroup ReplMonGroup;
28632875
NMonGroup::TSyncLogIFaceGroup SyncLogIFaceGroup;
28642876
std::shared_ptr<NMonGroup::TVDiskIFaceGroup> IFaceMonGroup;
28652877
bool ReplDone = false;

ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,16 @@ namespace NKikimr {
10941094
ev->Record.SetReplicationSecondsRemaining(0);
10951095
}
10961096
ctx.Send(SelfId(), ev.release());
1097+
ctx.Send(MakeBlobStorageNodeWardenID(VCtx->NodeId),
1098+
new TEvBlobStorage::TEvControllerUpdateDiskStatus(
1099+
SelfVDiskId,
1100+
SelfId().NodeId(),
1101+
Config->BaseInfo.PDiskId,
1102+
Config->BaseInfo.VDiskSlotId,
1103+
std::nullopt,
1104+
state,
1105+
replicated,
1106+
outOfSpaceFlags));
10971107
// repeat later
10981108
if (schedule) {
10991109
ctx.Schedule(Config->WhiteboardUpdateInterval, new TEvTimeToUpdateWhiteboard);

ydb/core/mind/bscontroller/disk_metrics.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ class TBlobStorageController::TTxUpdateDiskMetrics : public TTransactionBase<TBl
3737
}
3838
}
3939

40+
for (auto& [vslotId, v] : Self->StaticVSlots) {
41+
if (std::exchange(v.MetricsDirty, false)) {
42+
Self->SysViewChangedVSlots.insert(vslotId);
43+
auto vdiskId = v.VDiskId;
44+
auto groupId = vdiskId.GroupID.GetRawId();
45+
auto&& key = std::tie(groupId, vdiskId.GroupGeneration, vdiskId.FailRealm, vdiskId.FailDomain, vdiskId.VDisk);
46+
auto value = v.VDiskMetrics;
47+
value->ClearVDiskId();
48+
db.Table<Schema::VDiskMetrics>().Key(key).Update<Schema::VDiskMetrics::Metrics>(*value);
49+
Self->SysViewChangedGroups.insert(vdiskId.GroupID);
50+
}
51+
}
4052
return true;
4153
}
4254

@@ -69,6 +81,7 @@ void TBlobStorageController::Handle(TEvBlobStorage::TEvControllerUpdateDiskStatu
6981
} else if (const auto it = StaticVDiskMap.find(vdiskId); it != StaticVDiskMap.end()) {
7082
TStaticVSlotInfo& info = StaticVSlots.at(it->second);
7183
info.VDiskMetrics = m;
84+
info.MetricsDirty = true;
7285
} else {
7386
STLOG(PRI_NOTICE, BS_CONTROLLER, BSCTXUDM02, "VDisk not found", (VDiskId, vdiskId));
7487
}

ydb/core/mind/bscontroller/impl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2326,6 +2326,7 @@ class TBlobStorageController : public TActor<TBlobStorageController>, public TTa
23262326
std::optional<NKikimrBlobStorage::EVDiskStatus> VDiskStatus;
23272327
TMonotonic VDiskStatusTimestamp;
23282328
TMonotonic ReadySince = TMonotonic::Max(); // when IsReady becomes true for this disk; Max() in non-READY state
2329+
bool MetricsDirty = false;
23292330

23302331
TStaticVSlotInfo(const NKikimrBlobStorage::TNodeWardenServiceSet::TVDisk& vdisk,
23312332
std::map<TVSlotId, TStaticVSlotInfo>& prev, TMonotonic mono)

ydb/core/mind/bscontroller/sys_view.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ void CopyInfo(NKikimrSysView::TPDiskInfo* info, const THolder<TBlobStorageContro
312312
}
313313
info->SetAvailableSize(pDiskInfo->Metrics.GetAvailableSize());
314314
info->SetTotalSize(pDiskInfo->Metrics.GetTotalSize());
315+
info->SetState(NKikimrBlobStorage::TPDiskState::E_Name(pDiskInfo->Metrics.GetState()));
315316
info->SetStatusV2(NKikimrBlobStorage::EDriveStatus_Name(pDiskInfo->Status));
316317
if (pDiskInfo->StatusTimestamp != TInstant::Zero()) {
317318
info->SetStatusChangeTimestamp(pDiskInfo->StatusTimestamp.GetValue());
@@ -341,6 +342,15 @@ void SerializeVSlotInfo(NKikimrSysView::TVSlotInfo *pb, const TVDiskID& vdiskId,
341342
if (status) {
342343
pb->SetStatusV2(NKikimrBlobStorage::EVDiskStatus_Name(*status));
343344
}
345+
if (m.HasState()) {
346+
pb->SetState(NKikimrWhiteboard::EVDiskState_Name(m.GetState()));
347+
}
348+
if (m.HasReplicated()) {
349+
pb->SetReplicated(m.GetReplicated());
350+
}
351+
if (m.HasDiskSpace()) {
352+
pb->SetDiskSpace(NKikimrWhiteboard::EFlag_Name(m.GetDiskSpace()));
353+
}
344354
pb->SetKind(NKikimrBlobStorage::TVDiskKind::EVDiskKind_Name(kind));
345355
if (isBeingDeleted) {
346356
pb->SetIsBeingDeleted(true);
@@ -466,6 +476,7 @@ void TBlobStorageController::UpdateSystemViews() {
466476
if (pdisk.PDiskMetrics) {
467477
pb->SetAvailableSize(pdisk.PDiskMetrics->GetAvailableSize());
468478
pb->SetTotalSize(pdisk.PDiskMetrics->GetTotalSize());
479+
pb->SetState(NKikimrBlobStorage::TPDiskState::E_Name(pdisk.PDiskMetrics->GetState()));
469480
if (pdisk.PDiskMetrics->HasEnforcedDynamicSlotSize()) {
470481
pb->SetEnforcedDynamicSlotSize(pdisk.PDiskMetrics->GetEnforcedDynamicSlotSize());
471482
}

ydb/core/node_whiteboard/node_whiteboard.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <ydb/core/blobstorage/groupinfo/blobstorage_groupinfo.h>
88
#include <ydb/core/blobstorage/groupinfo/blobstorage_groupinfo_iter.h>
99
#include <ydb/core/protos/node_whiteboard.pb.h>
10+
#include <ydb/core/protos/whiteboard_disk_states.pb.h>
11+
#include <ydb/core/protos/whiteboard_flags.pb.h>
1012
#include <ydb/core/protos/memory_stats.pb.h>
1113
#include <ydb/core/protos/blobstorage_disk.pb.h>
1214
#include <ydb/library/actors/interconnect/events_local.h>

0 commit comments

Comments
 (0)