aboutsummaryrefslogtreecommitdiff
path: root/weed/cluster/cluster.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/cluster/cluster.go')
-rw-r--r--weed/cluster/cluster.go29
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: