@@ -623,7 +623,8 @@ class TStorageGroups : public TViewerPipeClient {
623
623
std::unordered_map<TVSlotId, const NKikimrWhiteboard::TVDiskStateInfo*> VDisksByVSlotId;
624
624
std::unordered_map<TPDiskId, const NKikimrWhiteboard::TPDiskStateInfo*> PDisksByPDiskId;
625
625
626
- TFieldsType FieldsRequired;
626
+ TFieldsType FieldsRequested; // fields that were requested by user
627
+ TFieldsType FieldsRequired; // fields that are required to calculate the response
627
628
TFieldsType FieldsAvailable;
628
629
const TFieldsType FieldsAll = TFieldsType().set();
629
630
const TFieldsType FieldsBsGroups = TFieldsType().set(+EGroupFields::GroupId)
@@ -847,6 +848,7 @@ class TStorageGroups : public TViewerPipeClient {
847
848
NeedSort = false ;
848
849
NeedLimit = false ;
849
850
}
851
+ FieldsRequested = FieldsRequired; // no dependent fields
850
852
for (auto field = +EGroupFields::GroupId; field != +EGroupFields::COUNT; ++field) {
851
853
if (FieldsRequired.test (field)) {
852
854
auto itDependentFields = DependentFields.find (static_cast <EGroupFields>(field));
@@ -2079,69 +2081,71 @@ class TStorageGroups : public TViewerPipeClient {
2079
2081
if (group->GroupGeneration ) {
2080
2082
jsonGroup.SetGroupGeneration (group->GroupGeneration );
2081
2083
}
2082
- if (FieldsAvailable.test (+EGroupFields::PoolName)) {
2084
+ if (FieldsAvailable.test (+EGroupFields::PoolName) && FieldsRequested. test (+EGroupFields::PoolName) ) {
2083
2085
jsonGroup.SetPoolName (group->PoolName );
2084
2086
}
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
+ }
2095
2099
}
2096
- if (FieldsAvailable.test (+EGroupFields::Encryption)) {
2100
+ if (FieldsAvailable.test (+EGroupFields::Encryption) && FieldsRequested. test (+EGroupFields::Encryption) ) {
2097
2101
jsonGroup.SetEncryption (group->EncryptionMode );
2098
2102
}
2099
2103
if (group->Overall != NKikimrViewer::Grey) {
2100
2104
jsonGroup.SetOverall (group->Overall );
2101
2105
}
2102
- if (group->DiskSpace != NKikimrViewer::Grey) {
2106
+ if (group->DiskSpace != NKikimrViewer::Grey && FieldsRequested. test (+EGroupFields::Usage) ) {
2103
2107
jsonGroup.SetDiskSpace (group->DiskSpace );
2104
2108
}
2105
- if (FieldsAvailable.test (+EGroupFields::Kind)) {
2109
+ if (FieldsAvailable.test (+EGroupFields::Kind) && FieldsRequested. test (+EGroupFields::Kind) ) {
2106
2110
jsonGroup.SetKind (group->Kind );
2107
2111
}
2108
- if (FieldsAvailable.test (+EGroupFields::MediaType)) {
2112
+ if (FieldsAvailable.test (+EGroupFields::MediaType) && FieldsRequested. test (+EGroupFields::MediaType) ) {
2109
2113
jsonGroup.SetMediaType (group->MediaType );
2110
2114
}
2111
- if (FieldsAvailable.test (+EGroupFields::Erasure)) {
2115
+ if (FieldsAvailable.test (+EGroupFields::Erasure) && FieldsRequested. test (+EGroupFields::Erasure) ) {
2112
2116
jsonGroup.SetErasureSpecies (group->Erasure );
2113
2117
}
2114
- if (FieldsAvailable.test (+EGroupFields::AllocationUnits)) {
2118
+ if (FieldsAvailable.test (+EGroupFields::AllocationUnits) && FieldsRequested. test (+EGroupFields::AllocationUnits) ) {
2115
2119
jsonGroup.SetAllocationUnits (group->AllocationUnits );
2116
2120
}
2117
- if (FieldsAvailable.test (+EGroupFields::State)) {
2121
+ if (FieldsAvailable.test (+EGroupFields::State) && FieldsRequested. test (+EGroupFields::State) ) {
2118
2122
jsonGroup.SetState (group->State );
2119
2123
}
2120
- if (FieldsAvailable.test (+EGroupFields::MissingDisks)) {
2124
+ if (FieldsAvailable.test (+EGroupFields::MissingDisks) && FieldsRequested. test (+EGroupFields::MissingDisks) ) {
2121
2125
jsonGroup.SetMissingDisks (group->MissingDisks );
2122
2126
}
2123
- if (FieldsAvailable.test (+EGroupFields::Used)) {
2127
+ if (FieldsAvailable.test (+EGroupFields::Used) && FieldsRequested. test (+EGroupFields::Used) ) {
2124
2128
jsonGroup.SetUsed (group->Used );
2125
2129
}
2126
- if (FieldsAvailable.test (+EGroupFields::Limit)) {
2130
+ if (FieldsAvailable.test (+EGroupFields::Limit) && FieldsRequested. test (+EGroupFields::Limit) ) {
2127
2131
jsonGroup.SetLimit (group->Limit );
2128
2132
}
2129
- if (FieldsAvailable.test (+EGroupFields::Read)) {
2133
+ if (FieldsAvailable.test (+EGroupFields::Read) && FieldsRequested. test (+EGroupFields::Read) ) {
2130
2134
jsonGroup.SetRead (group->Read );
2131
2135
}
2132
- if (FieldsAvailable.test (+EGroupFields::Write)) {
2136
+ if (FieldsAvailable.test (+EGroupFields::Write) && FieldsRequested. test (+EGroupFields::Write) ) {
2133
2137
jsonGroup.SetWrite (group->Write );
2134
2138
}
2135
- if (FieldsAvailable.test (+EGroupFields::Usage)) {
2139
+ if (FieldsAvailable.test (+EGroupFields::Usage) && FieldsRequested. test (+EGroupFields::Usage) ) {
2136
2140
jsonGroup.SetUsage (group->Usage );
2137
2141
}
2138
- if (FieldsAvailable.test (+EGroupFields::Available)) {
2142
+ if (FieldsAvailable.test (+EGroupFields::Available) && FieldsRequested. test (+EGroupFields::Available) ) {
2139
2143
jsonGroup.SetAvailable (group->Available );
2140
2144
}
2141
- if (FieldsAvailable.test (+EGroupFields::DiskSpaceUsage)) {
2145
+ if (FieldsAvailable.test (+EGroupFields::DiskSpaceUsage) && FieldsRequested. test (+EGroupFields::DiskSpaceUsage) ) {
2142
2146
jsonGroup.SetDiskSpaceUsage (group->DiskSpaceUsage );
2143
2147
}
2144
- if (FieldsAvailable.test (+EGroupFields::Latency)) {
2148
+ if (FieldsAvailable.test (+EGroupFields::Latency) && FieldsRequested. test (+EGroupFields::Latency) ) {
2145
2149
jsonGroup.SetLatencyPutTabletLog (group->PutTabletLogLatency );
2146
2150
jsonGroup.SetLatencyPutUserData (group->PutUserDataLatency );
2147
2151
jsonGroup.SetLatencyGetFast (group->GetFastLatency );
0 commit comments