Integrating systemd freeze functionality.

This pulls together #6061 and #6125

Docker-DCO-1.1-Signed-off-by: Chris Alfonso <calfonso@redhat.com> (github: calfonso)
This commit is contained in:
Chris Alfonso
2014-06-04 13:33:44 -06:00
parent b054569cde
commit 26246ebd53
5 changed files with 34 additions and 55 deletions
+5 -5
View File
@@ -538,6 +538,11 @@ func (container *Container) KillSig(sig int) error {
container.Lock()
defer container.Unlock()
// We could unpause the container for them rather than returning this error
if container.State.IsPaused() {
return fmt.Errorf("Container %s is paused. Unpause the container before stopping", container.ID)
}
if !container.State.IsRunning() {
return nil
}
@@ -594,11 +599,6 @@ func (container *Container) Stop(seconds int) error {
return nil
}
// We could unpause the container for them rather than returning this error
if container.State.IsPaused() {
return fmt.Errorf("Container %s is paused. Unpause the container before stopping", container.ID)
}
// 1. Send a SIGTERM
if err := container.KillSig(15); err != nil {
log.Print("Failed to send SIGTERM to the process, force killing")
+2 -4
View File
@@ -1015,8 +1015,7 @@ func (daemon *Daemon) Run(c *Container, pipes *execdriver.Pipes, startCallback e
}
func (daemon *Daemon) Pause(c *Container) error {
err := daemon.execDriver.Pause(c.command)
if err != nil {
if err := daemon.execDriver.Pause(c.command); err != nil {
return err
}
c.State.SetPaused()
@@ -1024,8 +1023,7 @@ func (daemon *Daemon) Pause(c *Container) error {
}
func (daemon *Daemon) Unpause(c *Container) error {
err := daemon.execDriver.Unpause(c.command)
if err != nil {
if err := daemon.execDriver.Unpause(c.command); err != nil {
return err
}
c.State.SetUnpaused()
@@ -27,7 +27,6 @@ var actions = map[string]Action{
"cgroups.memory_reservation": memoryReservation, // set the memory reservation
"cgroups.memory_swap": memorySwap, // set the memory swap limit
"cgroups.cpuset.cpus": cpusetCpus, // set the cpus used
"cgroups.freezer": freezer, // set the frozen/thaw state
"systemd.slice": systemdSlice, // set parent Slice used for systemd unit
@@ -36,16 +35,6 @@ var actions = map[string]Action{
"fs.readonly": readonlyFs, // make the rootfs of the container read only
}
func freezer(container *libcontainer.Container, context interface{}, value string) error {
if container.Cgroups == nil {
return fmt.Errorf("cannot set cgroups when they are disabled")
}
container.Cgroups.Freezer = value
return nil
}
func cpusetCpus(container *libcontainer.Container, context interface{}, value string) error {
if container.Cgroups == nil {
return fmt.Errorf("cannot set cgroups when they are disabled")
+14 -16
View File
@@ -147,28 +147,26 @@ func (d *driver) Kill(p *execdriver.Command, sig int) error {
func (d *driver) Pause(c *execdriver.Command) error {
active := d.activeContainers[c.ID]
active.container.Cgroups.Freezer = "FROZEN"
pid := c.Process.Pid
if systemd.UseSystemd() {
_, err := systemd.Apply(active.container.Cgroups, pid)
return err
if active == nil {
return fmt.Errorf("active container for %s does not exist", c.ID)
}
_, err := fs.Apply(active.container.Cgroups, pid)
return err
active.container.Cgroups.Freezer = "FROZEN"
if systemd.UseSystemd() {
return systemd.Freeze(active.container.Cgroups, active.container.Cgroups.Freezer)
}
return fs.Freeze(active.container.Cgroups, active.container.Cgroups.Freezer)
}
func (d *driver) Unpause(c *execdriver.Command) error {
active := d.activeContainers[c.ID]
active.container.Cgroups.Freezer = "THAWED"
pid := c.Process.Pid
if systemd.UseSystemd() {
_, err := systemd.Apply(active.container.Cgroups, pid)
return err
if active == nil {
return fmt.Errorf("active container for %s does not exist", c.ID)
}
_, err := fs.Apply(active.container.Cgroups, pid)
return err
active.container.Cgroups.Freezer = "THAWED"
if systemd.UseSystemd() {
return systemd.Freeze(active.container.Cgroups, active.container.Cgroups.Freezer)
}
return fs.Freeze(active.container.Cgroups, active.container.Cgroups.Freezer)
}
func (d *driver) Terminate(p *execdriver.Command) error {