From 441e861095c27cd2fc5e4b5f6dca73adcd8455ea Mon Sep 17 00:00:00 2001 From: Flavio Crisciani Date: Thu, 27 Apr 2017 17:06:16 -0700 Subject: [PATCH] Change GetRemoteAddr to return all managers Respect the new provider interface Signed-off-by: Flavio Crisciani --- daemon/cluster/cluster.go | 20 +++++++++++--------- daemon/cluster/noderunner.go | 8 +++++++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/daemon/cluster/cluster.go b/daemon/cluster/cluster.go index 8ff527877f..6a00a4d7b8 100644 --- a/daemon/cluster/cluster.go +++ b/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 diff --git a/daemon/cluster/noderunner.go b/daemon/cluster/noderunner.go index 6c8ca70376..13947fa7b0 100644 --- a/daemon/cluster/noderunner.go +++ b/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