Browse Source

Create new network on dead ghosts on restart.

Fixes #2089
Paul Nasrat 11 years ago
parent
commit
95708dd35c
3 changed files with 24 additions and 14 deletions
  1. 1 0
      AUTHORS
  2. 15 8
      container.go
  3. 8 6
      container_test.go

+ 1 - 0
AUTHORS

@@ -140,6 +140,7 @@ odk- <github@odkurzacz.org>
 Pascal Borreli <pascal@borreli.com>
 Pascal Borreli <pascal@borreli.com>
 Paul Bowsher <pbowsher@globalpersonals.co.uk>
 Paul Bowsher <pbowsher@globalpersonals.co.uk>
 Paul Hammond <paul@paulhammond.org>
 Paul Hammond <paul@paulhammond.org>
+Paul Nasrat <pnasrat@gmail.com>
 Phil Spitler <pspitler@gmail.com>
 Phil Spitler <pspitler@gmail.com>
 Piotr Bogdan <ppbogdan@gmail.com>
 Piotr Bogdan <ppbogdan@gmail.com>
 pysqz <randomq@126.com>
 pysqz <randomq@126.com>

+ 15 - 8
container.go

@@ -1062,12 +1062,7 @@ func (container *Container) allocateNetwork() error {
 
 
 	var iface *NetworkInterface
 	var iface *NetworkInterface
 	var err error
 	var err error
-	if !container.State.Ghost {
-		iface, err = container.runtime.networkManager.Allocate()
-		if err != nil {
-			return err
-		}
-	} else {
+	if container.State.Ghost {
 		manager := container.runtime.networkManager
 		manager := container.runtime.networkManager
 		if manager.disabled {
 		if manager.disabled {
 			iface = &NetworkInterface{disabled: true}
 			iface = &NetworkInterface{disabled: true}
@@ -1077,8 +1072,20 @@ func (container *Container) allocateNetwork() error {
 				Gateway: manager.bridgeNetwork.IP,
 				Gateway: manager.bridgeNetwork.IP,
 				manager: manager,
 				manager: manager,
 			}
 			}
-			ipNum := ipToInt(iface.IPNet.IP)
-			manager.ipAllocator.inUse[ipNum] = struct{}{}
+			if iface !=nil && iface.IPNet.IP != nil {
+				ipNum := ipToInt(iface.IPNet.IP)
+				manager.ipAllocator.inUse[ipNum] = struct{}{}
+			} else {
+				iface, err = container.runtime.networkManager.Allocate()
+				if err != nil {
+					return err
+				}
+			}
+		}
+	} else {
+		iface, err = container.runtime.networkManager.Allocate()
+		if err != nil {
+			return err
 		}
 		}
 	}
 	}
 
 

+ 8 - 6
container_test.go

@@ -1657,11 +1657,13 @@ func TestRestartGhost(t *testing.T) {
 	runtime := mkRuntime(t)
 	runtime := mkRuntime(t)
 	defer nuke(runtime)
 	defer nuke(runtime)
 
 
-	container, err := runtime.Create(&Config{
-		Image:   GetTestImage(runtime).ID,
-		Cmd:     []string{"sh", "-c", "echo -n bar > /test/foo"},
-		Volumes: map[string]struct{}{"/test": {}},
-	},
+	container, _, err := runtime.Create(
+		&Config{
+			Image:   GetTestImage(runtime).ID,
+			Cmd:     []string{"sh", "-c", "echo -n bar > /test/foo"},
+			Volumes: map[string]struct{}{"/test": {}},
+		},
+		"",
 	)
 	)
 
 
 	if err != nil {
 	if err != nil {
@@ -1677,4 +1679,4 @@ func TestRestartGhost(t *testing.T) {
 	if err != nil {
 	if err != nil {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
-}
+}