mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
pkg/sysinfo: stub out parsing cpusets on non-linux
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
// Package sysinfo stores information about which features a kernel supports.
|
||||
package sysinfo // import "github.com/docker/docker/pkg/sysinfo"
|
||||
|
||||
import "github.com/docker/docker/pkg/parsers"
|
||||
|
||||
// Opt for New().
|
||||
type Opt func(info *SysInfo)
|
||||
|
||||
@@ -147,28 +145,3 @@ func (c cgroupCpusetInfo) IsCpusetCpusAvailable(provided string) (bool, error) {
|
||||
func (c cgroupCpusetInfo) IsCpusetMemsAvailable(provided string) (bool, error) {
|
||||
return isCpusetListAvailable(provided, c.Mems)
|
||||
}
|
||||
|
||||
func isCpusetListAvailable(provided, available string) (bool, error) {
|
||||
parsedAvailable, err := parsers.ParseUintList(available)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
// 8192 is the normal maximum number of CPUs in Linux, so accept numbers up to this
|
||||
// or more if we actually have more CPUs.
|
||||
maxCPUs := 8192
|
||||
for m := range parsedAvailable {
|
||||
if m > maxCPUs {
|
||||
maxCPUs = m
|
||||
}
|
||||
}
|
||||
parsedProvided, err := parsers.ParseUintListMaximum(provided, maxCPUs)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
for k := range parsedProvided {
|
||||
if !parsedAvailable[k] {
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/containerd/cgroups/v3/cgroup1"
|
||||
"github.com/containerd/containerd/pkg/seccomp"
|
||||
"github.com/containerd/log"
|
||||
"github.com/docker/docker/pkg/parsers"
|
||||
"github.com/moby/sys/mountinfo"
|
||||
)
|
||||
|
||||
@@ -314,3 +315,28 @@ func readProcBool(path string) bool {
|
||||
}
|
||||
return strings.TrimSpace(string(val)) == "1"
|
||||
}
|
||||
|
||||
func isCpusetListAvailable(provided, available string) (bool, error) {
|
||||
parsedAvailable, err := parsers.ParseUintList(available)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
// 8192 is the normal maximum number of CPUs in Linux, so accept numbers up to this
|
||||
// or more if we actually have more CPUs.
|
||||
maxCPUs := 8192
|
||||
for m := range parsedAvailable {
|
||||
if m > maxCPUs {
|
||||
maxCPUs = m
|
||||
}
|
||||
}
|
||||
parsedProvided, err := parsers.ParseUintListMaximum(provided, maxCPUs)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
for k := range parsedProvided {
|
||||
if !parsedAvailable[k] {
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@@ -70,3 +70,26 @@ func TestNumCPU(t *testing.T) {
|
||||
t.Fatal("CPU returned must be greater than zero")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsCpusetListAvailable(t *testing.T) {
|
||||
cases := []struct {
|
||||
provided string
|
||||
available string
|
||||
res bool
|
||||
err bool
|
||||
}{
|
||||
{"1", "0-4", true, false},
|
||||
{"01,3", "0-4", true, false},
|
||||
{"", "0-7", true, false},
|
||||
{"1--42", "0-7", false, true},
|
||||
{"1-42", "00-1,8,,9", false, true},
|
||||
{"1,41-42", "43,45", false, false},
|
||||
{"0-3", "", false, false},
|
||||
}
|
||||
for _, c := range cases {
|
||||
r, err := isCpusetListAvailable(c.provided, c.available)
|
||||
if (c.err && err == nil) && r != c.res {
|
||||
t.Fatalf("Expected pair: %v, %v for %s, %s. Got %v, %v instead", c.res, c.err, c.provided, c.available, (c.err && err == nil), r)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,3 +6,7 @@ package sysinfo // import "github.com/docker/docker/pkg/sysinfo"
|
||||
func New(options ...Opt) *SysInfo {
|
||||
return &SysInfo{}
|
||||
}
|
||||
|
||||
func isCpusetListAvailable(string, string) (bool, error) {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
package sysinfo // import "github.com/docker/docker/pkg/sysinfo"
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestIsCpusetListAvailable(t *testing.T) {
|
||||
cases := []struct {
|
||||
provided string
|
||||
available string
|
||||
res bool
|
||||
err bool
|
||||
}{
|
||||
{"1", "0-4", true, false},
|
||||
{"01,3", "0-4", true, false},
|
||||
{"", "0-7", true, false},
|
||||
{"1--42", "0-7", false, true},
|
||||
{"1-42", "00-1,8,,9", false, true},
|
||||
{"1,41-42", "43,45", false, false},
|
||||
{"0-3", "", false, false},
|
||||
}
|
||||
for _, c := range cases {
|
||||
r, err := isCpusetListAvailable(c.provided, c.available)
|
||||
if (c.err && err == nil) && r != c.res {
|
||||
t.Fatalf("Expected pair: %v, %v for %s, %s. Got %v, %v instead", c.res, c.err, c.provided, c.available, (c.err && err == nil), r)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user