Use the server id as identifier in system topology graph (#9825)

Signed-off-by: dragondriver <jiquan.long@zilliz.com>
pull/9863/head
dragondriver 2021-10-14 11:12:38 +08:00 committed by GitHub
parent 937e59f6c3
commit 72d3d470ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 293 additions and 246 deletions

View File

@ -16,6 +16,8 @@ import (
"errors"
"os"
"github.com/milvus-io/milvus/internal/util/uniquegenerator"
"github.com/milvus-io/milvus/internal/util/typeutil"
"go.uber.org/zap"
@ -102,6 +104,7 @@ func (s *Server) getDataCoordMetrics() metricsinfo.DataCoordInfos {
CreatedTime: Params.CreatedTime.String(),
UpdatedTime: Params.UpdatedTime.String(),
Type: typeutil.DataCoordRole,
ID: s.session.ServerID,
},
SystemConfigurations: metricsinfo.DataCoordConfiguration{
SegmentMaxSize: Params.SegmentMaxSize,
@ -115,6 +118,7 @@ func (s *Server) getDataNodeMetrics(ctx context.Context, req *milvuspb.GetMetric
infos := metricsinfo.DataNodeInfos{
BaseComponentInfos: metricsinfo.BaseComponentInfos{
HasError: true,
ID: int64(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()),
},
}
if node == nil {

View File

@ -162,6 +162,7 @@ func (c *mockDataNodeClient) GetMetrics(ctx context.Context, req *milvuspb.GetMe
nodeInfos := metricsinfo.DataNodeInfos{
BaseComponentInfos: metricsinfo.BaseComponentInfos{
Name: metricsinfo.ConstructComponentName(typeutil.DataNodeRole, nodeID),
ID: nodeID,
},
}
resp, err := metricsinfo.MarshalComponentInfos(nodeInfos)
@ -401,6 +402,7 @@ func (m *mockRootCoordService) GetMetrics(ctx context.Context, req *milvuspb.Get
Self: metricsinfo.RootCoordInfos{
BaseComponentInfos: metricsinfo.BaseComponentInfos{
Name: metricsinfo.ConstructComponentName(typeutil.RootCoordRole, nodeID),
ID: nodeID,
},
},
Connections: metricsinfo.ConnTopology{

View File

@ -42,6 +42,7 @@ func (node *DataNode) getSystemInfoMetrics(ctx context.Context, req *milvuspb.Ge
CreatedTime: Params.CreatedTime.String(),
UpdatedTime: Params.UpdatedTime.String(),
Type: typeutil.DataNodeRole,
ID: node.session.ServerID,
},
SystemConfigurations: metricsinfo.DataNodeConfiguration{
FlushInsertBufferSize: Params.FlushInsertBufferSize,

View File

@ -15,6 +15,8 @@ import (
"context"
"os"
"github.com/milvus-io/milvus/internal/util/uniquegenerator"
"github.com/milvus-io/milvus/internal/util/typeutil"
"go.uber.org/zap"
@ -53,6 +55,7 @@ func getSystemInfoMetrics(
CreatedTime: Params.CreatedTime.String(),
UpdatedTime: Params.UpdatedTime.String(),
Type: typeutil.IndexCoordRole,
ID: coord.session.ServerID,
},
SystemConfigurations: metricsinfo.IndexCoordConfiguration{
MinioBucketName: Params.MinioBucketName,
@ -72,6 +75,7 @@ func getSystemInfoMetrics(
ErrorReason: nodeMetrics.err.Error(),
// Name doesn't matter here cause we can't get it when error occurs, using address as the Name?
Name: "",
ID: int64(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()),
},
})
continue
@ -86,6 +90,7 @@ func getSystemInfoMetrics(
HasError: true,
ErrorReason: nodeMetrics.resp.Status.Reason,
Name: nodeMetrics.resp.ComponentName,
ID: int64(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()),
},
})
continue
@ -101,6 +106,7 @@ func getSystemInfoMetrics(
HasError: true,
ErrorReason: err.Error(),
Name: nodeMetrics.resp.ComponentName,
ID: int64(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()),
},
})
continue

View File

@ -48,6 +48,7 @@ func getSystemInfoMetrics(
CreatedTime: Params.CreatedTime.String(),
UpdatedTime: Params.UpdatedTime.String(),
Type: typeutil.IndexNodeRole,
ID: node.session.ServerID,
},
SystemConfigurations: metricsinfo.IndexNodeConfiguration{
MinioBucketName: Params.MinioBucketName,

View File

@ -15,8 +15,6 @@ import (
"context"
"os"
"github.com/milvus-io/milvus/internal/util/uniquegenerator"
"github.com/milvus-io/milvus/internal/proto/commonpb"
"github.com/milvus-io/milvus/internal/util/typeutil"
@ -43,9 +41,9 @@ func getSystemInfoMetrics(
identifierMap := make(map[string]int)
proxyRoleName := metricsinfo.ConstructComponentName(typeutil.ProxyRole, Params.ProxyID)
identifierMap[proxyRoleName] = uniquegenerator.GetUniqueIntGeneratorIns().GetInt()
identifierMap[proxyRoleName] = int(node.session.ServerID)
proxyTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[proxyRoleName],
Identifier: int(node.session.ServerID),
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &metricsinfo.ProxyInfos{
BaseComponentInfos: metricsinfo.BaseComponentInfos{
@ -68,6 +66,7 @@ func getSystemInfoMetrics(
CreatedTime: Params.CreatedTime.String(),
UpdatedTime: Params.UpdatedTime.String(),
Type: typeutil.ProxyRole,
ID: node.session.ServerID,
},
SystemConfigurations: metricsinfo.ProxyConfiguration{
DefaultPartitionName: Params.DefaultPartitionName,
@ -78,30 +77,38 @@ func getSystemInfoMetrics(
queryCoordResp, queryCoordErr := node.queryCoord.GetMetrics(ctx, request)
queryCoordRoleName := ""
var queryCoordTopology metricsinfo.QueryCoordTopology
if queryCoordErr == nil && queryCoordResp != nil {
queryCoordRoleName = queryCoordResp.ComponentName
identifierMap[queryCoordRoleName] = uniquegenerator.GetUniqueIntGeneratorIns().GetInt()
queryCoordErr = metricsinfo.UnmarshalTopology(queryCoordResp.Response, &queryCoordTopology)
identifierMap[queryCoordRoleName] = int(queryCoordTopology.Cluster.Self.ID)
}
dataCoordResp, dataCoordErr := node.dataCoord.GetMetrics(ctx, request)
dataCoordRoleName := ""
var dataCoordTopology metricsinfo.DataCoordTopology
if dataCoordErr == nil && dataCoordResp != nil {
dataCoordRoleName = dataCoordResp.ComponentName
identifierMap[dataCoordRoleName] = uniquegenerator.GetUniqueIntGeneratorIns().GetInt()
dataCoordErr = metricsinfo.UnmarshalTopology(dataCoordResp.Response, &dataCoordTopology)
identifierMap[dataCoordRoleName] = int(dataCoordTopology.Cluster.Self.ID)
}
indexCoordResp, indexCoordErr := node.indexCoord.GetMetrics(ctx, request)
indexCoordRoleName := ""
var indexCoordTopology metricsinfo.IndexCoordTopology
if indexCoordErr == nil && indexCoordResp != nil {
indexCoordRoleName = indexCoordResp.ComponentName
identifierMap[indexCoordRoleName] = uniquegenerator.GetUniqueIntGeneratorIns().GetInt()
indexCoordErr = metricsinfo.UnmarshalTopology(indexCoordResp.Response, &indexCoordTopology)
identifierMap[indexCoordRoleName] = int(indexCoordTopology.Cluster.Self.ID)
}
rootCoordResp, rootCoordErr := node.rootCoord.GetMetrics(ctx, request)
rootCoordRoleName := ""
var rootCoordTopology metricsinfo.RootCoordTopology
if rootCoordErr == nil && rootCoordResp != nil {
rootCoordRoleName = rootCoordResp.ComponentName
identifierMap[rootCoordRoleName] = uniquegenerator.GetUniqueIntGeneratorIns().GetInt()
rootCoordErr = metricsinfo.UnmarshalTopology(rootCoordResp.Response, &rootCoordTopology)
identifierMap[rootCoordRoleName] = int(rootCoordTopology.Self.ID)
}
if queryCoordErr == nil && queryCoordResp != nil {
@ -111,73 +118,69 @@ func getSystemInfoMetrics(
TargetType: typeutil.QueryCoordRole,
})
queryCoordTopology := metricsinfo.QueryCoordTopology{}
err = metricsinfo.UnmarshalTopology(queryCoordResp.Response, &queryCoordTopology)
if err == nil {
// query coord in system topology graph
queryCoordTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[queryCoordRoleName],
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &queryCoordTopology.Cluster.Self,
}
// query coord in system topology graph
queryCoordTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[queryCoordRoleName],
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &queryCoordTopology.Cluster.Self,
}
// fill connection edge, a little trick here
for _, edge := range queryCoordTopology.Connections.ConnectedComponents {
switch edge.TargetType {
case typeutil.RootCoordRole:
if rootCoordErr == nil && rootCoordResp != nil {
queryCoordTopologyNode.Connected = append(queryCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[rootCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.RootCoordRole,
})
}
case typeutil.DataCoordRole:
if dataCoordErr == nil && dataCoordResp != nil {
queryCoordTopologyNode.Connected = append(queryCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[dataCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.DataCoordRole,
})
}
case typeutil.IndexCoordRole:
if indexCoordErr == nil && indexCoordResp != nil {
queryCoordTopologyNode.Connected = append(queryCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[indexCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.IndexCoordRole,
})
}
case typeutil.QueryCoordRole:
// fill connection edge, a little trick here
for _, edge := range queryCoordTopology.Connections.ConnectedComponents {
switch edge.TargetType {
case typeutil.RootCoordRole:
if rootCoordErr == nil && rootCoordResp != nil {
queryCoordTopologyNode.Connected = append(queryCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[queryCoordRoleName],
ConnectedIdentifier: identifierMap[rootCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.QueryCoordRole,
TargetType: typeutil.RootCoordRole,
})
}
}
// add query nodes to system topology graph
for _, queryNode := range queryCoordTopology.Cluster.ConnectedNodes {
node := queryNode
identifier := uniquegenerator.GetUniqueIntGeneratorIns().GetInt()
identifierMap[queryNode.Name] = identifier
queryNodeTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifier,
Connected: nil,
Infos: &node,
case typeutil.DataCoordRole:
if dataCoordErr == nil && dataCoordResp != nil {
queryCoordTopologyNode.Connected = append(queryCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[dataCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.DataCoordRole,
})
}
systemTopology.NodesInfo = append(systemTopology.NodesInfo, queryNodeTopologyNode)
case typeutil.IndexCoordRole:
if indexCoordErr == nil && indexCoordResp != nil {
queryCoordTopologyNode.Connected = append(queryCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[indexCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.IndexCoordRole,
})
}
case typeutil.QueryCoordRole:
queryCoordTopologyNode.Connected = append(queryCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifier,
Type: metricsinfo.CoordConnectToNode,
TargetType: typeutil.QueryNodeRole,
ConnectedIdentifier: identifierMap[queryCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.QueryCoordRole,
})
}
// add query coord to system topology graph
systemTopology.NodesInfo = append(systemTopology.NodesInfo, queryCoordTopologyNode)
}
// add query nodes to system topology graph
for _, queryNode := range queryCoordTopology.Cluster.ConnectedNodes {
node := queryNode
identifier := int(node.ID)
identifierMap[queryNode.Name] = identifier
queryNodeTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifier,
Connected: nil,
Infos: &node,
}
systemTopology.NodesInfo = append(systemTopology.NodesInfo, queryNodeTopologyNode)
queryCoordTopologyNode.Connected = append(queryCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifier,
Type: metricsinfo.CoordConnectToNode,
TargetType: typeutil.QueryNodeRole,
})
}
// add query coord to system topology graph
systemTopology.NodesInfo = append(systemTopology.NodesInfo, queryCoordTopologyNode)
}
if dataCoordErr == nil && dataCoordResp != nil {
@ -187,73 +190,69 @@ func getSystemInfoMetrics(
TargetType: typeutil.DataCoordRole,
})
dataCoordTopology := metricsinfo.DataCoordTopology{}
err = metricsinfo.UnmarshalTopology(dataCoordResp.Response, &dataCoordTopology)
if err == nil {
// data coord in system topology graph
dataCoordTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[dataCoordRoleName],
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &dataCoordTopology.Cluster.Self,
}
// fill connection edge, a little trick here
for _, edge := range dataCoordTopology.Connections.ConnectedComponents {
switch edge.TargetType {
case typeutil.RootCoordRole:
if rootCoordErr == nil && rootCoordResp != nil {
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[rootCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.RootCoordRole,
})
}
case typeutil.DataCoordRole:
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[dataCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.DataCoordRole,
})
case typeutil.IndexCoordRole:
if indexCoordErr == nil && indexCoordResp != nil {
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[indexCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.IndexCoordRole,
})
}
case typeutil.QueryCoordRole:
if queryCoordErr == nil && queryCoordResp != nil {
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[queryCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.QueryCoordRole,
})
}
}
}
// add data nodes to system topology graph
for _, dataNode := range dataCoordTopology.Cluster.ConnectedNodes {
node := dataNode
identifier := uniquegenerator.GetUniqueIntGeneratorIns().GetInt()
identifierMap[dataNode.Name] = identifier
dataNodeTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifier,
Connected: nil,
Infos: &node,
}
systemTopology.NodesInfo = append(systemTopology.NodesInfo, dataNodeTopologyNode)
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifier,
Type: metricsinfo.CoordConnectToNode,
TargetType: typeutil.DataNodeRole,
})
}
// add data coord to system topology graph
systemTopology.NodesInfo = append(systemTopology.NodesInfo, dataCoordTopologyNode)
// data coord in system topology graph
dataCoordTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[dataCoordRoleName],
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &dataCoordTopology.Cluster.Self,
}
// fill connection edge, a little trick here
for _, edge := range dataCoordTopology.Connections.ConnectedComponents {
switch edge.TargetType {
case typeutil.RootCoordRole:
if rootCoordErr == nil && rootCoordResp != nil {
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[rootCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.RootCoordRole,
})
}
case typeutil.DataCoordRole:
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[dataCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.DataCoordRole,
})
case typeutil.IndexCoordRole:
if indexCoordErr == nil && indexCoordResp != nil {
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[indexCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.IndexCoordRole,
})
}
case typeutil.QueryCoordRole:
if queryCoordErr == nil && queryCoordResp != nil {
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[queryCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.QueryCoordRole,
})
}
}
}
// add data nodes to system topology graph
for _, dataNode := range dataCoordTopology.Cluster.ConnectedNodes {
node := dataNode
identifier := int(node.ID)
identifierMap[dataNode.Name] = identifier
dataNodeTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifier,
Connected: nil,
Infos: &node,
}
systemTopology.NodesInfo = append(systemTopology.NodesInfo, dataNodeTopologyNode)
dataCoordTopologyNode.Connected = append(dataCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifier,
Type: metricsinfo.CoordConnectToNode,
TargetType: typeutil.DataNodeRole,
})
}
// add data coord to system topology graph
systemTopology.NodesInfo = append(systemTopology.NodesInfo, dataCoordTopologyNode)
}
if indexCoordErr == nil && indexCoordResp != nil {
@ -263,73 +262,69 @@ func getSystemInfoMetrics(
TargetType: typeutil.IndexCoordRole,
})
indexCoordTopology := metricsinfo.IndexCoordTopology{}
err = metricsinfo.UnmarshalTopology(indexCoordResp.Response, &indexCoordTopology)
if err == nil {
// index coord in system topology graph
indexCoordTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[indexCoordRoleName],
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &indexCoordTopology.Cluster.Self,
}
// fill connection edge, a little trick here
for _, edge := range indexCoordTopology.Connections.ConnectedComponents {
switch edge.TargetType {
case typeutil.RootCoordRole:
if rootCoordErr == nil && rootCoordResp != nil {
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[rootCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.RootCoordRole,
})
}
case typeutil.DataCoordRole:
if dataCoordErr == nil && dataCoordResp != nil {
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[dataCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.DataCoordRole,
})
}
case typeutil.IndexCoordRole:
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[indexCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.IndexCoordRole,
})
case typeutil.QueryCoordRole:
if queryCoordErr == nil && queryCoordResp != nil {
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[queryCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.QueryCoordRole,
})
}
}
}
// add index nodes to system topology graph
for _, indexNode := range indexCoordTopology.Cluster.ConnectedNodes {
node := indexNode
identifier := uniquegenerator.GetUniqueIntGeneratorIns().GetInt()
identifierMap[indexNode.Name] = identifier
indexNodeTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifier,
Connected: nil,
Infos: &node,
}
systemTopology.NodesInfo = append(systemTopology.NodesInfo, indexNodeTopologyNode)
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifier,
Type: metricsinfo.CoordConnectToNode,
TargetType: typeutil.IndexNodeRole,
})
}
// add index coord to system topology graph
systemTopology.NodesInfo = append(systemTopology.NodesInfo, indexCoordTopologyNode)
// index coord in system topology graph
indexCoordTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[indexCoordRoleName],
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &indexCoordTopology.Cluster.Self,
}
// fill connection edge, a little trick here
for _, edge := range indexCoordTopology.Connections.ConnectedComponents {
switch edge.TargetType {
case typeutil.RootCoordRole:
if rootCoordErr == nil && rootCoordResp != nil {
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[rootCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.RootCoordRole,
})
}
case typeutil.DataCoordRole:
if dataCoordErr == nil && dataCoordResp != nil {
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[dataCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.DataCoordRole,
})
}
case typeutil.IndexCoordRole:
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[indexCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.IndexCoordRole,
})
case typeutil.QueryCoordRole:
if queryCoordErr == nil && queryCoordResp != nil {
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[queryCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.QueryCoordRole,
})
}
}
}
// add index nodes to system topology graph
for _, indexNode := range indexCoordTopology.Cluster.ConnectedNodes {
node := indexNode
identifier := int(node.ID)
identifierMap[indexNode.Name] = identifier
indexNodeTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifier,
Connected: nil,
Infos: &node,
}
systemTopology.NodesInfo = append(systemTopology.NodesInfo, indexNodeTopologyNode)
indexCoordTopologyNode.Connected = append(indexCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifier,
Type: metricsinfo.CoordConnectToNode,
TargetType: typeutil.IndexNodeRole,
})
}
// add index coord to system topology graph
systemTopology.NodesInfo = append(systemTopology.NodesInfo, indexCoordTopologyNode)
}
if rootCoordErr == nil && rootCoordResp != nil {
@ -339,53 +334,49 @@ func getSystemInfoMetrics(
TargetType: typeutil.RootCoordRole,
})
rootCoordTopology := metricsinfo.RootCoordTopology{}
err = metricsinfo.UnmarshalTopology(rootCoordResp.Response, &rootCoordTopology)
if err == nil {
// root coord in system topology graph
rootCoordTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[rootCoordRoleName],
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &rootCoordTopology.Self,
}
// root coord in system topology graph
rootCoordTopologyNode := metricsinfo.SystemTopologyNode{
Identifier: identifierMap[rootCoordRoleName],
Connected: make([]metricsinfo.ConnectionEdge, 0),
Infos: &rootCoordTopology.Self,
}
// fill connection edge, a little trick here
for _, edge := range rootCoordTopology.Connections.ConnectedComponents {
switch edge.TargetType {
case typeutil.RootCoordRole:
// fill connection edge, a little trick here
for _, edge := range rootCoordTopology.Connections.ConnectedComponents {
switch edge.TargetType {
case typeutil.RootCoordRole:
rootCoordTopologyNode.Connected = append(rootCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[rootCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.RootCoordRole,
})
case typeutil.DataCoordRole:
if dataCoordErr == nil && dataCoordResp != nil {
rootCoordTopologyNode.Connected = append(rootCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[rootCoordRoleName],
ConnectedIdentifier: identifierMap[dataCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.RootCoordRole,
TargetType: typeutil.DataCoordRole,
})
case typeutil.DataCoordRole:
if dataCoordErr == nil && dataCoordResp != nil {
rootCoordTopologyNode.Connected = append(rootCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[dataCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.DataCoordRole,
})
}
case typeutil.IndexCoordRole:
}
case typeutil.IndexCoordRole:
rootCoordTopologyNode.Connected = append(rootCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[indexCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.IndexCoordRole,
})
case typeutil.QueryCoordRole:
if queryCoordErr == nil && queryCoordResp != nil {
rootCoordTopologyNode.Connected = append(rootCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[indexCoordRoleName],
ConnectedIdentifier: identifierMap[queryCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.IndexCoordRole,
TargetType: typeutil.QueryCoordRole,
})
case typeutil.QueryCoordRole:
if queryCoordErr == nil && queryCoordResp != nil {
rootCoordTopologyNode.Connected = append(rootCoordTopologyNode.Connected, metricsinfo.ConnectionEdge{
ConnectedIdentifier: identifierMap[queryCoordRoleName],
Type: metricsinfo.Forward,
TargetType: typeutil.QueryCoordRole,
})
}
}
}
// add root coord to system topology graph
systemTopology.NodesInfo = append(systemTopology.NodesInfo, rootCoordTopologyNode)
}
// add root coord to system topology graph
systemTopology.NodesInfo = append(systemTopology.NodesInfo, rootCoordTopologyNode)
}
// add proxy to system topology graph

View File

@ -68,6 +68,7 @@ func TestProxy_metrics(t *testing.T) {
HardwareInfos: metricsinfo.HardwareMetrics{},
SystemInfo: metricsinfo.DeployMetrics{},
Type: typeutil.RootCoordRole,
ID: id,
},
SystemConfigurations: metricsinfo.RootCoordConfiguration{},
},
@ -112,6 +113,7 @@ func TestProxy_metrics(t *testing.T) {
HardwareInfos: metricsinfo.HardwareMetrics{},
SystemInfo: metricsinfo.DeployMetrics{},
Type: typeutil.QueryCoordRole,
ID: id,
},
SystemConfigurations: metricsinfo.QueryCoordConfiguration{},
},
@ -167,6 +169,7 @@ func TestProxy_metrics(t *testing.T) {
HardwareInfos: metricsinfo.HardwareMetrics{},
SystemInfo: metricsinfo.DeployMetrics{},
Type: typeutil.DataCoordRole,
ID: id,
},
SystemConfigurations: metricsinfo.DataCoordConfiguration{},
},
@ -223,6 +226,7 @@ func TestProxy_metrics(t *testing.T) {
HardwareInfos: metricsinfo.HardwareMetrics{},
SystemInfo: metricsinfo.DeployMetrics{},
Type: typeutil.IndexCoordRole,
ID: id,
},
SystemConfigurations: metricsinfo.IndexCoordConfiguration{},
},

