mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-12-15 04:17:47 +00:00
One notable change is cgroup manager's Set now accept Resources rather than Cgroup (see https://github.com/opencontainers/runc/pull/2906). Modify the code accordingly. Also update runc dependencies (as hinted by hack/lint-depdendencies.sh): github.com/cilium/ebpf v0.5.0 github.com/containerd/console v1.0.2 github.com/coreos/go-systemd/v22 v22.3.1 github.com/godbus/dbus/v5 v5.0.4 github.com/moby/sys/mountinfo v0.4.1 golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 github.com/google/go-cmp v0.5.4 github.com/kr/pretty v0.2.1 github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
// +build linux
|
|
|
|
package fs
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"strconv"
|
|
|
|
"github.com/opencontainers/runc/libcontainer/cgroups"
|
|
"github.com/opencontainers/runc/libcontainer/cgroups/fscommon"
|
|
"github.com/opencontainers/runc/libcontainer/configs"
|
|
)
|
|
|
|
type PidsGroup struct {
|
|
}
|
|
|
|
func (s *PidsGroup) Name() string {
|
|
return "pids"
|
|
}
|
|
|
|
func (s *PidsGroup) Apply(path string, d *cgroupData) error {
|
|
return join(path, d.pid)
|
|
}
|
|
|
|
func (s *PidsGroup) Set(path string, r *configs.Resources) error {
|
|
if r.PidsLimit != 0 {
|
|
// "max" is the fallback value.
|
|
limit := "max"
|
|
|
|
if r.PidsLimit > 0 {
|
|
limit = strconv.FormatInt(r.PidsLimit, 10)
|
|
}
|
|
|
|
if err := fscommon.WriteFile(path, "pids.max", limit); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *PidsGroup) GetStats(path string, stats *cgroups.Stats) error {
|
|
if !cgroups.PathExists(path) {
|
|
return nil
|
|
}
|
|
current, err := fscommon.GetCgroupParamUint(path, "pids.current")
|
|
if err != nil {
|
|
return fmt.Errorf("failed to parse pids.current - %s", err)
|
|
}
|
|
|
|
maxString, err := fscommon.GetCgroupParamString(path, "pids.max")
|
|
if err != nil {
|
|
return fmt.Errorf("failed to parse pids.max - %s", err)
|
|
}
|
|
|
|
// Default if pids.max == "max" is 0 -- which represents "no limit".
|
|
var max uint64
|
|
if maxString != "max" {
|
|
max, err = fscommon.ParseUint(maxString, 10, 64)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to parse pids.max - unable to parse %q as a uint from Cgroup file %q", maxString, filepath.Join(path, "pids.max"))
|
|
}
|
|
}
|
|
|
|
stats.PidsStats.Current = current
|
|
stats.PidsStats.Limit = max
|
|
return nil
|
|
}
|