diff options
| author | chrislu <chris.lu@gmail.com> | 2022-07-11 00:20:27 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-07-11 00:20:27 -0700 |
| commit | 1112dab4f325ec594353b687d9b73a3d9f9c06de (patch) | |
| tree | a53a8d1a187f3d4cdd2d1db926ecd91744fca185 /weed/cluster/cluster.go | |
| parent | 24291e23eb91db9b830bc93462bc8af347109992 (diff) | |
| download | seaweedfs-1112dab4f325ec594353b687d9b73a3d9f9c06de.tar.xz seaweedfs-1112dab4f325ec594353b687d9b73a3d9f9c06de.zip | |
allocate brokers to serve segments
Diffstat (limited to 'weed/cluster/cluster.go')
| -rw-r--r-- | weed/cluster/cluster.go | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/weed/cluster/cluster.go b/weed/cluster/cluster.go index 8496a7f6e..c320065d5 100644 --- a/weed/cluster/cluster.go +++ b/weed/cluster/cluster.go @@ -49,15 +49,15 @@ func newClusterNodeGroups() *ClusterNodeGroups { } } func (g *ClusterNodeGroups) getGroupMembers(filerGroup FilerGroupName, createIfNotFound bool) *GroupMembers { - filers, found := g.groupMembers[filerGroup] + members, found := g.groupMembers[filerGroup] if !found && createIfNotFound { - filers = &GroupMembers{ + members = &GroupMembers{ members: make(map[pb.ServerAddress]*ClusterNode), leaders: &Leaders{}, } - g.groupMembers[filerGroup] = filers + g.groupMembers[filerGroup] = members } - return filers + return members } func (m *GroupMembers) addMember(dataCenter DataCenter, rack Rack, address pb.ServerAddress, version string) *ClusterNode { @@ -131,6 +131,16 @@ func (g *ClusterNodeGroups) IsOneLeader(filerGroup FilerGroupName, address pb.Se } return m.leaders.isOneLeader(address) } +func (g *ClusterNodeGroups) ListClusterNodeLeaders(filerGroup FilerGroupName) (nodes []pb.ServerAddress) { + g.Lock() + defer g.Unlock() + m := g.getGroupMembers(filerGroup, false) + if m == nil { + return nil + } + return m.leaders.GetLeaders() +} + func NewCluster() *Cluster { return &Cluster{ filerGroups: newClusterNodeGroups(), @@ -201,6 +211,17 @@ func (cluster *Cluster) ListClusterNode(filerGroup FilerGroupName, nodeType stri return } +func (cluster *Cluster) ListClusterNodeLeaders(filerGroup FilerGroupName, nodeType string) (nodes []pb.ServerAddress) { + switch nodeType { + case FilerType: + return cluster.filerGroups.ListClusterNodeLeaders(filerGroup) + case BrokerType: + return cluster.brokerGroups.ListClusterNodeLeaders(filerGroup) + case MasterType: + } + return +} + func (cluster *Cluster) IsOneLeader(filerGroup FilerGroupName, nodeType string, address pb.ServerAddress) bool { switch nodeType { case FilerType: |
