Browse Source

Merge pull request #901 from mrjana/bugs

Cleanup stale overlay sandboxes
Madhu Venugopal 9 years ago
parent
commit
8763b5981f
1 changed files with 26 additions and 0 deletions
  1. 26 0
      libnetwork/drivers/overlay/ov_network.go

+ 26 - 0
libnetwork/drivers/overlay/ov_network.go

@@ -5,6 +5,8 @@ import (
 	"fmt"
 	"fmt"
 	"net"
 	"net"
 	"os"
 	"os"
+	"path/filepath"
+	"strings"
 	"sync"
 	"sync"
 	"syscall"
 	"syscall"
 
 
@@ -298,6 +300,26 @@ func (n *network) initSubnetSandbox(s *subnet) error {
 	return nil
 	return nil
 }
 }
 
 
+func (n *network) cleanupStaleSandboxes() {
+	filepath.Walk(filepath.Dir(osl.GenerateKey("walk")),
+		func(path string, info os.FileInfo, err error) error {
+			_, fname := filepath.Split(path)
+
+			pList := strings.Split(fname, "-")
+			if len(pList) <= 1 {
+				return nil
+			}
+
+			pattern := pList[1]
+			if strings.Contains(n.id, pattern) {
+				syscall.Unmount(path, syscall.MNT_DETACH)
+				os.Remove(path)
+			}
+
+			return nil
+		})
+}
+
 func (n *network) initSandbox() error {
 func (n *network) initSandbox() error {
 	n.Lock()
 	n.Lock()
 	n.initEpoch++
 	n.initEpoch++
@@ -311,6 +333,10 @@ func (n *network) initSandbox() error {
 		}
 		}
 	}
 	}
 
 
+	// If there are any stale sandboxes related to this network
+	// from previous daemon life clean it up here
+	n.cleanupStaleSandboxes()
+
 	sbox, err := osl.NewSandbox(
 	sbox, err := osl.NewSandbox(
 		osl.GenerateKey(fmt.Sprintf("%d-", n.initEpoch)+n.id), !hostMode)
 		osl.GenerateKey(fmt.Sprintf("%d-", n.initEpoch)+n.id), !hostMode)
 	if err != nil {
 	if err != nil {