Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1476,7 +1476,7 @@ void TPDisk::WhiteboardReport(TWhiteboardReport &whiteboardReport) {
TGuard<TMutex> guard(StateMutex);
const ui64 totalSize = Format.DiskSize;
const ui64 availableSize = (ui64)Format.ChunkSize * Keeper.GetFreeChunkCount();

if (*Mon.PDiskBriefState != TPDiskMon::TPDisk::Error) {
*Mon.FreeSpaceBytes = availableSize;
*Mon.UsedSpaceBytes = totalSize - availableSize;
Expand All @@ -1486,7 +1486,7 @@ void TPDisk::WhiteboardReport(TWhiteboardReport &whiteboardReport) {
*Mon.UsedSpaceBytes = 32_KB;
*Mon.TotalSpaceBytes = 32_KB;
}

NKikimrWhiteboard::TPDiskStateInfo& pdiskState = reportResult->PDiskState->Record;
pdiskState.SetPDiskId(PDiskId);
pdiskState.SetPath(Cfg->GetDevicePath());
Expand All @@ -1498,6 +1498,7 @@ void TPDisk::WhiteboardReport(TWhiteboardReport &whiteboardReport) {
pdiskState.SetSystemSize(Format.ChunkSize * (Keeper.GetOwnerHardLimit(OwnerSystemLog) + Keeper.GetOwnerHardLimit(OwnerSystemReserve)));
pdiskState.SetLogUsedSize(Format.ChunkSize * (Keeper.GetOwnerHardLimit(OwnerCommonStaticLog) - Keeper.GetOwnerFree(OwnerCommonStaticLog)));
pdiskState.SetLogTotalSize(Format.ChunkSize * Keeper.GetOwnerHardLimit(OwnerCommonStaticLog));
pdiskState.SetNumActiveSlots(TotalOwners);
if (ExpectedSlotCount) {
pdiskState.SetExpectedSlotCount(ExpectedSlotCount);
}
Expand Down
1 change: 1 addition & 0 deletions ydb/core/protos/node_whiteboard.proto
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ message TPDiskStateInfo {
optional uint64 LogTotalSize = 21;
optional uint32 ExpectedSlotCount = 22;
optional uint64 EnforcedDynamicSlotSize = 23;
optional uint32 NumActiveSlots = 24;
}

message TEvPDiskStateRequest {
Expand Down
12 changes: 12 additions & 0 deletions ydb/core/viewer/json_handlers_storage.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

#include "json_handlers.h"

namespace NKikimr::NViewer {

void InitStorageGroupsJsonHandler(TJsonHandlers& jsonHandlers);

void InitStorageJsonHandlers(TJsonHandlers& jsonHandlers) {
InitStorageGroupsJsonHandler(jsonHandlers);
}

}
118 changes: 116 additions & 2 deletions ydb/core/viewer/json_pipe_req.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,16 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
Set(std::unique_ptr<T>(response->Release().Release()));
}

void Error(const TString& error) {
bool Error(const TString& error) {
bool result = false;
if (!IsDone()) {
Span.EndError(error);
result = true;
}
if (!IsOk()) {
Response = error;
}
return result;
}

bool IsOk() const {
Expand All @@ -105,10 +108,34 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
return std::get<std::unique_ptr<T>>(Response).get();
}

T* operator ->() {
const T* Get() const {
return std::get<std::unique_ptr<T>>(Response).get();
}

T& GetRef() {
return *Get();
}

const T& GetRef() const {
return *Get();
}

T* operator ->() {
return Get();
}

const T* operator ->() const {
return Get();
}

T& operator *() {
return GetRef();
}

const T& operator *() const {
return GetRef();
}

TString GetError() const {
return std::get<TString>(Response);
}
Expand Down Expand Up @@ -236,6 +263,17 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
SendRequestToPipe(pipeClient, request.Release(), hiveId);
}

TRequestResponse<TEvHive::TEvResponseHiveStorageStats> MakeRequestHiveStorageStats(NNodeWhiteboard::TTabletId hiveId) {
TActorId pipeClient = ConnectTabletPipe(hiveId);
THolder<TEvHive::TEvRequestHiveStorageStats> request = MakeHolder<TEvHive::TEvRequestHiveStorageStats>();
auto response = MakeRequestToPipe<TEvHive::TEvResponseHiveStorageStats>(pipeClient, request.Release(), hiveId);
if (response.Span) {
auto hive_id = "#" + ::ToString(hiveId);
response.Span.Attribute("hive_id", hive_id);
}
return response;
}

NNodeWhiteboard::TTabletId GetConsoleId() {
return MakeConsoleID();
}
Expand All @@ -246,6 +284,12 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
SendRequestToPipe(pipeClient, request.Release());
}

TRequestResponse<NConsole::TEvConsole::TEvListTenantsResponse> MakeRequestConsoleListTenants() {
TActorId pipeClient = ConnectTabletPipe(GetConsoleId());
THolder<NConsole::TEvConsole::TEvListTenantsRequest> request = MakeHolder<NConsole::TEvConsole::TEvListTenantsRequest>();
return MakeRequestToPipe<NConsole::TEvConsole::TEvListTenantsResponse>(pipeClient, request.Release());
}

void RequestConsoleGetTenantStatus(const TString& path) {
TActorId pipeClient = ConnectTabletPipe(GetConsoleId());
THolder<NConsole::TEvConsole::TEvGetTenantStatusRequest> request = MakeHolder<NConsole::TEvConsole::TEvGetTenantStatusRequest>();
Expand All @@ -272,6 +316,14 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
SendRequestToPipe(pipeClient, request.Release());
}

TRequestResponse<TEvBlobStorage::TEvControllerConfigResponse> MakeRequestBSControllerConfigWithStoragePools() {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
THolder<TEvBlobStorage::TEvControllerConfigRequest> request = MakeHolder<TEvBlobStorage::TEvControllerConfigRequest>();
request->Record.MutableRequest()->AddCommand()->MutableQueryBaseConfig();
request->Record.MutableRequest()->AddCommand()->MutableReadStoragePool()->SetBoxId(Max<ui64>());
return MakeRequestToPipe<TEvBlobStorage::TEvControllerConfigResponse>(pipeClient, request.Release());
}

void RequestBSControllerInfo() {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
THolder<TEvBlobStorage::TEvRequestControllerInfo> request = MakeHolder<TEvBlobStorage::TEvRequestControllerInfo>();
Expand All @@ -283,6 +335,11 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
SendRequestToPipe(pipeClient, request.Release());
}

TRequestResponse<TEvBlobStorage::TEvControllerSelectGroupsResult> MakeRequestBSControllerSelectGroups(THolder<TEvBlobStorage::TEvControllerSelectGroups> request, ui64 cookie) {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
return MakeRequestToPipe<TEvBlobStorage::TEvControllerSelectGroupsResult>(pipeClient, request.Release(), cookie);
}

void RequestBSControllerPDiskRestart(ui32 nodeId, ui32 pdiskId, bool force = false) {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
THolder<TEvBlobStorage::TEvControllerConfigRequest> request = MakeHolder<TEvBlobStorage::TEvControllerConfigRequest>();
Expand Down Expand Up @@ -336,6 +393,30 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
return MakeRequestToPipe<NSysView::TEvSysView::TEvGetVSlotsResponse>(pipeClient, request.release(), 0/*cookie*/);
}

TRequestResponse<NSysView::TEvSysView::TEvGetGroupsResponse> RequestBSControllerGroups() {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
auto request = std::make_unique<NSysView::TEvSysView::TEvGetGroupsRequest>();
return MakeRequestToPipe<NSysView::TEvSysView::TEvGetGroupsResponse>(pipeClient, request.release(), 0/*cookie*/);
}

TRequestResponse<NSysView::TEvSysView::TEvGetStoragePoolsResponse> RequestBSControllerPools() {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
auto request = std::make_unique<NSysView::TEvSysView::TEvGetStoragePoolsRequest>();
return MakeRequestToPipe<NSysView::TEvSysView::TEvGetStoragePoolsResponse>(pipeClient, request.release(), 0/*cookie*/);
}

TRequestResponse<NSysView::TEvSysView::TEvGetVSlotsResponse> RequestBSControllerVSlots() {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
auto request = std::make_unique<NSysView::TEvSysView::TEvGetVSlotsRequest>();
return MakeRequestToPipe<NSysView::TEvSysView::TEvGetVSlotsResponse>(pipeClient, request.release(), 0/*cookie*/);
}

TRequestResponse<NSysView::TEvSysView::TEvGetPDisksResponse> RequestBSControllerPDisks() {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
auto request = std::make_unique<NSysView::TEvSysView::TEvGetPDisksRequest>();
return MakeRequestToPipe<NSysView::TEvSysView::TEvGetPDisksResponse>(pipeClient, request.release(), 0/*cookie*/);
}

void RequestBSControllerPDiskUpdateStatus(const NKikimrBlobStorage::TUpdateDriveStatus& driveStatus, bool force = false) {
TActorId pipeClient = ConnectTabletPipe(GetBSControllerId());
THolder<TEvBlobStorage::TEvControllerConfigRequest> request = MakeHolder<TEvBlobStorage::TEvControllerConfigRequest>();
Expand Down Expand Up @@ -368,6 +449,35 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
SendRequest(MakeSchemeCacheID(), new TEvTxProxySchemeCache::TEvNavigateKeySet(request.Release()));
}

TRequestResponse<TEvTxProxySchemeCache::TEvNavigateKeySetResult> MakeRequestSchemeCacheNavigate(const TString& path, ui64 cookie = 0) {
THolder<NSchemeCache::TSchemeCacheNavigate> request = MakeHolder<NSchemeCache::TSchemeCacheNavigate>();
NSchemeCache::TSchemeCacheNavigate::TEntry entry;
entry.Path = SplitPath(path);
entry.RedirectRequired = false;
entry.Operation = NSchemeCache::TSchemeCacheNavigate::EOp::OpPath;
request->ResultSet.emplace_back(entry);
auto response = MakeRequest<TEvTxProxySchemeCache::TEvNavigateKeySetResult>(MakeSchemeCacheID(), new TEvTxProxySchemeCache::TEvNavigateKeySet(request.Release()), 0/*flags*/, cookie);
if (response.Span) {
response.Span.Attribute("cookie", "#" + ::ToString(cookie));
}
return response;
}

TRequestResponse<TEvTxProxySchemeCache::TEvNavigateKeySetResult> MakeRequestSchemeCacheNavigate(const TPathId& pathId, ui64 cookie = 0) {
THolder<NSchemeCache::TSchemeCacheNavigate> request = MakeHolder<NSchemeCache::TSchemeCacheNavigate>();
NSchemeCache::TSchemeCacheNavigate::TEntry entry;
entry.TableId.PathId = pathId;
entry.RequestType = NSchemeCache::TSchemeCacheNavigate::TEntry::ERequestType::ByTableId;
entry.RedirectRequired = false;
entry.Operation = NSchemeCache::TSchemeCacheNavigate::EOp::OpPath;
request->ResultSet.emplace_back(entry);
auto response = MakeRequest<TEvTxProxySchemeCache::TEvNavigateKeySetResult>(MakeSchemeCacheID(), new TEvTxProxySchemeCache::TEvNavigateKeySet(request.Release()), 0/*flags*/, cookie);
if (response.Span) {
response.Span.Attribute("response", "#" + ::ToString(cookie));
}
return response;
}

void RequestTxProxyDescribe(const TString& path) {
THolder<TEvTxUserProxy::TEvNavigate> request(new TEvTxUserProxy::TEvNavigate());
request->Record.MutableDescribePath()->SetPath(path);
Expand Down Expand Up @@ -445,6 +555,10 @@ class TViewerPipeClient : public TActorBootstrapped<TDerived> {
}
}

bool IsLastRequest() const {
return Requests == 1;
}

void Handle(TEvTabletPipe::TEvClientConnected::TPtr& ev) {
if (ev->Get()->Status != NKikimrProto::OK) {
ui32 requests = FailPipeConnect(ev->Get()->TabletId);
Expand Down
58 changes: 58 additions & 0 deletions ydb/core/viewer/protos/viewer.proto
Original file line number Diff line number Diff line change
Expand Up @@ -393,8 +393,54 @@ message TTenantInfo {
repeated string Errors = 2;
}

message TStoragePDisk {
string PDiskId = 1;
string Path = 2;
string Type = 3;
string Guid = 4;
uint64 Category = 5;
uint64 TotalSize = 6;
uint64 AvailableSize = 7;
string Status = 8;
EFlag DiskSpace = 9;
string DecommitStatus = 10;
uint64 SlotSize = 11;
NKikimrWhiteboard.TPDiskStateInfo Whiteboard = 50;
}

message TStorageVDisk {
string VDiskId = 1;
uint32 NodeId = 2;
uint64 AllocatedSize = 3;
uint64 AvailableSize = 4;
string Kind = 5;
string Status = 6;
EFlag DiskSpace = 7;
repeated TStorageVDisk Donors = 8;
TStoragePDisk PDisk = 20;
NKikimrWhiteboard.TVDiskStateInfo Whiteboard = 50;
}

message TStorageGroupInfo {
string GroupId = 1;
uint64 GroupGeneration = 2;
string PoolName = 3;
bool Encryption = 4;
EFlag Overall = 5;
EFlag DiskSpace = 6;
string Kind = 7;
string MediaType = 8;
string ErasureSpecies = 9;
uint64 AllocationUnits = 10;
string State = 11;
uint64 MissingDisks = 12; // Degraded
uint64 Used = 13;
uint64 Limit = 14;
uint64 Available = 15;
double Usage = 16;
uint64 Read = 17;
uint64 Write = 18;
repeated TStorageVDisk VDisks = 20;
}

message TStoragePoolInfo {
Expand All @@ -420,6 +466,18 @@ message TStorageInfo {
repeated TStorageGroupInfo StorageGroups = 5;
}

message TStorageGroupsInfo {
uint64 Version = 1;
optional uint64 TotalGroups = 2;
optional uint64 FoundGroups = 3;
optional uint64 FieldsAvailable = 4;
optional uint64 FieldsRequired = 5;
optional bool NeedFilter = 6;
optional bool NeedSort = 7;
optional bool NeedLimit = 8;
repeated TStorageGroupInfo StorageGroups = 10;
}

message TStorageUsageStats {
uint32 Pace = 1;
repeated uint32 Buckets = 2;
Expand Down
Loading