You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
988 B

2 years ago
  1. package cluster
  2. import (
  3. "github.com/seaweedfs/seaweedfs/weed/pb"
  4. "time"
  5. )
  6. type GroupMembers struct {
  7. members map[pb.ServerAddress]*ClusterNode
  8. }
  9. func (m *GroupMembers) addMember(dataCenter DataCenter, rack Rack, address pb.ServerAddress, version string) *ClusterNode {
  10. if existingNode, found := m.members[address]; found {
  11. existingNode.counter++
  12. return nil
  13. }
  14. t := &ClusterNode{
  15. Address: address,
  16. Version: version,
  17. counter: 1,
  18. CreatedTs: time.Now(),
  19. DataCenter: dataCenter,
  20. Rack: rack,
  21. }
  22. m.members[address] = t
  23. return t
  24. }
  25. func (m *GroupMembers) removeMember(address pb.ServerAddress) bool {
  26. if existingNode, found := m.members[address]; !found {
  27. return false
  28. } else {
  29. existingNode.counter--
  30. if existingNode.counter <= 0 {
  31. delete(m.members, address)
  32. return true
  33. }
  34. }
  35. return false
  36. }
  37. func (m *GroupMembers) GetMembers() (addresses []pb.ServerAddress) {
  38. for k := range m.members {
  39. addresses = append(addresses, k)
  40. }
  41. return
  42. }