@@ -131,9 +131,13 @@ class TStorageGroups : public TViewerPipeClient {
131
131
// BSC
132
132
bool FallbackToWhiteboard = false ;
133
133
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetGroupsResponse>> GetGroupsResponse;
134
+ bool GetGroupsResponseProcessed = false ;
134
135
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetStoragePoolsResponse>> GetStoragePoolsResponse;
136
+ bool GetStoragePoolsResponseProcessed = false ;
135
137
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetVSlotsResponse>> GetVSlotsResponse;
138
+ bool GetVSlotsResponseProcessed = false ;
136
139
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetPDisksResponse>> GetPDisksResponse;
140
+ bool GetPDisksResponseProcessed = false ;
137
141
138
142
// Whiteboard
139
143
std::optional<TRequestResponse<TEvInterconnect::TEvNodesInfo>> NodesInfo;
@@ -1270,7 +1274,10 @@ class TStorageGroups : public TViewerPipeClient {
1270
1274
}
1271
1275
1272
1276
bool AreBSControllerRequestsDone () const {
1273
- return !GetGroupsResponse && !GetStoragePoolsResponse && !GetVSlotsResponse && !GetPDisksResponse;
1277
+ return (!GetGroupsResponse || GetGroupsResponseProcessed) &&
1278
+ (!GetStoragePoolsResponse || GetStoragePoolsResponseProcessed) &&
1279
+ (!GetVSlotsResponse || GetVSlotsResponseProcessed) &&
1280
+ (!GetPDisksResponse || GetPDisksResponseProcessed);
1274
1281
}
1275
1282
1276
1283
bool TimeToAskWhiteboard () const {
@@ -1281,7 +1288,7 @@ class TStorageGroups : public TViewerPipeClient {
1281
1288
1282
1289
void ProcessResponses () {
1283
1290
AddEvent (" ProcessResponses" );
1284
- if (GetGroupsResponse && GetGroupsResponse->IsDone ()) {
1291
+ if (GetGroupsResponse && GetGroupsResponse->IsDone () && !GetGroupsResponseProcessed ) {
1285
1292
if (GetGroupsResponse->IsOk ()) {
1286
1293
GroupData.reserve (GetGroupsResponse->Get ()->Record .EntriesSize ());
1287
1294
for (const NKikimrSysView::TGroupEntry& entry : GetGroupsResponse->Get ()->Record .GetEntries ()) {
@@ -1310,9 +1317,9 @@ class TStorageGroups : public TViewerPipeClient {
1310
1317
} else {
1311
1318
AddProblem (" bsc-storage-groups-no-data" );
1312
1319
}
1313
- GetGroupsResponse. reset () ;
1320
+ GetGroupsResponseProcessed = true ;
1314
1321
}
1315
- if (FieldsAvailable.test (+EGroupFields::GroupId) && GetStoragePoolsResponse && GetStoragePoolsResponse->IsDone ()) {
1322
+ if (FieldsAvailable.test (+EGroupFields::GroupId) && GetStoragePoolsResponse && GetStoragePoolsResponse->IsDone () && !GetStoragePoolsResponseProcessed ) {
1316
1323
if (GetStoragePoolsResponse->IsOk ()) {
1317
1324
std::unordered_map<std::pair<ui64, ui64>, const NKikimrSysView::TStoragePoolInfo*> indexStoragePool; // (box, id) -> pool
1318
1325
for (const NKikimrSysView::TStoragePoolEntry& entry : GetStoragePoolsResponse->Get ()->Record .GetEntries ()) {
@@ -1353,9 +1360,9 @@ class TStorageGroups : public TViewerPipeClient {
1353
1360
} else {
1354
1361
AddProblem (" bsc-storage-pools-no-data" );
1355
1362
}
1356
- GetStoragePoolsResponse. reset () ;
1363
+ GetStoragePoolsResponseProcessed = true ;
1357
1364
}
1358
- if (FieldsAvailable.test (+EGroupFields::GroupId) && GetVSlotsResponse && GetVSlotsResponse->IsDone ()) {
1365
+ if (FieldsAvailable.test (+EGroupFields::GroupId) && GetVSlotsResponse && GetVSlotsResponse->IsDone () && !GetVSlotsResponseProcessed ) {
1359
1366
if (GetVSlotsResponse->IsOk ()) {
1360
1367
if (GroupsByGroupId.empty ()) {
1361
1368
RebuildGroupsByGroupId ();
@@ -1386,9 +1393,9 @@ class TStorageGroups : public TViewerPipeClient {
1386
1393
} else {
1387
1394
AddProblem (" bsc-vslots-no-data" );
1388
1395
}
1389
- GetVSlotsResponse. reset () ;
1396
+ GetVSlotsResponseProcessed = true ;
1390
1397
}
1391
- if (GetPDisksResponse && GetPDisksResponse->IsDone ()) {
1398
+ if (GetPDisksResponse && GetPDisksResponse->IsDone () && !GetPDisksResponseProcessed ) {
1392
1399
if (GetPDisksResponse->IsOk ()) {
1393
1400
for (const NKikimrSysView::TPDiskEntry& entry : GetPDisksResponse->Get ()->Record .GetEntries ()) {
1394
1401
const NKikimrSysView::TPDiskKey& key = entry.GetKey ();
@@ -1414,7 +1421,7 @@ class TStorageGroups : public TViewerPipeClient {
1414
1421
} else {
1415
1422
AddProblem (" bsc-pdisks-no-data" );
1416
1423
}
1417
- GetPDisksResponse. reset () ;
1424
+ GetPDisksResponseProcessed = true ; ;
1418
1425
}
1419
1426
if (FieldsAvailable.test (+EGroupFields::VDisk)) {
1420
1427
if (FieldsNeeded (FieldsGroupState)) {
0 commit comments