From 30e966bc97d5b30ebdda1030c269e1f786d5218d Mon Sep 17 00:00:00 2001 From: Ying Li Date: Mon, 22 May 2017 13:52:55 -0700 Subject: [PATCH] Do not clear swarm directory at the begining of swarm init and swarm join now. However, do clear the directory if init or join fails, because we don't want to leave it in a half-finished state. Signed-off-by: Ying Li (cherry picked from commit bf3e9293a66c77a2fddf4e691222898846b4af9f) --- components/engine/daemon/cluster/swarm.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/components/engine/daemon/cluster/swarm.go b/components/engine/daemon/cluster/swarm.go index 8a8d5bf8086..ef0596b6cc9 100644 --- a/components/engine/daemon/cluster/swarm.go +++ b/components/engine/daemon/cluster/swarm.go @@ -88,10 +88,6 @@ func (c *Cluster) Init(req types.InitRequest) (string, error) { } } - if !req.ForceNewCluster { - clearPersistentState(c.root) - } - nr, err := c.newNodeRunner(nodeStartConfig{ forceNewCluster: req.ForceNewCluster, autolock: req.AutoLockManagers, @@ -109,16 +105,14 @@ func (c *Cluster) Init(req types.InitRequest) (string, error) { c.mu.Unlock() if err := <-nr.Ready(); err != nil { + c.mu.Lock() + c.nr = nil + c.mu.Unlock() if !req.ForceNewCluster { // if failure on first attempt don't keep state if err := clearPersistentState(c.root); err != nil { return "", err } } - if err != nil { - c.mu.Lock() - c.nr = nil - c.mu.Unlock() - } return "", err } state := nr.State() @@ -166,8 +160,6 @@ func (c *Cluster) Join(req types.JoinRequest) error { return err } - clearPersistentState(c.root) - nr, err := c.newNodeRunner(nodeStartConfig{ RemoteAddr: req.RemoteAddrs[0], ListenAddr: net.JoinHostPort(listenHost, listenPort), @@ -193,6 +185,9 @@ func (c *Cluster) Join(req types.JoinRequest) error { c.mu.Lock() c.nr = nil c.mu.Unlock() + if err := clearPersistentState(c.root); err != nil { + return err + } } return err }