Browse Source

Merge pull request #1644 from sanimej/self

Update the local VTEP in peerdb on receiving self discovery
Madhu Venugopal 8 years ago
parent
commit
962d13481c
2 changed files with 16 additions and 0 deletions
  1. 7 0
      libnetwork/drivers/overlay/overlay.go
  2. 9 0
      libnetwork/drivers/overlay/peerdb.go

+ 7 - 0
libnetwork/drivers/overlay/overlay.go

@@ -48,6 +48,7 @@ type driver struct {
 	vxlanIdm         *idm.Idm
 	once             sync.Once
 	joinOnce         sync.Once
+	localJoinOnce    sync.Once
 	keys             []*key
 	sync.Mutex
 }
@@ -241,6 +242,12 @@ func (d *driver) nodeJoin(advertiseAddress, bindAddress string, self bool) {
 		d.bindAddress = bindAddress
 		d.Unlock()
 
+		// If containers are already running on this network update the
+		// advertiseaddress in the peerDB
+		d.localJoinOnce.Do(func() {
+			d.peerDBUpdateSelf()
+		})
+
 		// If there is no cluster store there is no need to start serf.
 		if d.store != nil {
 			if err := validateSelf(advertiseAddress); err != nil {

+ 9 - 0
libnetwork/drivers/overlay/peerdb.go

@@ -367,3 +367,12 @@ func (d *driver) pushLocalDb() {
 		return false
 	})
 }
+
+func (d *driver) peerDBUpdateSelf() {
+	d.peerDbWalk(func(nid string, pkey *peerKey, pEntry *peerEntry) bool {
+		if pEntry.isLocal {
+			pEntry.vtep = net.ParseIP(d.advertiseAddress)
+		}
+		return false
+	})
+}