View File

@ -15,6 +15,8 @@ import (
"context"
"os"
"github.com/milvus-io/milvus/internal/util/uniquegenerator"
"github.com/milvus-io/milvus/internal/util/typeutil"
"go.uber.org/zap"
@ -53,6 +55,7 @@ func getSystemInfoMetrics(
CreatedTime: Params.CreatedTime.String(),
UpdatedTime: Params.UpdatedTime.String(),
Type: typeutil.QueryCoordRole,
ID: qc.session.ServerID,
},
SystemConfigurations: metricsinfo.QueryCoordConfiguration{
SearchChannelPrefix: Params.SearchChannelPrefix,
@ -73,6 +76,7 @@ func getSystemInfoMetrics(
ErrorReason: nodeMetrics.err.Error(),
// Name doesn't matter here cause we can't get it when error occurs, using address as the Name?
Name: "",
ID: int64(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()),
},
})
continue
@ -87,6 +91,7 @@ func getSystemInfoMetrics(
HasError: true,
ErrorReason: nodeMetrics.resp.Status.Reason,
Name: nodeMetrics.resp.ComponentName,
ID: int64(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()),
},
})
continue
@ -102,6 +107,7 @@ func getSystemInfoMetrics(
HasError: true,
ErrorReason: err.Error(),
Name: nodeMetrics.resp.ComponentName,
ID: int64(uniquegenerator.GetUniqueIntGeneratorIns().GetInt()),
},
})
continue

