aboutsummaryrefslogtreecommitdiff
path: root/weed/cluster/group_members.go
blob: 79bd787905532d47d3002a880fd883d893e565db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package cluster

import (
	"github.com/seaweedfs/seaweedfs/weed/pb"
	"time"
)

type GroupMembers struct {
	members map[pb.ServerAddress]*ClusterNode
}

func newGroupMembers() *GroupMembers {
	return &GroupMembers{
		members: make(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
}