From e2bee6e8c6fd153abdecc294cd50b8be5280773e Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 8 Jun 2016 11:52:38 +0100 Subject: [PATCH] Persist ring after updates caused by reportFreeSpace() --- ipam/allocator.go | 4 +++- ipam/ring/ring.go | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ipam/allocator.go b/ipam/allocator.go index 50950ffe..ee3f246e 100644 --- a/ipam/allocator.go +++ b/ipam/allocator.go @@ -898,7 +898,9 @@ func (alloc *Allocator) reportFreeSpace() { for _, r := range ranges { freespace[r.Start] = alloc.space.NumFreeAddressesInRange(r) } - alloc.ring.ReportFree(freespace) + if alloc.ring.ReportFree(freespace) { + alloc.persistRing() + } } // Persistent data diff --git a/ipam/ring/ring.go b/ipam/ring/ring.go index a9cf60dd..dcc10522 100644 --- a/ipam/ring/ring.go +++ b/ipam/ring/ring.go @@ -417,8 +417,8 @@ func (r *Ring) String() string { // ReportFree is used by the allocator to tell the ring how many free // ips are in a given range, so that ChoosePeersToAskForSpace can make -// more intelligent decisions. -func (r *Ring) ReportFree(freespace map[address.Address]address.Count) { +// more intelligent decisions. Returns true if any changes made. +func (r *Ring) ReportFree(freespace map[address.Address]address.Count) (updated bool) { r.assertInvariants() defer r.assertInvariants() defer r.updateExportedVariables() @@ -456,7 +456,9 @@ func (r *Ring) ReportFree(freespace map[address.Address]address.Count) { entries[i].Free = free entries[i].Version++ + updated = true } + return } type weightedPeer struct {