From 53dbdc6345e8992dcb17e3a751e80a650ea337c5 Mon Sep 17 00:00:00 2001 From: Rajasekaran Date: Fri, 21 Aug 2015 17:41:42 +0530 Subject: [PATCH] Handling Pausing from freezer state Signed-off-by: Rajasekaran freezer status Signed-off-by: Rajasekaran Fixing review comments Signed-off-by: Rajasekaran Added comment when freezer not available Signed-off-by: Rajasekaran --- libcontainer/container_linux.go | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/libcontainer/container_linux.go b/libcontainer/container_linux.go index 9210ec6a3b9..287a375333c 100644 --- a/libcontainer/container_linux.go +++ b/libcontainer/container_linux.go @@ -775,6 +775,27 @@ func (c *linuxContainer) updateState(process parentProcess) error { return json.NewEncoder(f).Encode(state) } +func (c *linuxContainer) checkFreezer() (Status, error) { + path := c.cgroupManager.GetPaths()["freezer"] + if _, err := os.Stat(path); err != nil { + if os.IsNotExist(err) { + // Freezer subsystem is not available,Application is neither Checkpointed nor Destroyed + // return the status as Running + return Running, nil + } + } + contents, err := ioutil.ReadFile(filepath.Join(path, "freezer.state")) + if err != nil { + return 0, newSystemError(err) + } + freezerstate := string(contents) + if strings.TrimSpace(freezerstate) == "FROZEN" { + return Paused, nil + } + return Running, nil + +} + func (c *linuxContainer) currentStatus() (Status, error) { if _, err := os.Stat(filepath.Join(c.root, "checkpoint")); err == nil { return Checkpointed, nil @@ -789,10 +810,7 @@ func (c *linuxContainer) currentStatus() (Status, error) { } return 0, newSystemError(err) } - if c.config.Cgroups != nil && c.config.Cgroups.Freezer == configs.Frozen { - return Paused, nil - } - return Running, nil + return c.checkFreezer() } func (c *linuxContainer) currentState() (*State, error) {