diff --git a/ipam/allocator.go b/ipam/allocator.go index 625646ff..ba02d82f 100644 --- a/ipam/allocator.go +++ b/ipam/allocator.go @@ -417,6 +417,7 @@ func (alloc *Allocator) Shutdown() { alloc.cancelOps(&alloc.pendingPrimes) if heir := alloc.pickPeerForTransfer(); heir != mesh.UnknownPeerName { alloc.ring.Transfer(alloc.ourName, heir) + alloc.persistRing() alloc.space.Clear() alloc.gossip.GossipBroadcast(alloc.Gossip()) time.Sleep(100 * time.Millisecond) @@ -454,7 +455,7 @@ func (alloc *Allocator) AdminTakeoverRanges(peerNameOrNickname string) address.C } before := alloc.space.NumFreeAddresses() - alloc.space.AddRanges(newRanges) + alloc.ringUpdated() after := alloc.space.NumFreeAddresses() alloc.gossip.GossipBroadcast(alloc.Gossip()) @@ -680,8 +681,8 @@ func (alloc *Allocator) establishRing() { func (alloc *Allocator) createRing(peers []mesh.PeerName) { alloc.debugln("Paxos consensus:", peers) alloc.ring.ClaimForPeers(normalizeConsensus(peers)) - alloc.gossip.GossipBroadcast(alloc.Gossip()) alloc.ringUpdated() + alloc.gossip.GossipBroadcast(alloc.Gossip()) } func (alloc *Allocator) ringUpdated() { diff --git a/ipam/allocator_test.go b/ipam/allocator_test.go index 0b5b59a3..6dccbb2f 100644 --- a/ipam/allocator_test.go +++ b/ipam/allocator_test.go @@ -176,6 +176,7 @@ func TestAllocatorClaim(t *testing.T) { alloc.Prime() // Do an allocate on the other peer, which we will try to claim later addrx, err := allocs[0].Allocate(container1, subnet, true, returnFalse) + router.Flush() // Now try the claim again err = alloc.Claim(container3, addr1, true, true)