mirror of https://github.com/docker/docs.git
				
				
				
			Remove restart test
This test is not applicable anymore now that containers are not stopped when the daemon is restored. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
		
							parent
							
								
									290be017c5
								
							
						
					
					
						commit
						31e903b0e1
					
				|  | @ -27,7 +27,7 @@ func (c *RefCounter) Increment(path string) int { | |||
| 	c.mu.Lock() | ||||
| 	m := c.counts[path] | ||||
| 	if m == nil { | ||||
| 		m = &minfo{check: true} | ||||
| 		m = &minfo{} | ||||
| 		c.counts[path] = m | ||||
| 	} | ||||
| 	// if we are checking this path for the first time check to make sure
 | ||||
|  | @ -50,7 +50,7 @@ func (c *RefCounter) Decrement(path string) int { | |||
| 	c.mu.Lock() | ||||
| 	m := c.counts[path] | ||||
| 	if m == nil { | ||||
| 		m = &minfo{check: true} | ||||
| 		m = &minfo{} | ||||
| 		c.counts[path] = m | ||||
| 	} | ||||
| 	// if we are checking this path for the first time check to make sure
 | ||||
|  |  | |||
|  | @ -1616,35 +1616,6 @@ func (s *DockerDaemonSuite) TestRunContainerWithBridgeNone(c *check.C) { | |||
| 		check.Commentf("The network interfaces in container should be the same with host when --net=host when bridge network is disabled: %s", out)) | ||||
| } | ||||
| 
 | ||||
| // os.Kill should kill daemon ungracefully, leaving behind container mounts.
 | ||||
| // A subsequent daemon restart shoud clean up said mounts.
 | ||||
| func (s *DockerDaemonSuite) TestCleanupMountsAfterDaemonKill(c *check.C) { | ||||
| 	testRequires(c, NotExperimentalDaemon) | ||||
| 	c.Assert(s.d.StartWithBusybox(), check.IsNil) | ||||
| 
 | ||||
| 	out, err := s.d.Cmd("run", "-d", "busybox", "top") | ||||
| 	c.Assert(err, check.IsNil, check.Commentf("Output: %s", out)) | ||||
| 	id := strings.TrimSpace(out) | ||||
| 	c.Assert(s.d.cmd.Process.Signal(os.Kill), check.IsNil) | ||||
| 	mountOut, err := ioutil.ReadFile("/proc/self/mountinfo") | ||||
| 	c.Assert(err, check.IsNil, check.Commentf("Output: %s", mountOut)) | ||||
| 
 | ||||
| 	// container mounts should exist even after daemon has crashed.
 | ||||
| 	comment := check.Commentf("%s should stay mounted from older daemon start:\nDaemon root repository %s\n%s", id, s.d.folder, mountOut) | ||||
| 	c.Assert(strings.Contains(string(mountOut), id), check.Equals, true, comment) | ||||
| 
 | ||||
| 	// restart daemon.
 | ||||
| 	if err := s.d.Restart(); err != nil { | ||||
| 		c.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// Now, container mounts should be gone.
 | ||||
| 	mountOut, err = ioutil.ReadFile("/proc/self/mountinfo") | ||||
| 	c.Assert(err, check.IsNil, check.Commentf("Output: %s", mountOut)) | ||||
| 	comment = check.Commentf("%s is still mounted from older daemon start:\nDaemon root repository %s\n%s", id, s.d.folder, mountOut) | ||||
| 	c.Assert(strings.Contains(string(mountOut), id), check.Equals, false, comment) | ||||
| } | ||||
| 
 | ||||
| func (s *DockerDaemonSuite) TestDaemonRestartWithContainerRunning(t *check.C) { | ||||
| 	if err := s.d.StartWithBusybox(); err != nil { | ||||
| 		t.Fatal(err) | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ import ( | |||
| 	containerd "github.com/docker/containerd/api/grpc/types" | ||||
| 	"github.com/docker/docker/pkg/idtools" | ||||
| 	"github.com/docker/docker/pkg/mount" | ||||
| 	"github.com/opencontainers/specs/specs-go" | ||||
| 	specs "github.com/opencontainers/specs/specs-go" | ||||
| 	"golang.org/x/net/context" | ||||
| ) | ||||
| 
 | ||||
|  | @ -380,6 +380,81 @@ func (clnt *client) getOrCreateExitNotifier(containerID string) *exitNotifier { | |||
| 	return w | ||||
| } | ||||
| 
 | ||||
| func (clnt *client) restore(cont *containerd.Container, options ...CreateOption) (err error) { | ||||
| 	clnt.lock(cont.Id) | ||||
| 	defer clnt.unlock(cont.Id) | ||||
| 
 | ||||
| 	logrus.Debugf("restore container %s state %s", cont.Id, cont.Status) | ||||
| 
 | ||||
| 	containerID := cont.Id | ||||
| 	if _, err := clnt.getContainer(containerID); err == nil { | ||||
| 		return fmt.Errorf("container %s is already active", containerID) | ||||
| 	} | ||||
| 
 | ||||
| 	defer func() { | ||||
| 		if err != nil { | ||||
| 			clnt.deleteContainer(cont.Id) | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	container := clnt.newContainer(cont.BundlePath, options...) | ||||
| 	container.systemPid = systemPid(cont) | ||||
| 
 | ||||
| 	var terminal bool | ||||
| 	for _, p := range cont.Processes { | ||||
| 		if p.Pid == InitFriendlyName { | ||||
| 			terminal = p.Terminal | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	iopipe, err := container.openFifos(terminal) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if err := clnt.backend.AttachStreams(containerID, *iopipe); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	clnt.appendContainer(container) | ||||
| 
 | ||||
| 	err = clnt.backend.StateChanged(containerID, StateInfo{ | ||||
| 		CommonStateInfo: CommonStateInfo{ | ||||
| 			State: StateRestore, | ||||
| 			Pid:   container.systemPid, | ||||
| 		}}) | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if event, ok := clnt.remote.pastEvents[containerID]; ok { | ||||
| 		// This should only be a pause or resume event
 | ||||
| 		if event.Type == StatePause || event.Type == StateResume { | ||||
| 			return clnt.backend.StateChanged(containerID, StateInfo{ | ||||
| 				CommonStateInfo: CommonStateInfo{ | ||||
| 					State: event.Type, | ||||
| 					Pid:   container.systemPid, | ||||
| 				}}) | ||||
| 		} | ||||
| 
 | ||||
| 		logrus.Warnf("unexpected backlog event: %#v", event) | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (clnt *client) Restore(containerID string, options ...CreateOption) error { | ||||
| 	cont, err := clnt.getContainerdContainer(containerID) | ||||
| 	if err == nil && cont.Status != "stopped" { | ||||
| 		if err := clnt.restore(cont, options...); err != nil { | ||||
| 			logrus.Errorf("error restoring %s: %v", containerID, err) | ||||
| 		} | ||||
| 		return nil | ||||
| 	} | ||||
| 	return clnt.setExited(containerID) | ||||
| } | ||||
| 
 | ||||
| type exitNotifier struct { | ||||
| 	id     string | ||||
| 	client *client | ||||
|  |  | |||
|  | @ -1,83 +0,0 @@ | |||
| package libcontainerd | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/Sirupsen/logrus" | ||||
| 	containerd "github.com/docker/containerd/api/grpc/types" | ||||
| ) | ||||
| 
 | ||||
| func (clnt *client) restore(cont *containerd.Container, options ...CreateOption) (err error) { | ||||
| 	clnt.lock(cont.Id) | ||||
| 	defer clnt.unlock(cont.Id) | ||||
| 
 | ||||
| 	logrus.Debugf("restore container %s state %s", cont.Id, cont.Status) | ||||
| 
 | ||||
| 	containerID := cont.Id | ||||
| 	if _, err := clnt.getContainer(containerID); err == nil { | ||||
| 		return fmt.Errorf("container %s is already active", containerID) | ||||
| 	} | ||||
| 
 | ||||
| 	defer func() { | ||||
| 		if err != nil { | ||||
| 			clnt.deleteContainer(cont.Id) | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	container := clnt.newContainer(cont.BundlePath, options...) | ||||
| 	container.systemPid = systemPid(cont) | ||||
| 
 | ||||
| 	var terminal bool | ||||
| 	for _, p := range cont.Processes { | ||||
| 		if p.Pid == InitFriendlyName { | ||||
| 			terminal = p.Terminal | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	iopipe, err := container.openFifos(terminal) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if err := clnt.backend.AttachStreams(containerID, *iopipe); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	clnt.appendContainer(container) | ||||
| 
 | ||||
| 	err = clnt.backend.StateChanged(containerID, StateInfo{ | ||||
| 		CommonStateInfo: CommonStateInfo{ | ||||
| 			State: StateRestore, | ||||
| 			Pid:   container.systemPid, | ||||
| 		}}) | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if event, ok := clnt.remote.pastEvents[containerID]; ok { | ||||
| 		// This should only be a pause or resume event
 | ||||
| 		if event.Type == StatePause || event.Type == StateResume { | ||||
| 			return clnt.backend.StateChanged(containerID, StateInfo{ | ||||
| 				CommonStateInfo: CommonStateInfo{ | ||||
| 					State: event.Type, | ||||
| 					Pid:   container.systemPid, | ||||
| 				}}) | ||||
| 		} | ||||
| 
 | ||||
| 		logrus.Warnf("unexpected backlog event: %#v", event) | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (clnt *client) Restore(containerID string, options ...CreateOption) error { | ||||
| 	cont, err := clnt.getContainerdContainer(containerID) | ||||
| 	if err == nil && cont.Status != "stopped" { | ||||
| 		if err := clnt.restore(cont, options...); err != nil { | ||||
| 			logrus.Errorf("error restoring %s: %v", containerID, err) | ||||
| 		} | ||||
| 		return nil | ||||
| 	} | ||||
| 	return clnt.setExited(containerID) | ||||
| } | ||||
		Loading…
	
		Reference in New Issue