summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTonis Tiigi <tonistiigi@gmail.com>2016-06-13 16:19:05 -0700
committerTonis Tiigi <tonistiigi@gmail.com>2016-06-13 18:22:35 -0700
commita7d0b2c466348ae0fc08f8442155756c6765c8f6 (patch)
tree7951cafd5d417905952f005694e29ed0e1dc641d
parent95ff9f41d8bfd0a0e4dc36fe83341b551e8f3508 (diff)
downloaddocker-a7d0b2c466348ae0fc08f8442155756c6765c8f6.tar.gz
Remove state on failed init
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
-rw-r--r--daemon/cluster/cluster.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/daemon/cluster/cluster.go b/daemon/cluster/cluster.go
index c7d40eb348..1746e9b2cf 100644
--- a/daemon/cluster/cluster.go
+++ b/daemon/cluster/cluster.go
@@ -291,6 +291,11 @@ func (c *Cluster) Init(req types.InitRequest) (string, error) {
c.RLock()
defer c.RUnlock()
if c.err != nil {
+ if !req.ForceNewCluster { // if failure on first attempt don't keep state
+ if err := c.clearState(); err != nil {
+ return "", err
+ }
+ }
return "", c.err
}
return "", ctx.Err()
@@ -395,6 +400,13 @@ func (c *Cluster) Leave(force bool) error {
c.ready = false
c.configEvent <- struct{}{}
// todo: cleanup optional?
+ if err := c.clearState(); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (c *Cluster) clearState() error {
if err := os.RemoveAll(c.root); err != nil {
return err
}