From 7fe105ebc70da364104ab4007b07f16a07f901dd Mon Sep 17 00:00:00 2001 From: Derek Carr Date: Mon, 20 Feb 2017 12:03:58 -0500 Subject: [PATCH] stop double encoding systemd style cgroup names --- pkg/kubelet/cm/cgroup_manager_linux.go | 26 +++++++++++++++------ pkg/kubelet/cm/cgroup_manager_linux_test.go | 20 ++++++++++++++++ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/pkg/kubelet/cm/cgroup_manager_linux.go b/pkg/kubelet/cm/cgroup_manager_linux.go index 7e31af66f3c..8e9ec04acde 100644 --- a/pkg/kubelet/cm/cgroup_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_manager_linux.go @@ -49,25 +49,37 @@ func ConvertCgroupNameToSystemd(cgroupName CgroupName, outputToCgroupFs bool) st name := string(cgroupName) result := "" if name != "" && name != "/" { - // systemd treats - as a step in the hierarchy, we convert all - to _ - name = strings.Replace(name, "-", "_", -1) parts := strings.Split(name, "/") + results := []string{} for _, part := range parts { - // ignore leading stuff for now + // ignore leading stuff if part == "" { continue } - if len(result) > 0 { - result = result + "-" + // detect if we are given a systemd style name. + // if so, we do not want to do double encoding. + if strings.HasSuffix(part, ".slice") { + part = strings.TrimSuffix(part, ".slice") + separatorIndex := strings.LastIndex(part, "-") + if separatorIndex >= 0 && separatorIndex < len(part) { + part = part[separatorIndex+1:] + } + } else { + // systemd treats - as a step in the hierarchy, we convert all - to _ + part = strings.Replace(part, "-", "_", -1) } - result = result + part + results = append(results, part) } + // each part is appended with systemd style - + result = strings.Join(results, "-") } else { // root converts to - result = "-" } // always have a .slice suffix - result = result + ".slice" + if !strings.HasSuffix(result, ".slice") { + result = result + ".slice" + } // if the caller desired the result in cgroupfs format... if outputToCgroupFs { diff --git a/pkg/kubelet/cm/cgroup_manager_linux_test.go b/pkg/kubelet/cm/cgroup_manager_linux_test.go index 5b89695de6d..ed60c4d50e8 100644 --- a/pkg/kubelet/cm/cgroup_manager_linux_test.go +++ b/pkg/kubelet/cm/cgroup_manager_linux_test.go @@ -29,6 +29,26 @@ func TestLibcontainerAdapterAdaptToSystemd(t *testing.T) { input: "/", expected: "-.slice", }, + { + input: "/system.slice", + expected: "system.slice", + }, + { + input: "/system.slice/Burstable", + expected: "system-Burstable.slice", + }, + { + input: "/Burstable.slice/Burstable-pod_123.slice", + expected: "Burstable-pod_123.slice", + }, + { + input: "/test.slice/test-a.slice/test-a-b.slice", + expected: "test-a-b.slice", + }, + { + input: "/test.slice/test-a.slice/test-a-b.slice/Burstable", + expected: "test-a-b-Burstable.slice", + }, { input: "/Burstable", expected: "Burstable.slice",