mirror of
https://github.com/containers/podman.git
synced 2025-07-15 03:02:52 +08:00
libpod: honor --cgroups=split also with pods
Honor --cgroups=split also when the container is running in a pod. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
@ -2495,9 +2495,6 @@ func (c *Container) getOCICgroupPath() (string, error) {
|
|||||||
}
|
}
|
||||||
return c.config.CgroupParent, nil
|
return c.config.CgroupParent, nil
|
||||||
case c.config.CgroupsMode == cgroupSplit:
|
case c.config.CgroupsMode == cgroupSplit:
|
||||||
if c.config.CgroupParent != "" {
|
|
||||||
return c.config.CgroupParent, nil
|
|
||||||
}
|
|
||||||
selfCgroup, err := utils.GetOwnCgroup()
|
selfCgroup, err := utils.GetOwnCgroup()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -1295,31 +1295,42 @@ USER mail`, BB)
|
|||||||
SkipIfRootlessCgroupsV1("Disable cgroups not supported on cgroupv1 for rootless users")
|
SkipIfRootlessCgroupsV1("Disable cgroups not supported on cgroupv1 for rootless users")
|
||||||
SkipIfRemote("--cgroups=split cannot be used in remote mode")
|
SkipIfRemote("--cgroups=split cannot be used in remote mode")
|
||||||
|
|
||||||
|
checkLines := func(lines []string) {
|
||||||
|
cgroup := ""
|
||||||
|
for _, line := range lines {
|
||||||
|
parts := strings.SplitN(line, ":", 3)
|
||||||
|
if len(parts) < 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !CGROUPSV2 {
|
||||||
|
// ignore unified on cgroup v1.
|
||||||
|
// both runc and crun do not set it.
|
||||||
|
// crun does not set named hierarchies.
|
||||||
|
if parts[1] == "" || strings.Contains(parts[1], "name=") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if parts[2] == "/" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if cgroup == "" {
|
||||||
|
cgroup = parts[2]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
Expect(cgroup).To(Equal(parts[2]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
container := podmanTest.Podman([]string{"run", "--rm", "--cgroups=split", ALPINE, "cat", "/proc/self/cgroup"})
|
container := podmanTest.Podman([]string{"run", "--rm", "--cgroups=split", ALPINE, "cat", "/proc/self/cgroup"})
|
||||||
container.WaitWithDefaultTimeout()
|
container.WaitWithDefaultTimeout()
|
||||||
Expect(container).Should(Exit(0))
|
Expect(container).Should(Exit(0))
|
||||||
lines := container.OutputToStringArray()
|
checkLines(container.OutputToStringArray())
|
||||||
|
|
||||||
cgroup := ""
|
// check that --cgroups=split is honored also when a container runs in a pod
|
||||||
for _, line := range lines {
|
container = podmanTest.Podman([]string{"run", "--rm", "--pod", "new:split-test-pod", "--cgroups=split", ALPINE, "cat", "/proc/self/cgroup"})
|
||||||
parts := strings.SplitN(line, ":", 3)
|
container.WaitWithDefaultTimeout()
|
||||||
if !CGROUPSV2 {
|
Expect(container).Should(Exit(0))
|
||||||
// ignore unified on cgroup v1.
|
checkLines(container.OutputToStringArray())
|
||||||
// both runc and crun do not set it.
|
|
||||||
// crun does not set named hierarchies.
|
|
||||||
if parts[1] == "" || strings.Contains(parts[1], "name=") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if parts[2] == "/" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if cgroup == "" {
|
|
||||||
cgroup = parts[2]
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
Expect(cgroup).To(Equal(parts[2]))
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman run with cgroups=disabled runs without cgroups", func() {
|
It("podman run with cgroups=disabled runs without cgroups", func() {
|
||||||
|
Reference in New Issue
Block a user