mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix spurious overlay errors
Fixed certain spurious overlay errors which were not errors at all but showing up everytime service tasks are started in the engine. Also added a check to make sure a delete is valid by checking the incoming endpoint id wih the one in peerdb just to make sure if the delete from gossip is not stale. Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
This commit is contained in:
parent
06e19a789f
commit
004e56a4d1
3 changed files with 25 additions and 4 deletions
|
@ -550,7 +550,10 @@ func (n *network) addDriverWatches() {
|
||||||
}
|
}
|
||||||
|
|
||||||
c.agent.networkDB.WalkTable(tableName, func(nid, key string, value []byte) bool {
|
c.agent.networkDB.WalkTable(tableName, func(nid, key string, value []byte) bool {
|
||||||
d.EventNotify(driverapi.Create, n.ID(), tableName, key, value)
|
if nid == n.ID() {
|
||||||
|
d.EventNotify(driverapi.Create, nid, tableName, key, value)
|
||||||
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -637,6 +637,10 @@ func (n *network) watchMiss(nlSock *nl.NetlinkSocket) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !n.driver.isSerfAlive() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
mac, IPmask, vtep, err := n.driver.resolvePeer(n.id, neigh.IP)
|
mac, IPmask, vtep, err := n.driver.resolvePeer(n.id, neigh.IP)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorf("could not resolve peer %q: %v", neigh.IP, err)
|
logrus.Errorf("could not resolve peer %q: %v", neigh.IP, err)
|
||||||
|
|
|
@ -168,14 +168,14 @@ func (d *driver) peerDbAdd(nid, eid string, peerIP net.IP, peerIPMask net.IPMask
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *driver) peerDbDelete(nid, eid string, peerIP net.IP, peerIPMask net.IPMask,
|
func (d *driver) peerDbDelete(nid, eid string, peerIP net.IP, peerIPMask net.IPMask,
|
||||||
peerMac net.HardwareAddr, vtep net.IP) {
|
peerMac net.HardwareAddr, vtep net.IP) bool {
|
||||||
peerDbWg.Wait()
|
peerDbWg.Wait()
|
||||||
|
|
||||||
d.peerDb.Lock()
|
d.peerDb.Lock()
|
||||||
pMap, ok := d.peerDb.mp[nid]
|
pMap, ok := d.peerDb.mp[nid]
|
||||||
if !ok {
|
if !ok {
|
||||||
d.peerDb.Unlock()
|
d.peerDb.Unlock()
|
||||||
return
|
return false
|
||||||
}
|
}
|
||||||
d.peerDb.Unlock()
|
d.peerDb.Unlock()
|
||||||
|
|
||||||
|
@ -185,8 +185,20 @@ func (d *driver) peerDbDelete(nid, eid string, peerIP net.IP, peerIPMask net.IPM
|
||||||
}
|
}
|
||||||
|
|
||||||
pMap.Lock()
|
pMap.Lock()
|
||||||
|
|
||||||
|
if pEntry, ok := pMap.mp[pKey.String()]; ok {
|
||||||
|
// Mismatched endpoint ID(possibly outdated). Do not
|
||||||
|
// delete peerdb
|
||||||
|
if pEntry.eid != eid {
|
||||||
|
pMap.Unlock()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
delete(pMap.mp, pKey.String())
|
delete(pMap.mp, pKey.String())
|
||||||
pMap.Unlock()
|
pMap.Unlock()
|
||||||
|
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *driver) peerDbUpdateSandbox(nid string) {
|
func (d *driver) peerDbUpdateSandbox(nid string) {
|
||||||
|
@ -301,7 +313,9 @@ func (d *driver) peerDelete(nid, eid string, peerIP net.IP, peerIPMask net.IPMas
|
||||||
}
|
}
|
||||||
|
|
||||||
if updateDb {
|
if updateDb {
|
||||||
d.peerDbDelete(nid, eid, peerIP, peerIPMask, peerMac, vtep)
|
if !d.peerDbDelete(nid, eid, peerIP, peerIPMask, peerMac, vtep) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
n := d.network(nid)
|
n := d.network(nid)
|
||||||
|
|
Loading…
Add table
Reference in a new issue