Merge pull request #2205 from weaveworks/issues/2057-gc-nicknames

Add allocator.PeerGone

Fixes #2057
This commit is contained in:
Matthias Radestock committed 2016-04-22 17:42:43 +01:00
commit cec88f154e
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
}