| 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 { |
| return &Member{ |
| Name: n.Name, |
| Addr: net.IP(n.Addr), |
| Port: n.Port, |
| Tags: m.serf.decodeTags(n.Meta), |
| Status: StatusNone, |
| ProtocolMin: n.PMin, |
| ProtocolMax: n.PMax, |
| ProtocolCur: n.PCur, |
| DelegateMin: n.DMin, |
| DelegateMax: n.DMax, |
| DelegateCur: n.DCur, |
| } |
| } |