chrislu
2 years ago
2 changed files with 47 additions and 42 deletions
@ -0,0 +1,46 @@ |
|||||
|
package cluster |
||||
|
|
||||
|
import ( |
||||
|
"github.com/seaweedfs/seaweedfs/weed/pb" |
||||
|
"time" |
||||
|
) |
||||
|
|
||||
|
type GroupMembers struct { |
||||
|
members map[pb.ServerAddress]*ClusterNode |
||||
|
} |
||||
|
|
||||
|
func (m *GroupMembers) addMember(dataCenter DataCenter, rack Rack, address pb.ServerAddress, version string) *ClusterNode { |
||||
|
if existingNode, found := m.members[address]; found { |
||||
|
existingNode.counter++ |
||||
|
return nil |
||||
|
} |
||||
|
t := &ClusterNode{ |
||||
|
Address: address, |
||||
|
Version: version, |
||||
|
counter: 1, |
||||
|
CreatedTs: time.Now(), |
||||
|
DataCenter: dataCenter, |
||||
|
Rack: rack, |
||||
|
} |
||||
|
m.members[address] = t |
||||
|
return t |
||||
|
} |
||||
|
func (m *GroupMembers) removeMember(address pb.ServerAddress) bool { |
||||
|
if existingNode, found := m.members[address]; !found { |
||||
|
return false |
||||
|
} else { |
||||
|
existingNode.counter-- |
||||
|
if existingNode.counter <= 0 { |
||||
|
delete(m.members, address) |
||||
|
return true |
||||
|
} |
||||
|
} |
||||
|
return false |
||||
|
} |
||||
|
|
||||
|
func (m *GroupMembers) GetMembers() (addresses []pb.ServerAddress) { |
||||
|
for k := range m.members { |
||||
|
addresses = append(addresses, k) |
||||
|
} |
||||
|
return |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue