Skip to content

Commit 4affa94

Browse files
committed
minimize returned data to avoid large responses (#19878)
1 parent c5fc008 commit 4affa94

File tree

5 files changed

+795
-144
lines changed

5 files changed

+795
-144
lines changed

ydb/core/viewer/json_handlers_storage.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
namespace NKikimr::NViewer {
55

66
void InitStorageGroupsJsonHandler(TJsonHandlers& jsonHandlers) {
7-
jsonHandlers.AddHandler("/storage/groups", new TJsonHandler<TStorageGroups>(TStorageGroups::GetSwagger()), 6);
7+
jsonHandlers.AddHandler("/storage/groups", new TJsonHandler<TStorageGroups>(TStorageGroups::GetSwagger()), 7);
88
}
99

1010
void InitStorageJsonHandlers(TJsonHandlers& jsonHandlers) {

ydb/core/viewer/json_handlers_viewer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ void InitViewerHealthCheckJsonHandler(TJsonHandlers& handlers) {
256256
}
257257

258258
void InitViewerNodesJsonHandler(TJsonHandlers& handlers) {
259-
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 15);
259+
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 16);
260260
}
261261

262262
void InitViewerACLJsonHandler(TJsonHandlers &jsonHandlers) {

ydb/core/viewer/storage_groups.h

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,8 @@ class TStorageGroups : public TViewerPipeClient {
623623
std::unordered_map<TVSlotId, const NKikimrWhiteboard::TVDiskStateInfo*> VDisksByVSlotId;
624624
std::unordered_map<TPDiskId, const NKikimrWhiteboard::TPDiskStateInfo*> PDisksByPDiskId;
625625

626-
TFieldsType FieldsRequired;
626+
TFieldsType FieldsRequested; // fields that were requested by user
627+
TFieldsType FieldsRequired; // fields that are required to calculate the response
627628
TFieldsType FieldsAvailable;
628629
const TFieldsType FieldsAll = TFieldsType().set();
629630
const TFieldsType FieldsBsGroups = TFieldsType().set(+EGroupFields::GroupId)
@@ -847,6 +848,7 @@ class TStorageGroups : public TViewerPipeClient {
847848
NeedSort = false;
848849
NeedLimit = false;
849850
}
851+
FieldsRequested = FieldsRequired; // no dependent fields
850852
for (auto field = +EGroupFields::GroupId; field != +EGroupFields::COUNT; ++field) {
851853
if (FieldsRequired.test(field)) {
852854
auto itDependentFields = DependentFields.find(static_cast<EGroupFields>(field));
@@ -2079,69 +2081,71 @@ class TStorageGroups : public TViewerPipeClient {
20792081
if (group->GroupGeneration) {
20802082
jsonGroup.SetGroupGeneration(group->GroupGeneration);
20812083
}
2082-
if (FieldsAvailable.test(+EGroupFields::PoolName)) {
2084+
if (FieldsAvailable.test(+EGroupFields::PoolName) && FieldsRequested.test(+EGroupFields::PoolName)) {
20832085
jsonGroup.SetPoolName(group->PoolName);
20842086
}
2085-
std::vector<const TVDisk*> vdisks;
2086-
vdisks.resize(group->VDisks.size());
2087-
for (size_t idx = 0; idx < group->VDisks.size(); ++idx) {
2088-
vdisks[idx] = &group->VDisks[idx];
2089-
}
2090-
std::sort(vdisks.begin(), vdisks.end(), [](const TVDisk* a, const TVDisk* b) {
2091-
return a->VDiskId < b->VDiskId;
2092-
});
2093-
for (const TVDisk* vdisk : vdisks) {
2094-
RenderVDisk(*jsonGroup.AddVDisks(), *vdisk);
2087+
if (FieldsRequested.test(+EGroupFields::VDisk)) {
2088+
std::vector<const TVDisk*> vdisks;
2089+
vdisks.resize(group->VDisks.size());
2090+
for (size_t idx = 0; idx < group->VDisks.size(); ++idx) {
2091+
vdisks[idx] = &group->VDisks[idx];
2092+
}
2093+
std::sort(vdisks.begin(), vdisks.end(), [](const TVDisk* a, const TVDisk* b) {
2094+
return a->VDiskId < b->VDiskId;
2095+
});
2096+
for (const TVDisk* vdisk : vdisks) {
2097+
RenderVDisk(*jsonGroup.AddVDisks(), *vdisk);
2098+
}
20952099
}
2096-
if (FieldsAvailable.test(+EGroupFields::Encryption)) {
2100+
if (FieldsAvailable.test(+EGroupFields::Encryption) && FieldsRequested.test(+EGroupFields::Encryption)) {
20972101
jsonGroup.SetEncryption(group->EncryptionMode);
20982102
}
20992103
if (group->Overall != NKikimrViewer::Grey) {
21002104
jsonGroup.SetOverall(group->Overall);
21012105
}
2102-
if (group->DiskSpace != NKikimrViewer::Grey) {
2106+
if (group->DiskSpace != NKikimrViewer::Grey && FieldsRequested.test(+EGroupFields::Usage)) {
21032107
jsonGroup.SetDiskSpace(group->DiskSpace);
21042108
}
2105-
if (FieldsAvailable.test(+EGroupFields::Kind)) {
2109+
if (FieldsAvailable.test(+EGroupFields::Kind) && FieldsRequested.test(+EGroupFields::Kind)) {
21062110
jsonGroup.SetKind(group->Kind);
21072111
}
2108-
if (FieldsAvailable.test(+EGroupFields::MediaType)) {
2112+
if (FieldsAvailable.test(+EGroupFields::MediaType) && FieldsRequested.test(+EGroupFields::MediaType)) {
21092113
jsonGroup.SetMediaType(group->MediaType);
21102114
}
2111-
if (FieldsAvailable.test(+EGroupFields::Erasure)) {
2115+
if (FieldsAvailable.test(+EGroupFields::Erasure) && FieldsRequested.test(+EGroupFields::Erasure)) {
21122116
jsonGroup.SetErasureSpecies(group->Erasure);
21132117
}
2114-
if (FieldsAvailable.test(+EGroupFields::AllocationUnits)) {
2118+
if (FieldsAvailable.test(+EGroupFields::AllocationUnits) && FieldsRequested.test(+EGroupFields::AllocationUnits)) {
21152119
jsonGroup.SetAllocationUnits(group->AllocationUnits);
21162120
}
2117-
if (FieldsAvailable.test(+EGroupFields::State)) {
2121+
if (FieldsAvailable.test(+EGroupFields::State) && FieldsRequested.test(+EGroupFields::State)) {
21182122
jsonGroup.SetState(group->State);
21192123
}
2120-
if (FieldsAvailable.test(+EGroupFields::MissingDisks)) {
2124+
if (FieldsAvailable.test(+EGroupFields::MissingDisks) && FieldsRequested.test(+EGroupFields::MissingDisks)) {
21212125
jsonGroup.SetMissingDisks(group->MissingDisks);
21222126
}
2123-
if (FieldsAvailable.test(+EGroupFields::Used)) {
2127+
if (FieldsAvailable.test(+EGroupFields::Used) && FieldsRequested.test(+EGroupFields::Used)) {
21242128
jsonGroup.SetUsed(group->Used);
21252129
}
2126-
if (FieldsAvailable.test(+EGroupFields::Limit)) {
2130+
if (FieldsAvailable.test(+EGroupFields::Limit) && FieldsRequested.test(+EGroupFields::Limit)) {
21272131
jsonGroup.SetLimit(group->Limit);
21282132
}
2129-
if (FieldsAvailable.test(+EGroupFields::Read)) {
2133+
if (FieldsAvailable.test(+EGroupFields::Read) && FieldsRequested.test(+EGroupFields::Read)) {
21302134
jsonGroup.SetRead(group->Read);
21312135
}
2132-
if (FieldsAvailable.test(+EGroupFields::Write)) {
2136+
if (FieldsAvailable.test(+EGroupFields::Write) && FieldsRequested.test(+EGroupFields::Write)) {
21332137
jsonGroup.SetWrite(group->Write);
21342138
}
2135-
if (FieldsAvailable.test(+EGroupFields::Usage)) {
2139+
if (FieldsAvailable.test(+EGroupFields::Usage) && FieldsRequested.test(+EGroupFields::Usage)) {
21362140
jsonGroup.SetUsage(group->Usage);
21372141
}
2138-
if (FieldsAvailable.test(+EGroupFields::Available)) {
2142+
if (FieldsAvailable.test(+EGroupFields::Available) && FieldsRequested.test(+EGroupFields::Available)) {
21392143
jsonGroup.SetAvailable(group->Available);
21402144
}
2141-
if (FieldsAvailable.test(+EGroupFields::DiskSpaceUsage)) {
2145+
if (FieldsAvailable.test(+EGroupFields::DiskSpaceUsage) && FieldsRequested.test(+EGroupFields::DiskSpaceUsage)) {
21422146
jsonGroup.SetDiskSpaceUsage(group->DiskSpaceUsage);
21432147
}
2144-
if (FieldsAvailable.test(+EGroupFields::Latency)) {
2148+
if (FieldsAvailable.test(+EGroupFields::Latency) && FieldsRequested.test(+EGroupFields::Latency)) {
21452149
jsonGroup.SetLatencyPutTabletLog(group->PutTabletLogLatency);
21462150
jsonGroup.SetLatencyPutUserData(group->PutUserDataLatency);
21472151
jsonGroup.SetLatencyGetFast(group->GetFastLatency);

0 commit comments

Comments
 (0)