diff options
author | andrew-rykov <arykov@ydb.tech> | 2023-06-09 11:51:13 +0300 |
---|---|---|
committer | andrew-rykov <arykov@ydb.tech> | 2023-06-09 11:51:13 +0300 |
commit | d62eb3886595104092fd222cd178ad865ba56c6f (patch) | |
tree | 639d4497f737890a8758a5c98588d50b17bae615 | |
parent | 5284a823d0ee2fff26807b65b8944450b3de632e (diff) | |
download | ydb-d62eb3886595104092fd222cd178ad865ba56c6f.tar.gz |
storage handler filter with nodeid poorly
подправил момент, из-за которого (видимо) не фильтровалось по nodeid
на слайсе проверил что возвращает ожидаемые группы. целевой сценарий, как на больших кластерах не проверял
node id filter storage handler fix
-rw-r--r-- | ydb/core/viewer/json_storage.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/ydb/core/viewer/json_storage.h b/ydb/core/viewer/json_storage.h index adfc6e34582..652fb9afd32 100644 --- a/ydb/core/viewer/json_storage.h +++ b/ydb/core/viewer/json_storage.h @@ -74,6 +74,7 @@ class TJsonStorage : public TViewerPipeClient<TJsonStorage> { bool NeedGroups = true; bool NeedDisks = true; bool NeedDonors = true; + bool NeedAdditionalNodesRequests; enum class EWith { Everything, @@ -109,6 +110,7 @@ public: FilterStoragePools.emplace(filterStoragePool); } SplitIds(params.Get("node_id"), ',', FilterNodeIds); + NeedAdditionalNodesRequests = !FilterNodeIds.empty(); SplitIds(params.Get("group_id"), ',', FilterGroupIds); Sort(FilterGroupIds); NeedGroups = FromStringWithDefault<bool>(params.Get("need_groups"), true); @@ -325,17 +327,19 @@ public: } void Handle(TEvWhiteboard::TEvBSGroupStateResponse::TPtr& ev) { + ui64 nodeId = ev.Get()->Cookie; for (const auto& info : ev->Get()->Record.GetBSGroupStateInfo()) { TString storagePoolName = info.GetStoragePoolName(); if (storagePoolName.empty()) { continue; } - StoragePoolInfo[storagePoolName].Groups.emplace(ToString(info.GetGroupID())); + if (FilterNodeIds.empty() || FilterNodeIds.contains(nodeId)) { + StoragePoolInfo[storagePoolName].Groups.emplace(ToString(info.GetGroupID())); + } for (const auto& vDiskNodeId : info.GetVDiskNodeIds()) { Group2NodeId[info.GetGroupID()].push_back(vDiskNodeId); } } - ui64 nodeId = ev.Get()->Cookie; BSGroupInfo[nodeId] = std::move(ev->Get()->Record); RequestDone(); } @@ -476,7 +480,8 @@ public: } void ReplyAndPassAway() { - if (!FilterNodeIds.empty()) { + if (NeedAdditionalNodesRequests) { + NeedAdditionalNodesRequests = false; for (const auto& [nodeId, vDiskInfo] : VDiskInfo) { if (FilterNodeIds.count(nodeId) == 0) { continue; @@ -495,8 +500,6 @@ public: } } - FilterNodeIds.clear(); // we don't need it anymore - if (Requests != 0) { return; // retry requests for neighbours of our groups (when BSC wasn't available) } |