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
| package serf
|
| import (
| "net"
|
| "github.com/hashicorp/memberlist"
| )
|
| type MergeDelegate interface {
| NotifyMerge([]*Member) error
| }
|
| type mergeDelegate struct {
| serf *Serf
| }
|
| func (m *mergeDelegate) NotifyMerge(nodes []*memberlist.Node) error {
| members := make([]*Member, len(nodes))
| for idx, n := range nodes {
| members[idx] = m.nodeToMember(n)
| }
| return m.serf.config.Merge.NotifyMerge(members)
| }
|
| func (m *mergeDelegate) NotifyAlive(peer *memberlist.Node) error {
| member := m.nodeToMember(peer)
| return m.serf.config.Merge.NotifyMerge([]*Member{member})
| }
|
| func (m *mergeDelegate) nodeToMember(n *memberlist.Node) *Member {
| status := StatusNone
| if n.State == memberlist.StateLeft {
| status = StatusLeft
| }
|
| return &Member{
| Name: n.Name,
| Addr: net.IP(n.Addr),
| Port: n.Port,
| Tags: m.serf.decodeTags(n.Meta),
| Status: status,
| ProtocolMin: n.PMin,
| ProtocolMax: n.PMax,
| ProtocolCur: n.PCur,
| DelegateMin: n.DMin,
| DelegateMax: n.DMax,
| DelegateCur: n.DCur,
| }
| }
|
|