Add allocator.PeerGone

The function is registered within the mesh gc and it is responsible
for removing gone nicknames (#2057).
This commit is contained in:
Martynas Pumputis committed 2016-04-22 17:29:27 +01:00
1 parent 2f5a3f4513
commit 849edb1768
2 files changed
+19

No files matched your search

+18
View File
@@ -90,11 +90,13 @@ type Config struct {
// NewAllocator creates and initialises a new Allocator
func NewAllocator(config Config) *Allocator {
var participant paxos.Participant
if config.IsObserver {
participant = paxos.NewObserver()
} else {
participant = paxos.NewNode(config.OurName, config.OurUID, 0)
}
return &Allocator{
ourName: config.OurName,
seed: config.Seed,
@@ -485,6 +487,22 @@ func (alloc *Allocator) annotatePeernames(names []mesh.PeerName) []string {
return res
}
// PeerGone removes nicknames of peers which are no longer mentioned
// in the ring. Async.
//
// NB: the function is invoked by the gossip library routines and should be
// registered manually.
func (alloc *Allocator) PeerGone(peerName mesh.PeerName) {
alloc.debugln("PeerGone: peer %s", peerName)
alloc.actionChan <- func() {
ringPeers := alloc.ring.PeerNames()
if _, ok := ringPeers[peerName]; !ok {
delete(alloc.nicknames, peerName)
}
}
}
func decodeRange(msg []byte) (r address.Range, err error) {
decoder := gob.NewDecoder(bytes.NewReader(msg))
return r, decoder.Decode(&r)
+1
View File
@@ -452,6 +452,7 @@ func createAllocator(router *weave.NetworkRouter, config ipamConfig, db db.DB, i
allocator.SetInterfaces(router.NewGossip("IPallocation", allocator))
allocator.Start()
router.Peers.OnGC(func(peer *mesh.Peer) { allocator.PeerGone(peer.Name) })
return allocator, defaultSubnet
}