mirror of
https://github.com/kemko/nomad.git
synced 2026-01-02 00:15:43 +03:00
* drivers: move executor process out of v1 task cgroup after process starts This PR changes the behavior of the raw exec task driver on old cgroups v1 systems such that the executor process is no longer a member of the cgroups created for the task. Now, the executor process is placed into those cgroups and starts the task child process (just as before), but now then exits those cgroups and exists in the nomad parent cgroup. This change makes the behavior sort of similar to cgroups v2 systems, where we never have the executor enter the task cgroup to begin with (because we can directly clone(3) the task process into it). Fixes #23951 * executor: handle non-linux case * cgroups: add test case for no executor process in task cgroup (v1) * add changelog * drivers: also move executor out of cpuset cgroup
47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
//go:build !linux
|
|
|
|
package executor
|
|
|
|
import (
|
|
"os/exec"
|
|
|
|
"github.com/hashicorp/go-hclog"
|
|
"github.com/hashicorp/go-set/v3"
|
|
"github.com/hashicorp/nomad/client/lib/cpustats"
|
|
"github.com/hashicorp/nomad/drivers/shared/executor/procstats"
|
|
"github.com/hashicorp/nomad/plugins/drivers"
|
|
)
|
|
|
|
func NewExecutorWithIsolation(logger hclog.Logger, compute cpustats.Compute) Executor {
|
|
logger = logger.Named("executor")
|
|
logger.Error("isolation executor is not supported on this platform, using default")
|
|
return NewExecutor(logger, compute)
|
|
}
|
|
|
|
func (e *UniversalExecutor) configureResourceContainer(_ *ExecCommand, _ int) (func() error, func(), error) {
|
|
cleanup := func() {}
|
|
running := func() error { return nil }
|
|
return running, cleanup, nil
|
|
}
|
|
|
|
func (e *UniversalExecutor) start(command *ExecCommand) error {
|
|
return e.childCmd.Start()
|
|
}
|
|
|
|
func withNetworkIsolation(f func() error, _ *drivers.NetworkIsolationSpec) error {
|
|
return f()
|
|
}
|
|
|
|
func setCmdUser(*exec.Cmd, string) error { return nil }
|
|
|
|
func (e *UniversalExecutor) ListProcesses() set.Collection[int] {
|
|
return procstats.List(e.childCmd.Process.Pid)
|
|
}
|
|
|
|
func (e *UniversalExecutor) setSubCmdCgroup(*exec.Cmd, string) (func(), error) {
|
|
return func() {}, nil
|
|
}
|