liuxiaolong
2022-06-28 37714b1093c04061e636e5b1d27179652e671c0a
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,
    }
}