diff options
author | Aleksandr Dmitriev <alexd.65536@gmail.com> | 2022-05-19 00:01:57 +0300 |
---|---|---|
committer | Aleksandr Dmitriev <alexd.65536@gmail.com> | 2022-05-19 00:01:57 +0300 |
commit | c8109496007827bef95fcb1a207ccc34db0bb182 (patch) | |
tree | 422585dbcae8d0c9063e89e6e53eae2632113cfa | |
parent | 65b3811b894e990b918f74256f29acd7dd02d2d6 (diff) | |
download | ydb-c8109496007827bef95fcb1a207ccc34db0bb182.tar.gz |
show donors in viewer for acceptor disks KIKIMR-14511
ref:183652c2096d96654c49395c3194fca5cc81cf93
-rw-r--r-- | ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp | 11 | ||||
-rw-r--r-- | ydb/core/node_whiteboard/node_whiteboard.h | 5 | ||||
-rw-r--r-- | ydb/core/protos/node_whiteboard.proto | 1 | ||||
-rw-r--r-- | ydb/core/viewer/content/v2/vdisk.js | 27 |
4 files changed, 38 insertions, 6 deletions
diff --git a/ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp b/ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp index 096ac7ee90..1a75ac8a9e 100644 --- a/ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp +++ b/ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp @@ -144,9 +144,16 @@ namespace NKikimr::NStorage { const ui64 scrubCookie = ++LastScrubCookie; std::vector<std::pair<TVDiskID, TActorId>> donorDiskIds; + std::vector<NKikimrBlobStorage::TVSlotId> donors; for (const auto& donor : vdisk.Config.GetDonors()) { - const TVSlotId donorSlot(donor.GetVDiskLocation()); + const auto& location = donor.GetVDiskLocation(); + const TVSlotId donorSlot(location); donorDiskIds.emplace_back(VDiskIDFromVDiskID(donor.GetVDiskId()), donorSlot.GetVDiskServiceId()); + NKikimrBlobStorage::TVSlotId slotId; + slotId.SetNodeId(location.GetNodeID()); + slotId.SetPDiskId(location.GetPDiskID()); + slotId.SetVSlotId(location.GetVDiskSlotID()); + donors.emplace_back(slotId); } TVDiskConfig::TBaseInfo baseInfo(vdiskId, pdiskServiceId, pdiskGuid, vslotId.PDiskId, deviceType, @@ -166,7 +173,7 @@ namespace NKikimr::NStorage { // issue initial report to whiteboard before creating actor to avoid races Send(WhiteboardId, new NNodeWhiteboard::TEvWhiteboard::TEvVDiskStateUpdate(vdiskId, groupInfo->GetStoragePoolName(), - vslotId.PDiskId, vslotId.VDiskSlotId, pdiskGuid, kind, donorMode, whiteboardInstanceGuid)); + vslotId.PDiskId, vslotId.VDiskSlotId, pdiskGuid, kind, donorMode, whiteboardInstanceGuid, std::move(donors))); vdisk.WhiteboardVDiskId.emplace(vdiskId); // create an actor diff --git a/ydb/core/node_whiteboard/node_whiteboard.h b/ydb/core/node_whiteboard/node_whiteboard.h index a726c7ad98..9c7a1cabb0 100644 --- a/ydb/core/node_whiteboard/node_whiteboard.h +++ b/ydb/core/node_whiteboard/node_whiteboard.h @@ -147,7 +147,7 @@ struct TEvWhiteboard{ // this message is generated by NodeWarden explicit TEvVDiskStateUpdate(const TVDiskID& vDiskId, const TMaybe<TString>& storagePoolName, ui32 pDiskId, ui32 vDiskSlotId, ui64 guid, NKikimrBlobStorage::TVDiskKind::EVDiskKind kind, bool donorMode, - ui64 instanceGuid) + ui64 instanceGuid, std::vector<NKikimrBlobStorage::TVSlotId>&& donors) : Initial(true) { VDiskIDFromVDiskID(vDiskId, Record.MutableVDiskId()); @@ -162,6 +162,9 @@ struct TEvWhiteboard{ Record.SetDonorMode(true); } Record.SetInstanceGuid(instanceGuid); + for (auto&& donor : donors) { + *Record.AddDonors() = std::move(donor); + } } explicit TEvVDiskStateUpdate(NKikimrWhiteboard::TVDiskSatisfactionRank *satisfactionRank) { diff --git a/ydb/core/protos/node_whiteboard.proto b/ydb/core/protos/node_whiteboard.proto index b96713ca29..13f5cf0bdf 100644 --- a/ydb/core/protos/node_whiteboard.proto +++ b/ydb/core/protos/node_whiteboard.proto @@ -191,6 +191,7 @@ message TVDiskStateInfo { optional fixed64 IncarnationGuid = 25; optional bool DonorMode = 26; optional fixed64 InstanceGuid = 27; // VDisk actor instance guid + repeated NKikimrBlobStorage.TVSlotId Donors = 29; // VDisk (Skeleton) Front Queue Status optional EFlag FrontQueues = 18; diff --git a/ydb/core/viewer/content/v2/vdisk.js b/ydb/core/viewer/content/v2/vdisk.js index 6a3e1af417..636100be11 100644 --- a/ydb/core/viewer/content/v2/vdisk.js +++ b/ydb/core/viewer/content/v2/vdisk.js @@ -130,16 +130,34 @@ VDisk.prototype.updateVDiskInfo = function(update) { state += '<tr><td>FronQueues</td><td>' + this.FrontQueues + '</td></tr>'; severity = Math.max(severity, Math.min(4, this.getColorSeverity(this.FrontQueues))); } - dash = false; + isDonor = false; if (this.DonorMode === true) { state += '<tr><td>Donor</td><td>YES</td></tr>'; - dash = true; + isDonor = true; } else if (!this.Replicated) { state += '<tr><td>Replicated</td><td>NO</td></tr>'; if (severity === 1) { severity = 2; } } + hasDonors = false; + if (this.Donors) { + hasDonors = true; + for (var d = 0; d < this.Donors.length; ++d) { + var donor = this.Donors[d]; + if (d === 0) { + state += '<tr><td>Donors</td><td>'; + } else { + state += '<tr><td></td><td>'; + } + state += donor.NodeId; + state += '-'; + state += donor.PDiskId; + state += ' vslot '; + state += donor.VSlotId; + state += '</td></tr>'; + } + } var color = grey; switch (severity) { @@ -176,9 +194,12 @@ VDisk.prototype.updateVDiskInfo = function(update) { state += '<tr><td>Write</td><td>' + bytesToSpeed(this.WriteThroughput) + '</td></tr>'; } state += '</table>'; - if (dash) { + if (isDonor) { background = 'linear-gradient(45deg, forestgreen, forestgreen 8px, transparent 8px, transparent 100%)'; vDisk.css('background', background); + } else if (hasDonors) { + background = 'linear-gradient(45deg, darkmagenta, darkmagenta 8px, transparent 8px, transparent 100%)'; + vDisk.css('background', background); } vDisk.css('background-color', color); vDisk.attr('data-original-title', state); |