summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Efimov <[email protected]>2024-08-07 16:06:47 +0700
committerGitHub <[email protected]>2024-08-07 09:06:47 +0000
commit91c61a7b7fd894eaaa0877d9bcfe30e5e4dd2fe9 (patch)
tree38d199e13e73965ca8a2766f95275749ee6c03e4
parent47a1e069d781dd95bcff3be54fe382b7d06b8bf7 (diff)
correctly check WB requests requirement, improve swagger description (#7521)
-rw-r--r--ydb/core/viewer/storage_groups.h50
1 files changed, 44 insertions, 6 deletions
diff --git a/ydb/core/viewer/storage_groups.h b/ydb/core/viewer/storage_groups.h
index 7284cc01666..55734db86da 100644
--- a/ydb/core/viewer/storage_groups.h
+++ b/ydb/core/viewer/storage_groups.h
@@ -130,7 +130,6 @@ public:
// BSC
bool FallbackToWhiteboard = false;
- bool FillDisksFromWhiteboard = false;
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetGroupsResponse>> GetGroupsResponse;
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetStoragePoolsResponse>> GetStoragePoolsResponse;
std::optional<TRequestResponse<NSysView::TEvSysView::TEvGetVSlotsResponse>> GetVSlotsResponse;
@@ -657,7 +656,6 @@ public:
FieldsRequired |= FieldsBsVSlots;
FieldsRequired |= FieldsBsPDisks;
}
- FillDisksFromWhiteboard = FromStringWithDefault<bool>(params.Get("fill_disks_from_whiteboard"), FillDisksFromWhiteboard);
TString fieldsRequired = params.Get("fields_required");
if (!fieldsRequired.empty()) {
if (fieldsRequired == "all") {
@@ -1169,6 +1167,13 @@ public:
NKikimrBlobStorage::EVDiskStatus_Parse(info.GetStatusV2(), &vDisk.VDiskStatus);
}
+ bool AreBSControllerRequestsDone() const {
+ return (!GetGroupsResponse || GetGroupsResponse->IsDone()) &&
+ (!GetStoragePoolsResponse || GetStoragePoolsResponse->IsDone()) &&
+ (!GetVSlotsResponse || GetVSlotsResponse->IsDone()) &&
+ (!GetPDisksResponse || GetPDisksResponse->IsDone());
+ }
+
void ProcessBSControllerResponses() {
int requestsDone = 0;
if (GetGroupsResponse && GetGroupsResponse->IsOk() && FieldsNeeded(FieldsBsGroups)) {
@@ -1306,7 +1311,7 @@ public:
}
}
}
- if (NoMoreRequests(requestsDone) && FieldsNeeded(FieldsWbDisks)) {
+ if (AreBSControllerRequestsDone() && FieldsNeeded(FieldsWbDisks)) {
for (TGroup& group : Groups) {
for (TNodeId nodeId : group.VDiskNodeIds) {
SendWhiteboardDisksRequest(nodeId);
@@ -1748,9 +1753,11 @@ public:
void HandleTimeout(TEvents::TEvWakeup::TPtr& ev) {
switch (ev->Get()->Tag) {
case TimeoutBSC:
- OnBscError("timeout");
- Problems.emplace_back("bsc-timeout");
- RequestDone(FailPipeConnect(GetBSControllerId()));
+ if (!AreBSControllerRequestsDone()) {
+ OnBscError("timeout");
+ Problems.emplace_back("bsc-timeout");
+ RequestDone(FailPipeConnect(GetBSControllerId()));
+ }
break;
case TimeoutFinal:
// bread crumbs
@@ -1762,6 +1769,12 @@ public:
Problems.emplace_back("wb-incomplete-disks");
ProcessWhiteboardDisks();
}
+ if (HiveStorageStatsInFlight > 0) {
+ Problems.emplace_back("hive-incomplete");
+ }
+ if (!AreBSControllerRequestsDone()) {
+ Problems.emplace_back("bsc-incomplete");
+ }
ReplyAndPassAway();
break;
}
@@ -2019,6 +2032,31 @@ public:
* `State`
required: false
type: string
+ - name: fields_required
+ in: query
+ description: >
+ list of fields required in response (the more - the heavier could be request):
+ * `GroupId` (always required)
+ * `PoolName`
+ * `Kind`
+ * `MediaType`
+ * `Erasure`
+ * `MissingDisks`
+ * `State`
+ * `Usage`
+ * `Used`
+ * `Limit`
+ * `Usage`
+ * `Available`
+ * `DiskSpaceUsage`
+ * `Encryption`
+ * `AllocationUnits`
+ * `Read`
+ * `Write`
+ * `PDisk`
+ * `VDisk`
+ required: false
+ type: string
- name: offset
in: query
description: skip N nodes