瀏覽代碼

Ensure add newly joined node to networknodes

In cases a node left the cluster and quickly rejoined before the node
entry is expired by other nodes in the cluster, when the node rejoins we
fail to add it to the quick lookup database. Fixed it.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
Jana Radhakrishnan 9 年之前
父節點
當前提交
1b027335f1
共有 2 個文件被更改,包括 16 次插入1 次删除
  1. 2 1
      libnetwork/networkdb/delegate.go
  2. 14 0
      libnetwork/networkdb/networkdb.go

+ 2 - 1
libnetwork/networkdb/delegate.go

@@ -53,6 +53,7 @@ func (nDB *NetworkDB) handleNetworkEvent(nEvent *NetworkEvent) bool {
 			n.leaveTime = time.Now()
 			n.leaveTime = time.Now()
 		}
 		}
 
 
+		nDB.addNetworkNode(nEvent.NetworkID, nEvent.NodeName)
 		return true
 		return true
 	}
 	}
 
 
@@ -66,7 +67,7 @@ func (nDB *NetworkDB) handleNetworkEvent(nEvent *NetworkEvent) bool {
 		ltime: nEvent.LTime,
 		ltime: nEvent.LTime,
 	}
 	}
 
 
-	nDB.networkNodes[nEvent.NetworkID] = append(nDB.networkNodes[nEvent.NetworkID], nEvent.NodeName)
+	nDB.addNetworkNode(nEvent.NetworkID, nEvent.NodeName)
 	return true
 	return true
 }
 }
 
 

+ 14 - 0
libnetwork/networkdb/networkdb.go

@@ -453,6 +453,20 @@ func (nDB *NetworkDB) LeaveNetwork(nid string) error {
 	return nil
 	return nil
 }
 }
 
 
+// addNetworkNode adds the node to the list of nodes which participate
+// in the passed network only if it is not already present. Caller
+// should hold the NetworkDB lock while calling this
+func (nDB *NetworkDB) addNetworkNode(nid string, nodeName string) {
+	nodes := nDB.networkNodes[nid]
+	for _, node := range nodes {
+		if node == nodeName {
+			return
+		}
+	}
+
+	nDB.networkNodes[nid] = append(nDB.networkNodes[nid], nodeName)
+}
+
 // Deletes the node from the list of nodes which participate in the
 // Deletes the node from the list of nodes which participate in the
 // passed network. Caller should hold the NetworkDB lock while calling
 // passed network. Caller should hold the NetworkDB lock while calling
 // this
 // this