Explorar o código

Merge pull request #5512 from crosbymichael/set-freezer

Add ability to set cgroups freezer
Guillaume J. Charmes %!s(int64=11) %!d(string=hai) anos
pai
achega
be013c7820
Modificáronse 2 ficheiros con 15 adicións e 4 borrados
  1. 1 0
      pkg/cgroups/cgroups.go
  2. 14 4
      pkg/cgroups/fs/freezer.go

+ 1 - 0
pkg/cgroups/cgroups.go

@@ -20,6 +20,7 @@ type Cgroup struct {
 	CpuQuota          int64  `json:"cpu_quota,omitempty"`          // CPU hardcap limit (in usecs). Allowed cpu time in a given period.
 	CpuPeriod         int64  `json:"cpu_period,omitempty"`         // CPU period to be used for hardcapping (in usecs). 0 to use system default.
 	CpusetCpus        string `json:"cpuset_cpus,omitempty"`        // CPU to use
+	Freezer           string `json:"freezer,omitempty"`            // set the freeze value for the process
 
 	UnitProperties [][2]string `json:"unit_properties,omitempty"` // systemd unit properties
 }

+ 14 - 4
pkg/cgroups/fs/freezer.go

@@ -2,21 +2,31 @@ package fs
 
 import (
 	"fmt"
-	"github.com/dotcloud/docker/pkg/cgroups"
 	"io/ioutil"
 	"os"
 	"path/filepath"
 	"strconv"
 	"strings"
+
+	"github.com/dotcloud/docker/pkg/cgroups"
 )
 
 type freezerGroup struct {
 }
 
 func (s *freezerGroup) Set(d *data) error {
-	// we just want to join this group even though we don't set anything
-	if _, err := d.join("freezer"); err != nil && err != cgroups.ErrNotFound {
-		return err
+	dir, err := d.join("freezer")
+	if err != nil {
+		if err != cgroups.ErrNotFound {
+			return err
+		}
+		return nil
+	}
+
+	if d.c.Freezer != "" {
+		if err := writeFile(dir, "freezer.state", d.c.Freezer); err != nil {
+			return err
+		}
 	}
 	return nil
 }