aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew-rykov <arykov@ydb.tech>2023-06-09 11:51:13 +0300
committerandrew-rykov <arykov@ydb.tech>2023-06-09 11:51:13 +0300
commitd62eb3886595104092fd222cd178ad865ba56c6f (patch)
tree639d4497f737890a8758a5c98588d50b17bae615
parent5284a823d0ee2fff26807b65b8944450b3de632e (diff)
downloadydb-d62eb3886595104092fd222cd178ad865ba56c6f.tar.gz
storage handler filter with nodeid poorly
подправил момент, из-за которого (видимо) не фильтровалось по nodeid на слайсе проверил что возвращает ожидаемые группы. целевой сценарий, как на больших кластерах не проверял node id filter storage handler fix
-rw-r--r--ydb/core/viewer/json_storage.h13
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)
}