Skip to content

Commit 92caca9

Browse files
authored
fix nodes type, introduce storage type for nodes (#9575)
1 parent b2b16e8 commit 92caca9

File tree

2 files changed

+47
-12
lines changed

2 files changed

+47
-12
lines changed

ydb/core/viewer/json_handlers_viewer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ void InitViewerHealthCheckJsonHandler(TJsonHandlers& handlers) {
243243
}
244244

245245
void InitViewerNodesJsonHandler(TJsonHandlers& handlers) {
246-
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 5);
246+
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 6);
247247
}
248248

249249
void InitViewerACLJsonHandler(TJsonHandlers &jsonHandlers) {

ydb/core/viewer/viewer_nodes.h

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ enum class ENodeFields : ui8 {
3535
SubDomainKey,
3636
DisconnectTime,
3737
Database,
38+
HasDisks,
3839
COUNT
3940
};
4041

@@ -124,6 +125,7 @@ class TJsonNodes : public TViewerPipeClient {
124125
Any,
125126
Static,
126127
Dynamic,
128+
Storage,
127129
};
128130
EType Type = EType::Any;
129131

@@ -660,6 +662,9 @@ class TJsonNodes : public TViewerPipeClient {
660662
} else if (params.Get("type") == "dynamic") {
661663
Type = EType::Dynamic;
662664
FieldsRequired.set(+ENodeFields::NodeInfo);
665+
} else if (params.Get("type") == "storage") {
666+
Type = EType::Storage;
667+
FieldsRequired.set(+ENodeFields::NodeInfo);
663668
} else if (params.Get("type") == "any") {
664669
Type = EType::Any;
665670
}
@@ -866,6 +871,42 @@ class TJsonNodes : public TViewerPipeClient {
866871
if (FilterStorageStage != EFilterStorageStage::None) {
867872
return;
868873
}
874+
if (((Type == EType::Static || Type == EType::Dynamic) && FieldsAvailable.test(+ENodeFields::NodeInfo)) || (Type == EType::Storage && FieldsAvailable.test(+ENodeFields::HasDisks))) {
875+
TNodeView nodeView;
876+
switch (Type) {
877+
case EType::Static:
878+
for (TNode* node : NodeView) {
879+
if (node->IsStatic()) {
880+
nodeView.push_back(node);
881+
}
882+
}
883+
break;
884+
case EType::Dynamic:
885+
for (TNode* node : NodeView) {
886+
if (!node->IsStatic()) {
887+
nodeView.push_back(node);
888+
}
889+
}
890+
break;
891+
case EType::Storage:
892+
for (TNode* node : NodeView) {
893+
if (node->HasDisks) {
894+
nodeView.push_back(node);
895+
}
896+
}
897+
break;
898+
case EType::Any:
899+
break;
900+
}
901+
NodeView.swap(nodeView);
902+
FoundNodes = TotalNodes = NodeView.size();
903+
Type = EType::Any;
904+
InvalidateNodes();
905+
}
906+
// storage/nodes pre-filter, affects TotalNodes count
907+
if (Type != EType::Any) {
908+
return;
909+
}
869910
if (!FilterNodeIds.empty() && FieldsAvailable.test(+ENodeFields::NodeId)) {
870911
TNodeView nodeView;
871912
for (TNode* node : NodeView) {
@@ -901,17 +942,6 @@ class TJsonNodes : public TViewerPipeClient {
901942
With = EWith::Everything;
902943
InvalidateNodes();
903944
}
904-
if (Type != EType::Any && FieldsAvailable.test(+ENodeFields::NodeInfo)) {
905-
TNodeView nodeView;
906-
for (TNode* node : NodeView) {
907-
if ((Type == EType::Static && node->IsStatic()) || (Type == EType::Dynamic && !node->IsStatic())) {
908-
nodeView.push_back(node);
909-
}
910-
}
911-
NodeView.swap(nodeView);
912-
Type = EType::Any;
913-
InvalidateNodes();
914-
}
915945
if (ProblemNodesOnly && FieldsAvailable.test(+ENodeFields::SystemState)) {
916946
TNodeView nodeView;
917947
for (TNode* node : NodeView) {
@@ -1021,6 +1051,7 @@ class TJsonNodes : public TViewerPipeClient {
10211051
case ENodeFields::CPU:
10221052
case ENodeFields::LoadAverage:
10231053
case ENodeFields::DisconnectTime:
1054+
case ENodeFields::HasDisks:
10241055
break;
10251056
}
10261057
}
@@ -1088,6 +1119,7 @@ class TJsonNodes : public TViewerPipeClient {
10881119
case ENodeFields::Tablets:
10891120
case ENodeFields::SubDomainKey:
10901121
case ENodeFields::DisconnectTime:
1122+
case ENodeFields::HasDisks:
10911123
case ENodeFields::COUNT:
10921124
break;
10931125
}
@@ -1553,6 +1585,7 @@ class TJsonNodes : public TViewerPipeClient {
15531585
++slots;
15541586
MaximumSlotsPerDisk = std::max(MaximumSlotsPerDisk.value_or(0), slots);
15551587
}
1588+
FieldsAvailable.set(+ENodeFields::HasDisks);
15561589
FilterStorageStage = EFilterStorageStage::None;
15571590
ApplyEverything();
15581591
} else {
@@ -1576,6 +1609,7 @@ class TJsonNodes : public TViewerPipeClient {
15761609
for (TNode* node : NodeView) {
15771610
node->CalcDisks();
15781611
}
1612+
FieldsAvailable.set(+ENodeFields::HasDisks);
15791613
FieldsAvailable.set(+ENodeFields::Missing);
15801614
FieldsAvailable.set(+ENodeFields::DiskSpaceUsage);
15811615
} else {
@@ -2288,6 +2322,7 @@ class TJsonNodes : public TViewerPipeClient {
22882322
return nodes of specific type:
22892323
* `static`
22902324
* `dynamic`
2325+
* `storage`
22912326
* `any`
22922327
- name: with
22932328
in: query

0 commit comments

Comments
 (0)