Procházet zdrojové kódy

Change GetRemoteAddr to return all managers

Respect the new provider interface

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Flavio Crisciani před 8 roky
rodič
revize
441e861095
2 změnil soubory, kde provedl 18 přidání a 10 odebrání
  1. 11 9
      daemon/cluster/cluster.go
  2. 7 1
      daemon/cluster/noderunner.go

+ 11 - 9
daemon/cluster/cluster.go

@@ -280,27 +280,29 @@ func (c *Cluster) GetDataPathAddress() string {
 	return ""
 }
 
-// GetRemoteAddress returns a known advertise address of a remote manager if
+// GetRemoteAddressList returns the advertise address for each of the remote managers if
 // available.
-// todo: change to array/connect with info
-func (c *Cluster) GetRemoteAddress() string {
+func (c *Cluster) GetRemoteAddressList() []string {
 	c.mu.RLock()
 	defer c.mu.RUnlock()
-	return c.getRemoteAddress()
+	return c.getRemoteAddressList()
 }
 
-func (c *Cluster) getRemoteAddress() string {
+func (c *Cluster) getRemoteAddressList() []string {
 	state := c.currentNodeState()
 	if state.swarmNode == nil {
-		return ""
+		return []string{}
 	}
+
 	nodeID := state.swarmNode.NodeID()
-	for _, r := range state.swarmNode.Remotes() {
+	remotes := state.swarmNode.Remotes()
+	addressList := make([]string, 0, len(remotes))
+	for _, r := range remotes {
 		if r.NodeID != nodeID {
-			return r.Addr
+			addressList = append(addressList, r.Addr)
 		}
 	}
-	return ""
+	return addressList
 }
 
 // ListenClusterEvents returns a channel that receives messages on cluster

+ 7 - 1
daemon/cluster/noderunner.go

@@ -271,7 +271,13 @@ func (n *nodeRunner) enableReconnectWatcher() {
 		if n.stopping {
 			return
 		}
-		config.RemoteAddr = n.cluster.getRemoteAddress()
+		remotes := n.cluster.getRemoteAddressList()
+		if len(remotes) > 0 {
+			config.RemoteAddr = remotes[0]
+		} else {
+			config.RemoteAddr = ""
+		}
+
 		config.joinAddr = config.RemoteAddr
 		if err := n.start(config); err != nil {
 			n.err = err