diff --git a/gossip/agent.go b/gossip/agent.go index 7348b5f05..0df582e2e 100644 --- a/gossip/agent.go +++ b/gossip/agent.go @@ -84,6 +84,7 @@ func NewAgent(conf *Config, p []Processor) (agent *Agent, err error) { // Configure delegates conf.MemberlistConfig.Delegate = newAgentDelegate(agent) conf.MemberlistConfig.Events = &eventDelegate{agent} + agent.Self = member.NewPeer(conf.NodeName, advertiseIP, uint16(advertisePort), conf.Role) agent.memberlist, err = memberlist.Create(conf.MemberlistConfig) if err != nil { diff --git a/gossip/delegate.go b/gossip/delegate.go index 898b18887..e5da82fc2 100644 --- a/gossip/delegate.go +++ b/gossip/delegate.go @@ -32,14 +32,14 @@ func (e *eventDelegate) NotifyJoin(n *memberlist.Node) { peer := member.ParsePeer(n) peer.Status = member.Alive e.agent.Topology.Update(peer) - log.Debugf("%s member joined: %+v", peer) + log.Debugf("member joined: %+v ", peer) } // NotifyLeave is invoked when a node is detected to have left. func (e *eventDelegate) NotifyLeave(n *memberlist.Node) { peer := member.ParsePeer(n) e.agent.Topology.Delete(peer) - log.Debugf("%s member left: %+v", peer) + log.Debugf("member left: %+v", peer) } // NotifyUpdate is invoked when a node is detected to have diff --git a/gossip/member/member.go b/gossip/member/member.go index 9b0c21e39..e2dd29019 100644 --- a/gossip/member/member.go +++ b/gossip/member/member.go @@ -15,6 +15,7 @@ package member import ( "net" + "github.com/bbva/qed/log" "github.com/hashicorp/memberlist" ) @@ -53,7 +54,7 @@ const ( Monitor Publisher Server - MaxType + Unknown ) // Member is a single member of the gossip cluster. @@ -61,7 +62,7 @@ type Peer struct { Name string Addr net.IP Port uint16 - Meta *Meta + Meta Meta Status Status } @@ -74,7 +75,7 @@ func (p Peer) Node() *memberlist.Node { } func NewPeer(name, addr string, port uint16, role Type) *Peer { - meta := &Meta{ + meta := Meta{ Role: role, } @@ -87,5 +88,15 @@ func NewPeer(name, addr string, port uint16, role Type) *Peer { } func ParsePeer(node *memberlist.Node) *Peer { - return nil + var meta Meta + err := meta.Decode(node.Meta) + if err != nil { + log.Errorf("Error parsing peer: unable to decode meta. %v", err) + } + return &Peer{ + Name: node.Name, + Addr: node.Addr, + Port: node.Port, + Meta: meta, + } } diff --git a/gossip/topology.go b/gossip/topology.go index cefa897db..fcadaff81 100644 --- a/gossip/topology.go +++ b/gossip/topology.go @@ -88,8 +88,8 @@ type Topology struct { } func NewTopology() *Topology { - m := make([]PeerList, member.MaxType) - for i := member.Auditor; i < member.MaxType; i++ { + m := make([]PeerList, member.Unknown) + for i := member.Auditor; i < member.Unknown; i++ { m[i] = PeerList{ L: make([]*member.Peer, 0), }