浏览代码

Persist pause state to disk to support container live restore

Signed-off-by: Lei Jitang <leijitang@huawei.com>
Lei Jitang 9 年之前
父节点
当前提交
f4bbfc34ce
共有 2 个文件被更改,包括 6 次插入1 次删除
  1. 0 1
      container/state.go
  2. 6 0
      daemon/monitor.go

+ 0 - 1
container/state.go

@@ -210,7 +210,6 @@ func (s *State) SetExitCode(ec int) {
 func (s *State) SetRunning(pid int, initial bool) {
 func (s *State) SetRunning(pid int, initial bool) {
 	s.error = ""
 	s.error = ""
 	s.Running = true
 	s.Running = true
-	s.Paused = false
 	s.Restarting = false
 	s.Restarting = false
 	s.exitCode = 0
 	s.exitCode = 0
 	s.Pid = pid
 	s.Pid = pid

+ 6 - 0
daemon/monitor.go

@@ -99,11 +99,17 @@ func (daemon *Daemon) StateChanged(id string, e libcontainerd.StateInfo) error {
 	case libcontainerd.StatePause:
 	case libcontainerd.StatePause:
 		// Container is already locked in this case
 		// Container is already locked in this case
 		c.Paused = true
 		c.Paused = true
+		if err := c.ToDisk(); err != nil {
+			return err
+		}
 		daemon.updateHealthMonitor(c)
 		daemon.updateHealthMonitor(c)
 		daemon.LogContainerEvent(c, "pause")
 		daemon.LogContainerEvent(c, "pause")
 	case libcontainerd.StateResume:
 	case libcontainerd.StateResume:
 		// Container is already locked in this case
 		// Container is already locked in this case
 		c.Paused = false
 		c.Paused = false
+		if err := c.ToDisk(); err != nil {
+			return err
+		}
 		daemon.updateHealthMonitor(c)
 		daemon.updateHealthMonitor(c)
 		daemon.LogContainerEvent(c, "unpause")
 		daemon.LogContainerEvent(c, "unpause")
 	}
 	}