mirror of
https://github.com/kemko/nomad.git
synced 2026-01-01 16:05:42 +03:00
cgv1: do not disable cpuset manager if reserved interface already exists (#16467)
* cgv1: do not disable cpuset manager if reserved interface already exists This PR fixes a bug where restarting a Nomad Client on a machine using cgroups v1 (e.g. Ubuntu 20.04) would cause the cpuset cgroups manager to disable itself. This is being caused by incorrectly interpreting a "file exists" error as problematic when ensuring the reserved cpuset exists. If we get a "file exists" error, that just means the Client was likely restarted. Note that a machine reboot would fix the issue - the groups interfaces are ephemoral. * cl: add cl
This commit is contained in:
3
.changelog/16467.txt
Normal file
3
.changelog/16467.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
```release-note:bug
|
||||
client: Fixed a bug where cpuset initialization fails after Client restart
|
||||
```
|
||||
@@ -4,6 +4,7 @@ package cgutil
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -59,8 +60,10 @@ func NewCpusetManagerV1(cgroupParent string, _ []uint16, logger hclog.Logger) Cp
|
||||
|
||||
// ensure the reserved cpuset exists, but only copy the mems from the parent if creating the cgroup
|
||||
if err = os.Mkdir(filepath.Join(cgroupParentPath, ReservedCpusetCgroupName), 0755); err != nil {
|
||||
logger.Warn("failed to ensure reserved cpuset.cpus interface exists; disable cpuset management", "error", err)
|
||||
return new(NoopCpusetManager)
|
||||
if !errors.Is(err, os.ErrExist) {
|
||||
logger.Warn("failed to ensure reserved cpuset.cpus interface exists; disable cpuset management", "error", err)
|
||||
return new(NoopCpusetManager)
|
||||
}
|
||||
}
|
||||
|
||||
if err = cgroups.WriteFile(filepath.Join(cgroupParentPath, ReservedCpusetCgroupName), "cpuset.mems", parentMems); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user