View File

@ -47,6 +47,7 @@ func getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest,
CreatedTime: Params.CreatedTime.String(),
UpdatedTime: Params.UpdatedTime.String(),
Type: typeutil.QueryNodeRole,
ID: node.session.ServerID,
},
SystemConfigurations: metricsinfo.QueryNodeConfiguration{
SearchReceiveBufSize: Params.SearchReceiveBufSize,

View File

@ -46,6 +46,7 @@ func (c *Core) getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetric
CreatedTime: Params.CreatedTime.String(),
UpdatedTime: Params.UpdatedTime.String(),
Type: typeutil.RootCoordRole,
ID: c.session.ServerID,
},
SystemConfigurations: metricsinfo.RootCoordConfiguration{
MinSegmentSizeToEnableIndex: Params.MinSegmentSizeToEnableIndex,

View File

@ -75,6 +75,7 @@ type BaseComponentInfos struct {
CreatedTime string `json:"created_time"`
UpdatedTime string `json:"updated_time"`
Type string `json:"type"`
ID int64 `json:"id"`
}
// QueryNodeConfiguration records the configuration of query node.

View File

@ -44,6 +44,7 @@ func TestBaseComponentInfos_Codec(t *testing.T) {
CreatedTime: time.Now().String(),
UpdatedTime: time.Now().String(),
Type: typeutil.ProxyRole,
ID: 1,
}
s, err := MarshalComponentInfos(infos1)
assert.Equal(t, nil, err)
@ -77,6 +78,7 @@ func TestQueryNodeInfos_Codec(t *testing.T) {
CreatedTime: time.Now().String(),
UpdatedTime: time.Now().String(),
Type: typeutil.QueryNodeRole,
ID: 1,
},
SystemConfigurations: QueryNodeConfiguration{
SearchReceiveBufSize: 1024,
@ -121,6 +123,7 @@ func TestQueryCoordInfos_Codec(t *testing.T) {
CreatedTime: time.Now().String(),
UpdatedTime: time.Now().String(),
Type: typeutil.QueryCoordRole,
ID: 1,
},
SystemConfigurations: QueryCoordConfiguration{
SearchChannelPrefix: "search",
@ -159,6 +162,7 @@ func TestIndexNodeInfos_Codec(t *testing.T) {
CreatedTime: time.Now().String(),
UpdatedTime: time.Now().String(),
Type: typeutil.IndexNodeRole,
ID: 1,
},
SystemConfigurations: IndexNodeConfiguration{
MinioBucketName: "a-bucket",
@ -198,6 +202,7 @@ func TestIndexCoordInfos_Codec(t *testing.T) {
CreatedTime: time.Now().String(),
UpdatedTime: time.Now().String(),
Type: typeutil.IndexCoordRole,
ID: 1,
},
SystemConfigurations: IndexCoordConfiguration{
MinioBucketName: "a-bucket",
@ -235,6 +240,7 @@ func TestDataNodeInfos_Codec(t *testing.T) {
CreatedTime: time.Now().String(),
UpdatedTime: time.Now().String(),
Type: typeutil.DataNodeRole,
ID: 1,
},
SystemConfigurations: DataNodeConfiguration{
FlushInsertBufferSize: 1024,
@ -272,6 +278,7 @@ func TestDataCoordInfos_Codec(t *testing.T) {
CreatedTime: time.Now().String(),
UpdatedTime: time.Now().String(),
Type: typeutil.DataCoordRole,
ID: 1,
},
SystemConfigurations: DataCoordConfiguration{
SegmentMaxSize: 1024 * 1024,
@ -309,6 +316,7 @@ func TestRootCoordInfos_Codec(t *testing.T) {
CreatedTime: time.Now().String(),
UpdatedTime: time.Now().String(),
Type: typeutil.RootCoordRole,
ID: 1,
},
SystemConfigurations: RootCoordConfiguration{
MinSegmentSizeToEnableIndex: 1024 * 10,

View File

@ -43,17 +43,20 @@ func TestQueryClusterTopology_Codec(t *testing.T) {
Self: QueryCoordInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.QueryCoordRole, 1),
ID: 1,
},
},
ConnectedNodes: []QueryNodeInfos{
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.QueryNodeRole, 1),
Name: ConstructComponentName(typeutil.QueryNodeRole, 2),
ID: 2,
},
},
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.QueryNodeRole, 2),
Name: ConstructComponentName(typeutil.QueryNodeRole, 3),
ID: 3,
},
},
},
@ -78,17 +81,20 @@ func TestQueryCoordTopology_Codec(t *testing.T) {
Self: QueryCoordInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.QueryCoordRole, 1),
ID: 1,
},
},
ConnectedNodes: []QueryNodeInfos{
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.QueryNodeRole, 1),
Name: ConstructComponentName(typeutil.QueryNodeRole, 2),
ID: 2,
},
},
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.QueryNodeRole, 2),
Name: ConstructComponentName(typeutil.QueryNodeRole, 3),
ID: 3,
},
},
},
@ -126,17 +132,20 @@ func TestIndexClusterTopology_Codec(t *testing.T) {
Self: IndexCoordInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.IndexCoordRole, 1),
ID: 1,
},
},
ConnectedNodes: []IndexNodeInfos{
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.IndexNodeRole, 1),
Name: ConstructComponentName(typeutil.IndexNodeRole, 2),
ID: 2,
},
},
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.IndexNodeRole, 2),
Name: ConstructComponentName(typeutil.IndexNodeRole, 3),
ID: 3,
},
},
},
@ -161,17 +170,20 @@ func TestIndexCoordTopology_Codec(t *testing.T) {
Self: IndexCoordInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.IndexCoordRole, 1),
ID: 1,
},
},
ConnectedNodes: []IndexNodeInfos{
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.IndexNodeRole, 1),
Name: ConstructComponentName(typeutil.IndexNodeRole, 2),
ID: 2,
},
},
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.IndexNodeRole, 2),
Name: ConstructComponentName(typeutil.IndexNodeRole, 3),
ID: 3,
},
},
},
@ -209,17 +221,20 @@ func TestDataClusterTopology_Codec(t *testing.T) {
Self: DataCoordInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.DataCoordRole, 1),
ID: 1,
},
},
ConnectedNodes: []DataNodeInfos{
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.DataNodeRole, 1),
Name: ConstructComponentName(typeutil.DataNodeRole, 2),
ID: 2,
},
},
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.DataNodeRole, 2),
Name: ConstructComponentName(typeutil.DataNodeRole, 3),
ID: 3,
},
},
},
@ -244,17 +259,20 @@ func TestDataCoordTopology_Codec(t *testing.T) {
Self: DataCoordInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.DataCoordRole, 1),
ID: 1,
},
},
ConnectedNodes: []DataNodeInfos{
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.DataNodeRole, 1),
Name: ConstructComponentName(typeutil.DataNodeRole, 2),
ID: 2,
},
},
{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.DataNodeRole, 2),
Name: ConstructComponentName(typeutil.DataNodeRole, 3),
ID: 3,
},
},
},
@ -292,6 +310,7 @@ func TestRootCoordTopology_Codec(t *testing.T) {
Self: RootCoordInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.RootCoordRole, 1),
ID: 1,
},
},
Connections: ConnTopology{
@ -358,6 +377,7 @@ func TestSystemTopology_Codec(t *testing.T) {
Infos: &QueryCoordInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.QueryCoordRole, 1),
ID: 1,
},
},
Connected: []ConnectionEdge{
@ -373,6 +393,7 @@ func TestSystemTopology_Codec(t *testing.T) {
Infos: &QueryNodeInfos{
BaseComponentInfos: BaseComponentInfos{
Name: ConstructComponentName(typeutil.QueryNodeRole, 2),
ID: 2,
},
},
Connected: []ConnectionEdge{},