@@ -130,7 +130,6 @@ class TStorageGroups : public TViewerPipeClient {
130
130
131
131
// BSC
132
132
bool FallbackToWhiteboard = false ;
133
- bool FillDisksFromWhiteboard = false ;
134
133
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetGroupsResponse>> GetGroupsResponse;
135
134
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetStoragePoolsResponse>> GetStoragePoolsResponse;
136
135
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetVSlotsResponse>> GetVSlotsResponse;
@@ -657,7 +656,6 @@ class TStorageGroups : public TViewerPipeClient {
657
656
FieldsRequired |= FieldsBsVSlots;
658
657
FieldsRequired |= FieldsBsPDisks;
659
658
}
660
- FillDisksFromWhiteboard = FromStringWithDefault<bool >(params.Get (" fill_disks_from_whiteboard" ), FillDisksFromWhiteboard);
661
659
TString fieldsRequired = params.Get (" fields_required" );
662
660
if (!fieldsRequired.empty ()) {
663
661
if (fieldsRequired == " all" ) {
@@ -1169,6 +1167,13 @@ class TStorageGroups : public TViewerPipeClient {
1169
1167
NKikimrBlobStorage::EVDiskStatus_Parse (info.GetStatusV2 (), &vDisk.VDiskStatus );
1170
1168
}
1171
1169
1170
+ bool AreBSControllerRequestsDone () const {
1171
+ return (!GetGroupsResponse || GetGroupsResponse->IsDone ()) &&
1172
+ (!GetStoragePoolsResponse || GetStoragePoolsResponse->IsDone ()) &&
1173
+ (!GetVSlotsResponse || GetVSlotsResponse->IsDone ()) &&
1174
+ (!GetPDisksResponse || GetPDisksResponse->IsDone ());
1175
+ }
1176
+
1172
1177
void ProcessBSControllerResponses () {
1173
1178
int requestsDone = 0 ;
1174
1179
if (GetGroupsResponse && GetGroupsResponse->IsOk () && FieldsNeeded (FieldsBsGroups)) {
@@ -1306,7 +1311,7 @@ class TStorageGroups : public TViewerPipeClient {
1306
1311
}
1307
1312
}
1308
1313
}
1309
- if (NoMoreRequests (requestsDone ) && FieldsNeeded (FieldsWbDisks)) {
1314
+ if (AreBSControllerRequestsDone ( ) && FieldsNeeded (FieldsWbDisks)) {
1310
1315
for (TGroup& group : Groups) {
1311
1316
for (TNodeId nodeId : group.VDiskNodeIds ) {
1312
1317
SendWhiteboardDisksRequest (nodeId);
@@ -1748,9 +1753,11 @@ class TStorageGroups : public TViewerPipeClient {
1748
1753
void HandleTimeout (TEvents::TEvWakeup::TPtr& ev) {
1749
1754
switch (ev->Get ()->Tag ) {
1750
1755
case TimeoutBSC:
1751
- OnBscError (" timeout" );
1752
- Problems.emplace_back (" bsc-timeout" );
1753
- RequestDone (FailPipeConnect (GetBSControllerId ()));
1756
+ if (!AreBSControllerRequestsDone ()) {
1757
+ OnBscError (" timeout" );
1758
+ Problems.emplace_back (" bsc-timeout" );
1759
+ RequestDone (FailPipeConnect (GetBSControllerId ()));
1760
+ }
1754
1761
break ;
1755
1762
case TimeoutFinal:
1756
1763
// bread crumbs
@@ -1762,6 +1769,12 @@ class TStorageGroups : public TViewerPipeClient {
1762
1769
Problems.emplace_back (" wb-incomplete-disks" );
1763
1770
ProcessWhiteboardDisks ();
1764
1771
}
1772
+ if (HiveStorageStatsInFlight > 0 ) {
1773
+ Problems.emplace_back (" hive-incomplete" );
1774
+ }
1775
+ if (!AreBSControllerRequestsDone ()) {
1776
+ Problems.emplace_back (" bsc-incomplete" );
1777
+ }
1765
1778
ReplyAndPassAway ();
1766
1779
break ;
1767
1780
}
@@ -2019,6 +2032,31 @@ class TStorageGroups : public TViewerPipeClient {
2019
2032
* `State`
2020
2033
required: false
2021
2034
type: string
2035
+ - name: fields_required
2036
+ in: query
2037
+ description: >
2038
+ list of fields required in response (the more - the heavier could be request):
2039
+ * `GroupId` (always required)
2040
+ * `PoolName`
2041
+ * `Kind`
2042
+ * `MediaType`
2043
+ * `Erasure`
2044
+ * `MissingDisks`
2045
+ * `State`
2046
+ * `Usage`
2047
+ * `Used`
2048
+ * `Limit`
2049
+ * `Usage`
2050
+ * `Available`
2051
+ * `DiskSpaceUsage`
2052
+ * `Encryption`
2053
+ * `AllocationUnits`
2054
+ * `Read`
2055
+ * `Write`
2056
+ * `PDisk`
2057
+ * `VDisk`
2058
+ required: false
2059
+ type: string
2022
2060
- name: offset
2023
2061
in: query
2024
2062
description: skip N nodes
0 commit comments