瀏覽代碼

Avoid extra notification on node leave

If a node leave, avoid to notify the upper layer
for entries that are already marked for deletion

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Flavio Crisciani 7 年之前
父節點
當前提交
3e544bc500
共有 2 個文件被更改,包括 5 次插入3 次删除
  1. 1 1
      libnetwork/networkdb/event_delegate.go
  2. 4 2
      libnetwork/networkdb/networkdb.go

+ 1 - 1
libnetwork/networkdb/event_delegate.go

@@ -72,7 +72,7 @@ func (e *eventDelegate) NotifyLeave(mn *memberlist.Node) {
 	// If the node instead left because was going down, then it makes sense to just delete all its state
 	// If the node instead left because was going down, then it makes sense to just delete all its state
 	e.nDB.Lock()
 	e.nDB.Lock()
 	defer e.nDB.Unlock()
 	defer e.nDB.Unlock()
-	e.nDB.deleteNetworkEntriesForNode(mn.Name)
+	e.nDB.deleteNodeFromNetworks(mn.Name)
 	e.nDB.deleteNodeTableEntries(mn.Name)
 	e.nDB.deleteNodeTableEntries(mn.Name)
 	if n, ok := e.nDB.nodes[mn.Name]; ok {
 	if n, ok := e.nDB.nodes[mn.Name]; ok {
 		delete(e.nDB.nodes, mn.Name)
 		delete(e.nDB.nodes, mn.Name)

+ 4 - 2
libnetwork/networkdb/networkdb.go

@@ -451,7 +451,7 @@ func (nDB *NetworkDB) DeleteEntry(tname, nid, key string) error {
 	return nil
 	return nil
 }
 }
 
 
-func (nDB *NetworkDB) deleteNetworkEntriesForNode(deletedNode string) {
+func (nDB *NetworkDB) deleteNodeFromNetworks(deletedNode string) {
 	for nid, nodes := range nDB.networkNodes {
 	for nid, nodes := range nDB.networkNodes {
 		updatedNodes := make([]string, 0, len(nodes))
 		updatedNodes := make([]string, 0, len(nodes))
 		for _, node := range nodes {
 		for _, node := range nodes {
@@ -553,7 +553,9 @@ func (nDB *NetworkDB) deleteNodeTableEntries(node string) {
 
 
 		nDB.deleteEntry(nid, tname, key)
 		nDB.deleteEntry(nid, tname, key)
 
 
-		nDB.broadcaster.Write(makeEvent(opDelete, tname, nid, key, oldEntry.value))
+		if !oldEntry.deleting {
+			nDB.broadcaster.Write(makeEvent(opDelete, tname, nid, key, oldEntry.value))
+		}
 		return false
 		return false
 	})
 	})
 }
 }